@warriorteam/redai-zalo-sdk
Version:
Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account v3.0, ZNS with Full Type Safety, Consultation Service, Broadcast Service, Group Messaging with List APIs, Social APIs, Enhanced Article Management, Promotion Service v3.0 with Multip
530 lines • 20.9 kB
JavaScript
;
/**
* Types for Zalo Webhook Events
* Based on Zalo Official Account Webhook API
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.AttachmentType = exports.WebhookEventName = void 0;
exports.isMessageEvent = isMessageEvent;
exports.isFollowEvent = isFollowEvent;
exports.isUserActionEvent = isUserActionEvent;
exports.isShopEvent = isShopEvent;
exports.isOAMessageEvent = isOAMessageEvent;
exports.isAnonymousEvent = isAnonymousEvent;
exports.isCallEvent = isCallEvent;
exports.isTemplateEvent = isTemplateEvent;
exports.isBusinessCardEvent = isBusinessCardEvent;
exports.isFeedbackEvent = isFeedbackEvent;
exports.isZNSEvent = isZNSEvent;
exports.isGroupEvent = isGroupEvent;
exports.isJourneyEvent = isJourneyEvent;
exports.isQuotaTemplateEvent = isQuotaTemplateEvent;
exports.isWidgetEvent = isWidgetEvent;
exports.isSystemEvent = isSystemEvent;
exports.isPermissionEvent = isPermissionEvent;
exports.isExtensionEvent = isExtensionEvent;
exports.isUpdateUserInfoEvent = isUpdateUserInfoEvent;
exports.isReactionEvent = isReactionEvent;
exports.isConsentEvent = isConsentEvent;
exports.hasAttachments = hasAttachments;
exports.isUserMessageEvent = isUserMessageEvent;
exports.isGroupMessageEvent = isGroupMessageEvent;
exports.isOAToUserMessageEvent = isOAToUserMessageEvent;
exports.isOAToGroupMessageEvent = isOAToGroupMessageEvent;
exports.getMessageDirection = getMessageDirection;
// ==================== EVENT NAME ENUMS ====================
/**
* Webhook event names enum
*/
var WebhookEventName;
(function (WebhookEventName) {
// User message events
WebhookEventName["USER_SEND_LOCATION"] = "user_send_location";
WebhookEventName["USER_SEND_IMAGE"] = "user_send_image";
WebhookEventName["USER_SEND_LINK"] = "user_send_link";
WebhookEventName["USER_SEND_TEXT"] = "user_send_text";
WebhookEventName["USER_SEND_STICKER"] = "user_send_sticker";
WebhookEventName["USER_SEND_GIF"] = "user_send_gif";
WebhookEventName["USER_SEND_AUDIO"] = "user_send_audio";
WebhookEventName["USER_SEND_VIDEO"] = "user_send_video";
WebhookEventName["USER_SEND_FILE"] = "user_send_file";
WebhookEventName["USER_RECEIVED_MESSAGE"] = "user_received_message";
WebhookEventName["USER_SEEN_MESSAGE"] = "user_seen_message";
// User action events
WebhookEventName["FOLLOW"] = "follow";
WebhookEventName["UNFOLLOW"] = "unfollow";
WebhookEventName["USER_SUBMIT_INFO"] = "user_submit_info";
// OA message events
WebhookEventName["OA_SEND_TEXT"] = "oa_send_text";
WebhookEventName["OA_SEND_IMAGE"] = "oa_send_image";
WebhookEventName["OA_SEND_GIF"] = "oa_send_gif";
WebhookEventName["OA_SEND_LIST"] = "oa_send_list";
WebhookEventName["OA_SEND_FILE"] = "oa_send_file";
WebhookEventName["OA_SEND_STICKER"] = "oa_send_sticker";
// User interaction events
WebhookEventName["USER_CLICK_CHATNOW"] = "user_click_chatnow";
WebhookEventName["USER_REACTED_MESSAGE"] = "user_reacted_message";
WebhookEventName["USER_REPLY_CONSENT"] = "user_reply_consent";
// OA interaction events
WebhookEventName["OA_REACTED_MESSAGE"] = "oa_reacted_message";
WebhookEventName["OA_SEND_CONSENT"] = "oa_send_consent";
// Anonymous user events
WebhookEventName["ANONYMOUS_SEND_TEXT"] = "anonymous_send_text";
WebhookEventName["ANONYMOUS_SEND_IMAGE"] = "anonymous_send_image";
WebhookEventName["ANONYMOUS_SEND_FILE"] = "anonymous_send_file";
WebhookEventName["ANONYMOUS_SEND_STICKER"] = "anonymous_send_sticker";
// OA anonymous events
WebhookEventName["OA_SEND_ANONYMOUS_TEXT"] = "oa_send_anonymous_text";
WebhookEventName["OA_SEND_ANONYMOUS_IMAGE"] = "oa_send_anonymous_image";
WebhookEventName["OA_SEND_ANONYMOUS_FILE"] = "oa_send_anonymous_file";
WebhookEventName["OA_SEND_ANONYMOUS_STICKER"] = "oa_send_anonymous_sticker";
// Call events
WebhookEventName["OA_CALL_USER"] = "oa_call_user";
WebhookEventName["USER_CALL_OA"] = "user_call_oa";
// Template and business card events
WebhookEventName["OA_SEND_TEMPLATE"] = "oa_send_template";
WebhookEventName["USER_SEND_BUSINESS_CARD"] = "user_send_business_card";
// Feedback events
WebhookEventName["USER_FEEDBACK"] = "user_feedback";
// ZNS events
WebhookEventName["CHANGE_OA_DAILY_QUOTA"] = "change_oa_daily_quota";
WebhookEventName["CHANGE_OA_TEMPLATE_TAGS"] = "change_oa_template_tags";
WebhookEventName["CHANGE_TEMPLATE_QUALITY"] = "change_template_quality";
WebhookEventName["CHANGE_TEMPLATE_QUOTA"] = "change_template_quota";
WebhookEventName["CHANGE_TEMPLATE_STATUS"] = "change_template_status";
WebhookEventName["EVENT_JOURNEY_TIME_OUT"] = "event_journey_time_out";
WebhookEventName["EVENT_JOURNEY_ACKNOWLEDGED"] = "event_journey_acknowledged";
WebhookEventName["ZNS_USER_RECEIVED_MESSAGE"] = "user_received_message";
// Group events
WebhookEventName["CREATE_GROUP"] = "create_group";
WebhookEventName["USER_JOIN_GROUP"] = "user_join_group";
WebhookEventName["USER_REQUEST_JOIN_GROUP"] = "user_request_join_group";
WebhookEventName["REACT_REQUEST_JOIN_GROUP"] = "react_request_join_group";
WebhookEventName["REJECT_REQUEST_JOIN_GROUP"] = "reject_request_join_group";
WebhookEventName["ADD_GROUP_ADMIN"] = "add_group_admin";
WebhookEventName["REMOVE_GROUP_ADMIN"] = "remove_group_admin";
WebhookEventName["UPDATE_GROUP_INFO"] = "update_group_info";
WebhookEventName["USER_OUT_GROUP"] = "user_out_group";
WebhookEventName["OA_SEND_GROUP_TEXT"] = "oa_send_group_text";
WebhookEventName["OA_SEND_GROUP_IMAGE"] = "oa_send_group_image";
WebhookEventName["OA_SEND_GROUP_LINK"] = "oa_send_group_link";
WebhookEventName["OA_SEND_GROUP_AUDIO"] = "oa_send_group_audio";
WebhookEventName["OA_SEND_GROUP_LOCATION"] = "oa_send_group_location";
WebhookEventName["OA_SEND_GROUP_VIDEO"] = "oa_send_group_video";
WebhookEventName["OA_SEND_GROUP_BUSINESS_CARD"] = "oa_send_group_business_card";
WebhookEventName["OA_SEND_GROUP_STICKER"] = "oa_send_group_sticker";
WebhookEventName["OA_SEND_GROUP_GIF"] = "oa_send_group_gif";
WebhookEventName["OA_SEND_GROUP_FILE"] = "oa_send_group_file";
WebhookEventName["USER_SEND_GROUP_TEXT"] = "user_send_group_text";
WebhookEventName["USER_SEND_GROUP_IMAGE"] = "user_send_group_image";
WebhookEventName["USER_SEND_GROUP_LINK"] = "user_send_group_link";
WebhookEventName["USER_SEND_GROUP_AUDIO"] = "user_send_group_audio";
WebhookEventName["USER_SEND_GROUP_LOCATION"] = "user_send_group_location";
WebhookEventName["USER_SEND_GROUP_VIDEO"] = "user_send_group_video";
WebhookEventName["USER_SEND_GROUP_BUSINESS_CARD"] = "user_send_group_business_card";
WebhookEventName["USER_SEND_GROUP_STICKER"] = "user_send_group_sticker";
WebhookEventName["USER_SEND_GROUP_GIF"] = "user_send_group_gif";
WebhookEventName["USER_SEND_GROUP_FILE"] = "user_send_group_file";
// Widget events
WebhookEventName["WIDGET_INTERACTION_ACCEPTED"] = "widget_interaction_accepted";
WebhookEventName["WIDGET_FAILED_TO_SYNC_USER_EXTERNAL_ID"] = "widget_failed_to_sync_user_external_id";
// System events
WebhookEventName["PERMISSION_REVOKED"] = "permission_revoked";
WebhookEventName["EXTENSION_PURCHASED"] = "extension_purchased";
WebhookEventName["UPDATE_USER_INFO"] = "update_user_info";
// Shop events
WebhookEventName["SHOP_HAS_ORDER"] = "shop_has_order";
// Legacy system events
WebhookEventName["ADD_USER_TO_TAG"] = "add_user_to_tag";
})(WebhookEventName || (exports.WebhookEventName = WebhookEventName = {}));
/**
* Attachment types enum
*/
var AttachmentType;
(function (AttachmentType) {
AttachmentType["LOCATION"] = "location";
AttachmentType["IMAGE"] = "image";
AttachmentType["LINK"] = "link";
AttachmentType["STICKER"] = "sticker";
AttachmentType["GIF"] = "gif";
AttachmentType["AUDIO"] = "audio";
AttachmentType["VIDEO"] = "video";
AttachmentType["FILE"] = "file";
})(AttachmentType || (exports.AttachmentType = AttachmentType = {}));
// ==================== UTILITY TYPES ====================
/**
* Type guard to check if event is a message event
*/
function isMessageEvent(event) {
return [
WebhookEventName.USER_SEND_LOCATION,
WebhookEventName.USER_SEND_IMAGE,
WebhookEventName.USER_SEND_LINK,
WebhookEventName.USER_SEND_TEXT,
WebhookEventName.USER_SEND_STICKER,
WebhookEventName.USER_SEND_GIF,
WebhookEventName.USER_SEND_AUDIO,
WebhookEventName.USER_SEND_VIDEO,
WebhookEventName.USER_SEND_FILE,
WebhookEventName.USER_RECEIVED_MESSAGE,
WebhookEventName.USER_SEEN_MESSAGE,
WebhookEventName.OA_SEND_TEXT,
WebhookEventName.OA_SEND_IMAGE,
WebhookEventName.OA_SEND_GIF,
WebhookEventName.OA_SEND_LIST,
WebhookEventName.OA_SEND_FILE,
WebhookEventName.OA_SEND_STICKER,
WebhookEventName.OA_SEND_ANONYMOUS_TEXT,
WebhookEventName.OA_SEND_ANONYMOUS_IMAGE,
WebhookEventName.OA_SEND_ANONYMOUS_FILE,
WebhookEventName.OA_SEND_ANONYMOUS_STICKER,
WebhookEventName.OA_SEND_TEMPLATE,
WebhookEventName.ANONYMOUS_SEND_TEXT,
WebhookEventName.ANONYMOUS_SEND_IMAGE,
WebhookEventName.ANONYMOUS_SEND_FILE,
WebhookEventName.ANONYMOUS_SEND_STICKER,
WebhookEventName.USER_SEND_BUSINESS_CARD,
WebhookEventName.OA_SEND_GROUP_TEXT,
WebhookEventName.OA_SEND_GROUP_IMAGE,
WebhookEventName.OA_SEND_GROUP_LINK,
WebhookEventName.OA_SEND_GROUP_AUDIO,
WebhookEventName.OA_SEND_GROUP_LOCATION,
WebhookEventName.OA_SEND_GROUP_VIDEO,
WebhookEventName.OA_SEND_GROUP_BUSINESS_CARD,
WebhookEventName.OA_SEND_GROUP_STICKER,
WebhookEventName.OA_SEND_GROUP_GIF,
WebhookEventName.OA_SEND_GROUP_FILE,
WebhookEventName.USER_SEND_GROUP_TEXT,
WebhookEventName.USER_SEND_GROUP_LINK,
WebhookEventName.USER_SEND_GROUP_AUDIO,
WebhookEventName.USER_SEND_GROUP_LOCATION,
WebhookEventName.USER_SEND_GROUP_VIDEO,
WebhookEventName.USER_SEND_GROUP_BUSINESS_CARD,
WebhookEventName.USER_SEND_GROUP_STICKER,
WebhookEventName.USER_SEND_GROUP_GIF,
WebhookEventName.USER_SEND_GROUP_FILE,
].includes(event.event_name);
}
/**
* Type guard to check if event is a follow/unfollow event
*/
function isFollowEvent(event) {
return [WebhookEventName.FOLLOW, WebhookEventName.UNFOLLOW].includes(event.event_name);
}
/**
* Type guard to check if event is a user action event
*/
function isUserActionEvent(event) {
return [
WebhookEventName.FOLLOW,
WebhookEventName.UNFOLLOW,
WebhookEventName.USER_SUBMIT_INFO,
WebhookEventName.USER_CLICK_CHATNOW,
WebhookEventName.USER_REACTED_MESSAGE,
WebhookEventName.USER_REPLY_CONSENT,
WebhookEventName.USER_SEND_BUSINESS_CARD,
WebhookEventName.USER_FEEDBACK,
].includes(event.event_name);
}
/**
* Type guard to check if event is a shop event
*/
function isShopEvent(event) {
return event.event_name === WebhookEventName.SHOP_HAS_ORDER;
}
/**
* Type guard to check if event is an OA message event
*/
function isOAMessageEvent(event) {
return [
WebhookEventName.OA_SEND_TEXT,
WebhookEventName.OA_SEND_IMAGE,
WebhookEventName.OA_SEND_GIF,
WebhookEventName.OA_SEND_LIST,
WebhookEventName.OA_SEND_FILE,
WebhookEventName.OA_SEND_STICKER,
WebhookEventName.OA_SEND_ANONYMOUS_TEXT,
WebhookEventName.OA_SEND_ANONYMOUS_IMAGE,
WebhookEventName.OA_SEND_ANONYMOUS_FILE,
WebhookEventName.OA_SEND_ANONYMOUS_STICKER,
WebhookEventName.OA_SEND_TEMPLATE,
].includes(event.event_name);
}
/**
* Type guard to check if event is an anonymous user event
*/
function isAnonymousEvent(event) {
return [
WebhookEventName.ANONYMOUS_SEND_TEXT,
WebhookEventName.ANONYMOUS_SEND_IMAGE,
WebhookEventName.ANONYMOUS_SEND_FILE,
WebhookEventName.ANONYMOUS_SEND_STICKER,
].includes(event.event_name);
}
/**
* Type guard to check if event is a call event
*/
function isCallEvent(event) {
return [
WebhookEventName.OA_CALL_USER,
WebhookEventName.USER_CALL_OA,
].includes(event.event_name);
}
/**
* Type guard to check if event is a template event
*/
function isTemplateEvent(event) {
return event.event_name === WebhookEventName.OA_SEND_TEMPLATE;
}
/**
* Type guard to check if event is a business card event
*/
function isBusinessCardEvent(event) {
return event.event_name === WebhookEventName.USER_SEND_BUSINESS_CARD;
}
/**
* Type guard to check if event is a feedback event
*/
function isFeedbackEvent(event) {
return event.event_name === WebhookEventName.USER_FEEDBACK;
}
/**
* Type guard to check if event is a ZNS event
*/
function isZNSEvent(event) {
return [
WebhookEventName.CHANGE_OA_DAILY_QUOTA,
WebhookEventName.CHANGE_OA_TEMPLATE_TAGS,
WebhookEventName.CHANGE_TEMPLATE_QUALITY,
WebhookEventName.CHANGE_TEMPLATE_QUOTA,
WebhookEventName.CHANGE_TEMPLATE_STATUS,
WebhookEventName.EVENT_JOURNEY_TIME_OUT,
WebhookEventName.EVENT_JOURNEY_ACKNOWLEDGED,
WebhookEventName.ZNS_USER_RECEIVED_MESSAGE,
].includes(event.event_name);
}
/**
* Type guard to check if event is a group event
*/
function isGroupEvent(event) {
return [
WebhookEventName.CREATE_GROUP,
WebhookEventName.USER_JOIN_GROUP,
WebhookEventName.USER_REQUEST_JOIN_GROUP,
WebhookEventName.REACT_REQUEST_JOIN_GROUP,
WebhookEventName.REJECT_REQUEST_JOIN_GROUP,
WebhookEventName.ADD_GROUP_ADMIN,
WebhookEventName.REMOVE_GROUP_ADMIN,
WebhookEventName.UPDATE_GROUP_INFO,
WebhookEventName.USER_OUT_GROUP,
WebhookEventName.OA_SEND_GROUP_TEXT,
WebhookEventName.OA_SEND_GROUP_IMAGE,
WebhookEventName.OA_SEND_GROUP_LINK,
WebhookEventName.OA_SEND_GROUP_AUDIO,
WebhookEventName.OA_SEND_GROUP_LOCATION,
WebhookEventName.OA_SEND_GROUP_VIDEO,
WebhookEventName.OA_SEND_GROUP_BUSINESS_CARD,
WebhookEventName.OA_SEND_GROUP_STICKER,
WebhookEventName.OA_SEND_GROUP_GIF,
WebhookEventName.OA_SEND_GROUP_FILE,
WebhookEventName.USER_SEND_GROUP_TEXT,
WebhookEventName.USER_SEND_GROUP_LINK,
WebhookEventName.USER_SEND_GROUP_AUDIO,
WebhookEventName.USER_SEND_GROUP_LOCATION,
WebhookEventName.USER_SEND_GROUP_VIDEO,
WebhookEventName.USER_SEND_GROUP_BUSINESS_CARD,
WebhookEventName.USER_SEND_GROUP_STICKER,
WebhookEventName.USER_SEND_GROUP_GIF,
WebhookEventName.USER_SEND_GROUP_FILE,
].includes(event.event_name);
}
/**
* Type guard to check if event is a journey event
*/
function isJourneyEvent(event) {
return [
WebhookEventName.EVENT_JOURNEY_TIME_OUT,
WebhookEventName.EVENT_JOURNEY_ACKNOWLEDGED,
].includes(event.event_name);
}
/**
* Type guard to check if event is a quota/template change event
*/
function isQuotaTemplateEvent(event) {
return [
WebhookEventName.CHANGE_OA_DAILY_QUOTA,
WebhookEventName.CHANGE_OA_TEMPLATE_TAGS,
WebhookEventName.CHANGE_TEMPLATE_QUALITY,
WebhookEventName.CHANGE_TEMPLATE_QUOTA,
WebhookEventName.CHANGE_TEMPLATE_STATUS,
].includes(event.event_name);
}
/**
* Type guard to check if event is a widget event
*/
function isWidgetEvent(event) {
return [
WebhookEventName.WIDGET_INTERACTION_ACCEPTED,
WebhookEventName.WIDGET_FAILED_TO_SYNC_USER_EXTERNAL_ID,
].includes(event.event_name);
}
/**
* Type guard to check if event is a system event
*/
function isSystemEvent(event) {
return [
WebhookEventName.ADD_USER_TO_TAG,
WebhookEventName.PERMISSION_REVOKED,
WebhookEventName.EXTENSION_PURCHASED,
WebhookEventName.UPDATE_USER_INFO,
].includes(event.event_name);
}
/**
* Type guard to check if event is a permission event
*/
function isPermissionEvent(event) {
return event.event_name === WebhookEventName.PERMISSION_REVOKED;
}
/**
* Type guard to check if event is an extension event
*/
function isExtensionEvent(event) {
return event.event_name === WebhookEventName.EXTENSION_PURCHASED;
}
/**
* Type guard to check if event is an update user info event
*/
function isUpdateUserInfoEvent(event) {
return event.event_name === WebhookEventName.UPDATE_USER_INFO;
}
/**
* Type guard to check if event is a reaction event
*/
function isReactionEvent(event) {
return [
WebhookEventName.USER_REACTED_MESSAGE,
WebhookEventName.OA_REACTED_MESSAGE,
].includes(event.event_name);
}
/**
* Type guard to check if event is a consent event
*/
function isConsentEvent(event) {
return [
WebhookEventName.OA_SEND_CONSENT,
WebhookEventName.USER_REPLY_CONSENT,
].includes(event.event_name);
}
/**
* Type guard to check if message has attachments
*/
function hasAttachments(message) {
return ("attachments" in message &&
Array.isArray(message.attachments));
}
// ==================== MESSAGE DIRECTION & TARGET TYPE GUARDS ====================
/**
* Type guard to check if event is a user message (from individual user to OA)
*/
function isUserMessageEvent(event) {
return [
WebhookEventName.USER_SEND_LOCATION,
WebhookEventName.USER_SEND_IMAGE,
WebhookEventName.USER_SEND_LINK,
WebhookEventName.USER_SEND_TEXT,
WebhookEventName.USER_SEND_STICKER,
WebhookEventName.USER_SEND_GIF,
WebhookEventName.USER_SEND_AUDIO,
WebhookEventName.USER_SEND_VIDEO,
WebhookEventName.USER_SEND_FILE,
WebhookEventName.USER_RECEIVED_MESSAGE,
WebhookEventName.USER_SEEN_MESSAGE,
WebhookEventName.USER_SEND_BUSINESS_CARD,
].includes(event.event_name);
}
/**
* Type guard to check if event is a group message (from user in group)
*/
function isGroupMessageEvent(event) {
return [
WebhookEventName.USER_SEND_GROUP_TEXT,
WebhookEventName.USER_SEND_GROUP_LINK,
WebhookEventName.USER_SEND_GROUP_AUDIO,
WebhookEventName.USER_SEND_GROUP_LOCATION,
WebhookEventName.USER_SEND_GROUP_VIDEO,
WebhookEventName.USER_SEND_GROUP_BUSINESS_CARD,
WebhookEventName.USER_SEND_GROUP_STICKER,
WebhookEventName.USER_SEND_GROUP_GIF,
WebhookEventName.USER_SEND_GROUP_FILE,
].includes(event.event_name);
}
/**
* Type guard to check if event is OA sending message to individual user
*/
function isOAToUserMessageEvent(event) {
return [
WebhookEventName.OA_SEND_TEXT,
WebhookEventName.OA_SEND_IMAGE,
WebhookEventName.OA_SEND_GIF,
WebhookEventName.OA_SEND_LIST,
WebhookEventName.OA_SEND_FILE,
WebhookEventName.OA_SEND_STICKER,
WebhookEventName.OA_SEND_TEMPLATE,
].includes(event.event_name);
}
/**
* Type guard to check if event is OA sending message to group
*/
function isOAToGroupMessageEvent(event) {
return [
WebhookEventName.OA_SEND_GROUP_TEXT,
WebhookEventName.OA_SEND_GROUP_IMAGE,
WebhookEventName.OA_SEND_GROUP_LINK,
WebhookEventName.OA_SEND_GROUP_AUDIO,
WebhookEventName.OA_SEND_GROUP_LOCATION,
WebhookEventName.OA_SEND_GROUP_VIDEO,
WebhookEventName.OA_SEND_GROUP_BUSINESS_CARD,
WebhookEventName.OA_SEND_GROUP_STICKER,
WebhookEventName.OA_SEND_GROUP_GIF,
WebhookEventName.OA_SEND_GROUP_FILE,
].includes(event.event_name);
}
/**
* Helper function to get message direction and target type
*/
function getMessageDirection(event) {
if (isUserMessageEvent(event)) {
return {
direction: 'incoming',
target: 'user',
description: 'Tin nhắn từ người dùng cá nhân gửi tới OA'
};
}
if (isGroupMessageEvent(event)) {
return {
direction: 'incoming',
target: 'group',
description: 'Tin nhắn từ người dùng trong group'
};
}
if (isOAToUserMessageEvent(event)) {
return {
direction: 'outgoing',
target: 'user',
description: 'Tin nhắn từ OA gửi tới người dùng cá nhân'
};
}
if (isOAToGroupMessageEvent(event)) {
return {
direction: 'outgoing',
target: 'group',
description: 'Tin nhắn từ OA gửi tới group'
};
}
return {
direction: 'unknown',
target: 'unknown',
description: 'Loại sự kiện không xác định'
};
}
//# sourceMappingURL=webhook.js.map