30 lines
1.1 KiB
TypeScript
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;
|
|
}
|