Files
buzz-sheet/lib/commission/slip-provider.ts
T
gunshiz 7ba513c2bb
CI / Verify (push) Successful in 1m56s
CI / Build immutable images and deploy (push) Successful in 3m26s
feat : add slipok and switcher to switch between slip2go and slipok
2026-10-10 00:31:12 +07:00

30 lines
1.1 KiB
TypeScript

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<SlipProvider> {
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;
}