ReOTP.
حزم المطورين/مكتبة ReOTP لـ Node.js
1 د دقائق قراءة

مكتبة ReOTP لـ Node.js

مكتبة جاهزة لتسهيل استخدام ReOTP في تطبيقات Node.js/Next.js.

بدلاً من كتابة طلبات الـ HTTP يدوياً، يمكنك استخدام كود الـ SDK البسيط الخاص بنا لدمج ReOTP في ثوانٍ.

هذه المكتبة هي Wrapper جاهز يمكنك نسخه مباشرة في مشروعك كملف reotp.ts أو reotp.js واستخدامه.

المميزات

  • إرسال الـ Init تلقائياً والتعامل مع الأخطاء.
  • توفير دالة للـ Polling (فحص الحالة المستمر) مدمجة.
  • توفير أنواع Typescript قوية.
كود التوثيق البرمجي (SDKs)
export class ReOTPClient {
  private apiKey: string;
  private baseUrl: string;

  constructor(apiKey: string, baseUrl: string = "https://your-domain.com") {
    this.apiKey = apiKey;
    this.baseUrl = baseUrl;
  }

  async verify(phoneNumber: string, method: "WHATSAPP" | "TELEGRAM" = "WHATSAPP") {
    const res = await fetch(`${this.baseUrl}/api/verify/init`, {
      method: "POST",
      headers: { 
        "Content-Type": "application/json",
        "Authorization": `Bearer ${this.apiKey}`
      },
      body: JSON.stringify({ phoneNumber, method })
    });
    
    if (!res.ok) throw new Error(await res.text());
    return await res.json(); // { requestId, waLink, tgLink, expectedText }
  }

  async waitForVerification(requestId: string, timeoutMs: number = 120000): Promise<boolean> {
    const startTime = Date.now();
    
    return new Promise((resolve, reject) => {
      const interval = setInterval(async () => {
        if (Date.now() - startTime > timeoutMs) {
          clearInterval(interval);
          resolve(false);
        }

        try {
          const res = await fetch(`${this.baseUrl}/api/verify/status?id=${requestId}`);
          const data = await res.json();
          
          if (data.status === "VERIFIED") {
            clearInterval(interval);
            resolve(true);
          } else if (data.status === "EXPIRED") {
            clearInterval(interval);
            reject(new Error("Session expired"));
          } else if (data.status === "REJECTED") {
            clearInterval(interval);
            reject(new Error(data.failureReason || "Session rejected"));
          }
        } catch (e) {
          // Keep polling
        }
      }, 3000);
    });
  }
}