This commit is contained in:
SepehrYahyaee
2026-05-23 14:05:11 +03:30
parent 39c4855b95
commit 94bde88cb6
11 changed files with 338 additions and 126 deletions

View File

@@ -0,0 +1,65 @@
import { VerifyLookUpMessage } from "./sms-gateway.types";
const TOKEN_KEYS = ["token", "token2", "token3", "token10"] as const;
/** Kavenegar template name → plain-text body for Parsian (placeholders: {token}, {token2}, …). */
const PARSIAN_TEMPLATE_BODIES: Record<string, string> = {
"yara724-invite-link":
"کاربر محترم، لینک ورود به پرونده یارا724:\nشناسه: {token}\n{token2}",
"yara-field-expert-link":
"کارشناس میدانی بیمه {token} ({token2}) پرونده شما را بررسی می‌کند.\nلینک: {token3}",
"yara-blame-agreement":
"پرونده تصادف شما ({token}) آماده امضاست.\nلینک: {token2}",
"yara-claim-link":
"پرونده خسارت شما ({token}) آماده ثبت است.\nلینک: {token2}",
"yara-expert-lock":
"کارشناس ({token3}) پرونده {token} ({token2}) را در حال بررسی دارد.",
"yara-resend-documents":
"لطفاً مدارک پرونده {token} ({token2}) را مجدداً ارسال کنید.\nلینک: {token3}",
"yara-signature":
"امضای پرونده {token} ({token2}) توسط کارشناس {token3} بررسی شد.\nلینک: {token10}",
};
function applyTokens(
pattern: string,
data: Pick<
VerifyLookUpMessage,
"token" | "token2" | "token3" | "token10"
>,
): string {
let out = pattern;
for (const key of TOKEN_KEYS) {
const value = data[key];
if (value != null && value !== "") {
out = out.split(`{${key}}`).join(value);
}
}
return out.replace(/\{token\d*\}/g, "").trim();
}
export function buildParsianTemplateMessage(
data: VerifyLookUpMessage,
): string {
const authTemplate = process.env.AUTH_SMS_TEMPLATE?.trim();
if (authTemplate && data.template === authTemplate) {
const authMessage =
process.env.AUTH_SMS_MESSAGE?.trim() ??
"کاربر محترم رمز یکبار مصرف شما:\nCode: {token}";
return applyTokens(authMessage, data);
}
const body = PARSIAN_TEMPLATE_BODIES[data.template];
if (body) {
return applyTokens(body, data);
}
const parts = [
`پیام سیستم (${data.template})`,
data.token ? `کد: ${data.token}` : "",
data.token2 ?? "",
data.token3 ?? "",
data.token10 ?? "",
].filter(Boolean);
return parts.join("\n");
}