UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

213 lines 7.84 kB
import "../types.openclaw-BdCLfP4c.js"; import "../types-DeuBjaEd.js"; import "../index-BBhxbdfT.js"; import { r as FinalizedMsgContext } from "../templating-CpgmHvb9.js"; import { Z as PluginHookInboundClaimEvent, at as MessageHookMediaFact, n as initializeGlobalHookRunner, nt as PluginHookMessageReceivedEvent, r as resetGlobalHookRunner, rt as PluginHookMessageSentEvent, tt as PluginHookMessageContext } from "../hook-runner-global-Bj0SlbYF.js"; import { t as DiagnosticTraceContext } from "../diagnostic-trace-context-DIVmGNEt.js"; import { n as InternalHookEventType, r as InternalHookHandler, t as InternalHookEvent } from "../internal-hook-types-BwvTZGLB.js"; //#region src/hooks/fire-and-forget.d.ts /** Queue limits for bounded fire-and-forget hook execution. */ type FireAndForgetBoundedHookOptions = { maxConcurrency?: number; maxQueue?: number; timeoutMs?: number; }; /** Run a hook promise without awaiting it, logging rejection safely. */ export declare function fireAndForgetHook(task: Promise<unknown>, label: string, logger?: (message: string) => void): void; /** Queue a fire-and-forget hook with bounded concurrency, queue depth, and timeout logs. */ export declare function fireAndForgetBoundedHook(task: () => Promise<unknown>, label: string, logger?: (message: string) => void, options?: FireAndForgetBoundedHookOptions): void; //#endregion //#region src/hooks/internal-hooks.d.ts type MessageReceivedHookContext = { /** Sender identifier (e.g., phone number, user ID) */ from: string; /** Message content */ content: string; /** Unix timestamp when the message was received */ timestamp?: number; /** Channel identifier (for example "chat" or "support-chat") */ channelId: string; /** Provider account ID for multi-account setups */ accountId?: string; /** Conversation/chat ID */ conversationId?: string; /** Message ID from the provider */ messageId?: string; /** Staged, locally usable attachments in stable source order. */ media?: MessageHookMediaFact[]; /** Original attachment facts when local staging has not completed yet. */ originalMedia?: MessageHookMediaFact[]; /** True when originalMedia is present but media is withheld pending staging. */ mediaStagingPending?: boolean; /** Additional provider-specific metadata */ metadata?: Record<string, unknown>; }; type MessageSentHookContext = { /** Recipient identifier */ to: string; /** Message content */ content: string; /** Whether the message was sent successfully */ success: boolean; /** Error message if sending failed */ error?: string; /** Channel identifier (for example "chat" or "support-chat") */ channelId: string; /** Provider account ID for multi-account setups */ accountId?: string; /** Conversation/chat ID */ conversationId?: string; /** Message ID returned by the provider */ messageId?: string; /** Whether this message was sent in a group/channel context */ isGroup?: boolean; /** Group or channel identifier, if applicable */ groupId?: string; }; /** * Register a hook handler for a specific event type or event:action combination * * @param eventKey - Event type (e.g., 'command') or specific action (e.g., 'command:new') * @param handler - Function to call when the event is triggered * * @example * ```ts * // Listen to all command events * registerInternalHook('command', async (event) => { * console.log('Command:', event.action); * }); * * // Listen only to /new commands * registerInternalHook('command:new', async (event) => { * await saveSessionToMemory(event); * }); * ``` */ export declare function registerInternalHook(eventKey: string, handler: InternalHookHandler): void; /** * Clear all registered hooks (useful for testing) */ export declare function clearInternalHooks(): void; /** * Trigger a hook event * * Calls all handlers registered for: * 1. The general event type (e.g., 'command') * 2. The specific event:action combination (e.g., 'command:new') * * Handlers are called in registration order. Errors are caught and logged * but don't prevent other handlers from running. * * @param event - The event to trigger */ export declare function triggerInternalHook(event: InternalHookEvent): Promise<void>; /** * Create a hook event with common fields filled in * * @param type - The event type * @param action - The action within that type * @param sessionKey - The session key * @param context - Additional context */ export declare function createInternalHookEvent(type: InternalHookEventType, action: string, sessionKey: string, context?: Record<string, unknown>): InternalHookEvent; //#endregion //#region src/hooks/message-hook-mappers.d.ts type CanonicalInboundMessageHookContext = { from: string; to?: string; content: string; body?: string; bodyForAgent?: string; transcript?: string; timestamp?: number; channelId: string; accountId?: string; conversationId?: string; sessionKey?: string; agentId?: string; runId?: string; messageId?: string; senderId?: string; senderName?: string; senderUsername?: string; senderE164?: string; replyToId?: string; replyToIdFull?: string; replyToBody?: string; replyToSender?: string; replyToIsQuote?: boolean; provider?: string; surface?: string; threadId?: string | number; threadParentId?: string | number; media?: MessageHookMediaFact[]; originalMedia?: MessageHookMediaFact[]; mediaPath?: string; mediaUrl?: string; mediaType?: string; mediaPaths?: string[]; mediaUrls?: string[]; mediaTypes?: string[]; mediaRemoteHost?: string; mediaStagingPending?: boolean; originalMediaPath?: string; originalMediaUrl?: string; originalMediaType?: string; originalMediaPaths?: string[]; originalMediaUrls?: string[]; originalMediaTypes?: string[]; originatingChannel?: string; originatingTo?: string; guildId?: string; channelName?: string; isGroup: boolean; groupId?: string; topicName?: string; location?: PluginHookInboundClaimEvent["location"]; providerUpdate?: PluginHookInboundClaimEvent["providerUpdate"]; trace?: DiagnosticTraceContext; callDepth?: number; }; type CanonicalSentMessageHookContext = { to: string; content: string; success: boolean; error?: string; channelId: string; accountId?: string; conversationId?: string; sessionKey?: string; runId?: string; messageId?: string; trace?: DiagnosticTraceContext; callDepth?: number; isGroup?: boolean; groupId?: string; }; export declare function deriveInboundMessageHookContext(ctx: FinalizedMsgContext, overrides?: { content?: string; messageId?: string; }): CanonicalInboundMessageHookContext; export declare function buildCanonicalSentMessageHookContext(params: { to: string; content: string; success: boolean; error?: string; channelId: string; accountId?: string; conversationId?: string; sessionKey?: string; runId?: string; messageId?: string; trace?: DiagnosticTraceContext; callDepth?: number; isGroup?: boolean; groupId?: string; }): CanonicalSentMessageHookContext; export declare function toPluginMessageContext(canonical: CanonicalInboundMessageHookContext | CanonicalSentMessageHookContext): PluginHookMessageContext; export declare function toPluginMessageReceivedEvent(canonical: CanonicalInboundMessageHookContext): PluginHookMessageReceivedEvent; export declare function toPluginMessageSentEvent(canonical: CanonicalSentMessageHookContext): PluginHookMessageSentEvent; export declare function toInternalMessageReceivedContext(canonical: CanonicalInboundMessageHookContext): MessageReceivedHookContext; export declare function toInternalMessageSentContext(canonical: CanonicalSentMessageHookContext): MessageSentHookContext; //#endregion export { initializeGlobalHookRunner, resetGlobalHookRunner };