ReOTP.
প্রোগ্রামিং ইন্টারফেস/Node.js- এর জন্য ReOTP লাইব্রেরি
1 min read

Node.js- এর জন্য ReOTP লাইব্রেরি

Node.js/Next.js অ্যাপ্লিকেশনগুলিতে ReOTP ব্যবহার সহজ করার জন্য একটি প্রস্তুত লাইব্রেরি।

ম্যানুয়ালি HTTP অনুরোধ লিখার বদলে, আপনি আমাদের সাধারণ SDK কোড ব্যবহার করে ReOTP সেকেন্ডগুলোর মধ্যে ইন্টিগ্রেট করতে পারেন।

এই লাইব্রেরি একটি প্রস্তুত Wrapper যা আপনি সরাসরি আপনার প্রজেক্টে reotp.ts বা reotp.js ফাইল হিসেবে কপি করে ব্যবহার করতে পারেন।

বৈশিষ্ট্য

  • Init অনুরোধ স্বয়ংক্রিয় পাঠানো এবং ত্রুটি হ্যান্ডলিং।
  • Polling (সিনির অবস্থা নিরীক্ষণ) ফাংশন ইনবিল্ট।
  • শক্তিশালী Typescript টাইপ्स প্রদান।
Integration Code (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);
    });
  }
}