ReOTP.
Pakej Pembangun/Pustaka ReOTP untuk Node.js
1 1-Minute Read

Pustaka ReOTP untuk Node.js

Pustaka sedia guna untuk memudahkan penggunaan ReOTP dalam aplikasi Node.js/Next.js.

Daripada menulis permintaan HTTP secara manual, anda boleh menggunakan kod SDK ringkas kami untuk menyepadukan ReOTP dalam beberapa saat.

Pustaka ini ialah Wrapper sedia guna yang boleh anda salin terus ke dalam projek anda sebagai fail reotp.ts atau reotp.js dan gunakannya.

Ciri-ciri

  • Menghantar Init secara automatik dan mengendalikan ralat.
  • Menyediakan fungsi untuk SSE (Server-Sent Events) (semakan status berterusan) yang terbina dalam.
  • Menyediakan jenis Typescript yang kukuh.
Kod integrasi (SDKs)
export class ReOTPClient {
  private apiKey: string;
  private baseUrl: string;

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

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

  async waitForVerification(requestId: string, timeoutMs: number = 120000): Promise<{ verified: boolean; phoneNumber?: string }> {
    return new Promise((resolve, reject) => {
      const EventSource = require('eventsource');
      const evtSource = new EventSource(`${this.baseUrl}/api/verify/stream?id=${requestId}`);

      const timeout = setTimeout(() => {
        evtSource.close();
        resolve({ verified: false });
      }, timeoutMs);

      evtSource.onmessage = (event: any) => {
        const data = JSON.parse(event.data);
        if (data.status === "VERIFIED") {
          clearTimeout(timeout);
          evtSource.close();
          resolve({ verified: true, phoneNumber: data.phoneNumber });
        } else if (data.status === "EXPIRED") {
          clearTimeout(timeout);
          evtSource.close();
          reject(new Error("Session expired"));
        }
      };

      evtSource.onerror = () => {
        // Fallback or retry
      };
    });
  }
}