قرار المالك 2026-07-27: الباك إند المعتمد صار باك إند سيرو PHP، ويُنقل إلى هذا المستودع كنسخة جديدة باسم «انطلق» على api.intaleqapp.com. backend/ → backend-archive/ (305 ملفاً، إعادة تسمية بلا تعديل محتوى) + README-ARCHIVE.md يوضّح سبب الأرشفة وسبب عدم الحذف: scripts/e2e-test.mjs هو أدق توثيق سلوكي لدورة الرحلة كاملة، ويبقى مرجعاً عند بناء الوحدات الناقصة في باك إند PHP (المحفظتان · الاستحقاقات · محرّك التسعير · الوحدات). مسارات backend/ في docs/*.md لم تُعدَّل عمداً — سجلّ تاريخي. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
1.4 KiB
TypeScript
32 lines
1.4 KiB
TypeScript
/**
|
|
* مزوّد إرسال OTP واحد (docs/17 — D5؛ نمط سيرو auth/otp/providers.php).
|
|
*
|
|
* كل مزوّد يرسل رمزاً **نولّده نحن** (لا يولّده المزوّد) — فالرمز يبقى مصدره
|
|
* السيرفر ومخزَّناً في Redis، والمزوّد قناة توصيل فقط. هذا يختلف عن مزوّد
|
|
* Intaleq عند سيرو الذي يولّد الرمز بنفسه ويرجعه — استبعدناه عمداً حفاظاً على
|
|
* مصدر واحد للرمز.
|
|
*/
|
|
export interface OtpSendContext {
|
|
/** دولة المستأجر (jo | sy | eg) — تحدّد المزوّد. */
|
|
countryPack: string;
|
|
/** passenger | driver | admin | service — لتخصيص نصّ الرسالة. */
|
|
userType?: string;
|
|
}
|
|
|
|
export interface OtpProvider {
|
|
/** اسم قصير للتشخيص واللوغ. */
|
|
readonly name: string;
|
|
|
|
/** الدول التي يخدمها هذا المزوّد (رموز countryPack). */
|
|
supports(countryPack: string): boolean;
|
|
|
|
/**
|
|
* يرسل الرمز. يرجع `true` عند النجاح المؤكَّد فقط — أي فشل أو استجابة
|
|
* غامضة = `false` كي يجرّب المُوزِّع المزوّد التالي في السلسلة.
|
|
* **لا يرمي**: الرمي يقطع سلسلة الـfailover.
|
|
*/
|
|
send(phone: string, code: string, ctx: OtpSendContext): Promise<boolean>;
|
|
}
|
|
|
|
export const OTP_PROVIDERS = Symbol('OTP_PROVIDERS');
|