UNPKG

redai-automation-web-sdk

Version:

TypeScript SDK for RedAI Automation Web API - Zalo Personal automation, messaging, advanced sticker search, and bulk operations. 100% compatible with automation-web backend. v1.8.1: Updated GroupInfo interface to match backend controller with complete gro

370 lines 8.68 kB
/** * Webhook management service */ import { HttpClient } from '../../utils/http.utils'; import { AutomationWebResponse } from '../../types/common.types'; import { Message, Typing, Reaction, SeenMessage, DeliveredMessage, FriendEvent, GroupEvent, Undo } from '../../types/webhook'; /** * Webhook listener options */ export interface WebhookListenerOptions { /** * Enable self listen for own messages * @default false */ selfListen?: boolean; /** * Enable debug logging * @default false */ logging?: boolean; /** * Auto reconnect on disconnect * @default true */ autoReconnect?: boolean; /** * Reconnect delay in milliseconds * @default 5000 */ reconnectDelay?: number; } /** * Start webhook listener request */ export interface StartWebhookListenerRequest { /** * Session ID */ sessionId: string; /** * Webhook listener options */ options?: WebhookListenerOptions; } /** * Stop webhook listener request */ export interface StopWebhookListenerRequest { /** * Session ID */ sessionId: string; } /** * Webhook listener status */ export type WebhookListenerStatus = 'active' | 'inactive' | 'error' | 'connecting'; /** * Webhook listener status response */ export interface WebhookListenerStatusResponse { /** * Session ID */ sessionId: string; /** * Current status */ status: WebhookListenerStatus; /** * Error message if status is error */ error?: string; /** * Timestamp when connected */ connectedAt?: number; /** * Timestamp of last event */ lastEventAt?: number; /** * Total event count */ eventCount?: number; } /** * Webhook statistics */ export interface WebhookStatistics { /** * Session ID */ sessionId: string; /** * Total events processed */ totalEvents: number; /** * Events processed today */ eventsToday: number; /** * Last event timestamp */ lastEventTimestamp: number; /** * Events count by type */ eventsByType: Record<string, number>; /** * Queue statistics */ queueStats: { waiting: number; active: number; completed: number; failed: number; }; } /** * Webhook event response */ export interface WebhookEventResponse { /** * Event ID */ eventId: string; /** * Session ID */ sessionId: string; /** * Event type */ eventType: string; /** * Event timestamp */ timestamp: number; /** * Processing status */ status: 'queued' | 'processing' | 'completed' | 'failed'; /** * Job ID for tracking */ jobId?: string; /** * Error message if failed */ error?: string; } /** * Response DTO cho validate session */ export interface ValidateSessionResponse { sessionId: string; isValid: boolean; status: string; lastActivity?: number; errors?: string[]; } /** * Response DTO cho validate all sessions */ export interface ValidateAllSessionsResponse { totalSessions: number; validSessions: number; invalidSessions: number; results: ValidateSessionResponse[]; } /** * Response DTO cho cleanup expired sessions */ export interface CleanupExpiredSessionsResponse { cleanupCount: number; expiredSessions: string[]; message: string; } /** * Request old messages request */ export interface RequestOldMessagesRequest { /** * Session ID */ sessionId: string; /** * Thread type ('user' or 'group') * @default 'user' */ threadType?: 'user' | 'group'; /** * Last message ID to get older messages * If null, get from latest messages * @default null */ lastMsgId?: string | null; } /** * Request old messages response */ export interface RequestOldMessagesResponse { /** * Session ID */ sessionId: string; /** * Thread type */ threadType: 'user' | 'group'; /** * Last message ID used in request */ lastMsgId: string | null; } /** * Webhook Event Handlers */ export interface WebhookEventHandlers { /** * Message received handler */ onMessage?: (event: Message) => void; /** * Typing event handler */ onTyping?: (event: Typing) => void; /** * Reaction event handler */ onReaction?: (event: Reaction) => void; /** * Message seen handler */ onMessageSeen?: (event: SeenMessage) => void; /** * Message delivered handler */ onMessageDelivered?: (event: DeliveredMessage) => void; /** * Friend event handler */ onFriendEvent?: (event: FriendEvent) => void; /** * Group event handler */ onGroupEvent?: (event: GroupEvent) => void; /** * Message undo handler */ onUndo?: (event: Undo) => void; /** * Generic event handler for unknown events */ onUnknownEvent?: (eventType: string, data: any) => void; /** * Error handler */ onError?: (error: Error) => void; /** * Connection status handler */ onConnectionChange?: (status: 'connected' | 'disconnected' | 'reconnecting') => void; } /** * Webhook management service class */ export declare class WebhookService { private httpClient; constructor(httpClient: HttpClient); /** * Start webhook listener for a session */ startWebhookListener(request: StartWebhookListenerRequest): Promise<WebhookListenerStatusResponse>; /** * Stop webhook listener for a session */ stopWebhookListener(request: StopWebhookListenerRequest): Promise<WebhookListenerStatusResponse>; /** * Get webhook listener status for a session */ getWebhookListenerStatus(sessionId: string): Promise<WebhookListenerStatusResponse>; /** * Get webhook statistics for a session */ getWebhookStatistics(sessionId: string): Promise<WebhookStatistics>; /** * Get all active webhook listeners */ getActiveWebhookListeners(): Promise<{ activeListeners: string[]; count: number; }>; /** * Restart webhook listener for a session */ restartWebhookListener(sessionId: string, options?: WebhookListenerOptions): Promise<WebhookListenerStatusResponse>; /** * Check if webhook listener is active */ isWebhookListenerActive(sessionId: string): Promise<boolean>; /** * Get webhook health status */ getWebhookHealth(): Promise<{ status: 'healthy' | 'unhealthy'; activeListeners: number; totalEvents: number; queueHealth: { waiting: number; active: number; failed: number; }; }>; /** * Stop all webhook listeners */ stopAllWebhookListeners(): Promise<{ stoppedListeners: string[]; count: number; }>; /** * Validate session * GET /webhook/validate/:sessionId */ validateSession(sessionId: string): Promise<AutomationWebResponse<ValidateSessionResponse>>; /** * Validate all sessions * POST /webhook/validate-all */ validateAllSessions(): Promise<AutomationWebResponse<ValidateAllSessionsResponse>>; /** * Cleanup expired sessions * DELETE /webhook/cleanup-expired */ cleanupExpiredSessions(): Promise<AutomationWebResponse<CleanupExpiredSessionsResponse>>; /** * Request old messages from a thread * Pattern: Request-Response via WebSocket * * How it works: * 1. Call this API to SEND REQUEST * 2. Server processes and SENDS RESPONSE via 'old_messages' event * 3. Results will be received via webhook event handler * * @param request - Request old messages parameters * @returns Response with request confirmation * * @example * ```typescript * // Request latest messages for a user thread * await webhookService.requestOldMessages({ * sessionId: 'your-session-id', * threadType: 'user', * lastMsgId: null * }); * * // Request older messages using last message ID * await webhookService.requestOldMessages({ * sessionId: 'your-session-id', * threadType: 'group', * lastMsgId: 'msg-id-123' * }); * ``` */ requestOldMessages(request: RequestOldMessagesRequest): Promise<AutomationWebResponse<RequestOldMessagesResponse>>; } //# sourceMappingURL=webhook.service.d.ts.map