ReOTP.
Pacchetti per sviluppatori/Libreria ReOTP per Node.js
1 min di lettura

Libreria ReOTP per Node.js

Una libreria pronta per facilitare l'uso di ReOTP nelle applicazioni Node.js/Next.js.

Invece di scrivere richieste HTTP manualmente, puoi utilizzare il nostro semplice codice SDK per integrare ReOTP in pochi secondi.

Questa libreria è un wrapper pronto che puoi copiare direttamente nel tuo progetto come file reotp.ts o reotp.js e utilizzare.

Funzionalità

  • Invio automatico dell'Init e gestione degli errori.
  • Fornitura integrata di una funzione per SSE (Server-Sent Events) (controllo continuo dello stato).
  • Fornitura di forti tipi TypeScript.
Codice di integrazione (SDK)
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
      };
    });
  }
}