feat: add switchable SlipOK and Slip2Go verification
Build and Push Image / build-backend (push) Successful in 2m27s
Build and Push Image / build-frontend (push) Successful in 4m4s
Build and Push Image / push (push) Successful in 1m1s

This commit is contained in:
2026-10-15 02:17:35 +07:00 Unverified
parent c3022f4d37
commit beb0cfaf3d
12 changed files with 792 additions and 68 deletions
+17 -24
View File
@@ -1,31 +1,24 @@
import type { SlipokResponse } from "@/app/(ui)/rubgram/api";
import { eq } from "drizzle-orm";
import { primaryDb } from "@/lib/db";
import { settings } from "@/lib/db/schema";
import { isSlipProvider, verifySlip } from "@/lib/slip-checker";
const { SLIPOK_API_URL, SLIPOK_API_KEY } = process.env as Record<
string,
string
>;
export async function getSlipProvider() {
const [config] = await primaryDb
.select({ provider: settings.slipCheckProvider })
.from(settings)
.where(eq(settings.id, true));
const provider = config?.provider ?? "slipok";
if (!isSlipProvider(provider))
throw new Error("Invalid slip provider setting.");
return provider;
}
export async function checkSlip(
buffer: Buffer<ArrayBuffer>,
type: string,
amount: number,
): Promise<SlipokResponse> {
const response = await fetch(SLIPOK_API_URL, {
method: "POST",
headers: {
"x-authorization": SLIPOK_API_KEY,
},
body: (() => {
const formData = new FormData();
formData.append("files", new Blob([buffer], { type }), "image");
formData.append("amount", amount.toString());
// formData.append("log", "true"); // no log cause im logging myself
return formData;
})(),
});
const data = await response.json();
// if (!response.ok) throw data;
return data;
) {
const provider = await getSlipProvider();
return verifySlip(provider, buffer, type, amount);
}