@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,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Media resolution and payload building for inbound Feishu messages.
|
|
6
|
+
*
|
|
7
|
+
* Downloads media files based on ResourceDescriptors extracted during
|
|
8
|
+
* the content converter phase, and builds the payload object spread
|
|
9
|
+
* into the agent envelope.
|
|
10
|
+
*/
|
|
11
|
+
import { LarkClient } from '../../core/lark-client';
|
|
12
|
+
import { downloadMessageResourceFeishu } from '../outbound/media';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Resource-descriptor-based download
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Download media files based on pre-extracted ResourceDescriptors from
|
|
18
|
+
* the converter phase.
|
|
19
|
+
*/
|
|
20
|
+
export async function downloadResources(params) {
|
|
21
|
+
const { cfg, messageId, resources, maxBytes, log, accountId } = params;
|
|
22
|
+
if (resources.length === 0)
|
|
23
|
+
return [];
|
|
24
|
+
const out = [];
|
|
25
|
+
const core = LarkClient.runtime;
|
|
26
|
+
for (const res of resources) {
|
|
27
|
+
try {
|
|
28
|
+
const resourceType = res.type === 'image' ? 'image' : 'file';
|
|
29
|
+
const result = await downloadMessageResourceFeishu({
|
|
30
|
+
cfg,
|
|
31
|
+
messageId,
|
|
32
|
+
fileKey: res.fileKey,
|
|
33
|
+
type: resourceType,
|
|
34
|
+
accountId,
|
|
35
|
+
});
|
|
36
|
+
let contentType = result.contentType;
|
|
37
|
+
if (!contentType) {
|
|
38
|
+
contentType = await core.media.detectMime({ buffer: result.buffer });
|
|
39
|
+
}
|
|
40
|
+
const fileName = result.fileName || res.fileName;
|
|
41
|
+
const saved = await core.channel.media.saveMediaBuffer(result.buffer, contentType, 'inbound', maxBytes, fileName);
|
|
42
|
+
const placeholder = inferPlaceholderFromType(res.type);
|
|
43
|
+
out.push({
|
|
44
|
+
path: saved.path,
|
|
45
|
+
contentType: saved.contentType,
|
|
46
|
+
placeholder,
|
|
47
|
+
fileKey: res.fileKey,
|
|
48
|
+
resourceType: res.type,
|
|
49
|
+
});
|
|
50
|
+
log?.(`feishu: downloaded ${res.type} resource ${res.fileKey}, saved to ${saved.path}`);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
log?.(`feishu: failed to download ${res.type} resource ${res.fileKey}: ${String(err)}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
function inferPlaceholderFromType(type) {
|
|
59
|
+
switch (type) {
|
|
60
|
+
case 'image':
|
|
61
|
+
return '<media:image>';
|
|
62
|
+
case 'file':
|
|
63
|
+
return '<media:document>';
|
|
64
|
+
case 'audio':
|
|
65
|
+
return '<media:audio>';
|
|
66
|
+
case 'video':
|
|
67
|
+
return '<media:video>';
|
|
68
|
+
case 'sticker':
|
|
69
|
+
return '<media:sticker>';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Media payload builder
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
export function buildFeishuMediaPayload(mediaList) {
|
|
76
|
+
const first = mediaList[0];
|
|
77
|
+
const mediaPaths = mediaList.map((m) => m.path);
|
|
78
|
+
const mediaTypes = mediaList.map((m) => m.contentType).filter(Boolean);
|
|
79
|
+
return {
|
|
80
|
+
MediaPath: first?.path,
|
|
81
|
+
MediaType: first?.contentType,
|
|
82
|
+
MediaUrl: first?.path,
|
|
83
|
+
MediaPaths: mediaPaths.length > 0 ? mediaPaths : undefined,
|
|
84
|
+
MediaUrls: mediaPaths.length > 0 ? mediaPaths : undefined,
|
|
85
|
+
MediaTypes: mediaTypes.length > 0 ? mediaTypes : undefined,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=media-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-resolver.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/media-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* @mention utilities for the Feishu/Lark channel plugin.
|
|
6
|
+
*
|
|
7
|
+
* All logic is based on `MentionInfo[]` from `MessageContext.mentions`.
|
|
8
|
+
* Provides:
|
|
9
|
+
* - Derive helpers: `mentionedBot()`, `nonBotMentions()`
|
|
10
|
+
* - Format helpers for outbound text and card messages.
|
|
11
|
+
*/
|
|
12
|
+
import type { MentionInfo, MessageContext } from '../types';
|
|
13
|
+
export type { MentionInfo } from '../types';
|
|
14
|
+
/** Whether the bot was @-mentioned. */
|
|
15
|
+
export declare function mentionedBot(ctx: MessageContext): boolean;
|
|
16
|
+
/** All non-bot mentions. */
|
|
17
|
+
export declare function nonBotMentions(ctx: MessageContext): MentionInfo[];
|
|
18
|
+
/**
|
|
19
|
+
* Remove all @mention placeholder keys from the message text.
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractMessageBody(text: string, allMentionKeys: string[]): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format a mention for a Feishu text / post message.
|
|
24
|
+
* @returns e.g. `<at user_id="ou_xxx">Alice</at>`
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatMentionForText(target: MentionInfo): string;
|
|
27
|
+
/** Format an @everyone mention for text / post. */
|
|
28
|
+
export declare function formatMentionAllForText(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Format a mention for a Feishu Interactive Card.
|
|
31
|
+
* @returns e.g. `<at id=ou_xxx></at>`
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatMentionForCard(target: MentionInfo): string;
|
|
34
|
+
/** Format an @everyone mention for card. */
|
|
35
|
+
export declare function formatMentionAllForCard(): string;
|
|
36
|
+
/** Prepend @mention tags (text format) to a message body. */
|
|
37
|
+
export declare function buildMentionedMessage(targets: MentionInfo[], message: string): string;
|
|
38
|
+
/** Prepend @mention tags (card format) to card markdown content. */
|
|
39
|
+
export declare function buildMentionedCardContent(targets: MentionInfo[], message: string): string;
|
|
40
|
+
//# sourceMappingURL=mention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/mention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG5D,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAEzD;AAED,4BAA4B;AAC5B,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,WAAW,EAAE,CAEjE;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,CAMjF;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEhE;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEhE;AAED,4CAA4C;AAC5C,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAMD,6DAA6D;AAC7D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,oEAAoE;AACpE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* @mention utilities for the Feishu/Lark channel plugin.
|
|
6
|
+
*
|
|
7
|
+
* All logic is based on `MentionInfo[]` from `MessageContext.mentions`.
|
|
8
|
+
* Provides:
|
|
9
|
+
* - Derive helpers: `mentionedBot()`, `nonBotMentions()`
|
|
10
|
+
* - Format helpers for outbound text and card messages.
|
|
11
|
+
*/
|
|
12
|
+
import { escapeRegExp } from '../converters/utils';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Derive helpers (work on MentionInfo[])
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/** Whether the bot was @-mentioned. */
|
|
17
|
+
export function mentionedBot(ctx) {
|
|
18
|
+
return ctx.mentions.some((m) => m.isBot);
|
|
19
|
+
}
|
|
20
|
+
/** All non-bot mentions. */
|
|
21
|
+
export function nonBotMentions(ctx) {
|
|
22
|
+
return ctx.mentions.filter((m) => !m.isBot);
|
|
23
|
+
}
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// extractMessageBody
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Remove all @mention placeholder keys from the message text.
|
|
29
|
+
*/
|
|
30
|
+
export function extractMessageBody(text, allMentionKeys) {
|
|
31
|
+
let result = text;
|
|
32
|
+
for (const key of allMentionKeys) {
|
|
33
|
+
result = result.replace(new RegExp(escapeRegExp(key) + '\\s*', 'g'), '');
|
|
34
|
+
}
|
|
35
|
+
return result.trim();
|
|
36
|
+
}
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Format helpers -- text messages
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
/**
|
|
41
|
+
* Format a mention for a Feishu text / post message.
|
|
42
|
+
* @returns e.g. `<at user_id="ou_xxx">Alice</at>`
|
|
43
|
+
*/
|
|
44
|
+
export function formatMentionForText(target) {
|
|
45
|
+
return `<at user_id="${target.openId}">${target.name}</at>`;
|
|
46
|
+
}
|
|
47
|
+
/** Format an @everyone mention for text / post. */
|
|
48
|
+
export function formatMentionAllForText() {
|
|
49
|
+
return `<at user_id="all">Everyone</at>`;
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Format helpers -- interactive card messages
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
/**
|
|
55
|
+
* Format a mention for a Feishu Interactive Card.
|
|
56
|
+
* @returns e.g. `<at id=ou_xxx></at>`
|
|
57
|
+
*/
|
|
58
|
+
export function formatMentionForCard(target) {
|
|
59
|
+
return `<at id=${target.openId}></at>`;
|
|
60
|
+
}
|
|
61
|
+
/** Format an @everyone mention for card. */
|
|
62
|
+
export function formatMentionAllForCard() {
|
|
63
|
+
return `<at id=all></at>`;
|
|
64
|
+
}
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Build helpers (prepend mentions to message body)
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
/** Prepend @mention tags (text format) to a message body. */
|
|
69
|
+
export function buildMentionedMessage(targets, message) {
|
|
70
|
+
if (targets.length === 0)
|
|
71
|
+
return message;
|
|
72
|
+
const mentionTags = targets.map(formatMentionForText).join(' ');
|
|
73
|
+
return `${mentionTags}\n${message}`;
|
|
74
|
+
}
|
|
75
|
+
/** Prepend @mention tags (card format) to card markdown content. */
|
|
76
|
+
export function buildMentionedCardContent(targets, message) {
|
|
77
|
+
if (targets.length === 0)
|
|
78
|
+
return message;
|
|
79
|
+
const mentionTags = targets.map(formatMentionForCard).join(' ');
|
|
80
|
+
return `${mentionTags}\n${message}`;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=mention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/mention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,uCAAuC;AACvC,MAAM,UAAU,YAAY,CAAC,GAAmB;IAC9C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,cAAc,CAAC,GAAmB;IAChD,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,cAAwB;IACvE,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,OAAO,gBAAgB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC;AAC9D,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,uBAAuB;IACrC,OAAO,iCAAiC,CAAC;AAC3C,CAAC;AAED,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,OAAO,UAAU,MAAM,CAAC,MAAM,QAAQ,CAAC;AACzC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E,6DAA6D;AAC7D,MAAM,UAAU,qBAAqB,CAAC,OAAsB,EAAE,OAAe;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,GAAG,WAAW,KAAK,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,yBAAyB,CAAC,OAAsB,EAAE,OAAe;IAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,GAAG,WAAW,KAAK,OAAO,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* I/O adapters for inbound message parsing.
|
|
6
|
+
*
|
|
7
|
+
* Contains API-calling functions that are used during the parse phase
|
|
8
|
+
* but separated from the pure parsing logic in parse.ts.
|
|
9
|
+
*/
|
|
10
|
+
import type { LarkClient as LarkClientType } from '../../core/lark-client';
|
|
11
|
+
import type { LarkAccount } from '../../core/types';
|
|
12
|
+
/** Shape of a single message item returned by the im/v1/messages API. */
|
|
13
|
+
export interface ApiMessageItem {
|
|
14
|
+
message_id?: string;
|
|
15
|
+
msg_type?: string;
|
|
16
|
+
body?: {
|
|
17
|
+
content?: string;
|
|
18
|
+
};
|
|
19
|
+
sender?: {
|
|
20
|
+
id?: string;
|
|
21
|
+
sender_type?: string;
|
|
22
|
+
};
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 对 interactive 消息,通过 TAT 调用 API 获取完整 v2 卡片内容。
|
|
27
|
+
* 事件推送的 content 可能不包含 json_card,API 调用可返回完整的 raw_card_content。
|
|
28
|
+
* 失败时返回 undefined,调用方 fallback 到原始 content。
|
|
29
|
+
*
|
|
30
|
+
* Note: `larkClient.sdk` 的类型定义不暴露 raw `request` 方法,
|
|
31
|
+
* 因此这里使用 `as any` 断言调用。
|
|
32
|
+
*/
|
|
33
|
+
export declare function fetchCardContent(messageId: string, larkClient: LarkClientType): Promise<string | undefined>;
|
|
34
|
+
/**
|
|
35
|
+
* Create a `fetchSubMessages` callback for use in `ConvertContext`.
|
|
36
|
+
*
|
|
37
|
+
* The returned function calls the im/v1/messages API to fetch
|
|
38
|
+
* sub-messages of a merge_forward message.
|
|
39
|
+
*
|
|
40
|
+
* Note: `larkClient.sdk` 的类型定义不暴露 raw `request` 方法,
|
|
41
|
+
* 因此这里使用 `as any` 断言调用。
|
|
42
|
+
*/
|
|
43
|
+
export declare function createFetchSubMessages(larkClient: LarkClientType): (msgId: string) => Promise<ApiMessageItem[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Create a `batchResolveNames` callback for use in `ConvertContext`.
|
|
46
|
+
*
|
|
47
|
+
* Wraps `createBatchResolveNames` from user-name-cache.ts, providing
|
|
48
|
+
* the account and log function.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createParseResolveNames(account: LarkAccount): (openIds: string[]) => Promise<void>;
|
|
51
|
+
//# sourceMappingURL=parse-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-io.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/parse-io.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAUpD,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiBjH;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAc/G;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAElG"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* I/O adapters for inbound message parsing.
|
|
6
|
+
*
|
|
7
|
+
* Contains API-calling functions that are used during the parse phase
|
|
8
|
+
* but separated from the pure parsing logic in parse.ts.
|
|
9
|
+
*/
|
|
10
|
+
import { larkLogger } from '../../core/lark-logger';
|
|
11
|
+
import { createBatchResolveNames } from './user-name-cache';
|
|
12
|
+
const log = larkLogger('inbound/parse-io');
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Card content fetcher
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* 对 interactive 消息,通过 TAT 调用 API 获取完整 v2 卡片内容。
|
|
18
|
+
* 事件推送的 content 可能不包含 json_card,API 调用可返回完整的 raw_card_content。
|
|
19
|
+
* 失败时返回 undefined,调用方 fallback 到原始 content。
|
|
20
|
+
*
|
|
21
|
+
* Note: `larkClient.sdk` 的类型定义不暴露 raw `request` 方法,
|
|
22
|
+
* 因此这里使用 `as any` 断言调用。
|
|
23
|
+
*/
|
|
24
|
+
export async function fetchCardContent(messageId, larkClient) {
|
|
25
|
+
try {
|
|
26
|
+
// SDK 类型不暴露 raw request 方法,需要 as any
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
const response = await larkClient.sdk.request({
|
|
29
|
+
method: 'GET',
|
|
30
|
+
url: `/open-apis/im/v1/messages/${messageId}`,
|
|
31
|
+
params: {
|
|
32
|
+
user_id_type: 'open_id',
|
|
33
|
+
card_msg_content_type: 'raw_card_content',
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
return response?.data?.items?.[0]?.body?.content ?? undefined;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
log.warn(`fetchCardContent failed for ${messageId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Sub-message fetcher (for merge_forward)
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Create a `fetchSubMessages` callback for use in `ConvertContext`.
|
|
48
|
+
*
|
|
49
|
+
* The returned function calls the im/v1/messages API to fetch
|
|
50
|
+
* sub-messages of a merge_forward message.
|
|
51
|
+
*
|
|
52
|
+
* Note: `larkClient.sdk` 的类型定义不暴露 raw `request` 方法,
|
|
53
|
+
* 因此这里使用 `as any` 断言调用。
|
|
54
|
+
*/
|
|
55
|
+
export function createFetchSubMessages(larkClient) {
|
|
56
|
+
return async (msgId) => {
|
|
57
|
+
// SDK 类型不暴露 raw request 方法,需要 as any
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
const response = await larkClient.sdk.request({
|
|
60
|
+
method: 'GET',
|
|
61
|
+
url: `/open-apis/im/v1/messages/${msgId}`,
|
|
62
|
+
params: { user_id_type: 'open_id', card_msg_content_type: 'raw_card_content' },
|
|
63
|
+
});
|
|
64
|
+
if (response?.code !== 0) {
|
|
65
|
+
throw new Error(`API error: code=${response?.code} msg=${response?.msg}`);
|
|
66
|
+
}
|
|
67
|
+
return response?.data?.items ?? [];
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Batch resolve names callback factory
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
/**
|
|
74
|
+
* Create a `batchResolveNames` callback for use in `ConvertContext`.
|
|
75
|
+
*
|
|
76
|
+
* Wraps `createBatchResolveNames` from user-name-cache.ts, providing
|
|
77
|
+
* the account and log function.
|
|
78
|
+
*/
|
|
79
|
+
export function createParseResolveNames(account) {
|
|
80
|
+
return createBatchResolveNames(account, (...args) => log.info(args.map(String).join(' ')));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=parse-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-io.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/parse-io.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,GAAG,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAe3C,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,UAA0B;IAClF,IAAI,CAAC;QACH,qCAAqC;QACrC,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,MAAO,UAAU,CAAC,GAAW,CAAC,OAAO,CAAC;YACrD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,6BAA6B,SAAS,EAAE;YAC7C,MAAM,EAAE;gBACN,YAAY,EAAE,SAAS;gBACvB,qBAAqB,EAAE,kBAAkB;aAC1C;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,+BAA+B,SAAS,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1G,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA0B;IAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,qCAAqC;QACrC,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,MAAO,UAAU,CAAC,GAAW,CAAC,OAAO,CAAC;YACrD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,6BAA6B,KAAK,EAAE;YACzC,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE;SAC/E,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,IAAI,QAAQ,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAoB;IAC1D,OAAO,uBAAuB,CAAC,OAAO,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxG,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Event parsing for inbound Feishu messages.
|
|
6
|
+
*
|
|
7
|
+
* Converts a raw FeishuMessageEvent into a normalised MessageContext.
|
|
8
|
+
* All mention information is captured in `mentions: MentionInfo[]`;
|
|
9
|
+
* downstream logic derives `mentionedBot` and non-bot targets from it.
|
|
10
|
+
*
|
|
11
|
+
* When `expandCtx` is provided, `cfg` and `accountId` are passed into
|
|
12
|
+
* the converter context so that async converters (e.g. merge_forward)
|
|
13
|
+
* can make API calls during parsing.
|
|
14
|
+
*/
|
|
15
|
+
import type { ClawdbotConfig } from 'openclaw/plugin-sdk';
|
|
16
|
+
import type { FeishuMessageEvent, MessageContext } from '../types';
|
|
17
|
+
/**
|
|
18
|
+
* Parse a raw Feishu message event into a normalised MessageContext.
|
|
19
|
+
*
|
|
20
|
+
* @param expandCtx When provided, cfg/accountId are used to create
|
|
21
|
+
* callbacks for async converters (e.g. merge_forward)
|
|
22
|
+
* to fetch sub-messages and resolve sender names.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseMessageEvent(event: FeishuMessageEvent, botOpenId?: string, expandCtx?: {
|
|
25
|
+
/** account 级别的 ClawdbotConfig(channels.feishu 已替换为 per-account 合并后的配置) */
|
|
26
|
+
cfg: ClawdbotConfig;
|
|
27
|
+
accountId?: string;
|
|
28
|
+
}): Promise<MessageContext>;
|
|
29
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAe,MAAM,UAAU,CAAC;AAchF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,kBAAkB,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE;IACV,0EAA0E;IAC1E,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,cAAc,CAAC,CAoFzB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Event parsing for inbound Feishu messages.
|
|
6
|
+
*
|
|
7
|
+
* Converts a raw FeishuMessageEvent into a normalised MessageContext.
|
|
8
|
+
* All mention information is captured in `mentions: MentionInfo[]`;
|
|
9
|
+
* downstream logic derives `mentionedBot` and non-bot targets from it.
|
|
10
|
+
*
|
|
11
|
+
* When `expandCtx` is provided, `cfg` and `accountId` are passed into
|
|
12
|
+
* the converter context so that async converters (e.g. merge_forward)
|
|
13
|
+
* can make API calls during parsing.
|
|
14
|
+
*/
|
|
15
|
+
import { convertMessageContent } from '../converters/content-converter';
|
|
16
|
+
import { getUserNameCache } from './user-name-cache';
|
|
17
|
+
import { getLarkAccount } from '../../core/accounts';
|
|
18
|
+
import { LarkClient } from '../../core/lark-client';
|
|
19
|
+
import { larkLogger } from '../../core/lark-logger';
|
|
20
|
+
import { fetchCardContent, createFetchSubMessages, createParseResolveNames } from './parse-io';
|
|
21
|
+
const log = larkLogger('inbound/parse');
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Public API
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/**
|
|
26
|
+
* Parse a raw Feishu message event into a normalised MessageContext.
|
|
27
|
+
*
|
|
28
|
+
* @param expandCtx When provided, cfg/accountId are used to create
|
|
29
|
+
* callbacks for async converters (e.g. merge_forward)
|
|
30
|
+
* to fetch sub-messages and resolve sender names.
|
|
31
|
+
*/
|
|
32
|
+
export async function parseMessageEvent(event, botOpenId, expandCtx) {
|
|
33
|
+
// 1. Build MentionInfo list from event mentions
|
|
34
|
+
const mentionMap = new Map();
|
|
35
|
+
const mentionList = [];
|
|
36
|
+
for (const m of event.message.mentions ?? []) {
|
|
37
|
+
const openId = m.id?.open_id ?? '';
|
|
38
|
+
if (!openId)
|
|
39
|
+
continue;
|
|
40
|
+
const info = {
|
|
41
|
+
key: m.key,
|
|
42
|
+
openId,
|
|
43
|
+
name: m.name,
|
|
44
|
+
isBot: Boolean(botOpenId && openId === botOpenId),
|
|
45
|
+
};
|
|
46
|
+
mentionMap.set(m.key, info);
|
|
47
|
+
mentionList.push(info);
|
|
48
|
+
}
|
|
49
|
+
// Build reverse map for O(1) openId lookup
|
|
50
|
+
const mentionsByOpenId = new Map();
|
|
51
|
+
for (const info of mentionList) {
|
|
52
|
+
mentionsByOpenId.set(info.openId, info);
|
|
53
|
+
}
|
|
54
|
+
// 2. Convert content via registered converter
|
|
55
|
+
const acctId = expandCtx?.accountId;
|
|
56
|
+
// Create larkClient once when expandCtx is available (used for merge_forward & card fetch)
|
|
57
|
+
const larkClient = expandCtx ? LarkClient.fromCfg(expandCtx.cfg, acctId) : undefined;
|
|
58
|
+
// Build merge_forward callbacks when expandCtx is provided
|
|
59
|
+
let fetchSubMessages;
|
|
60
|
+
let batchResolveNames;
|
|
61
|
+
if (expandCtx) {
|
|
62
|
+
const account = getLarkAccount(expandCtx.cfg, acctId);
|
|
63
|
+
fetchSubMessages = createFetchSubMessages(larkClient);
|
|
64
|
+
batchResolveNames = createParseResolveNames(account);
|
|
65
|
+
}
|
|
66
|
+
// For interactive messages, fetch full v2 card content via API
|
|
67
|
+
let effectiveContent = event.message.content;
|
|
68
|
+
if (event.message.message_type === 'interactive' && expandCtx) {
|
|
69
|
+
const fullContent = await fetchCardContent(event.message.message_id, larkClient);
|
|
70
|
+
if (fullContent) {
|
|
71
|
+
effectiveContent = fullContent;
|
|
72
|
+
log.info('replaced interactive content with full v2 card data');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const convertCtx = {
|
|
76
|
+
mentions: mentionMap,
|
|
77
|
+
mentionsByOpenId,
|
|
78
|
+
messageId: event.message.message_id,
|
|
79
|
+
botOpenId,
|
|
80
|
+
cfg: expandCtx?.cfg,
|
|
81
|
+
accountId: acctId,
|
|
82
|
+
resolveUserName: acctId ? (openId) => getUserNameCache(acctId).get(openId) : undefined,
|
|
83
|
+
fetchSubMessages,
|
|
84
|
+
batchResolveNames,
|
|
85
|
+
stripBotMentions: true,
|
|
86
|
+
};
|
|
87
|
+
const { content, resources } = await convertMessageContent(effectiveContent, event.message.message_type, convertCtx);
|
|
88
|
+
const createTimeStr = event.message.create_time;
|
|
89
|
+
const createTime = createTimeStr ? parseInt(createTimeStr, 10) : undefined;
|
|
90
|
+
return {
|
|
91
|
+
chatId: event.message.chat_id,
|
|
92
|
+
messageId: event.message.message_id,
|
|
93
|
+
senderId: event.sender.sender_id.open_id || '',
|
|
94
|
+
chatType: event.message.chat_type,
|
|
95
|
+
rootId: event.message.root_id || undefined,
|
|
96
|
+
parentId: event.message.parent_id || undefined,
|
|
97
|
+
threadId: event.message.thread_id || undefined,
|
|
98
|
+
content,
|
|
99
|
+
contentType: event.message.message_type,
|
|
100
|
+
resources,
|
|
101
|
+
mentions: mentionList,
|
|
102
|
+
createTime: Number.isNaN(createTime) ? undefined : createTime,
|
|
103
|
+
rawMessage: effectiveContent !== event.message.content ? { ...event.message, content: effectiveContent } : event.message,
|
|
104
|
+
rawSender: event.sender,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Permission error extraction and cooldown tracking for Feishu API calls.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from bot.ts: PermissionError type, extractPermissionError,
|
|
8
|
+
* PERMISSION_ERROR_COOLDOWN_MS, permissionErrorNotifiedAt.
|
|
9
|
+
*/
|
|
10
|
+
export interface PermissionError {
|
|
11
|
+
code: number;
|
|
12
|
+
message: string;
|
|
13
|
+
grantUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function extractPermissionError(err: unknown): PermissionError | null;
|
|
16
|
+
export declare const PERMISSION_ERROR_COOLDOWN_MS: number;
|
|
17
|
+
export declare const permissionErrorNotifiedAt: Map<string, number>;
|
|
18
|
+
//# sourceMappingURL=permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/permission.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CA8B3E;AAMD,eAAO,MAAM,4BAA4B,QAAgB,CAAC;AAC1D,eAAO,MAAM,yBAAyB,qBAA4B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Permission error extraction and cooldown tracking for Feishu API calls.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from bot.ts: PermissionError type, extractPermissionError,
|
|
8
|
+
* PERMISSION_ERROR_COOLDOWN_MS, permissionErrorNotifiedAt.
|
|
9
|
+
*/
|
|
10
|
+
import { extractPermissionGrantUrl } from '../../core/permission-url';
|
|
11
|
+
import { LARK_ERROR } from '../../core/auth-errors';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Permission error extraction
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
export function extractPermissionError(err) {
|
|
16
|
+
if (!err || typeof err !== 'object') {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const axiosErr = err;
|
|
20
|
+
const data = axiosErr.response?.data;
|
|
21
|
+
if (!data || typeof data !== 'object') {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const feishuErr = data;
|
|
25
|
+
// Feishu permission error code
|
|
26
|
+
if (feishuErr.code !== LARK_ERROR.APP_SCOPE_MISSING) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const msg = feishuErr.msg ?? '';
|
|
30
|
+
const grantUrl = extractPermissionGrantUrl(msg);
|
|
31
|
+
if (!grantUrl) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return { code: feishuErr.code, message: msg, grantUrl };
|
|
35
|
+
}
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Cooldown tracking
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
export const PERMISSION_ERROR_COOLDOWN_MS = 5 * 60 * 1000; // 5 minutes
|
|
40
|
+
export const permissionErrorNotifiedAt = new Map();
|
|
41
|
+
//# sourceMappingURL=permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/permission.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAYpD,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,GAAwC,CAAC;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,IAIjB,CAAC;IAEF,+BAA+B;IAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC1D,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAkB,CAAC"}
|