{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/gateway/channels/base.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Channel Base - Base class and interfaces for channel adapters\n *\n * Channel adapters handle communication with specific messaging platforms\n * (Telegram, Discord, Slack, etc.)\n */\n\nimport type { ChannelScope, InboundMessage, OutboundMessage, SenderInfo } from \"../types/index.js\";\n\n/** Channel adapter interface */\nexport interface ChannelAdapter {\n\t/** Channel type identifier */\n\treadonly channelType: string;\n\n\t/** Initialize the adapter */\n\tinitialize(): Promise<void>;\n\n\t/** Shutdown the adapter */\n\tshutdown(): Promise<void>;\n\n\t/** Send a message to the channel */\n\tsend(message: OutboundMessage): Promise<void>;\n\n\t/** Get channel profile/info */\n\tgetProfile(): Promise<ChannelProfile>;\n\n\t/** Check if adapter is connected */\n\tisConnected(): boolean;\n\n\t/** Set message handler */\n\tonMessage(handler: (message: InboundMessage) => void): void;\n\n\t/** Set error handler */\n\tonError(handler: (error: Error) => void): void;\n}\n\n/** Channel monitor interface (for webhook-based channels) */\nexport interface ChannelMonitor {\n\t/** Start monitoring */\n\tstart(): Promise<void>;\n\n\t/** Stop monitoring */\n\tstop(): Promise<void>;\n\n\t/** Get webhook URL (if applicable) */\n\tgetWebhookUrl?(): string;\n\n\t/** Handle incoming webhook payload */\n\thandleWebhook?(payload: unknown): Promise<void>;\n}\n\n/** Channel configuration */\nexport interface ChannelConfig {\n\t/** Channel type */\n\ttype: string;\n\t/** Channel name */\n\tname: string;\n\t/** Enabled */\n\tenabled: boolean;\n\t/** Channel-specific configuration */\n\tconfig: Record<string, unknown>;\n\t/** Access control */\n\taccess: {\n\t\tdmPolicy: \"pairing\" | \"allowlist\" | \"open\";\n\t\tdmAllowlist?: string[];\n\t\tgroupPolicy: \"mention\" | \"allowlist\" | \"open\";\n\t\tgroupAllowlist?: string[];\n\t};\n}\n\n/** Channel profile */\nexport interface ChannelProfile {\n\t/** Channel type */\n\ttype: string;\n\t/** Bot/app ID */\n\tid: string;\n\t/** Bot/app name */\n\tname: string;\n\t/** Username/handle */\n\tusername?: string;\n\t/** Avatar URL */\n\tavatar?: string;\n\t/** Connected status */\n\tconnected: boolean;\n\t/** Capabilities */\n\tcapabilities: ChannelCapabilities;\n}\n\n/** Channel capabilities */\nexport interface ChannelCapabilities {\n\t/** Supports text messages */\n\ttext: boolean;\n\t/** Supports images */\n\timages: boolean;\n\t/** Supports files */\n\tfiles: boolean;\n\t/** Supports reactions */\n\treactions: boolean;\n\t/** Supports threads */\n\tthreads: boolean;\n\t/** Supports editing messages */\n\teditMessages: boolean;\n\t/** Supports deleting messages */\n\tdeleteMessages: boolean;\n\t/** Supports typing indicators */\n\ttyping: boolean;\n\t/** Supports cards/buttons */\n\tcards: boolean;\n\t/** Supports voice/audio */\n\tvoice: boolean;\n\t/** Maximum message length */\n\tmaxMessageLength: number;\n\t/** Maximum file size */\n\tmaxFileSize: number;\n}\n\n/** Channel scope types */\nexport type { ChannelScope };\n\n/** Base channel adapter implementation */\nexport abstract class BaseChannelAdapter implements ChannelAdapter {\n\tabstract readonly channelType: string;\n\n\tprotected config: ChannelConfig;\n\tprotected connected = false;\n\tprotected messageHandler?: (message: InboundMessage) => void;\n\tprotected errorHandler?: (error: Error) => void;\n\n\tconstructor(config: ChannelConfig) {\n\t\tthis.config = config;\n\t}\n\n\tabstract initialize(): Promise<void>;\n\tabstract shutdown(): Promise<void>;\n\tabstract send(message: OutboundMessage): Promise<void>;\n\tabstract getProfile(): Promise<ChannelProfile>;\n\n\tisConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\tonMessage(handler: (message: InboundMessage) => void): void {\n\t\tthis.messageHandler = handler;\n\t}\n\n\tonError(handler: (error: Error) => void): void {\n\t\tthis.errorHandler = handler;\n\t}\n\n\t/**\n\t * Build session key from channel and identifier\n\t */\n\tprotected buildSessionKey(agentId: string, scope: ChannelScope, identifier: string): string {\n\t\treturn `agent:${agentId}:${this.channelType}:${scope}:${identifier}`;\n\t}\n\n\t/**\n\t * Create inbound message\n\t */\n\tprotected createInboundMessage(params: {\n\t\tid: string;\n\t\tagentId: string;\n\t\tscope: ChannelScope;\n\t\tidentifier: string;\n\t\tsender: SenderInfo;\n\t\tcontent:\n\t\t\t| { type: \"text\"; text: string }\n\t\t\t| { type: \"image\"; url: string }\n\t\t\t| { type: \"file\"; url: string; name: string }\n\t\t\t| { type: \"command\"; command: string; args: string[] };\n\t\treplyTo?: string;\n\t\tthreadId?: string;\n\t}): InboundMessage {\n\t\tconst sessionKey = this.buildSessionKey(params.agentId, params.scope, params.identifier);\n\n\t\treturn {\n\t\t\tid: params.id,\n\t\t\tsessionKey,\n\t\t\tagentId: params.agentId,\n\t\t\tchannel: this.channelType,\n\t\t\tsender: params.sender,\n\t\t\tcontent: params.content,\n\t\t\ttimestamp: new Date(),\n\t\t\treplyTo: params.replyTo,\n\t\t\tthreadId: params.threadId,\n\t\t};\n\t}\n\n\t/**\n\t * Emit message to handler\n\t */\n\tprotected emitMessage(message: InboundMessage): void {\n\t\tif (this.messageHandler) {\n\t\t\tthis.messageHandler(message);\n\t\t}\n\t}\n\n\t/**\n\t * Emit error to handler\n\t */\n\tprotected emitError(error: Error): void {\n\t\tif (this.errorHandler) {\n\t\t\tthis.errorHandler(error);\n\t\t}\n\t}\n\n\t/**\n\t * Chunk text for platforms with message length limits\n\t */\n\tprotected chunkText(text: string, maxLength: number): string[] {\n\t\tconst chunks: string[] = [];\n\t\tlet remaining = text;\n\n\t\twhile (remaining.length > 0) {\n\t\t\tif (remaining.length <= maxLength) {\n\t\t\t\tchunks.push(remaining);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Find good break point\n\t\t\tlet breakPoint = remaining.lastIndexOf(\"\\n\\n\", maxLength);\n\t\t\tif (breakPoint < 0) breakPoint = remaining.lastIndexOf(\"\\n\", maxLength);\n\t\t\tif (breakPoint < 0) breakPoint = remaining.lastIndexOf(\" \", maxLength);\n\t\t\tif (breakPoint < 0) breakPoint = maxLength;\n\n\t\t\tchunks.push(remaining.substring(0, breakPoint));\n\t\t\tremaining = remaining.substring(breakPoint).trim();\n\t\t}\n\n\t\treturn chunks;\n\t}\n}\n\n/** Channel registry */\nexport class ChannelRegistry {\n\tprivate adapters = new Map<string, new (config: ChannelConfig) => ChannelAdapter>();\n\n\t/** Register a channel adapter */\n\tregister(type: string, adapter: new (config: ChannelConfig) => ChannelAdapter): void {\n\t\tthis.adapters.set(type, adapter);\n\t}\n\n\t/** Create adapter instance */\n\tcreate(type: string, config: ChannelConfig): ChannelAdapter {\n\t\tconst Adapter = this.adapters.get(type);\n\t\tif (!Adapter) {\n\t\t\tthrow new Error(`Unknown channel type: ${type}`);\n\t\t}\n\t\treturn new Adapter(config);\n\t}\n\n\t/** Check if channel type is registered */\n\thas(type: string): boolean {\n\t\treturn this.adapters.has(type);\n\t}\n\n\t/** Get all registered channel types */\n\tgetTypes(): string[] {\n\t\treturn Array.from(this.adapters.keys());\n\t}\n}\n\n/** Global channel registry instance */\nexport const globalChannelRegistry = new ChannelRegistry();\n"]}