feat: add switchable SlipOK and Slip2Go verification
This commit is contained in:
+17
-24
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user