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.0: Added SessionProxyService for managing proxy assignments to sessions with

394 lines 13.5 kB
"use strict"; /** * Main SDK client for automation-web API */ Object.defineProperty(exports, "__esModule", { value: true }); exports.AutomationWebClient = void 0; const http_utils_1 = require("../utils/http.utils"); const validation_utils_1 = require("../utils/validation.utils"); const event_utils_1 = require("../utils/event.utils"); const common_types_1 = require("../types/common.types"); const webhook_types_1 = require("../types/webhook.types"); // Import services const auth_service_1 = require("../services/auth/auth.service"); const messaging_service_1 = require("../services/messaging/messaging.service"); const advanced_messaging_service_1 = require("../services/advanced-messaging/advanced-messaging.service"); const webhook_service_1 = require("../services/webhook/webhook.service"); const groups_service_1 = require("../services/groups/groups.service"); const friends_service_1 = require("../services/friends/friends.service"); const user_info_service_1 = require("../services/user-info/user-info.service"); const profile_service_1 = require("../services/profile/profile.service"); const search_service_1 = require("../services/search/search.service"); const bulk_service_1 = require("../services/bulk/bulk.service"); const session_proxy_service_1 = require("../services/session-proxy/session-proxy.service"); /** * Main automation-web SDK client */ class AutomationWebClient { constructor(config) { // Merge with default config this.config = { ...common_types_1.DEFAULT_CONFIG, ...config }; // Validate configuration validation_utils_1.ValidationUtils.validateConfig(this.config); // Initialize HTTP client this.httpClient = new http_utils_1.HttpClient(this.config); // Initialize event manager this.eventManager = new event_utils_1.EventManager(); // Initialize services this._auth = new auth_service_1.AuthService(this.httpClient); this._messaging = new messaging_service_1.MessagingService(this.httpClient); this._advancedMessaging = new advanced_messaging_service_1.AdvancedMessagingService(this.httpClient); this._webhook = new webhook_service_1.WebhookService(this.httpClient); this._groups = new groups_service_1.GroupService(this.httpClient); this._friends = new friends_service_1.FriendService(this.httpClient); this._userInfo = new user_info_service_1.UserInfoService(this.httpClient); this._profile = new profile_service_1.ProfileService(this.httpClient); this._search = new search_service_1.SearchService(this.httpClient); this._bulk = new bulk_service_1.BulkService(this.httpClient); this._sessionProxy = new session_proxy_service_1.SessionProxyService(this.httpClient); // Setup error handling this.setupErrorHandling(); } /** * Get authentication service */ get auth() { return this._auth; } /** * Get messaging service */ get messaging() { return this._messaging; } /** * Get advanced messaging service */ get advancedMessaging() { return this._advancedMessaging; } /** * Get groups service */ get groups() { return this._groups; } /** * Get friends service */ get friends() { return this._friends; } /** * Get user info service */ get userInfo() { return this._userInfo; } /** * Get profile service */ get profile() { return this._profile; } /** * Get webhook service */ get webhook() { return this._webhook; } /** * Get search service */ get search() { return this._search; } /** * Get bulk operations service */ get bulk() { return this._bulk; } /** * Get session proxy service */ get sessionProxy() { return this._sessionProxy; } /** * Register webhook event handler */ onEvent(eventType, handler) { this.eventManager.addHandler(eventType, handler); return this; } /** * Register one-time webhook event handler */ onceEvent(eventType, handler) { this.eventManager.addOnceHandler(eventType, handler); return this; } /** * Remove webhook event handler */ offEvent(eventType, handler) { this.eventManager.removeHandler(eventType, handler); return this; } /** * Remove all handlers for event type */ removeAllEventListeners(eventType) { this.eventManager.removeAllListeners(eventType); return this; } /** * Process incoming webhook event */ async processWebhookEvent(event) { await this.eventManager.emitAsync(event.eventType, event); } /** * Convenience methods for common events */ /** * Listen for message received events */ onMessageReceived(handler) { // Listen for all message received events this.onEvent(webhook_types_1.ZaloWebhookEventType.TEXT_MESSAGE_RECEIVED_FROM_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.TEXT_MESSAGE_RECEIVED_FROM_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.IMAGE_MESSAGE_RECEIVED_FROM_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.IMAGE_MESSAGE_RECEIVED_FROM_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VIDEO_MESSAGE_RECEIVED_FROM_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VIDEO_MESSAGE_RECEIVED_FROM_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VOICE_MESSAGE_RECEIVED_FROM_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VOICE_MESSAGE_RECEIVED_FROM_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.FILE_MESSAGE_RECEIVED_FROM_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.FILE_MESSAGE_RECEIVED_FROM_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.STICKER_MESSAGE_RECEIVED_FROM_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.STICKER_MESSAGE_RECEIVED_FROM_GROUP, handler); return this; } /** * Listen for message sent events */ onMessageSent(handler) { // Listen for all message sent events this.onEvent(webhook_types_1.ZaloWebhookEventType.TEXT_MESSAGE_SENT_TO_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.TEXT_MESSAGE_SENT_TO_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.IMAGE_MESSAGE_SENT_TO_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.IMAGE_MESSAGE_SENT_TO_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VIDEO_MESSAGE_SENT_TO_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VIDEO_MESSAGE_SENT_TO_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VOICE_MESSAGE_SENT_TO_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.VOICE_MESSAGE_SENT_TO_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.FILE_MESSAGE_SENT_TO_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.FILE_MESSAGE_SENT_TO_GROUP, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.STICKER_MESSAGE_SENT_TO_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.STICKER_MESSAGE_SENT_TO_GROUP, handler); return this; } /** * Listen for typing events */ onTyping(handler) { this.onEvent(webhook_types_1.ZaloWebhookEventType.TYPING_BY_OTHER_IN_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.TYPING_BY_OTHER_IN_GROUP, handler); return this; } /** * Listen for message seen events */ onMessageSeen(handler) { this.onEvent(webhook_types_1.ZaloWebhookEventType.SEEN_MESSAGES_BY_OTHER_IN_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.SEEN_MESSAGES_BY_OTHER_IN_GROUP, handler); return this; } /** * Listen for message reaction events */ onMessageReaction(handler) { this.onEvent(webhook_types_1.ZaloWebhookEventType.REACTION_BY_OTHER_IN_USER, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.REACTION_BY_OTHER_IN_GROUP, handler); return this; } /** * Listen for friend events */ onFriendAdded(handler) { return this.onEvent(webhook_types_1.ZaloWebhookEventType.FRIEND_EVENT_ADD, handler); } /** * Listen for group events */ onGroupMemberAdded(handler) { return this.onEvent(webhook_types_1.ZaloWebhookEventType.GROUP_EVENT_JOIN, handler); } /** * Listen for connection events */ onConnectionLost(handler) { return this.onEvent(webhook_types_1.ZaloWebhookEventType.CONNECTION_STATUS_DISCONNECTED, handler); } /** * Listen for error events */ onError(handler) { this.onEvent(webhook_types_1.ZaloWebhookEventType.ERROR_SYSTEM, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.ERROR_NETWORK, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.ERROR_AUTHENTICATION, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.ERROR_VALIDATION, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.ERROR_BUSINESS_LOGIC, handler); this.onEvent(webhook_types_1.ZaloWebhookEventType.ERROR_UNKNOWN, handler); return this; } // ==================== TYPED EVENT HANDLERS ==================== /** * Listen for typed message events */ onTypedMessage(handler) { // Convert generic webhook events to typed Message events this.onMessageReceived(event => { // Here you would parse the event data into Message type // For now, we'll pass the raw event data handler(event.eventData); }); return this; } /** * Listen for typing events */ onTypedTyping(handler) { this.onEvent('typing', event => { handler(event.eventData); }); return this; } /** * Listen for typed reaction events */ onTypedReaction(handler) { this.onMessageReaction(event => { handler(event.eventData); }); return this; } /** * Listen for typed seen message events */ onTypedMessageSeen(handler) { this.onMessageSeen(event => { handler(event.eventData); }); return this; } /** * Listen for typed delivered message events */ onTypedMessageDelivered(handler) { this.onEvent('message_delivered', event => { handler(event.eventData); }); return this; } /** * Listen for typed friend events */ onTypedFriendEvent(handler) { this.onFriendAdded(event => { handler(event.eventData); }); return this; } /** * Listen for typed group events */ onTypedGroupEvent(handler) { this.onGroupMemberAdded(event => { handler(event.eventData); }); return this; } /** * Listen for typed undo events */ onTypedUndo(handler) { this.onEvent('message_undo', event => { handler(event.eventData); }); return this; } /** * Update SDK configuration */ updateConfig(newConfig) { this.config = { ...this.config, ...newConfig }; validation_utils_1.ValidationUtils.validateConfig(this.config); this.httpClient.updateConfig(this.config); } /** * Get current configuration */ getConfig() { return { ...this.config }; } /** * Get SDK version */ getVersion() { return '1.0.0'; } /** * Test connection to automation-web API */ async testConnection() { try { await this.httpClient.get('/health'); return true; } catch (error) { return false; } } /** * Get API health status */ async getHealthStatus() { try { const response = await this.httpClient.get('/health'); return { status: response.status === 'ok' ? 'healthy' : 'unhealthy', timestamp: response.timestamp, version: response.version, uptime: response.uptime, }; } catch (error) { return { status: 'unhealthy', timestamp: new Date().toISOString(), }; } } /** * Setup error handling */ setupErrorHandling() { // Handle internal errors using EventEmitter's built-in error event this.eventManager.addListener('error', (error) => { if (this.config.logging) { console.error('[AutomationWebClient] Error occurred:', error.message); } }); } /** * Cleanup resources */ destroy() { this.eventManager.removeAllListeners(); } } exports.AutomationWebClient = AutomationWebClient; //# sourceMappingURL=AutomationWebClient.js.map