import type * as lark from '@larksuiteoapi/node-sdk'; /** * Where an outbound message goes, and how it threads back to its trigger. * * A target carries only what the platform needs to place a message: which * chat it lands in, and which existing message it threads under. Mentions are * written inline in the message body using Feishu's own `` syntax, so * they are not a separate addressing concern. */ export interface OutboundTarget { /** Destination chat_id — required. Today: the inbound `source_chat_id`. */ chatId: string; /** * message_id to reply under, so a group reply threads beneath the original * question. Maps from the inbound `source_message_id`. Optional: when unset, * the transport sends a fresh top-level message. */ replyToMessageId?: string; } export interface MessageSendResponse { code?: number; msg?: string; /** * `chat_id`/`thread_id` are present on every `im/v1/messages` create/reply * response the platform sends, alongside `message_id`. */ data?: { message_id?: string; chat_id?: string; thread_id?: string; }; error?: { log_id?: string; }; } /** * Send one already-serialized card as an `interactive` message. * * Create versus reply is the only addressing distinction the platform makes * here, so it is the only branch: an AbortSignal rides along with either. * * A rejection carrying a Feishu response envelope, and a resolved body with a * nonzero business code, are both failed sends. Both are rethrown as one * description naming the operation and the platform's own status / code / * reason / log id, because everything above this boundary — channel logs, * MCP results, Core's failure text — projects an error to its message alone. * Errors without such an envelope (cancellation, network) keep their identity. */ export declare function sendFeishuMessage(client: lark.Client, target: OutboundTarget, content: string, signal?: AbortSignal): Promise; //# sourceMappingURL=outbound-message.d.ts.map