@larksuite/openclaw-lark 2026.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +10 -0
- package/README.md +283 -0
- package/index.d.ts +37 -0
- package/index.d.ts.map +1 -0
- package/index.js +119 -0
- package/index.js.map +1 -0
- package/openclaw.plugin.json +10 -0
- package/package.json +47 -0
- package/skills/feishu-bitable/SKILL.md +248 -0
- package/skills/feishu-bitable/references/examples.md +813 -0
- package/skills/feishu-bitable/references/field-properties.md +763 -0
- package/skills/feishu-bitable/references/record-values.md +911 -0
- package/skills/feishu-calendar/SKILL.md +244 -0
- package/skills/feishu-channel-rules/SKILL.md +18 -0
- package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
- package/skills/feishu-create-doc/SKILL.md +719 -0
- package/skills/feishu-fetch-doc/SKILL.md +93 -0
- package/skills/feishu-im-read/SKILL.md +163 -0
- package/skills/feishu-task/SKILL.md +293 -0
- package/skills/feishu-troubleshoot/SKILL.md +70 -0
- package/skills/feishu-update-doc/SKILL.md +285 -0
- package/src/card/builder.d.ts +100 -0
- package/src/card/builder.d.ts.map +1 -0
- package/src/card/builder.js +381 -0
- package/src/card/builder.js.map +1 -0
- package/src/card/cardkit.d.ts +91 -0
- package/src/card/cardkit.d.ts.map +1 -0
- package/src/card/cardkit.js +182 -0
- package/src/card/cardkit.js.map +1 -0
- package/src/card/flush-controller.d.ts +46 -0
- package/src/card/flush-controller.d.ts.map +1 -0
- package/src/card/flush-controller.js +135 -0
- package/src/card/flush-controller.js.map +1 -0
- package/src/card/markdown-style.d.ts +17 -0
- package/src/card/markdown-style.d.ts.map +1 -0
- package/src/card/markdown-style.js +98 -0
- package/src/card/markdown-style.js.map +1 -0
- package/src/card/reply-dispatcher-types.d.ts +121 -0
- package/src/card/reply-dispatcher-types.d.ts.map +1 -0
- package/src/card/reply-dispatcher-types.js +58 -0
- package/src/card/reply-dispatcher-types.js.map +1 -0
- package/src/card/reply-dispatcher.d.ts +16 -0
- package/src/card/reply-dispatcher.d.ts.map +1 -0
- package/src/card/reply-dispatcher.js +293 -0
- package/src/card/reply-dispatcher.js.map +1 -0
- package/src/card/reply-mode.d.ts +39 -0
- package/src/card/reply-mode.d.ts.map +1 -0
- package/src/card/reply-mode.js +66 -0
- package/src/card/reply-mode.js.map +1 -0
- package/src/card/streaming-card-controller.d.ts +88 -0
- package/src/card/streaming-card-controller.d.ts.map +1 -0
- package/src/card/streaming-card-controller.js +717 -0
- package/src/card/streaming-card-controller.js.map +1 -0
- package/src/card/unavailable-guard.d.ts +36 -0
- package/src/card/unavailable-guard.d.ts.map +1 -0
- package/src/card/unavailable-guard.js +84 -0
- package/src/card/unavailable-guard.js.map +1 -0
- package/src/channel/abort-detect.d.ts +35 -0
- package/src/channel/abort-detect.d.ts.map +1 -0
- package/src/channel/abort-detect.js +125 -0
- package/src/channel/abort-detect.js.map +1 -0
- package/src/channel/chat-queue.d.ts +42 -0
- package/src/channel/chat-queue.d.ts.map +1 -0
- package/src/channel/chat-queue.js +59 -0
- package/src/channel/chat-queue.js.map +1 -0
- package/src/channel/config-adapter.d.ts +24 -0
- package/src/channel/config-adapter.d.ts.map +1 -0
- package/src/channel/config-adapter.js +102 -0
- package/src/channel/config-adapter.js.map +1 -0
- package/src/channel/directory.d.ts +58 -0
- package/src/channel/directory.d.ts.map +1 -0
- package/src/channel/directory.js +192 -0
- package/src/channel/directory.js.map +1 -0
- package/src/channel/event-handlers.d.ts +16 -0
- package/src/channel/event-handlers.d.ts.map +1 -0
- package/src/channel/event-handlers.js +222 -0
- package/src/channel/event-handlers.js.map +1 -0
- package/src/channel/monitor.d.ts +18 -0
- package/src/channel/monitor.d.ts.map +1 -0
- package/src/channel/monitor.js +128 -0
- package/src/channel/monitor.js.map +1 -0
- package/src/channel/onboarding-config.d.ts +18 -0
- package/src/channel/onboarding-config.d.ts.map +1 -0
- package/src/channel/onboarding-config.js +89 -0
- package/src/channel/onboarding-config.js.map +1 -0
- package/src/channel/onboarding-migrate.d.ts +26 -0
- package/src/channel/onboarding-migrate.d.ts.map +1 -0
- package/src/channel/onboarding-migrate.js +68 -0
- package/src/channel/onboarding-migrate.js.map +1 -0
- package/src/channel/onboarding.d.ts +13 -0
- package/src/channel/onboarding.d.ts.map +1 -0
- package/src/channel/onboarding.js +297 -0
- package/src/channel/onboarding.js.map +1 -0
- package/src/channel/plugin.d.ts +14 -0
- package/src/channel/plugin.d.ts.map +1 -0
- package/src/channel/plugin.js +279 -0
- package/src/channel/plugin.js.map +1 -0
- package/src/channel/probe.d.ts +15 -0
- package/src/channel/probe.d.ts.map +1 -0
- package/src/channel/probe.js +22 -0
- package/src/channel/probe.js.map +1 -0
- package/src/channel/types.d.ts +37 -0
- package/src/channel/types.d.ts.map +1 -0
- package/src/channel/types.js +8 -0
- package/src/channel/types.js.map +1 -0
- package/src/commands/auth.d.ts +16 -0
- package/src/commands/auth.d.ts.map +1 -0
- package/src/commands/auth.js +85 -0
- package/src/commands/auth.js.map +1 -0
- package/src/commands/diagnose.d.ts +70 -0
- package/src/commands/diagnose.d.ts.map +1 -0
- package/src/commands/diagnose.js +808 -0
- package/src/commands/diagnose.js.map +1 -0
- package/src/commands/doctor.d.ts +18 -0
- package/src/commands/doctor.d.ts.map +1 -0
- package/src/commands/doctor.js +439 -0
- package/src/commands/doctor.js.map +1 -0
- package/src/commands/index.d.ts +9 -0
- package/src/commands/index.d.ts.map +1 -0
- package/src/commands/index.js +208 -0
- package/src/commands/index.js.map +1 -0
- package/src/core/accounts.d.ts +38 -0
- package/src/core/accounts.d.ts.map +1 -0
- package/src/core/accounts.js +179 -0
- package/src/core/accounts.js.map +1 -0
- package/src/core/agent-config.d.ts +101 -0
- package/src/core/agent-config.d.ts.map +1 -0
- package/src/core/agent-config.js +140 -0
- package/src/core/agent-config.js.map +1 -0
- package/src/core/api-error.d.ts +49 -0
- package/src/core/api-error.d.ts.map +1 -0
- package/src/core/api-error.js +113 -0
- package/src/core/api-error.js.map +1 -0
- package/src/core/app-owner-fallback.d.ts +22 -0
- package/src/core/app-owner-fallback.d.ts.map +1 -0
- package/src/core/app-owner-fallback.js +39 -0
- package/src/core/app-owner-fallback.js.map +1 -0
- package/src/core/app-scope-checker.d.ts +88 -0
- package/src/core/app-scope-checker.d.ts.map +1 -0
- package/src/core/app-scope-checker.js +191 -0
- package/src/core/app-scope-checker.js.map +1 -0
- package/src/core/auth-errors.d.ts +143 -0
- package/src/core/auth-errors.d.ts.map +1 -0
- package/src/core/auth-errors.js +156 -0
- package/src/core/auth-errors.js.map +1 -0
- package/src/core/chat-info-cache.d.ts +58 -0
- package/src/core/chat-info-cache.d.ts.map +1 -0
- package/src/core/chat-info-cache.js +153 -0
- package/src/core/chat-info-cache.js.map +1 -0
- package/src/core/config-schema.d.ts +449 -0
- package/src/core/config-schema.d.ts.map +1 -0
- package/src/core/config-schema.js +201 -0
- package/src/core/config-schema.js.map +1 -0
- package/src/core/device-flow.d.ts +78 -0
- package/src/core/device-flow.d.ts.map +1 -0
- package/src/core/device-flow.js +213 -0
- package/src/core/device-flow.js.map +1 -0
- package/src/core/feishu-fetch.d.ts +19 -0
- package/src/core/feishu-fetch.d.ts.map +1 -0
- package/src/core/feishu-fetch.js +26 -0
- package/src/core/feishu-fetch.js.map +1 -0
- package/src/core/footer-config.d.ts +25 -0
- package/src/core/footer-config.d.ts.map +1 -0
- package/src/core/footer-config.js +40 -0
- package/src/core/footer-config.js.map +1 -0
- package/src/core/lark-client.d.ts +109 -0
- package/src/core/lark-client.d.ts.map +1 -0
- package/src/core/lark-client.js +354 -0
- package/src/core/lark-client.js.map +1 -0
- package/src/core/lark-logger.d.ts +24 -0
- package/src/core/lark-logger.d.ts.map +1 -0
- package/src/core/lark-logger.js +155 -0
- package/src/core/lark-logger.js.map +1 -0
- package/src/core/lark-ticket.d.ts +30 -0
- package/src/core/lark-ticket.d.ts.map +1 -0
- package/src/core/lark-ticket.js +36 -0
- package/src/core/lark-ticket.js.map +1 -0
- package/src/core/message-unavailable.d.ts +54 -0
- package/src/core/message-unavailable.d.ts.map +1 -0
- package/src/core/message-unavailable.js +131 -0
- package/src/core/message-unavailable.js.map +1 -0
- package/src/core/owner-policy.d.ts +32 -0
- package/src/core/owner-policy.d.ts.map +1 -0
- package/src/core/owner-policy.js +53 -0
- package/src/core/owner-policy.js.map +1 -0
- package/src/core/permission-url.d.ts +23 -0
- package/src/core/permission-url.d.ts.map +1 -0
- package/src/core/permission-url.js +73 -0
- package/src/core/permission-url.js.map +1 -0
- package/src/core/raw-request.d.ts +28 -0
- package/src/core/raw-request.d.ts.map +1 -0
- package/src/core/raw-request.js +63 -0
- package/src/core/raw-request.js.map +1 -0
- package/src/core/scope-manager.d.ts +169 -0
- package/src/core/scope-manager.d.ts.map +1 -0
- package/src/core/scope-manager.js +214 -0
- package/src/core/scope-manager.js.map +1 -0
- package/src/core/security-check.d.ts +73 -0
- package/src/core/security-check.d.ts.map +1 -0
- package/src/core/security-check.js +175 -0
- package/src/core/security-check.js.map +1 -0
- package/src/core/shutdown-hooks.d.ts +23 -0
- package/src/core/shutdown-hooks.d.ts.map +1 -0
- package/src/core/shutdown-hooks.js +57 -0
- package/src/core/shutdown-hooks.js.map +1 -0
- package/src/core/targets.d.ts +50 -0
- package/src/core/targets.d.ts.map +1 -0
- package/src/core/targets.js +128 -0
- package/src/core/targets.js.map +1 -0
- package/src/core/token-store.d.ts +55 -0
- package/src/core/token-store.d.ts.map +1 -0
- package/src/core/token-store.js +315 -0
- package/src/core/token-store.js.map +1 -0
- package/src/core/tool-client.d.ts +177 -0
- package/src/core/tool-client.d.ts.map +1 -0
- package/src/core/tool-client.js +381 -0
- package/src/core/tool-client.js.map +1 -0
- package/src/core/tool-scopes.d.ts +154 -0
- package/src/core/tool-scopes.d.ts.map +1 -0
- package/src/core/tool-scopes.js +326 -0
- package/src/core/tool-scopes.js.map +1 -0
- package/src/core/tools-config.d.ts +35 -0
- package/src/core/tools-config.d.ts.map +1 -0
- package/src/core/tools-config.js +88 -0
- package/src/core/tools-config.js.map +1 -0
- package/src/core/types.d.ts +88 -0
- package/src/core/types.d.ts.map +1 -0
- package/src/core/types.js +12 -0
- package/src/core/types.js.map +1 -0
- package/src/core/uat-client.d.ts +47 -0
- package/src/core/uat-client.d.ts.map +1 -0
- package/src/core/uat-client.js +173 -0
- package/src/core/uat-client.js.map +1 -0
- package/src/core/version.d.ts +26 -0
- package/src/core/version.d.ts.map +1 -0
- package/src/core/version.js +50 -0
- package/src/core/version.js.map +1 -0
- package/src/messaging/converters/audio.d.ts +9 -0
- package/src/messaging/converters/audio.d.ts.map +1 -0
- package/src/messaging/converters/audio.js +22 -0
- package/src/messaging/converters/audio.js.map +1 -0
- package/src/messaging/converters/calendar.d.ts +14 -0
- package/src/messaging/converters/calendar.d.ts.map +1 -0
- package/src/messaging/converters/calendar.js +51 -0
- package/src/messaging/converters/calendar.js.map +1 -0
- package/src/messaging/converters/content-converter.d.ts +42 -0
- package/src/messaging/converters/content-converter.d.ts.map +1 -0
- package/src/messaging/converters/content-converter.js +107 -0
- package/src/messaging/converters/content-converter.js.map +1 -0
- package/src/messaging/converters/file.d.ts +9 -0
- package/src/messaging/converters/file.d.ts.map +1 -0
- package/src/messaging/converters/file.js +21 -0
- package/src/messaging/converters/file.js.map +1 -0
- package/src/messaging/converters/folder.d.ts +9 -0
- package/src/messaging/converters/folder.d.ts.map +1 -0
- package/src/messaging/converters/folder.js +21 -0
- package/src/messaging/converters/folder.js.map +1 -0
- package/src/messaging/converters/hongbao.d.ts +9 -0
- package/src/messaging/converters/hongbao.d.ts.map +1 -0
- package/src/messaging/converters/hongbao.js +17 -0
- package/src/messaging/converters/hongbao.js.map +1 -0
- package/src/messaging/converters/image.d.ts +9 -0
- package/src/messaging/converters/image.d.ts.map +1 -0
- package/src/messaging/converters/image.js +19 -0
- package/src/messaging/converters/image.js.map +1 -0
- package/src/messaging/converters/index.d.ts +9 -0
- package/src/messaging/converters/index.d.ts.map +1 -0
- package/src/messaging/converters/index.js +51 -0
- package/src/messaging/converters/index.js.map +1 -0
- package/src/messaging/converters/interactive/card-converter.d.ts +77 -0
- package/src/messaging/converters/interactive/card-converter.d.ts.map +1 -0
- package/src/messaging/converters/interactive/card-converter.js +1174 -0
- package/src/messaging/converters/interactive/card-converter.js.map +1 -0
- package/src/messaging/converters/interactive/card-utils.d.ts +10 -0
- package/src/messaging/converters/interactive/card-utils.d.ts.map +1 -0
- package/src/messaging/converters/interactive/card-utils.js +43 -0
- package/src/messaging/converters/interactive/card-utils.js.map +1 -0
- package/src/messaging/converters/interactive/index.d.ts +9 -0
- package/src/messaging/converters/interactive/index.d.ts.map +1 -0
- package/src/messaging/converters/interactive/index.js +22 -0
- package/src/messaging/converters/interactive/index.js.map +1 -0
- package/src/messaging/converters/interactive/legacy.d.ts +12 -0
- package/src/messaging/converters/interactive/legacy.d.ts.map +1 -0
- package/src/messaging/converters/interactive/legacy.js +58 -0
- package/src/messaging/converters/interactive/legacy.js.map +1 -0
- package/src/messaging/converters/interactive/types.d.ts +24 -0
- package/src/messaging/converters/interactive/types.d.ts.map +1 -0
- package/src/messaging/converters/interactive/types.js +25 -0
- package/src/messaging/converters/interactive/types.js.map +1 -0
- package/src/messaging/converters/location.d.ts +9 -0
- package/src/messaging/converters/location.d.ts.map +1 -0
- package/src/messaging/converters/location.js +20 -0
- package/src/messaging/converters/location.js.map +1 -0
- package/src/messaging/converters/merge-forward.d.ts +33 -0
- package/src/messaging/converters/merge-forward.d.ts.map +1 -0
- package/src/messaging/converters/merge-forward.js +226 -0
- package/src/messaging/converters/merge-forward.js.map +1 -0
- package/src/messaging/converters/post.d.ts +12 -0
- package/src/messaging/converters/post.d.ts.map +1 -0
- package/src/messaging/converters/post.js +136 -0
- package/src/messaging/converters/post.js.map +1 -0
- package/src/messaging/converters/share.d.ts +10 -0
- package/src/messaging/converters/share.d.ts.map +1 -0
- package/src/messaging/converters/share.js +24 -0
- package/src/messaging/converters/share.js.map +1 -0
- package/src/messaging/converters/sticker.d.ts +9 -0
- package/src/messaging/converters/sticker.d.ts.map +1 -0
- package/src/messaging/converters/sticker.js +19 -0
- package/src/messaging/converters/sticker.js.map +1 -0
- package/src/messaging/converters/system.d.ts +13 -0
- package/src/messaging/converters/system.d.ts.map +1 -0
- package/src/messaging/converters/system.js +33 -0
- package/src/messaging/converters/system.js.map +1 -0
- package/src/messaging/converters/text.d.ts +9 -0
- package/src/messaging/converters/text.d.ts.map +1 -0
- package/src/messaging/converters/text.js +15 -0
- package/src/messaging/converters/text.js.map +1 -0
- package/src/messaging/converters/todo.d.ts +9 -0
- package/src/messaging/converters/todo.d.ts.map +1 -0
- package/src/messaging/converters/todo.js +42 -0
- package/src/messaging/converters/todo.js.map +1 -0
- package/src/messaging/converters/types.d.ts +108 -0
- package/src/messaging/converters/types.d.ts.map +1 -0
- package/src/messaging/converters/types.js +8 -0
- package/src/messaging/converters/types.js.map +1 -0
- package/src/messaging/converters/unknown.d.ts +9 -0
- package/src/messaging/converters/unknown.d.ts.map +1 -0
- package/src/messaging/converters/unknown.js +17 -0
- package/src/messaging/converters/unknown.js.map +1 -0
- package/src/messaging/converters/utils.d.ts +23 -0
- package/src/messaging/converters/utils.d.ts.map +1 -0
- package/src/messaging/converters/utils.js +52 -0
- package/src/messaging/converters/utils.js.map +1 -0
- package/src/messaging/converters/video-chat.d.ts +9 -0
- package/src/messaging/converters/video-chat.d.ts.map +1 -0
- package/src/messaging/converters/video-chat.js +24 -0
- package/src/messaging/converters/video-chat.js.map +1 -0
- package/src/messaging/converters/video.d.ts +9 -0
- package/src/messaging/converters/video.d.ts.map +1 -0
- package/src/messaging/converters/video.js +33 -0
- package/src/messaging/converters/video.js.map +1 -0
- package/src/messaging/converters/vote.d.ts +9 -0
- package/src/messaging/converters/vote.d.ts.map +1 -0
- package/src/messaging/converters/vote.js +25 -0
- package/src/messaging/converters/vote.js.map +1 -0
- package/src/messaging/inbound/dedup.d.ts +60 -0
- package/src/messaging/inbound/dedup.d.ts.map +1 -0
- package/src/messaging/inbound/dedup.js +117 -0
- package/src/messaging/inbound/dedup.js.map +1 -0
- package/src/messaging/inbound/dispatch-builders.d.ts +84 -0
- package/src/messaging/inbound/dispatch-builders.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch-builders.js +153 -0
- package/src/messaging/inbound/dispatch-builders.js.map +1 -0
- package/src/messaging/inbound/dispatch-commands.d.ts +28 -0
- package/src/messaging/inbound/dispatch-commands.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch-commands.js +113 -0
- package/src/messaging/inbound/dispatch-commands.js.map +1 -0
- package/src/messaging/inbound/dispatch-context.d.ts +68 -0
- package/src/messaging/inbound/dispatch-context.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch-context.js +137 -0
- package/src/messaging/inbound/dispatch-context.js.map +1 -0
- package/src/messaging/inbound/dispatch.d.ts +48 -0
- package/src/messaging/inbound/dispatch.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch.js +193 -0
- package/src/messaging/inbound/dispatch.js.map +1 -0
- package/src/messaging/inbound/enrich.d.ts +103 -0
- package/src/messaging/inbound/enrich.d.ts.map +1 -0
- package/src/messaging/inbound/enrich.js +228 -0
- package/src/messaging/inbound/enrich.js.map +1 -0
- package/src/messaging/inbound/gate-effects.d.ts +24 -0
- package/src/messaging/inbound/gate-effects.d.ts.map +1 -0
- package/src/messaging/inbound/gate-effects.js +44 -0
- package/src/messaging/inbound/gate-effects.js.map +1 -0
- package/src/messaging/inbound/gate.d.ts +61 -0
- package/src/messaging/inbound/gate.d.ts.map +1 -0
- package/src/messaging/inbound/gate.js +234 -0
- package/src/messaging/inbound/gate.js.map +1 -0
- package/src/messaging/inbound/handler.d.ts +36 -0
- package/src/messaging/inbound/handler.d.ts.map +1 -0
- package/src/messaging/inbound/handler.js +174 -0
- package/src/messaging/inbound/handler.js.map +1 -0
- package/src/messaging/inbound/media-resolver.d.ts +33 -0
- package/src/messaging/inbound/media-resolver.d.ts.map +1 -0
- package/src/messaging/inbound/media-resolver.js +88 -0
- package/src/messaging/inbound/media-resolver.js.map +1 -0
- package/src/messaging/inbound/mention.d.ts +40 -0
- package/src/messaging/inbound/mention.d.ts.map +1 -0
- package/src/messaging/inbound/mention.js +82 -0
- package/src/messaging/inbound/mention.js.map +1 -0
- package/src/messaging/inbound/parse-io.d.ts +51 -0
- package/src/messaging/inbound/parse-io.d.ts.map +1 -0
- package/src/messaging/inbound/parse-io.js +82 -0
- package/src/messaging/inbound/parse-io.js.map +1 -0
- package/src/messaging/inbound/parse.d.ts +29 -0
- package/src/messaging/inbound/parse.d.ts.map +1 -0
- package/src/messaging/inbound/parse.js +107 -0
- package/src/messaging/inbound/parse.js.map +1 -0
- package/src/messaging/inbound/permission.d.ts +18 -0
- package/src/messaging/inbound/permission.d.ts.map +1 -0
- package/src/messaging/inbound/permission.js +41 -0
- package/src/messaging/inbound/permission.js.map +1 -0
- package/src/messaging/inbound/policy.d.ts +95 -0
- package/src/messaging/inbound/policy.d.ts.map +1 -0
- package/src/messaging/inbound/policy.js +161 -0
- package/src/messaging/inbound/policy.js.map +1 -0
- package/src/messaging/inbound/reaction-handler.d.ts +62 -0
- package/src/messaging/inbound/reaction-handler.d.ts.map +1 -0
- package/src/messaging/inbound/reaction-handler.js +221 -0
- package/src/messaging/inbound/reaction-handler.js.map +1 -0
- package/src/messaging/inbound/user-name-cache.d.ts +83 -0
- package/src/messaging/inbound/user-name-cache.d.ts.map +1 -0
- package/src/messaging/inbound/user-name-cache.js +242 -0
- package/src/messaging/inbound/user-name-cache.js.map +1 -0
- package/src/messaging/outbound/actions.d.ts +17 -0
- package/src/messaging/outbound/actions.d.ts.map +1 -0
- package/src/messaging/outbound/actions.js +310 -0
- package/src/messaging/outbound/actions.js.map +1 -0
- package/src/messaging/outbound/chat-manage.d.ts +65 -0
- package/src/messaging/outbound/chat-manage.d.ts.map +1 -0
- package/src/messaging/outbound/chat-manage.js +112 -0
- package/src/messaging/outbound/chat-manage.js.map +1 -0
- package/src/messaging/outbound/deliver.d.ts +156 -0
- package/src/messaging/outbound/deliver.d.ts.map +1 -0
- package/src/messaging/outbound/deliver.js +299 -0
- package/src/messaging/outbound/deliver.js.map +1 -0
- package/src/messaging/outbound/fetch.d.ts +13 -0
- package/src/messaging/outbound/fetch.d.ts.map +1 -0
- package/src/messaging/outbound/fetch.js +13 -0
- package/src/messaging/outbound/fetch.js.map +1 -0
- package/src/messaging/outbound/forward.d.ts +27 -0
- package/src/messaging/outbound/forward.d.ts.map +1 -0
- package/src/messaging/outbound/forward.js +49 -0
- package/src/messaging/outbound/forward.js.map +1 -0
- package/src/messaging/outbound/media-url-utils.d.ts +30 -0
- package/src/messaging/outbound/media-url-utils.d.ts.map +1 -0
- package/src/messaging/outbound/media-url-utils.js +131 -0
- package/src/messaging/outbound/media-url-utils.js.map +1 -0
- package/src/messaging/outbound/media.d.ts +256 -0
- package/src/messaging/outbound/media.d.ts.map +1 -0
- package/src/messaging/outbound/media.js +749 -0
- package/src/messaging/outbound/media.js.map +1 -0
- package/src/messaging/outbound/outbound.d.ts +90 -0
- package/src/messaging/outbound/outbound.d.ts.map +1 -0
- package/src/messaging/outbound/outbound.js +112 -0
- package/src/messaging/outbound/outbound.js.map +1 -0
- package/src/messaging/outbound/reactions.d.ts +125 -0
- package/src/messaging/outbound/reactions.d.ts.map +1 -0
- package/src/messaging/outbound/reactions.js +379 -0
- package/src/messaging/outbound/reactions.js.map +1 -0
- package/src/messaging/outbound/send.d.ts +136 -0
- package/src/messaging/outbound/send.d.ts.map +1 -0
- package/src/messaging/outbound/send.js +289 -0
- package/src/messaging/outbound/send.js.map +1 -0
- package/src/messaging/outbound/typing.d.ts +61 -0
- package/src/messaging/outbound/typing.d.ts.map +1 -0
- package/src/messaging/outbound/typing.js +136 -0
- package/src/messaging/outbound/typing.js.map +1 -0
- package/src/messaging/shared/message-lookup.d.ts +55 -0
- package/src/messaging/shared/message-lookup.d.ts.map +1 -0
- package/src/messaging/shared/message-lookup.js +118 -0
- package/src/messaging/shared/message-lookup.js.map +1 -0
- package/src/messaging/types.d.ts +177 -0
- package/src/messaging/types.d.ts.map +1 -0
- package/src/messaging/types.js +11 -0
- package/src/messaging/types.js.map +1 -0
- package/src/tools/auto-auth.d.ts +57 -0
- package/src/tools/auto-auth.d.ts.map +1 -0
- package/src/tools/auto-auth.js +925 -0
- package/src/tools/auto-auth.js.map +1 -0
- package/src/tools/helpers.d.ts +220 -0
- package/src/tools/helpers.d.ts.map +1 -0
- package/src/tools/helpers.js +298 -0
- package/src/tools/helpers.js.map +1 -0
- package/src/tools/mcp/doc/create.d.ts +13 -0
- package/src/tools/mcp/doc/create.d.ts.map +1 -0
- package/src/tools/mcp/doc/create.js +45 -0
- package/src/tools/mcp/doc/create.js.map +1 -0
- package/src/tools/mcp/doc/fetch.d.ts +13 -0
- package/src/tools/mcp/doc/fetch.d.ts.map +1 -0
- package/src/tools/mcp/doc/fetch.js +37 -0
- package/src/tools/mcp/doc/fetch.js.map +1 -0
- package/src/tools/mcp/doc/index.d.ts +13 -0
- package/src/tools/mcp/doc/index.d.ts.map +1 -0
- package/src/tools/mcp/doc/index.js +42 -0
- package/src/tools/mcp/doc/index.js.map +1 -0
- package/src/tools/mcp/doc/update.d.ts +13 -0
- package/src/tools/mcp/doc/update.d.ts.map +1 -0
- package/src/tools/mcp/doc/update.js +62 -0
- package/src/tools/mcp/doc/update.js.map +1 -0
- package/src/tools/mcp/shared.d.ts +58 -0
- package/src/tools/mcp/shared.d.ts.map +1 -0
- package/src/tools/mcp/shared.js +224 -0
- package/src/tools/mcp/shared.js.map +1 -0
- package/src/tools/oapi/bitable/app-table-field.d.ts +17 -0
- package/src/tools/oapi/bitable/app-table-field.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table-field.js +224 -0
- package/src/tools/oapi/bitable/app-table-field.js.map +1 -0
- package/src/tools/oapi/bitable/app-table-record.d.ts +21 -0
- package/src/tools/oapi/bitable/app-table-record.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table-record.js +449 -0
- package/src/tools/oapi/bitable/app-table-record.js.map +1 -0
- package/src/tools/oapi/bitable/app-table-view.d.ts +18 -0
- package/src/tools/oapi/bitable/app-table-view.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table-view.js +197 -0
- package/src/tools/oapi/bitable/app-table-view.js.map +1 -0
- package/src/tools/oapi/bitable/app-table.d.ts +20 -0
- package/src/tools/oapi/bitable/app-table.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table.js +249 -0
- package/src/tools/oapi/bitable/app-table.js.map +1 -0
- package/src/tools/oapi/bitable/app.d.ts +19 -0
- package/src/tools/oapi/bitable/app.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app.js +188 -0
- package/src/tools/oapi/bitable/app.js.map +1 -0
- package/src/tools/oapi/bitable/index.d.ts +10 -0
- package/src/tools/oapi/bitable/index.d.ts.map +1 -0
- package/src/tools/oapi/bitable/index.js +10 -0
- package/src/tools/oapi/bitable/index.js.map +1 -0
- package/src/tools/oapi/calendar/calendar.d.ts +16 -0
- package/src/tools/oapi/calendar/calendar.d.ts.map +1 -0
- package/src/tools/oapi/calendar/calendar.js +124 -0
- package/src/tools/oapi/calendar/calendar.js.map +1 -0
- package/src/tools/oapi/calendar/event-attendee.d.ts +17 -0
- package/src/tools/oapi/calendar/event-attendee.d.ts.map +1 -0
- package/src/tools/oapi/calendar/event-attendee.js +275 -0
- package/src/tools/oapi/calendar/event-attendee.js.map +1 -0
- package/src/tools/oapi/calendar/event.d.ts +17 -0
- package/src/tools/oapi/calendar/event.d.ts.map +1 -0
- package/src/tools/oapi/calendar/event.js +721 -0
- package/src/tools/oapi/calendar/event.js.map +1 -0
- package/src/tools/oapi/calendar/freebusy.d.ts +14 -0
- package/src/tools/oapi/calendar/freebusy.d.ts.map +1 -0
- package/src/tools/oapi/calendar/freebusy.js +113 -0
- package/src/tools/oapi/calendar/freebusy.js.map +1 -0
- package/src/tools/oapi/calendar/index.d.ts +9 -0
- package/src/tools/oapi/calendar/index.d.ts.map +1 -0
- package/src/tools/oapi/calendar/index.js +9 -0
- package/src/tools/oapi/calendar/index.js.map +1 -0
- package/src/tools/oapi/chat/chat.d.ts +17 -0
- package/src/tools/oapi/chat/chat.d.ts.map +1 -0
- package/src/tools/oapi/chat/chat.js +126 -0
- package/src/tools/oapi/chat/chat.js.map +1 -0
- package/src/tools/oapi/chat/index.d.ts +11 -0
- package/src/tools/oapi/chat/index.d.ts.map +1 -0
- package/src/tools/oapi/chat/index.js +16 -0
- package/src/tools/oapi/chat/index.js.map +1 -0
- package/src/tools/oapi/chat/members.d.ts +12 -0
- package/src/tools/oapi/chat/members.d.ts.map +1 -0
- package/src/tools/oapi/chat/members.js +83 -0
- package/src/tools/oapi/chat/members.js.map +1 -0
- package/src/tools/oapi/common/get-user.d.ts +13 -0
- package/src/tools/oapi/common/get-user.d.ts.map +1 -0
- package/src/tools/oapi/common/get-user.js +108 -0
- package/src/tools/oapi/common/get-user.js.map +1 -0
- package/src/tools/oapi/common/index.d.ts +7 -0
- package/src/tools/oapi/common/index.d.ts.map +1 -0
- package/src/tools/oapi/common/index.js +7 -0
- package/src/tools/oapi/common/index.js.map +1 -0
- package/src/tools/oapi/common/search-user.d.ts +12 -0
- package/src/tools/oapi/common/search-user.d.ts.map +1 -0
- package/src/tools/oapi/common/search-user.js +75 -0
- package/src/tools/oapi/common/search-user.js.map +1 -0
- package/src/tools/oapi/drive/doc-comments.d.ts +16 -0
- package/src/tools/oapi/drive/doc-comments.d.ts.map +1 -0
- package/src/tools/oapi/drive/doc-comments.js +288 -0
- package/src/tools/oapi/drive/doc-comments.js.map +1 -0
- package/src/tools/oapi/drive/doc-media.d.ts +20 -0
- package/src/tools/oapi/drive/doc-media.d.ts.map +1 -0
- package/src/tools/oapi/drive/doc-media.js +337 -0
- package/src/tools/oapi/drive/doc-media.js.map +1 -0
- package/src/tools/oapi/drive/file.d.ts +20 -0
- package/src/tools/oapi/drive/file.d.ts.map +1 -0
- package/src/tools/oapi/drive/file.js +485 -0
- package/src/tools/oapi/drive/file.js.map +1 -0
- package/src/tools/oapi/drive/index.d.ts +13 -0
- package/src/tools/oapi/drive/index.d.ts.map +1 -0
- package/src/tools/oapi/drive/index.js +37 -0
- package/src/tools/oapi/drive/index.js.map +1 -0
- package/src/tools/oapi/helpers.d.ts +174 -0
- package/src/tools/oapi/helpers.d.ts.map +1 -0
- package/src/tools/oapi/helpers.js +341 -0
- package/src/tools/oapi/helpers.js.map +1 -0
- package/src/tools/oapi/im/format-messages.d.ts +51 -0
- package/src/tools/oapi/im/format-messages.d.ts.map +1 -0
- package/src/tools/oapi/im/format-messages.js +166 -0
- package/src/tools/oapi/im/format-messages.js.map +1 -0
- package/src/tools/oapi/im/index.d.ts +11 -0
- package/src/tools/oapi/im/index.d.ts.map +1 -0
- package/src/tools/oapi/im/index.js +18 -0
- package/src/tools/oapi/im/index.js.map +1 -0
- package/src/tools/oapi/im/message-read.d.ts +14 -0
- package/src/tools/oapi/im/message-read.d.ts.map +1 -0
- package/src/tools/oapi/im/message-read.js +412 -0
- package/src/tools/oapi/im/message-read.js.map +1 -0
- package/src/tools/oapi/im/message.d.ts +17 -0
- package/src/tools/oapi/im/message.d.ts.map +1 -0
- package/src/tools/oapi/im/message.js +171 -0
- package/src/tools/oapi/im/message.js.map +1 -0
- package/src/tools/oapi/im/resource.d.ts +14 -0
- package/src/tools/oapi/im/resource.d.ts.map +1 -0
- package/src/tools/oapi/im/resource.js +152 -0
- package/src/tools/oapi/im/resource.js.map +1 -0
- package/src/tools/oapi/im/time-utils.d.ts +47 -0
- package/src/tools/oapi/im/time-utils.d.ts.map +1 -0
- package/src/tools/oapi/im/time-utils.js +202 -0
- package/src/tools/oapi/im/time-utils.js.map +1 -0
- package/src/tools/oapi/im/user-name-uat.d.ts +24 -0
- package/src/tools/oapi/im/user-name-uat.d.ts.map +1 -0
- package/src/tools/oapi/im/user-name-uat.js +128 -0
- package/src/tools/oapi/im/user-name-uat.js.map +1 -0
- package/src/tools/oapi/index.d.ts +12 -0
- package/src/tools/oapi/index.d.ts.map +1 -0
- package/src/tools/oapi/index.js +59 -0
- package/src/tools/oapi/index.js.map +1 -0
- package/src/tools/oapi/sdk-types.d.ts +97 -0
- package/src/tools/oapi/sdk-types.d.ts.map +1 -0
- package/src/tools/oapi/sdk-types.js +13 -0
- package/src/tools/oapi/sdk-types.js.map +1 -0
- package/src/tools/oapi/search/doc-search.d.ts +14 -0
- package/src/tools/oapi/search/doc-search.d.ts.map +1 -0
- package/src/tools/oapi/search/doc-search.js +203 -0
- package/src/tools/oapi/search/doc-search.js.map +1 -0
- package/src/tools/oapi/search/index.d.ts +13 -0
- package/src/tools/oapi/search/index.d.ts.map +1 -0
- package/src/tools/oapi/search/index.js +34 -0
- package/src/tools/oapi/search/index.js.map +1 -0
- package/src/tools/oapi/sheets/index.d.ts +13 -0
- package/src/tools/oapi/sheets/index.d.ts.map +1 -0
- package/src/tools/oapi/sheets/index.js +32 -0
- package/src/tools/oapi/sheets/index.js.map +1 -0
- package/src/tools/oapi/sheets/sheet.d.ts +17 -0
- package/src/tools/oapi/sheets/sheet.d.ts.map +1 -0
- package/src/tools/oapi/sheets/sheet.js +652 -0
- package/src/tools/oapi/sheets/sheet.js.map +1 -0
- package/src/tools/oapi/task/comment.d.ts +16 -0
- package/src/tools/oapi/task/comment.d.ts.map +1 -0
- package/src/tools/oapi/task/comment.js +142 -0
- package/src/tools/oapi/task/comment.js.map +1 -0
- package/src/tools/oapi/task/index.d.ts +9 -0
- package/src/tools/oapi/task/index.d.ts.map +1 -0
- package/src/tools/oapi/task/index.js +9 -0
- package/src/tools/oapi/task/index.js.map +1 -0
- package/src/tools/oapi/task/subtask.d.ts +15 -0
- package/src/tools/oapi/task/subtask.d.ts.map +1 -0
- package/src/tools/oapi/task/subtask.js +164 -0
- package/src/tools/oapi/task/subtask.js.map +1 -0
- package/src/tools/oapi/task/task.d.ts +17 -0
- package/src/tools/oapi/task/task.d.ts.map +1 -0
- package/src/tools/oapi/task/task.js +346 -0
- package/src/tools/oapi/task/task.js.map +1 -0
- package/src/tools/oapi/task/tasklist.d.ts +22 -0
- package/src/tools/oapi/task/tasklist.d.ts.map +1 -0
- package/src/tools/oapi/task/tasklist.js +323 -0
- package/src/tools/oapi/task/tasklist.js.map +1 -0
- package/src/tools/oapi/wiki/index.d.ts +13 -0
- package/src/tools/oapi/wiki/index.d.ts.map +1 -0
- package/src/tools/oapi/wiki/index.js +35 -0
- package/src/tools/oapi/wiki/index.js.map +1 -0
- package/src/tools/oapi/wiki/space-node.d.ts +18 -0
- package/src/tools/oapi/wiki/space-node.d.ts.map +1 -0
- package/src/tools/oapi/wiki/space-node.js +253 -0
- package/src/tools/oapi/wiki/space-node.js.map +1 -0
- package/src/tools/oapi/wiki/space.d.ts +16 -0
- package/src/tools/oapi/wiki/space.d.ts.map +1 -0
- package/src/tools/oapi/wiki/space.js +132 -0
- package/src/tools/oapi/wiki/space.js.map +1 -0
- package/src/tools/oauth-batch-auth.d.ts +12 -0
- package/src/tools/oauth-batch-auth.d.ts.map +1 -0
- package/src/tools/oauth-batch-auth.js +142 -0
- package/src/tools/oauth-batch-auth.js.map +1 -0
- package/src/tools/oauth-cards.d.ts +27 -0
- package/src/tools/oauth-cards.d.ts.map +1 -0
- package/src/tools/oauth-cards.js +251 -0
- package/src/tools/oauth-cards.js.map +1 -0
- package/src/tools/oauth.d.ts +48 -0
- package/src/tools/oauth.d.ts.map +1 -0
- package/src/tools/oauth.js +619 -0
- package/src/tools/oauth.js.map +1 -0
- package/src/tools/onboarding-auth.d.ts +28 -0
- package/src/tools/onboarding-auth.d.ts.map +1 -0
- package/src/tools/onboarding-auth.js +131 -0
- package/src/tools/onboarding-auth.js.map +1 -0
- package/src/tools/tat/im/index.d.ts +16 -0
- package/src/tools/tat/im/index.d.ts.map +1 -0
- package/src/tools/tat/im/index.js +19 -0
- package/src/tools/tat/im/index.js.map +1 -0
- package/src/tools/tat/im/resource.d.ts +16 -0
- package/src/tools/tat/im/resource.d.ts.map +1 -0
- package/src/tools/tat/im/resource.js +158 -0
- package/src/tools/tat/im/resource.js.map +1 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Message sending for the Feishu/Lark channel plugin.
|
|
6
|
+
*/
|
|
7
|
+
import { LarkClient } from '../../core/lark-client';
|
|
8
|
+
import { normalizeFeishuTarget, normalizeMessageId, resolveReceiveIdType } from '../../core/targets';
|
|
9
|
+
import { runWithMessageUnavailableGuard } from '../../core/message-unavailable';
|
|
10
|
+
import { optimizeMarkdownStyle } from '../../card/markdown-style';
|
|
11
|
+
import { buildMentionedMessage, buildMentionedCardContent } from '../inbound/mention';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// sendMessageFeishu
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Send a text message (rendered as a Feishu "post" with markdown support)
|
|
17
|
+
* to a chat or user.
|
|
18
|
+
*
|
|
19
|
+
* The message text is wrapped in Feishu's post format using the `md` tag
|
|
20
|
+
* for rich rendering. If `replyToMessageId` is provided, the message is
|
|
21
|
+
* sent as a threaded reply; otherwise it is sent as a new message using
|
|
22
|
+
* the appropriate `receive_id_type`.
|
|
23
|
+
*
|
|
24
|
+
* Markdown tables in the text are automatically converted to the format
|
|
25
|
+
* supported by Feishu via the runtime's table converter when available.
|
|
26
|
+
*
|
|
27
|
+
* @param params - See {@link SendFeishuMessageParams}.
|
|
28
|
+
* @returns The send result containing the new message ID.
|
|
29
|
+
*/
|
|
30
|
+
export async function sendMessageFeishu(params) {
|
|
31
|
+
const { cfg, to, text, replyToMessageId, mentions, accountId, replyInThread } = params;
|
|
32
|
+
const client = LarkClient.fromCfg(cfg, accountId).sdk;
|
|
33
|
+
// Apply mention prefix if targets are provided.
|
|
34
|
+
let messageText = text;
|
|
35
|
+
if (mentions && mentions.length > 0) {
|
|
36
|
+
messageText = buildMentionedMessage(mentions, messageText);
|
|
37
|
+
}
|
|
38
|
+
// Convert markdown tables to Feishu-compatible format if the runtime
|
|
39
|
+
// provides a converter.
|
|
40
|
+
try {
|
|
41
|
+
const runtime = LarkClient.runtime;
|
|
42
|
+
if (runtime?.channel?.text?.convertMarkdownTables) {
|
|
43
|
+
messageText = runtime.channel.text.convertMarkdownTables(messageText, 'bullets');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Runtime not available -- use the text as-is.
|
|
48
|
+
}
|
|
49
|
+
// Apply Markdown style optimization.
|
|
50
|
+
messageText = optimizeMarkdownStyle(messageText, 1);
|
|
51
|
+
// Build the post-format content envelope.
|
|
52
|
+
const contentPayload = JSON.stringify({
|
|
53
|
+
zh_cn: {
|
|
54
|
+
content: [[{ tag: 'md', text: messageText }]],
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
if (replyToMessageId) {
|
|
58
|
+
// Send as a threaded reply.
|
|
59
|
+
// 规范化 message_id,处理合成 ID(如 "om_xxx:auth-complete")
|
|
60
|
+
const normalizedId = normalizeMessageId(replyToMessageId);
|
|
61
|
+
const response = await runWithMessageUnavailableGuard({
|
|
62
|
+
messageId: normalizedId,
|
|
63
|
+
operation: 'im.message.reply(post)',
|
|
64
|
+
fn: () => client.im.message.reply({
|
|
65
|
+
path: {
|
|
66
|
+
message_id: normalizedId,
|
|
67
|
+
},
|
|
68
|
+
data: {
|
|
69
|
+
content: contentPayload,
|
|
70
|
+
msg_type: 'post',
|
|
71
|
+
reply_in_thread: replyInThread,
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
messageId: response?.data?.message_id ?? '',
|
|
77
|
+
chatId: response?.data?.chat_id ?? '',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Send as a new message.
|
|
81
|
+
const target = normalizeFeishuTarget(to);
|
|
82
|
+
if (!target) {
|
|
83
|
+
throw new Error(`[feishu-send] Invalid target: "${to}"`);
|
|
84
|
+
}
|
|
85
|
+
const receiveIdType = resolveReceiveIdType(target);
|
|
86
|
+
const response = await client.im.message.create({
|
|
87
|
+
params: {
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
+
receive_id_type: receiveIdType,
|
|
90
|
+
},
|
|
91
|
+
data: {
|
|
92
|
+
receive_id: target,
|
|
93
|
+
msg_type: 'post',
|
|
94
|
+
content: contentPayload,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
messageId: response?.data?.message_id ?? '',
|
|
99
|
+
chatId: response?.data?.chat_id ?? '',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// sendCardFeishu
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
/**
|
|
106
|
+
* Send an interactive card message to a chat or user.
|
|
107
|
+
*
|
|
108
|
+
* @param params - See {@link SendFeishuCardParams}.
|
|
109
|
+
* @returns The send result containing the new message ID.
|
|
110
|
+
*/
|
|
111
|
+
export async function sendCardFeishu(params) {
|
|
112
|
+
const { cfg, to, card, replyToMessageId, accountId, replyInThread } = params;
|
|
113
|
+
const client = LarkClient.fromCfg(cfg, accountId).sdk;
|
|
114
|
+
const contentPayload = JSON.stringify(card);
|
|
115
|
+
if (replyToMessageId) {
|
|
116
|
+
// 规范化 message_id,处理合成 ID(如 "om_xxx:auth-complete")
|
|
117
|
+
const normalizedId = normalizeMessageId(replyToMessageId);
|
|
118
|
+
const response = await runWithMessageUnavailableGuard({
|
|
119
|
+
messageId: normalizedId,
|
|
120
|
+
operation: 'im.message.reply(interactive)',
|
|
121
|
+
fn: () => client.im.message.reply({
|
|
122
|
+
path: {
|
|
123
|
+
message_id: normalizedId,
|
|
124
|
+
},
|
|
125
|
+
data: {
|
|
126
|
+
content: contentPayload,
|
|
127
|
+
msg_type: 'interactive',
|
|
128
|
+
reply_in_thread: replyInThread,
|
|
129
|
+
},
|
|
130
|
+
}),
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
messageId: response?.data?.message_id ?? '',
|
|
134
|
+
chatId: response?.data?.chat_id ?? '',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const target = normalizeFeishuTarget(to);
|
|
138
|
+
if (!target) {
|
|
139
|
+
throw new Error(`[feishu-send] Invalid target: "${to}"`);
|
|
140
|
+
}
|
|
141
|
+
const receiveIdType = resolveReceiveIdType(target);
|
|
142
|
+
const response = await client.im.message.create({
|
|
143
|
+
params: {
|
|
144
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
145
|
+
receive_id_type: receiveIdType,
|
|
146
|
+
},
|
|
147
|
+
data: {
|
|
148
|
+
receive_id: target,
|
|
149
|
+
msg_type: 'interactive',
|
|
150
|
+
content: contentPayload,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
return {
|
|
154
|
+
messageId: response?.data?.message_id ?? '',
|
|
155
|
+
chatId: response?.data?.chat_id ?? '',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
// updateCardFeishu
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
/**
|
|
162
|
+
* Update (PATCH) the content of an existing interactive card message.
|
|
163
|
+
*
|
|
164
|
+
* Only messages originally sent by the bot can be updated. The card
|
|
165
|
+
* must have been created with `"update_multi": true` in its config if
|
|
166
|
+
* all recipients should see the update.
|
|
167
|
+
*
|
|
168
|
+
* @param params.cfg - Plugin configuration.
|
|
169
|
+
* @param params.messageId - The card message ID to update.
|
|
170
|
+
* @param params.card - The new card content.
|
|
171
|
+
* @param params.accountId - Optional account identifier.
|
|
172
|
+
*/
|
|
173
|
+
export async function updateCardFeishu(params) {
|
|
174
|
+
const { cfg, messageId, card, accountId } = params;
|
|
175
|
+
const client = LarkClient.fromCfg(cfg, accountId).sdk;
|
|
176
|
+
await runWithMessageUnavailableGuard({
|
|
177
|
+
messageId,
|
|
178
|
+
operation: 'im.message.patch(interactive)',
|
|
179
|
+
fn: () => client.im.message.patch({
|
|
180
|
+
path: {
|
|
181
|
+
message_id: messageId,
|
|
182
|
+
},
|
|
183
|
+
data: {
|
|
184
|
+
content: JSON.stringify(card),
|
|
185
|
+
},
|
|
186
|
+
}),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// buildMarkdownCard
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
/**
|
|
193
|
+
* Build a simple Feishu Interactive Message Card containing a single
|
|
194
|
+
* markdown element.
|
|
195
|
+
*
|
|
196
|
+
* This is a convenience wrapper for the most common card layout: a
|
|
197
|
+
* wide-screen card with one markdown block.
|
|
198
|
+
*
|
|
199
|
+
* @param text - The markdown text to render in the card.
|
|
200
|
+
* @returns A card JSON object ready to be sent via {@link sendCardFeishu}.
|
|
201
|
+
*/
|
|
202
|
+
export function buildMarkdownCard(text) {
|
|
203
|
+
const optimizedText = optimizeMarkdownStyle(text);
|
|
204
|
+
return {
|
|
205
|
+
schema: '2.0',
|
|
206
|
+
config: {
|
|
207
|
+
wide_screen_mode: true,
|
|
208
|
+
},
|
|
209
|
+
body: {
|
|
210
|
+
elements: [
|
|
211
|
+
{
|
|
212
|
+
tag: 'markdown',
|
|
213
|
+
content: optimizedText,
|
|
214
|
+
},
|
|
215
|
+
],
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
// sendMarkdownCardFeishu
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
/**
|
|
223
|
+
* Build a markdown card and send it in one step.
|
|
224
|
+
*
|
|
225
|
+
* If mention targets are provided, they are prepended to the markdown
|
|
226
|
+
* content using the card mention syntax.
|
|
227
|
+
*
|
|
228
|
+
* @param params.cfg - Plugin configuration.
|
|
229
|
+
* @param params.to - Target identifier.
|
|
230
|
+
* @param params.text - Markdown content for the card.
|
|
231
|
+
* @param params.replyToMessageId - Optional message ID for threaded reply.
|
|
232
|
+
* @param params.mentions - Optional mention targets.
|
|
233
|
+
* @param params.accountId - Optional account identifier.
|
|
234
|
+
* @returns The send result containing the new message ID.
|
|
235
|
+
*/
|
|
236
|
+
export async function sendMarkdownCardFeishu(params) {
|
|
237
|
+
const { cfg, to, text, replyToMessageId, mentions, accountId, replyInThread } = params;
|
|
238
|
+
let cardText = text;
|
|
239
|
+
if (mentions && mentions.length > 0) {
|
|
240
|
+
cardText = buildMentionedCardContent(mentions, cardText);
|
|
241
|
+
}
|
|
242
|
+
const card = buildMarkdownCard(cardText);
|
|
243
|
+
return sendCardFeishu({
|
|
244
|
+
cfg,
|
|
245
|
+
to,
|
|
246
|
+
card,
|
|
247
|
+
replyToMessageId,
|
|
248
|
+
replyInThread,
|
|
249
|
+
accountId,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
// ---------------------------------------------------------------------------
|
|
253
|
+
// editMessageFeishu
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
255
|
+
/**
|
|
256
|
+
* Edit the content of an existing message.
|
|
257
|
+
*
|
|
258
|
+
* Updates the message body via the IM message update API. Only
|
|
259
|
+
* messages sent by the bot can be edited.
|
|
260
|
+
*
|
|
261
|
+
* @param params.cfg - Plugin configuration.
|
|
262
|
+
* @param params.messageId - The message ID to edit.
|
|
263
|
+
* @param params.text - The new message text.
|
|
264
|
+
* @param params.accountId - Optional account identifier.
|
|
265
|
+
*/
|
|
266
|
+
export async function editMessageFeishu(params) {
|
|
267
|
+
const { cfg, messageId, text, accountId } = params;
|
|
268
|
+
const client = LarkClient.fromCfg(cfg, accountId).sdk;
|
|
269
|
+
const optimizedText = optimizeMarkdownStyle(text);
|
|
270
|
+
const contentPayload = JSON.stringify({
|
|
271
|
+
zh_cn: {
|
|
272
|
+
content: [[{ tag: 'md', text: optimizedText }]],
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
await runWithMessageUnavailableGuard({
|
|
276
|
+
messageId,
|
|
277
|
+
operation: 'im.message.update(post)',
|
|
278
|
+
fn: () => client.im.message.update({
|
|
279
|
+
path: {
|
|
280
|
+
message_id: messageId,
|
|
281
|
+
},
|
|
282
|
+
data: {
|
|
283
|
+
content: contentPayload,
|
|
284
|
+
msg_type: 'post',
|
|
285
|
+
},
|
|
286
|
+
}),
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../../src/messaging/outbound/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Typing indicator management for the Feishu/Lark channel plugin.
|
|
6
|
+
*
|
|
7
|
+
* Feishu does not expose a first-class "typing indicator" API the way
|
|
8
|
+
* some other messaging platforms do. Instead, this module simulates a
|
|
9
|
+
* typing state by adding a recognisable emoji reaction (the "Typing"
|
|
10
|
+
* emoji) to the user's message while the bot is processing, and
|
|
11
|
+
* removing it once the response is ready.
|
|
12
|
+
*
|
|
13
|
+
* This provides a lightweight visual cue that the bot has acknowledged
|
|
14
|
+
* the message and is working on a reply.
|
|
15
|
+
*/
|
|
16
|
+
import type { OpenClawConfig } from 'openclaw/plugin-sdk';
|
|
17
|
+
/**
|
|
18
|
+
* Tracks the state of an active typing indicator so it can be
|
|
19
|
+
* removed later.
|
|
20
|
+
*/
|
|
21
|
+
export interface TypingIndicatorState {
|
|
22
|
+
/** The message ID that the reaction was added to. */
|
|
23
|
+
messageId: string;
|
|
24
|
+
/** The reaction ID returned by the API, or null if the add failed. */
|
|
25
|
+
reactionId: string | null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Add a typing indicator to a message by creating an emoji reaction.
|
|
29
|
+
*
|
|
30
|
+
* The reaction is added silently -- any errors (network issues, missing
|
|
31
|
+
* permissions, rate limits) are caught and logged rather than propagated
|
|
32
|
+
* to the caller. This ensures that a failure to show the typing cue
|
|
33
|
+
* never blocks the actual message processing.
|
|
34
|
+
*
|
|
35
|
+
* @param params.cfg - Plugin configuration with Feishu credentials.
|
|
36
|
+
* @param params.messageId - The message ID to add the typing reaction to.
|
|
37
|
+
* @param params.accountId - Optional account identifier for multi-account setups.
|
|
38
|
+
* @returns A state object that should be passed to {@link removeTypingIndicator}.
|
|
39
|
+
*/
|
|
40
|
+
export declare function addTypingIndicator(params: {
|
|
41
|
+
cfg: OpenClawConfig;
|
|
42
|
+
messageId: string;
|
|
43
|
+
accountId?: string;
|
|
44
|
+
}): Promise<TypingIndicatorState>;
|
|
45
|
+
/**
|
|
46
|
+
* Remove a previously added typing indicator reaction from a message.
|
|
47
|
+
*
|
|
48
|
+
* If the indicator was never successfully added (reactionId is null),
|
|
49
|
+
* this function is a no-op. Errors are silently caught so removal
|
|
50
|
+
* failures do not disrupt downstream logic.
|
|
51
|
+
*
|
|
52
|
+
* @param params.cfg - Plugin configuration with Feishu credentials.
|
|
53
|
+
* @param params.state - The typing indicator state returned by {@link addTypingIndicator}.
|
|
54
|
+
* @param params.accountId - Optional account identifier for multi-account setups.
|
|
55
|
+
*/
|
|
56
|
+
export declare function removeTypingIndicator(params: {
|
|
57
|
+
cfg: OpenClawConfig;
|
|
58
|
+
state: TypingIndicatorState;
|
|
59
|
+
accountId?: string;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
//# sourceMappingURL=typing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing.d.ts","sourceRoot":"","sources":["../../../../src/messaging/outbound/typing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAY1D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA6ChC;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqChB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Typing indicator management for the Feishu/Lark channel plugin.
|
|
6
|
+
*
|
|
7
|
+
* Feishu does not expose a first-class "typing indicator" API the way
|
|
8
|
+
* some other messaging platforms do. Instead, this module simulates a
|
|
9
|
+
* typing state by adding a recognisable emoji reaction (the "Typing"
|
|
10
|
+
* emoji) to the user's message while the bot is processing, and
|
|
11
|
+
* removing it once the response is ready.
|
|
12
|
+
*
|
|
13
|
+
* This provides a lightweight visual cue that the bot has acknowledged
|
|
14
|
+
* the message and is working on a reply.
|
|
15
|
+
*/
|
|
16
|
+
import { LarkClient } from '../../core/lark-client';
|
|
17
|
+
import { normalizeMessageId } from '../../core/targets';
|
|
18
|
+
import { isMessageUnavailableError, runWithMessageUnavailableGuard } from '../../core/message-unavailable';
|
|
19
|
+
import { larkLogger } from '../../core/lark-logger';
|
|
20
|
+
const log = larkLogger('outbound/typing');
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Constants
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* The emoji type used to represent the typing indicator.
|
|
26
|
+
*
|
|
27
|
+
* "Typing" is a built-in Feishu emoji that shows a pencil / keyboard
|
|
28
|
+
* animation, making it a natural choice for a typing cue.
|
|
29
|
+
*/
|
|
30
|
+
const TYPING_EMOJI_TYPE = 'Typing';
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// addTypingIndicator
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
/**
|
|
35
|
+
* Add a typing indicator to a message by creating an emoji reaction.
|
|
36
|
+
*
|
|
37
|
+
* The reaction is added silently -- any errors (network issues, missing
|
|
38
|
+
* permissions, rate limits) are caught and logged rather than propagated
|
|
39
|
+
* to the caller. This ensures that a failure to show the typing cue
|
|
40
|
+
* never blocks the actual message processing.
|
|
41
|
+
*
|
|
42
|
+
* @param params.cfg - Plugin configuration with Feishu credentials.
|
|
43
|
+
* @param params.messageId - The message ID to add the typing reaction to.
|
|
44
|
+
* @param params.accountId - Optional account identifier for multi-account setups.
|
|
45
|
+
* @returns A state object that should be passed to {@link removeTypingIndicator}.
|
|
46
|
+
*/
|
|
47
|
+
export async function addTypingIndicator(params) {
|
|
48
|
+
const { cfg, messageId, accountId } = params;
|
|
49
|
+
// 规范化 message_id,处理合成 ID(如 "om_xxx:auth-complete")
|
|
50
|
+
const normalizedId = normalizeMessageId(messageId);
|
|
51
|
+
const state = {
|
|
52
|
+
messageId: normalizedId, // 保存规范化后的 ID
|
|
53
|
+
reactionId: null,
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
const client = LarkClient.fromCfg(cfg, accountId).sdk;
|
|
57
|
+
const response = await runWithMessageUnavailableGuard({
|
|
58
|
+
messageId: normalizedId,
|
|
59
|
+
operation: 'im.messageReaction.create(typing)',
|
|
60
|
+
fn: () => client.im.messageReaction.create({
|
|
61
|
+
path: {
|
|
62
|
+
message_id: normalizedId,
|
|
63
|
+
},
|
|
64
|
+
data: {
|
|
65
|
+
reaction_type: {
|
|
66
|
+
emoji_type: TYPING_EMOJI_TYPE,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
});
|
|
71
|
+
state.reactionId = response?.data?.reaction_id ?? null;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (isMessageUnavailableError(error)) {
|
|
75
|
+
log.debug(`Skip add typing indicator for unavailable message`, { messageId: normalizedId });
|
|
76
|
+
return state;
|
|
77
|
+
}
|
|
78
|
+
// Silently swallow the error. The typing indicator is a best-effort
|
|
79
|
+
// visual cue and must not interfere with message processing.
|
|
80
|
+
log.debug(`Failed to add typing indicator`, {
|
|
81
|
+
messageId,
|
|
82
|
+
error: error instanceof Error ? error.message : error,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return state;
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// removeTypingIndicator
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Remove a previously added typing indicator reaction from a message.
|
|
92
|
+
*
|
|
93
|
+
* If the indicator was never successfully added (reactionId is null),
|
|
94
|
+
* this function is a no-op. Errors are silently caught so removal
|
|
95
|
+
* failures do not disrupt downstream logic.
|
|
96
|
+
*
|
|
97
|
+
* @param params.cfg - Plugin configuration with Feishu credentials.
|
|
98
|
+
* @param params.state - The typing indicator state returned by {@link addTypingIndicator}.
|
|
99
|
+
* @param params.accountId - Optional account identifier for multi-account setups.
|
|
100
|
+
*/
|
|
101
|
+
export async function removeTypingIndicator(params) {
|
|
102
|
+
const { cfg, state, accountId } = params;
|
|
103
|
+
const reactionId = state.reactionId;
|
|
104
|
+
if (!reactionId) {
|
|
105
|
+
// Nothing to remove -- the indicator was never added or the add
|
|
106
|
+
// call did not return a reaction ID.
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
const client = LarkClient.fromCfg(cfg, accountId).sdk;
|
|
111
|
+
await runWithMessageUnavailableGuard({
|
|
112
|
+
messageId: state.messageId,
|
|
113
|
+
operation: 'im.messageReaction.delete(typing)',
|
|
114
|
+
fn: () => client.im.messageReaction.delete({
|
|
115
|
+
path: {
|
|
116
|
+
message_id: state.messageId,
|
|
117
|
+
reaction_id: reactionId,
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (isMessageUnavailableError(error)) {
|
|
124
|
+
log.debug(`Skip remove typing indicator for unavailable message`, { messageId: state.messageId });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Silently swallow the error. A leftover reaction is acceptable;
|
|
128
|
+
// it will not confuse the user and will disappear if the message
|
|
129
|
+
// is deleted or the reaction is manually removed.
|
|
130
|
+
log.debug(`Failed to remove typing indicator`, {
|
|
131
|
+
messageId: state.messageId,
|
|
132
|
+
error: error instanceof Error ? error.message : error,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=typing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing.js","sourceRoot":"","sources":["../../../../src/messaging/outbound/typing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Message fetching for the Feishu/Lark channel plugin.
|
|
6
|
+
*
|
|
7
|
+
* Shared between inbound (reaction handler, enrich) and outbound modules.
|
|
8
|
+
* Extracted from `outbound/fetch.ts` to eliminate inbound→outbound
|
|
9
|
+
* dependency inversion.
|
|
10
|
+
*/
|
|
11
|
+
import type { ClawdbotConfig } from 'openclaw/plugin-sdk';
|
|
12
|
+
/**
|
|
13
|
+
* Normalised information about a Feishu message, returned by
|
|
14
|
+
* {@link getMessageFeishu}.
|
|
15
|
+
*/
|
|
16
|
+
export interface FeishuMessageInfo {
|
|
17
|
+
/** Unique Feishu message ID. */
|
|
18
|
+
messageId: string;
|
|
19
|
+
/** Chat ID where the message lives. */
|
|
20
|
+
chatId: string;
|
|
21
|
+
/** Chat type ("p2p" or "group"), when available in the API response. */
|
|
22
|
+
chatType?: string;
|
|
23
|
+
/** Open ID of the sender (if available). */
|
|
24
|
+
senderId?: string;
|
|
25
|
+
/** Display name of the sender (resolved from user-name cache). */
|
|
26
|
+
senderName?: string;
|
|
27
|
+
/** Feishu sender type: "user" for human users, "app" for bots/apps. */
|
|
28
|
+
senderType?: string;
|
|
29
|
+
/** The parsed text / content of the message. */
|
|
30
|
+
content: string;
|
|
31
|
+
/** Feishu content type indicator (text, post, image, interactive, ...). */
|
|
32
|
+
contentType: string;
|
|
33
|
+
/** Unix-millisecond timestamp of when the message was created. */
|
|
34
|
+
createTime?: number;
|
|
35
|
+
/** Thread ID if the message belongs to a thread (omt_xxx format). */
|
|
36
|
+
threadId?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Retrieve a single message by its ID from the Feishu IM API.
|
|
40
|
+
*
|
|
41
|
+
* Returns a normalised {@link FeishuMessageInfo} object, or `null` if the
|
|
42
|
+
* message cannot be found or the API returns an error.
|
|
43
|
+
*
|
|
44
|
+
* @param params.cfg - Plugin configuration with Feishu credentials.
|
|
45
|
+
* @param params.messageId - The message ID to fetch.
|
|
46
|
+
* @param params.accountId - Optional account identifier for multi-account setups.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getMessageFeishu(params: {
|
|
49
|
+
cfg: ClawdbotConfig;
|
|
50
|
+
messageId: string;
|
|
51
|
+
accountId?: string;
|
|
52
|
+
/** When true, merge_forward content is recursively expanded via API. */
|
|
53
|
+
expandForward?: boolean;
|
|
54
|
+
}): Promise<FeishuMessageInfo | null>;
|
|
55
|
+
//# sourceMappingURL=message-lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-lookup.d.ts","sourceRoot":"","sources":["../../../../src/messaging/shared/message-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAa1D;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmDpC"}
|