import "server-only"; import { eq } from "drizzle-orm"; import { getDb } from "@/db"; import { commissionSettings } from "@/db/schema"; import { HttpError } from "@/lib/security/http"; export type SlipProvider = "slip2go" | "slipok"; export function isSlipProvider(value: unknown): value is SlipProvider { return value === "slip2go" || value === "slipok"; } export function slipProviderConfigured(provider: SlipProvider): boolean { if (provider === "slipok") return /^\d+$/.test(process.env.SLIPOK_BRANCH_ID ?? "") && Boolean(process.env.SLIPOK_API_KEY?.trim()); try { return new URL(process.env.SLIP2GO_VERIFY_URL ?? "").protocol === "https:" && Boolean(process.env.SLIP2GO_API_SECRET?.trim()); } catch { return false; } } export async function getCommissionSlipProvider(): Promise { const [settings] = await getDb().select({ slipProvider: commissionSettings.slipProvider }) .from(commissionSettings).where(eq(commissionSettings.id, 1)).limit(1); if (!settings || !isSlipProvider(settings.slipProvider)) throw new HttpError(503, "slip-provider-not-configured"); return settings.slipProvider; }