Files
football-next/lib/ippanel.ts
2026-05-06 16:28:13 +03:30

43 lines
1.2 KiB
TypeScript

const IPPANEL_PATTERN_CODE = process.env.IPPANEL_PATTERN_CODE ?? "bhuf3xmo7k80uhr";
const IPPANEL_TOKEN =
process.env.IPPANEL_TOKEN ??
"YTFiNmYzM2MtNTJkNi00ZTFjLTljZDItMDU4YjQwODNiOGU1YWZlNzIwZDBlYTM0Yzg4M2IyMzMzMmRiM2E4ZTVjNTM=";
const IPPANEL_ORIGINATOR = process.env.IPPANEL_ORIGINATOR ?? "+983000505";
const IPPANEL_BASE_URL = process.env.IPPANEL_BASE_URL ?? "https://edge.ippanel.com/v1";
type IppanelPatternResponse = {
status?: string;
code?: number;
message?: string;
data?: unknown;
};
export async function sendLoginCode(phone: string, code: string) {
const recipient = phone.startsWith("0") ? `+98${phone.slice(1)}` : phone;
const response = await fetch(`${IPPANEL_BASE_URL}/api/send`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: IPPANEL_TOKEN,
},
body: JSON.stringify({
sending_type: "pattern",
from_number: IPPANEL_ORIGINATOR,
code: IPPANEL_PATTERN_CODE,
recipients: [recipient],
params: {
code,
},
}),
});
const payload = (await response.json().catch(() => null)) as IppanelPatternResponse | null;
if (!response.ok) {
throw new Error(payload?.message || "IPPANEL_SEND_FAILED");
}
return payload;
}