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
JavaScript
"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