UNPKG

rauth-provider

Version:

A lightweight, plug-and-play Node.js library for phone number authentication using the Rauth.io reverse verification flow via WhatsApp or SMS.

244 lines (216 loc) 7.01 kB
/** * TypeScript definitions for RauthProvider */ import { Request, Response, NextFunction } from 'express'; // Configuration interfaces export interface RauthProviderConfig { rauth_api_key: string; app_id: string; webhook_secret: string; webhook_url?: string; default_session_ttl?: number; default_revoked_ttl?: number; } export interface SessionOptions { sessionToken: string; phone: string; ip: string; userAgent: string; deviceId: string; deviceModel: string; timestamp: number; expiresAt: number; } export interface DeviceInfo { ip: string; userAgent: string; deviceId: string; deviceModel: string; } export interface SessionData { phone: string; ttl: number; createdAt: number; } export interface RevokedData { reason: string; ttl: number; revokedAt: number; } export interface ValidationResult { success: boolean; missing: string[]; } export interface ErrorResponse { success: false; error: { message: string; code: string; statusCode: number; }; } export interface SuccessResponse { success: true; message: string; data?: any; } export interface SessionStats { activeSessions: number; revokedSessions: number; initialized: boolean; config: { app_id: string; webhook_url?: string; default_session_ttl: number; default_revoked_ttl: number; }; } export interface ApiSessionInitResponse { session_token: string; wa_link: string; qr_image_link: string; } export interface ApiSessionResponse { session_token?: string; status?: string; phone?: string; timestamp?: number; ttl?: number; reason?: string; } export interface WebhookPayload { event: 'session_created' | 'session_revoked'; session_token: string; phone?: string; ttl: number; reason?: string; timestamp: number; } export interface RouteOptions { webhookPath?: string; healthPath?: string; initPath?: string; verifyPath?: string; statsPath?: string; } // Express middleware type export type ExpressMiddleware = (req: Request, res: Response, next: NextFunction) => void; export type ExpressHandler = (req: Request, res: Response) => void; // SessionStore class export declare class SessionStore { constructor(); createSession(phone: string, sessionToken: string, ttl: number): void; getSession(sessionToken: string): SessionData | null; verifySession(sessionToken: string, userPhone: string): boolean; removeSession(sessionToken: string): void; getAllSessions(): Map<string, SessionData>; cleanupExpiredSessions(): void; clear(): void; } // RevokedStore class export declare class RevokedStore { constructor(); revokeSession(sessionToken: string, ttl: number, reason?: string): void; isSessionRevoked(sessionToken: string): boolean; getRevokedSession(sessionToken: string): RevokedData | null; removeRevokedSession(sessionToken: string): void; getAllRevokedSessions(): Map<string, RevokedData>; cleanupExpiredRevokedSessions(): void; clear(): void; } // Utils class export declare class Utils { static prepareSessionInitPayload( phone: string, ip: string, userAgent: string, deviceId: string, deviceModel: string ): any; static extractDeviceInfo(req: Request): DeviceInfo; static isValidPhoneNumber(phone: string): boolean; static validatePayload(payload: any, requiredFields: string[]): ValidationResult; static createErrorResponse(message: string, code?: string, statusCode?: number): ErrorResponse; static createSuccessResponse(data?: any, message?: string): SuccessResponse; static safeJsonParse(jsonString: string): any | null; static generateWebhookSignature(payload: string, secret: string): string; static verifyWebhookSignature(payload: string, signature: string, secret: string): boolean; } // RauthProvider class export declare class RauthProvider { constructor(); init(options: RauthProviderConfig): void; initSession( phone: string, headers: Record<string, string | string[] | undefined> ): Promise<ApiSessionInitResponse>; verifySession(sessionToken: string, userPhone: string): Promise<boolean>; isSessionRevoked(sessionToken: string): Promise<boolean>; createSession(phone: string, sessionToken: string, ttl: number): void; revokeSession(sessionToken: string, ttl: number, reason?: string): void; webhookHandler(): ExpressMiddleware; checkApiHealth(): Promise<boolean>; clearAllSessions(): void; } // RauthApiClient class export declare class RauthApiClient { constructor(config: RauthProviderConfig); initSession(payload: any): Promise<ApiSessionInitResponse>; getSessionDetails(sessionToken: string): Promise<ApiSessionResponse | null>; verifySession(sessionToken: string): Promise<any>; healthCheck(): Promise<boolean>; } // RauthServer class export declare class RauthServer { static createBodyParserMiddleware(): ExpressMiddleware; static createWebhookValidationMiddleware(): ExpressMiddleware; static createWebhookHandler(): ExpressMiddleware[]; static createHealthCheckHandler(): ExpressHandler; static createSessionInitHandler(): ExpressHandler; static createSessionVerificationHandler(): ExpressHandler; static createRevocationCheckMiddleware(): ExpressMiddleware; static createStatsHandler(): ExpressHandler; static setupRoutes(app: any, options?: RouteOptions): void; } // Main export interface export interface RauthProviderExports { // Main provider instance RauthProvider: RauthProvider; // Server utilities for Express integration RauthServer: typeof RauthServer; // Core components (for advanced usage) SessionStore: typeof SessionStore; RevokedStore: typeof RevokedStore; Utils: typeof Utils; RauthApiClient: typeof RauthApiClient; // Convenience aliases init(options: RauthProviderConfig): void; initSession( phone: string, headers: Record<string, string | string[] | undefined> ): Promise<ApiSessionInitResponse>; verifySession(sessionToken: string, userPhone: string): Promise<boolean>; isSessionRevoked(sessionToken: string): Promise<boolean>; webhookHandler(): ExpressMiddleware; checkApiHealth(): Promise<boolean>; clearAllSessions(): void; // Server utilities setupRoutes(app: any, options?: RouteOptions): void; createWebhookHandler(): ExpressMiddleware[]; createHealthCheckHandler(): ExpressHandler; createSessionInitHandler(): ExpressHandler; createSessionVerificationHandler(): ExpressHandler; createRevocationCheckMiddleware(): ExpressMiddleware; createStatsHandler(): ExpressHandler; } // Default export declare const rauthProvider: RauthProviderExports; export default rauthProvider; // Named exports export { RauthProvider, RauthServer, SessionStore, RevokedStore, Utils, };