@openclaw/slack 2026.7.1-beta.1 → 2026.7.1-beta.4
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/dist/{account-inspect-DOtQbKkB.js → account-inspect-Di7ditqZ.js} +1 -1
- package/dist/account-inspect-api.js +1 -1
- package/dist/{accounts-BPCiCe8y.js → accounts-BOJJiHSr.js} +14 -1
- package/dist/accounts.runtime-DWvaCb-X.js +2 -0
- package/dist/{action-runtime-BLu039dd.js → action-runtime-DoQGk_8D.js} +37 -40
- package/dist/action-runtime.runtime-BABj3aM-.js +2 -0
- package/dist/{actions-CqRHPciJ.js → actions-DMpDmKEA.js} +211 -57
- package/dist/actions.runtime-C103_BPW.js +2 -0
- package/dist/api.js +13 -13
- package/dist/{approval-handler.runtime-BqNO_HC_.js → approval-handler.runtime-CIUbOt5T.js} +2 -2
- package/dist/{channel-DjNY4ik7.js → channel-CG29WLVd.js} +198 -111
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel.setup-CDOZ8V3p.js → channel.setup-Dq6syTNU.js} +3 -3
- package/dist/{client-DG9cyk55.js → client-DGxwSL7f.js} +0 -1
- package/dist/{directory-config-DDVHDmrN.js → directory-config-BZuS8141.js} +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/{directory-live-DC-YA5SQ.js → directory-live-BNsxCgqP.js} +2 -2
- package/dist/format-YCNoNkM2.js +107 -0
- package/dist/http-routes-api.js +1 -1
- package/dist/index.js +1 -1
- package/dist/{interactive-replies-D-22gTp3.js → interactive-replies-CXpT-vA_.js} +13 -2
- package/dist/interactive-replies-api.js +1 -1
- package/dist/{message-tool-api--zYyTqrR.js → message-tool-api-BgWKyu2r.js} +11 -4
- package/dist/message-tool-api.js +1 -1
- package/dist/{monitor-Cf50drfK.js → monitor-D6Km2CFH.js} +3 -3
- package/dist/outbound-adapter-DVoBfBW5.js +272 -0
- package/dist/{pipeline.runtime-BKICBY52.js → pipeline.runtime-0wEFX2CS.js} +185 -268
- package/dist/{plugin-routes-B9PvcDQJ.js → plugin-routes-CLp4obpN.js} +1 -1
- package/dist/{policy-DAE6BTN3.js → policy-Dj-puVPb.js} +10 -4
- package/dist/{probe-DFKt9Ute.js → probe-CuwRDE5j.js} +10 -4
- package/dist/{provider-DOZHzRWi.js → provider-Cot8h818.js} +199 -154
- package/dist/{relay-source-BpBIUaF8.js → relay-source-CU1LhyBj.js} +2 -2
- package/dist/{replies-CMZq3Lcb.js → replies-Bbx6pG_B.js} +4 -3
- package/dist/{reply-blocks-CfJqf7eq.js → reply-blocks-BGQ6zSqM.js} +184 -36
- package/dist/{resolve-channels-eniB45fy.js → resolve-channels-CstkChBE.js} +1 -1
- package/dist/{resolve-users-DDKzl37a.js → resolve-users-C3NP2c-Q.js} +1 -1
- package/dist/{runtime-api-DHJ8ntLr.js → runtime-api-CEmqYxR-.js} +1 -1
- package/dist/runtime-api.js +12 -12
- package/dist/{scopes-BdVdJxFf.js → scopes-DCWVD5-8.js} +2 -2
- package/dist/{send-Dg6U9K7_.js → send-DKDXoeoV.js} +392 -225
- package/dist/send.runtime-GPRa63l1.js +2 -0
- package/dist/{setup-core-BCGzyZhx.js → setup-core-fGd6Gquy.js} +4 -3
- package/dist/setup-entry.js +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-D7xdZLxB.js → setup-surface-Dv2fIJNB.js} +5 -5
- package/dist/{shared-iMaNxOIL.js → shared-CosfcFri.js} +5 -5
- package/dist/{slash-dispatch.runtime-C-1pDqWi.js → slash-dispatch.runtime-Ccm3quU1.js} +1 -1
- package/node_modules/@slack/web-api/dist/chat-stream.d.ts +6 -0
- package/node_modules/@slack/web-api/dist/chat-stream.d.ts.map +1 -1
- package/node_modules/@slack/web-api/dist/chat-stream.js +8 -0
- package/node_modules/@slack/web-api/dist/chat-stream.js.map +1 -1
- package/node_modules/@slack/web-api/dist/types/request/assistant.d.ts +1 -1
- package/node_modules/@slack/web-api/dist/types/request/assistant.d.ts.map +1 -1
- package/node_modules/@slack/web-api/package.json +1 -1
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/assert/strict.d.ts +10 -1
- package/node_modules/@types/node/assert.d.ts +144 -17
- package/node_modules/@types/node/async_hooks.d.ts +9 -9
- package/node_modules/@types/node/buffer.d.ts +64 -30
- package/node_modules/@types/node/child_process.d.ts +17 -21
- package/node_modules/@types/node/cluster.d.ts +13 -13
- package/node_modules/@types/node/console.d.ts +1 -1
- package/node_modules/@types/node/crypto.d.ts +471 -575
- package/node_modules/@types/node/diagnostics_channel.d.ts +274 -32
- package/node_modules/@types/node/dns.d.ts +15 -15
- package/node_modules/@types/node/events.d.ts +3 -3
- package/node_modules/@types/node/ffi.d.ts +486 -0
- package/node_modules/@types/node/fs/promises.d.ts +7 -4
- package/node_modules/@types/node/fs.d.ts +24 -18
- package/node_modules/@types/node/globals.d.ts +4 -4
- package/node_modules/@types/node/http.d.ts +30 -5
- package/node_modules/@types/node/http2.d.ts +2 -1
- package/node_modules/@types/node/index.d.ts +1 -3
- package/node_modules/@types/node/inspector.d.ts +1 -1
- package/node_modules/@types/node/module.d.ts +16 -45
- package/node_modules/@types/node/net.d.ts +1 -1
- package/node_modules/@types/node/os.d.ts +2 -2
- package/node_modules/@types/node/package.json +4 -4
- package/node_modules/@types/node/perf_hooks.d.ts +1 -9
- package/node_modules/@types/node/process.d.ts +25 -12
- package/node_modules/@types/node/quic.d.ts +92 -11
- package/node_modules/@types/node/readline.d.ts +12 -11
- package/node_modules/@types/node/repl.d.ts +10 -10
- package/node_modules/@types/node/sqlite.d.ts +56 -1
- package/node_modules/@types/node/stream/iter.d.ts +150 -0
- package/node_modules/@types/node/stream/promises.d.ts +2 -2
- package/node_modules/@types/node/stream/web.d.ts +1 -1
- package/node_modules/@types/node/stream.d.ts +37 -5
- package/node_modules/@types/node/test/reporters.d.ts +1 -1
- package/node_modules/@types/node/test.d.ts +120 -10
- package/node_modules/@types/node/tls.d.ts +1 -1
- package/node_modules/@types/node/ts5.6/index.d.ts +2 -4
- package/node_modules/@types/node/ts5.7/index.d.ts +1 -3
- package/node_modules/@types/node/url.d.ts +3 -3
- package/node_modules/@types/node/util/types.d.ts +1 -1
- package/node_modules/@types/node/util.d.ts +22 -22
- package/node_modules/@types/node/v8.d.ts +85 -3
- package/node_modules/@types/node/vm.d.ts +9 -9
- package/node_modules/@types/node/web-globals/domexception.d.ts +15 -0
- package/node_modules/@types/node/worker_threads.d.ts +10 -12
- package/node_modules/@types/node/zlib.d.ts +3 -3
- package/node_modules/body-parser/README.md +16 -1
- package/node_modules/body-parser/index.js +4 -20
- package/node_modules/body-parser/lib/read.js +17 -17
- package/node_modules/body-parser/lib/types/json.js +60 -32
- package/node_modules/body-parser/lib/types/raw.js +3 -3
- package/node_modules/body-parser/lib/types/text.js +3 -3
- package/node_modules/body-parser/lib/types/urlencoded.js +16 -20
- package/node_modules/body-parser/lib/utils.js +18 -16
- package/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
- package/node_modules/body-parser/node_modules/content-type/README.md +69 -0
- package/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +26 -0
- package/node_modules/body-parser/node_modules/content-type/dist/index.js +170 -0
- package/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/body-parser/node_modules/content-type/package.json +52 -0
- package/node_modules/body-parser/package.json +23 -10
- package/node_modules/range-parser/README.md +13 -12
- package/node_modules/range-parser/index.js +27 -8
- package/node_modules/range-parser/package.json +12 -8
- package/node_modules/semver/classes/range.js +6 -2
- package/node_modules/semver/package.json +1 -1
- package/node_modules/side-channel/CHANGELOG.md +10 -0
- package/node_modules/side-channel/README.md +1 -1
- package/node_modules/side-channel/index.js +5 -2
- package/node_modules/side-channel/package.json +10 -10
- package/node_modules/side-channel/test/index.js +16 -0
- package/node_modules/typebox/build/compile/validator.d.mts +2 -7
- package/node_modules/typebox/build/compile/validator.mjs +6 -36
- package/node_modules/typebox/build/error/errors.d.mts +1 -7
- package/node_modules/typebox/build/format/_idna.mjs +36 -6
- package/node_modules/typebox/build/format/_puny.mjs +4 -1
- package/node_modules/typebox/build/format/uuid.d.mts +2 -2
- package/node_modules/typebox/build/format/uuid.mjs +3 -3
- package/node_modules/typebox/build/guard/emit.d.mts +0 -4
- package/node_modules/typebox/build/guard/emit.mjs +0 -8
- package/node_modules/typebox/build/guard/guard.d.mts +4 -8
- package/node_modules/typebox/build/guard/guard.mjs +5 -13
- package/node_modules/typebox/build/schema/engine/boolean.d.mts +3 -3
- package/node_modules/typebox/build/schema/engine/boolean.mjs +4 -4
- package/node_modules/typebox/build/schema/engine/index.d.mts +0 -1
- package/node_modules/typebox/build/schema/engine/index.mjs +0 -1
- package/node_modules/typebox/build/schema/engine/schema.mjs +5 -10
- package/node_modules/typebox/build/schema/engine/type.mjs +14 -18
- package/node_modules/typebox/build/schema/types/dependencies.mjs +1 -1
- package/node_modules/typebox/build/schema/types/index.d.mts +0 -1
- package/node_modules/typebox/build/schema/types/index.mjs +0 -1
- package/node_modules/typebox/build/schema/types/schema.d.mts +1 -1
- package/node_modules/typebox/build/schema/types/schema.mjs +2 -2
- package/node_modules/typebox/build/system/locale/ar_001.mjs +0 -1
- package/node_modules/typebox/build/system/locale/bn_BD.mjs +0 -1
- package/node_modules/typebox/build/system/locale/cs_CZ.mjs +0 -1
- package/node_modules/typebox/build/system/locale/de_DE.mjs +0 -1
- package/node_modules/typebox/build/system/locale/el_GR.mjs +0 -1
- package/node_modules/typebox/build/system/locale/en_US.mjs +0 -1
- package/node_modules/typebox/build/system/locale/es_419.mjs +0 -1
- package/node_modules/typebox/build/system/locale/es_AR.mjs +0 -1
- package/node_modules/typebox/build/system/locale/es_ES.mjs +0 -1
- package/node_modules/typebox/build/system/locale/es_MX.mjs +0 -1
- package/node_modules/typebox/build/system/locale/fa_IR.mjs +0 -1
- package/node_modules/typebox/build/system/locale/fil_PH.mjs +0 -1
- package/node_modules/typebox/build/system/locale/fr_CA.mjs +0 -1
- package/node_modules/typebox/build/system/locale/fr_FR.mjs +0 -1
- package/node_modules/typebox/build/system/locale/ha_NG.mjs +0 -1
- package/node_modules/typebox/build/system/locale/hi_IN.mjs +0 -1
- package/node_modules/typebox/build/system/locale/hu_HU.mjs +0 -1
- package/node_modules/typebox/build/system/locale/id_ID.mjs +0 -1
- package/node_modules/typebox/build/system/locale/it_IT.mjs +0 -1
- package/node_modules/typebox/build/system/locale/ja_JP.mjs +0 -1
- package/node_modules/typebox/build/system/locale/ko_KR.mjs +0 -1
- package/node_modules/typebox/build/system/locale/ms_MY.mjs +0 -1
- package/node_modules/typebox/build/system/locale/nl_NL.mjs +0 -1
- package/node_modules/typebox/build/system/locale/pl_PL.mjs +0 -1
- package/node_modules/typebox/build/system/locale/pt_BR.mjs +0 -1
- package/node_modules/typebox/build/system/locale/pt_PT.mjs +0 -1
- package/node_modules/typebox/build/system/locale/ro_RO.mjs +0 -1
- package/node_modules/typebox/build/system/locale/ru_RU.mjs +0 -1
- package/node_modules/typebox/build/system/locale/sv_SE.mjs +0 -1
- package/node_modules/typebox/build/system/locale/sw_TZ.mjs +0 -1
- package/node_modules/typebox/build/system/locale/th_TH.mjs +0 -1
- package/node_modules/typebox/build/system/locale/tr_TR.mjs +0 -1
- package/node_modules/typebox/build/system/locale/uk_UA.mjs +0 -1
- package/node_modules/typebox/build/system/locale/ur_PK.mjs +0 -1
- package/node_modules/typebox/build/system/locale/vi_VN.mjs +0 -1
- package/node_modules/typebox/build/system/locale/yo_NG.mjs +0 -1
- package/node_modules/typebox/build/system/locale/zh_Hans.mjs +0 -1
- package/node_modules/typebox/build/system/locale/zh_Hant.mjs +0 -1
- package/node_modules/typebox/build/system/memory/clone.d.mts +2 -3
- package/node_modules/typebox/build/system/memory/clone.mjs +73 -26
- package/node_modules/typebox/build/system/settings/settings.d.mts +15 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +3 -1
- package/node_modules/typebox/build/type/action/_add_immutable.d.mts +11 -0
- package/node_modules/typebox/build/type/action/_add_immutable.mjs +11 -0
- package/node_modules/typebox/build/type/action/_add_optional.d.mts +11 -0
- package/node_modules/typebox/build/type/action/_add_optional.mjs +11 -0
- package/node_modules/typebox/build/type/action/_add_readonly.d.mts +11 -0
- package/node_modules/typebox/build/type/action/_add_readonly.mjs +11 -0
- package/node_modules/typebox/build/type/action/_remove_immutable.d.mts +11 -0
- package/node_modules/typebox/build/type/action/_remove_immutable.mjs +11 -0
- package/node_modules/typebox/build/type/action/_remove_optional.d.mts +11 -0
- package/node_modules/typebox/build/type/action/_remove_optional.mjs +11 -0
- package/node_modules/typebox/build/type/action/_remove_readonly.d.mts +11 -0
- package/node_modules/typebox/build/type/action/_remove_readonly.mjs +11 -0
- package/node_modules/typebox/build/type/action/conditional.d.mts +2 -3
- package/node_modules/typebox/build/type/action/conditional.mjs +2 -1
- package/node_modules/typebox/build/type/action/index.d.mts +7 -4
- package/node_modules/typebox/build/type/action/index.mjs +7 -4
- package/node_modules/typebox/build/type/action/mapped.d.mts +2 -3
- package/node_modules/typebox/build/type/action/mapped.mjs +2 -1
- package/node_modules/typebox/build/type/action/module.d.mts +8 -7
- package/node_modules/typebox/build/type/action/module.mjs +7 -6
- package/node_modules/typebox/build/type/action/readonly_object.d.mts +0 -5
- package/node_modules/typebox/build/type/action/readonly_object.mjs +0 -5
- package/node_modules/typebox/build/type/action/with.d.mts +11 -0
- package/node_modules/typebox/build/type/action/with.mjs +11 -0
- package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +1 -1
- package/node_modules/typebox/build/type/engine/call/instantiate.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/call/instantiate.mjs +3 -2
- package/node_modules/typebox/build/type/engine/call/resolve_arguments.mjs +2 -2
- package/node_modules/typebox/build/type/engine/constructor_parameters/instantiate.d.mts +3 -4
- package/node_modules/typebox/build/type/engine/constructor_parameters/instantiate.mjs +2 -1
- package/node_modules/typebox/build/type/engine/cyclic/candidates.d.mts +2 -3
- package/node_modules/typebox/build/type/engine/cyclic/candidates.mjs +3 -6
- package/node_modules/typebox/build/type/engine/cyclic/check.d.mts +6 -9
- package/node_modules/typebox/build/type/engine/cyclic/check.mjs +10 -16
- package/node_modules/typebox/build/type/engine/cyclic/dependencies.d.mts +1 -4
- package/node_modules/typebox/build/type/engine/cyclic/dependencies.mjs +9 -15
- package/node_modules/typebox/build/type/engine/cyclic/extends.d.mts +1 -4
- package/node_modules/typebox/build/type/engine/cyclic/extends.mjs +8 -14
- package/node_modules/typebox/build/type/engine/cyclic/instantiate.d.mts +2 -5
- package/node_modules/typebox/build/type/engine/cyclic/instantiate.mjs +3 -2
- package/node_modules/typebox/build/type/engine/enum/index.d.mts +0 -1
- package/node_modules/typebox/build/type/engine/enum/index.mjs +0 -1
- package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +1 -2
- package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +2 -6
- package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +10 -6
- package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +10 -6
- package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +2 -1
- package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +3 -3
- package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +17 -5
- package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +34 -8
- package/node_modules/typebox/build/type/engine/exclude/operation.d.mts +5 -6
- package/node_modules/typebox/build/type/engine/exclude/operation.mjs +11 -12
- package/node_modules/typebox/build/type/engine/extract/operation.d.mts +5 -6
- package/node_modules/typebox/build/type/engine/extract/operation.mjs +11 -12
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.d.mts +10 -0
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.mjs +14 -0
- package/node_modules/typebox/build/type/engine/immutable/instantiate_remove.d.mts +10 -0
- package/node_modules/typebox/build/type/engine/immutable/instantiate_remove.mjs +14 -0
- package/node_modules/typebox/build/type/engine/index.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/index.mjs +2 -2
- package/node_modules/typebox/build/type/engine/indexable/from_dependent.d.mts +5 -0
- package/node_modules/typebox/build/type/engine/indexable/from_dependent.mjs +8 -0
- package/node_modules/typebox/build/type/engine/indexable/from_enum.d.mts +3 -3
- package/node_modules/typebox/build/type/engine/indexable/from_enum.mjs +4 -4
- package/node_modules/typebox/build/type/engine/indexable/from_template_literal.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/indexable/from_template_literal.mjs +3 -3
- package/node_modules/typebox/build/type/engine/indexable/from_type.d.mts +3 -1
- package/node_modules/typebox/build/type/engine/indexable/from_type.mjs +9 -6
- package/node_modules/typebox/build/type/engine/indexed/instantiate.d.mts +2 -1
- package/node_modules/typebox/build/type/engine/indexed/instantiate.mjs +5 -2
- package/node_modules/typebox/build/type/engine/instantiate.d.mts +44 -31
- package/node_modules/typebox/build/type/engine/instantiate.mjs +82 -83
- package/node_modules/typebox/build/type/engine/interface/instantiate.d.mts +3 -6
- package/node_modules/typebox/build/type/engine/intrinsics/from_template_literal.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/intrinsics/from_template_literal.mjs +3 -3
- package/node_modules/typebox/build/type/engine/keyof/instantiate.d.mts +2 -1
- package/node_modules/typebox/build/type/engine/keyof/instantiate.mjs +5 -1
- package/node_modules/typebox/build/type/engine/mapped/mapped_operation.d.mts +4 -4
- package/node_modules/typebox/build/type/engine/mapped/mapped_operation.mjs +3 -3
- package/node_modules/typebox/build/type/engine/mapped/mapped_variants.d.mts +5 -4
- package/node_modules/typebox/build/type/engine/mapped/mapped_variants.mjs +10 -5
- package/node_modules/typebox/build/type/engine/module/instantiate.d.mts +7 -9
- package/node_modules/typebox/build/type/engine/module/instantiate.mjs +17 -15
- package/node_modules/typebox/build/type/engine/object/from_dependent.d.mts +5 -0
- package/node_modules/typebox/build/type/engine/object/from_dependent.mjs +8 -0
- package/node_modules/typebox/build/type/engine/object/from_type.d.mts +3 -1
- package/node_modules/typebox/build/type/engine/object/from_type.mjs +8 -5
- package/node_modules/typebox/build/type/engine/object/from_union.mjs +2 -2
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.d.mts +10 -0
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.mjs +14 -0
- package/node_modules/typebox/build/type/engine/optional/instantiate_remove.d.mts +10 -0
- package/node_modules/typebox/build/type/engine/optional/instantiate_remove.mjs +14 -0
- package/node_modules/typebox/build/type/engine/parameters/instantiate.d.mts +3 -4
- package/node_modules/typebox/build/type/engine/parameters/instantiate.mjs +2 -1
- package/node_modules/typebox/build/type/engine/partial/from_dependent.d.mts +5 -0
- package/node_modules/typebox/build/type/engine/partial/from_dependent.mjs +8 -0
- package/node_modules/typebox/build/type/engine/partial/from_intersect.d.mts +1 -1
- package/node_modules/typebox/build/type/engine/partial/from_intersect.mjs +3 -2
- package/node_modules/typebox/build/type/engine/partial/from_object.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/partial/from_object.mjs +2 -2
- package/node_modules/typebox/build/type/engine/partial/from_type.d.mts +3 -1
- package/node_modules/typebox/build/type/engine/partial/from_type.mjs +7 -4
- package/node_modules/typebox/build/type/engine/priority/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/priority/index.mjs +1 -0
- package/node_modules/typebox/build/type/engine/priority/priority.d.mts +20 -0
- package/node_modules/typebox/build/type/engine/priority/priority.mjs +28 -0
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.d.mts +10 -0
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.mjs +14 -0
- package/node_modules/typebox/build/type/engine/readonly/instantiate_remove.d.mts +10 -0
- package/node_modules/typebox/build/type/engine/readonly/instantiate_remove.mjs +14 -0
- package/node_modules/typebox/build/type/engine/readonly_object/from_array.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/readonly_object/from_array.mjs +2 -2
- package/node_modules/typebox/build/type/engine/readonly_object/from_dependent.d.mts +5 -0
- package/node_modules/typebox/build/type/engine/readonly_object/from_dependent.mjs +8 -0
- package/node_modules/typebox/build/type/engine/readonly_object/from_intersect.d.mts +1 -1
- package/node_modules/typebox/build/type/engine/readonly_object/from_intersect.mjs +3 -2
- package/node_modules/typebox/build/type/engine/readonly_object/from_object.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/readonly_object/from_object.mjs +2 -2
- package/node_modules/typebox/build/type/engine/readonly_object/from_tuple.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/readonly_object/from_tuple.mjs +2 -2
- package/node_modules/typebox/build/type/engine/readonly_object/from_type.d.mts +3 -1
- package/node_modules/typebox/build/type/engine/readonly_object/from_type.mjs +8 -5
- package/node_modules/typebox/build/type/engine/record/from_key_enum.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/record/from_key_enum.mjs +2 -2
- package/node_modules/typebox/build/type/engine/record/from_key_template_literal.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/record/from_key_template_literal.mjs +2 -2
- package/node_modules/typebox/build/type/engine/ref/instantiate.d.mts +3 -3
- package/node_modules/typebox/build/type/engine/ref/instantiate.mjs +6 -6
- package/node_modules/typebox/build/type/engine/required/from_dependent.d.mts +5 -0
- package/node_modules/typebox/build/type/engine/required/from_dependent.mjs +8 -0
- package/node_modules/typebox/build/type/engine/required/from_intersect.d.mts +1 -1
- package/node_modules/typebox/build/type/engine/required/from_intersect.mjs +3 -2
- package/node_modules/typebox/build/type/engine/required/from_object.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/required/from_object.mjs +2 -2
- package/node_modules/typebox/build/type/engine/required/from_type.d.mts +3 -1
- package/node_modules/typebox/build/type/engine/required/from_type.mjs +7 -4
- package/node_modules/typebox/build/type/engine/template_literal/decode.mjs +3 -3
- package/node_modules/typebox/build/type/engine/template_literal/encode.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/template_literal/encode.mjs +6 -6
- package/node_modules/typebox/build/type/engine/template_literal/is_finite.mjs +1 -1
- package/node_modules/typebox/build/type/engine/template_literal/is_pattern.mjs +1 -0
- package/node_modules/typebox/build/type/engine/this/expand_this.d.mts +1 -4
- package/node_modules/typebox/build/type/engine/this/expand_this.mjs +7 -13
- package/node_modules/typebox/build/type/engine/with/instantiate.d.mts +8 -0
- package/node_modules/typebox/build/type/engine/{options → with}/instantiate.mjs +5 -5
- package/node_modules/typebox/build/type/extends/dependent.d.mts +6 -0
- package/node_modules/typebox/build/type/extends/dependent.mjs +6 -0
- package/node_modules/typebox/build/type/extends/enum.d.mts +4 -4
- package/node_modules/typebox/build/type/extends/enum.mjs +3 -2
- package/node_modules/typebox/build/type/extends/extends_left.d.mts +5 -7
- package/node_modules/typebox/build/type/extends/extends_left.mjs +24 -27
- package/node_modules/typebox/build/type/extends/extends_right.d.mts +7 -5
- package/node_modules/typebox/build/type/extends/extends_right.mjs +20 -15
- package/node_modules/typebox/build/type/extends/inference.mjs +1 -1
- package/node_modules/typebox/build/type/extends/object.d.mts +8 -1
- package/node_modules/typebox/build/type/extends/object.mjs +25 -3
- package/node_modules/typebox/build/type/extends/parameters.mjs +2 -2
- package/node_modules/typebox/build/type/extends/record.d.mts +13 -0
- package/node_modules/typebox/build/type/extends/record.mjs +23 -0
- package/node_modules/typebox/build/type/extends/template_literal.d.mts +3 -3
- package/node_modules/typebox/build/type/extends/template_literal.mjs +3 -3
- package/node_modules/typebox/build/type/extends/tuple.d.mts +3 -6
- package/node_modules/typebox/build/type/extends/tuple.mjs +6 -5
- package/node_modules/typebox/build/type/extends/union.mjs +2 -2
- package/node_modules/typebox/build/type/script/mapping.d.mts +84 -99
- package/node_modules/typebox/build/type/script/mapping.mjs +81 -85
- package/node_modules/typebox/build/type/script/parser.d.mts +40 -40
- package/node_modules/typebox/build/type/script/parser.mjs +22 -22
- package/node_modules/typebox/build/type/script/script.d.mts +3 -4
- package/node_modules/typebox/build/type/script/script.mjs +3 -2
- package/node_modules/typebox/build/type/script/token/internal/guard.d.mts +1 -1
- package/node_modules/typebox/build/type/script/token/internal/guard.mjs +1 -1
- package/node_modules/typebox/build/type/script/token/internal/take.mjs +1 -1
- package/node_modules/typebox/build/type/script/token/until.mjs +2 -2
- package/node_modules/typebox/build/type/types/_codec.d.mts +12 -12
- package/node_modules/typebox/build/type/types/_codec.mjs +0 -1
- package/node_modules/typebox/build/type/types/_immutable.d.mts +2 -9
- package/node_modules/typebox/build/type/types/_immutable.mjs +2 -10
- package/node_modules/typebox/build/type/types/_optional.d.mts +2 -9
- package/node_modules/typebox/build/type/types/_optional.mjs +2 -11
- package/node_modules/typebox/build/type/types/_readonly.d.mts +2 -9
- package/node_modules/typebox/build/type/types/_readonly.mjs +2 -10
- package/node_modules/typebox/build/type/types/_refine.d.mts +8 -10
- package/node_modules/typebox/build/type/types/_refine.mjs +1 -2
- package/node_modules/typebox/build/type/types/call.d.mts +3 -3
- package/node_modules/typebox/build/type/types/call.mjs +3 -2
- package/node_modules/typebox/build/type/types/deferred.d.mts +1 -0
- package/node_modules/typebox/build/type/types/deferred.mjs +1 -1
- package/node_modules/typebox/build/type/types/dependent.d.mts +17 -0
- package/node_modules/typebox/build/type/types/dependent.mjs +24 -0
- package/node_modules/typebox/build/type/types/enum.d.mts +3 -1
- package/node_modules/typebox/build/type/types/enum.mjs +5 -0
- package/node_modules/typebox/build/type/types/index.d.mts +1 -4
- package/node_modules/typebox/build/type/types/index.mjs +1 -4
- package/node_modules/typebox/build/type/types/number.d.mts +1 -1
- package/node_modules/typebox/build/type/types/number.mjs +1 -1
- package/node_modules/typebox/build/type/types/record.d.mts +13 -7
- package/node_modules/typebox/build/type/types/record.mjs +15 -9
- package/node_modules/typebox/build/type/types/static.d.mts +2 -5
- package/node_modules/typebox/build/typebox.d.mts +4 -8
- package/node_modules/typebox/build/typebox.mjs +4 -8
- package/node_modules/typebox/build/value/clean/clean.mjs +4 -2
- package/node_modules/typebox/build/value/clean/from_intersect.mjs +2 -2
- package/node_modules/typebox/build/value/clean/from_type.mjs +8 -10
- package/node_modules/typebox/build/value/clean/from_union.d.mts +1 -1
- package/node_modules/typebox/build/value/clean/from_union.mjs +1 -2
- package/node_modules/typebox/build/value/clone/clone.mjs +2 -73
- package/node_modules/typebox/build/value/codec/decode.mjs +4 -2
- package/node_modules/typebox/build/value/codec/encode.mjs +4 -2
- package/node_modules/typebox/build/value/codec/from_array.mjs +1 -4
- package/node_modules/typebox/build/value/codec/from_object.mjs +1 -4
- package/node_modules/typebox/build/value/codec/from_record.mjs +2 -7
- package/node_modules/typebox/build/value/codec/from_tuple.mjs +1 -4
- package/node_modules/typebox/build/value/codec/from_union.mjs +2 -3
- package/node_modules/typebox/build/value/convert/from_enum.mjs +3 -4
- package/node_modules/typebox/build/value/convert/from_template_literal.d.mts +1 -1
- package/node_modules/typebox/build/value/convert/from_template_literal.mjs +2 -3
- package/node_modules/typebox/build/value/convert/from_type.mjs +19 -21
- package/node_modules/typebox/build/value/create/from_enum.mjs +2 -2
- package/node_modules/typebox/build/value/create/from_type.mjs +23 -31
- package/node_modules/typebox/build/value/default/from_object.mjs +1 -1
- package/node_modules/typebox/build/value/default/from_type.mjs +8 -10
- package/node_modules/typebox/build/value/index.d.mts +0 -1
- package/node_modules/typebox/build/value/index.mjs +0 -1
- package/node_modules/typebox/build/value/repair/from_enum.mjs +2 -3
- package/node_modules/typebox/build/value/repair/from_type.mjs +24 -22
- package/node_modules/typebox/build/value/shared/union_priority_sort.d.mts +6 -2
- package/node_modules/typebox/build/value/shared/union_priority_sort.mjs +62 -26
- package/node_modules/typebox/build/value/value.d.mts +0 -1
- package/node_modules/typebox/build/value/value.mjs +0 -1
- package/node_modules/typebox/package.json +25 -25
- package/node_modules/typebox/readme.md +97 -80
- package/node_modules/undici-types/agent.d.ts +0 -2
- package/node_modules/undici-types/client.d.ts +25 -19
- package/node_modules/undici-types/dispatcher.d.ts +7 -33
- package/node_modules/undici-types/dispatcher1-wrapper.d.ts +7 -0
- package/node_modules/undici-types/fetch.d.ts +24 -4
- package/node_modules/undici-types/h2c-client.d.ts +6 -6
- package/node_modules/undici-types/handlers.d.ts +1 -2
- package/node_modules/undici-types/header.d.ts +5 -0
- package/node_modules/undici-types/index.d.ts +3 -1
- package/node_modules/undici-types/interceptors.d.ts +1 -1
- package/node_modules/undici-types/package.json +1 -1
- package/node_modules/undici-types/pool.d.ts +0 -2
- package/node_modules/undici-types/proxy-agent.d.ts +2 -2
- package/node_modules/undici-types/round-robin-pool.d.ts +0 -2
- package/node_modules/undici-types/snapshot-agent.d.ts +4 -0
- package/node_modules/undici-types/socks5-proxy-agent.d.ts +2 -2
- package/node_modules/undici-types/webidl.d.ts +0 -1
- package/npm-shrinkwrap.json +55 -47
- package/openclaw.plugin.json +46 -0
- package/package.json +6 -6
- package/dist/accounts.runtime-CgWgzjLX.js +0 -2
- package/dist/action-runtime.runtime-Pwl_ixsr.js +0 -2
- package/dist/actions.runtime-Dl6AfO_g.js +0 -2
- package/dist/errors-CZtmv-h0.js +0 -107
- package/dist/outbound-adapter-WHn1M1t4.js +0 -191
- package/dist/send.runtime-a-O4PP2B.js +0 -2
- package/node_modules/@types/node/compatibility/iterators.d.ts +0 -21
- package/node_modules/@types/ws/node_modules/@types/node/LICENSE +0 -21
- package/node_modules/@types/ws/node_modules/@types/node/README.md +0 -15
- package/node_modules/@types/ws/node_modules/@types/node/assert/strict.d.ts +0 -59
- package/node_modules/@types/ws/node_modules/@types/node/assert.d.ts +0 -950
- package/node_modules/@types/ws/node_modules/@types/node/async_hooks.d.ts +0 -711
- package/node_modules/@types/ws/node_modules/@types/node/buffer.buffer.d.ts +0 -466
- package/node_modules/@types/ws/node_modules/@types/node/buffer.d.ts +0 -1765
- package/node_modules/@types/ws/node_modules/@types/node/child_process.d.ts +0 -1366
- package/node_modules/@types/ws/node_modules/@types/node/cluster.d.ts +0 -432
- package/node_modules/@types/ws/node_modules/@types/node/compatibility/iterators.d.ts +0 -21
- package/node_modules/@types/ws/node_modules/@types/node/console.d.ts +0 -93
- package/node_modules/@types/ws/node_modules/@types/node/constants.d.ts +0 -14
- package/node_modules/@types/ws/node_modules/@types/node/crypto.d.ts +0 -4058
- package/node_modules/@types/ws/node_modules/@types/node/dgram.d.ts +0 -537
- package/node_modules/@types/ws/node_modules/@types/node/diagnostics_channel.d.ts +0 -552
- package/node_modules/@types/ws/node_modules/@types/node/dns/promises.d.ts +0 -497
- package/node_modules/@types/ws/node_modules/@types/node/dns.d.ts +0 -876
- package/node_modules/@types/ws/node_modules/@types/node/domain.d.ts +0 -150
- package/node_modules/@types/ws/node_modules/@types/node/events.d.ts +0 -1008
- package/node_modules/@types/ws/node_modules/@types/node/fs/promises.d.ts +0 -1468
- package/node_modules/@types/ws/node_modules/@types/node/fs.d.ts +0 -4780
- package/node_modules/@types/ws/node_modules/@types/node/globals.d.ts +0 -150
- package/node_modules/@types/ws/node_modules/@types/node/globals.typedarray.d.ts +0 -101
- package/node_modules/@types/ws/node_modules/@types/node/http.d.ts +0 -2147
- package/node_modules/@types/ws/node_modules/@types/node/http2.d.ts +0 -2485
- package/node_modules/@types/ws/node_modules/@types/node/https.d.ts +0 -400
- package/node_modules/@types/ws/node_modules/@types/node/index.d.ts +0 -117
- package/node_modules/@types/ws/node_modules/@types/node/inspector/promises.d.ts +0 -35
- package/node_modules/@types/ws/node_modules/@types/node/inspector.d.ts +0 -264
- package/node_modules/@types/ws/node_modules/@types/node/inspector.generated.d.ts +0 -4406
- package/node_modules/@types/ws/node_modules/@types/node/module.d.ts +0 -755
- package/node_modules/@types/ws/node_modules/@types/node/net.d.ts +0 -970
- package/node_modules/@types/ws/node_modules/@types/node/os.d.ts +0 -498
- package/node_modules/@types/ws/node_modules/@types/node/package.json +0 -155
- package/node_modules/@types/ws/node_modules/@types/node/path/posix.d.ts +0 -8
- package/node_modules/@types/ws/node_modules/@types/node/path/win32.d.ts +0 -8
- package/node_modules/@types/ws/node_modules/@types/node/path.d.ts +0 -178
- package/node_modules/@types/ws/node_modules/@types/node/perf_hooks.d.ts +0 -612
- package/node_modules/@types/ws/node_modules/@types/node/process.d.ts +0 -2204
- package/node_modules/@types/ws/node_modules/@types/node/punycode.d.ts +0 -89
- package/node_modules/@types/ws/node_modules/@types/node/querystring.d.ts +0 -139
- package/node_modules/@types/ws/node_modules/@types/node/quic.d.ts +0 -897
- package/node_modules/@types/ws/node_modules/@types/node/readline/promises.d.ts +0 -158
- package/node_modules/@types/ws/node_modules/@types/node/readline.d.ts +0 -507
- package/node_modules/@types/ws/node_modules/@types/node/repl.d.ts +0 -420
- package/node_modules/@types/ws/node_modules/@types/node/sea.d.ts +0 -47
- package/node_modules/@types/ws/node_modules/@types/node/sqlite.d.ts +0 -1068
- package/node_modules/@types/ws/node_modules/@types/node/stream/consumers.d.ts +0 -114
- package/node_modules/@types/ws/node_modules/@types/node/stream/iter.d.ts +0 -301
- package/node_modules/@types/ws/node_modules/@types/node/stream/promises.d.ts +0 -211
- package/node_modules/@types/ws/node_modules/@types/node/stream/web.d.ts +0 -300
- package/node_modules/@types/ws/node_modules/@types/node/stream.d.ts +0 -1774
- package/node_modules/@types/ws/node_modules/@types/node/string_decoder.d.ts +0 -27
- package/node_modules/@types/ws/node_modules/@types/node/test/reporters.d.ts +0 -59
- package/node_modules/@types/ws/node_modules/@types/node/test.d.ts +0 -2279
- package/node_modules/@types/ws/node_modules/@types/node/timers/promises.d.ts +0 -93
- package/node_modules/@types/ws/node_modules/@types/node/timers.d.ts +0 -149
- package/node_modules/@types/ws/node_modules/@types/node/tls.d.ts +0 -1193
- package/node_modules/@types/ws/node_modules/@types/node/trace_events.d.ts +0 -103
- package/node_modules/@types/ws/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -462
- package/node_modules/@types/ws/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +0 -71
- package/node_modules/@types/ws/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -36
- package/node_modules/@types/ws/node_modules/@types/node/ts5.6/index.d.ts +0 -119
- package/node_modules/@types/ws/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +0 -72
- package/node_modules/@types/ws/node_modules/@types/node/ts5.7/index.d.ts +0 -119
- package/node_modules/@types/ws/node_modules/@types/node/tty.d.ts +0 -225
- package/node_modules/@types/ws/node_modules/@types/node/url.d.ts +0 -556
- package/node_modules/@types/ws/node_modules/@types/node/util/types.d.ts +0 -558
- package/node_modules/@types/ws/node_modules/@types/node/util.d.ts +0 -1677
- package/node_modules/@types/ws/node_modules/@types/node/v8.d.ts +0 -980
- package/node_modules/@types/ws/node_modules/@types/node/vm.d.ts +0 -1136
- package/node_modules/@types/ws/node_modules/@types/node/wasi.d.ts +0 -131
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -59
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/blob.d.ts +0 -23
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/console.d.ts +0 -9
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/crypto.d.ts +0 -39
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/encoding.d.ts +0 -11
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/events.d.ts +0 -106
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/fetch.d.ts +0 -69
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/importmeta.d.ts +0 -13
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/messaging.d.ts +0 -23
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/navigator.d.ts +0 -25
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/performance.d.ts +0 -45
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/storage.d.ts +0 -24
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/streams.d.ts +0 -115
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/timers.d.ts +0 -44
- package/node_modules/@types/ws/node_modules/@types/node/web-globals/url.d.ts +0 -24
- package/node_modules/@types/ws/node_modules/@types/node/worker_threads.d.ts +0 -671
- package/node_modules/@types/ws/node_modules/@types/node/zlib/iter.d.ts +0 -131
- package/node_modules/@types/ws/node_modules/@types/node/zlib.d.ts +0 -589
- package/node_modules/typebox/build/schema/engine/_guard.d.mts +0 -6
- package/node_modules/typebox/build/schema/engine/_guard.mjs +0 -26
- package/node_modules/typebox/build/schema/types/_guard.d.mts +0 -10
- package/node_modules/typebox/build/schema/types/_guard.mjs +0 -16
- package/node_modules/typebox/build/type/action/_optional.d.mts +0 -19
- package/node_modules/typebox/build/type/action/_optional.mjs +0 -40
- package/node_modules/typebox/build/type/action/_readonly.d.mts +0 -19
- package/node_modules/typebox/build/type/action/_readonly.mjs +0 -40
- package/node_modules/typebox/build/type/action/awaited.d.mts +0 -15
- package/node_modules/typebox/build/type/action/awaited.mjs +0 -15
- package/node_modules/typebox/build/type/action/options.d.mts +0 -11
- package/node_modules/typebox/build/type/action/options.mjs +0 -11
- package/node_modules/typebox/build/type/engine/awaited/instantiate.d.mts +0 -11
- package/node_modules/typebox/build/type/engine/awaited/instantiate.mjs +0 -20
- package/node_modules/typebox/build/type/engine/enum/enum_to_union.d.mts +0 -14
- package/node_modules/typebox/build/type/engine/enum/enum_to_union.mjs +0 -24
- package/node_modules/typebox/build/type/engine/options/index.d.mts +0 -1
- package/node_modules/typebox/build/type/engine/options/index.mjs +0 -1
- package/node_modules/typebox/build/type/engine/options/instantiate.d.mts +0 -8
- package/node_modules/typebox/build/type/extends/async_iterator.d.mts +0 -7
- package/node_modules/typebox/build/type/extends/async_iterator.mjs +0 -9
- package/node_modules/typebox/build/type/extends/iterator.d.mts +0 -7
- package/node_modules/typebox/build/type/extends/iterator.mjs +0 -9
- package/node_modules/typebox/build/type/extends/promise.d.mts +0 -7
- package/node_modules/typebox/build/type/extends/promise.mjs +0 -9
- package/node_modules/typebox/build/type/types/async_iterator.d.mts +0 -20
- package/node_modules/typebox/build/type/types/async_iterator.mjs +0 -28
- package/node_modules/typebox/build/type/types/base.d.mts +0 -50
- package/node_modules/typebox/build/type/types/base.mjs +0 -84
- package/node_modules/typebox/build/type/types/iterator.d.mts +0 -20
- package/node_modules/typebox/build/type/types/iterator.mjs +0 -28
- package/node_modules/typebox/build/type/types/promise.d.mts +0 -21
- package/node_modules/typebox/build/type/types/promise.mjs +0 -29
- package/node_modules/typebox/build/value/clean/from_base.d.mts +0 -2
- package/node_modules/typebox/build/value/clean/from_base.mjs +0 -4
- package/node_modules/typebox/build/value/convert/from_base.d.mts +0 -2
- package/node_modules/typebox/build/value/convert/from_base.mjs +0 -4
- package/node_modules/typebox/build/value/create/from_async_iterator.d.mts +0 -2
- package/node_modules/typebox/build/value/create/from_async_iterator.mjs +0 -5
- package/node_modules/typebox/build/value/create/from_base.d.mts +0 -2
- package/node_modules/typebox/build/value/create/from_base.mjs +0 -4
- package/node_modules/typebox/build/value/create/from_iterator.d.mts +0 -2
- package/node_modules/typebox/build/value/create/from_iterator.mjs +0 -5
- package/node_modules/typebox/build/value/create/from_promise.d.mts +0 -2
- package/node_modules/typebox/build/value/create/from_promise.mjs +0 -5
- package/node_modules/typebox/build/value/default/from_base.d.mts +0 -2
- package/node_modules/typebox/build/value/default/from_base.mjs +0 -5
- package/node_modules/typebox/build/value/mutate/error.d.mts +0 -3
- package/node_modules/typebox/build/value/mutate/error.mjs +0 -6
- package/node_modules/typebox/build/value/mutate/from_array.d.mts +0 -2
- package/node_modules/typebox/build/value/mutate/from_array.mjs +0 -16
- package/node_modules/typebox/build/value/mutate/from_object.d.mts +0 -2
- package/node_modules/typebox/build/value/mutate/from_object.mjs +0 -40
- package/node_modules/typebox/build/value/mutate/from_unknown.d.mts +0 -2
- package/node_modules/typebox/build/value/mutate/from_unknown.mjs +0 -7
- package/node_modules/typebox/build/value/mutate/from_value.d.mts +0 -2
- package/node_modules/typebox/build/value/mutate/from_value.mjs +0 -12
- package/node_modules/typebox/build/value/mutate/index.d.mts +0 -1
- package/node_modules/typebox/build/value/mutate/index.mjs +0 -1
- package/node_modules/typebox/build/value/mutate/mutate.d.mts +0 -11
- package/node_modules/typebox/build/value/mutate/mutate.mjs +0 -41
- package/node_modules/typebox/build/value/repair/from_base.d.mts +0 -2
- package/node_modules/typebox/build/value/repair/from_base.mjs +0 -8
- /package/node_modules/typebox/build/type/engine/{awaited → with}/index.d.mts +0 -0
- /package/node_modules/typebox/build/type/engine/{awaited → with}/index.mjs +0 -0
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import { a as resolveSlackAccount,
|
|
1
|
+
import { a as resolveSlackAccount, l as resolveSlackOperationToken, p as resolveSlackBotToken } from "./accounts-BOJJiHSr.js";
|
|
2
2
|
import { r as parseSlackTarget } from "./target-parsing-3jYH8LfB.js";
|
|
3
3
|
import "./targets-Dll4NJgs.js";
|
|
4
|
-
import { a as SLACK_TEXT_LIMIT,
|
|
5
|
-
import { t as normalizeSlackThreadTsCandidate } from "./thread-ts-DUGhaYKq.js";
|
|
6
|
-
import { a as getSlackWriteClient, n as createSlackTokenCacheKey } from "./client-
|
|
4
|
+
import { a as SLACK_TEXT_LIMIT, b as truncateSlackText, i as validateSlackBlocksArray } from "./reply-blocks-BGQ6zSqM.js";
|
|
5
|
+
import { n as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-DUGhaYKq.js";
|
|
6
|
+
import { a as getSlackWriteClient, n as createSlackTokenCacheKey, r as createSlackWebClient } from "./client-DGxwSL7f.js";
|
|
7
7
|
import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
|
|
8
|
-
import {
|
|
8
|
+
import { t as markdownToSlackMrkdwnChunks } from "./format-YCNoNkM2.js";
|
|
9
|
+
import { i as loadOutboundMediaFromUrl } from "./runtime-api-CEmqYxR-.js";
|
|
9
10
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
10
11
|
import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
|
|
11
|
-
import {
|
|
12
|
+
import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
|
13
|
+
import { createHash, createHmac, timingSafeEqual } from "node:crypto";
|
|
12
14
|
import { withTrustedEnvProxyGuardedFetchMode } from "openclaw/plugin-sdk/fetch-runtime";
|
|
13
15
|
import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
|
|
14
|
-
import {
|
|
16
|
+
import { KeyedAsyncQueue } from "openclaw/plugin-sdk/keyed-async-queue";
|
|
15
17
|
import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
|
|
16
18
|
import { chunkMarkdownTextWithMode, isSilentReplyText, resolveChunkMode, resolveTextChunkLimit } from "openclaw/plugin-sdk/reply-chunking";
|
|
17
19
|
import { resolveTextChunksWithFallback } from "openclaw/plugin-sdk/reply-payload";
|
|
18
20
|
import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
19
|
-
import {
|
|
21
|
+
import { createPersistentDedupeCache } from "openclaw/plugin-sdk/dedupe-runtime";
|
|
20
22
|
//#region extensions/slack/src/blocks-fallback.ts
|
|
21
23
|
function cleanCandidate(value) {
|
|
22
24
|
if (typeof value !== "string") return;
|
|
@@ -76,185 +78,33 @@ function buildSlackBlocksFallbackText(blocks) {
|
|
|
76
78
|
return "Shared a Block Kit message";
|
|
77
79
|
}
|
|
78
80
|
//#endregion
|
|
79
|
-
//#region extensions/slack/src/format.ts
|
|
80
|
-
function escapeSlackMrkdwnSegment(text) {
|
|
81
|
-
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
82
|
-
}
|
|
83
|
-
const SLACK_ANGLE_TOKEN_RE = /<[^>\n]+>/g;
|
|
84
|
-
function isAllowedSlackAngleToken(token) {
|
|
85
|
-
if (!token.startsWith("<") || !token.endsWith(">")) return false;
|
|
86
|
-
const inner = token.slice(1, -1);
|
|
87
|
-
return inner.startsWith("@") || inner.startsWith("#") || inner.startsWith("!") || inner.startsWith("mailto:") || inner.startsWith("tel:") || inner.startsWith("http://") || inner.startsWith("https://") || inner.startsWith("slack://");
|
|
88
|
-
}
|
|
89
|
-
function escapeSlackMrkdwnContent(text) {
|
|
90
|
-
if (!text) return "";
|
|
91
|
-
if (!text.includes("&") && !text.includes("<") && !text.includes(">")) return text;
|
|
92
|
-
SLACK_ANGLE_TOKEN_RE.lastIndex = 0;
|
|
93
|
-
const out = [];
|
|
94
|
-
let lastIndex = 0;
|
|
95
|
-
for (let match = SLACK_ANGLE_TOKEN_RE.exec(text); match; match = SLACK_ANGLE_TOKEN_RE.exec(text)) {
|
|
96
|
-
const matchIndex = match.index ?? 0;
|
|
97
|
-
out.push(escapeSlackMrkdwnSegment(text.slice(lastIndex, matchIndex)));
|
|
98
|
-
const token = match[0] ?? "";
|
|
99
|
-
out.push(isAllowedSlackAngleToken(token) ? token : escapeSlackMrkdwnSegment(token));
|
|
100
|
-
lastIndex = matchIndex + token.length;
|
|
101
|
-
}
|
|
102
|
-
out.push(escapeSlackMrkdwnSegment(text.slice(lastIndex)));
|
|
103
|
-
return out.join("");
|
|
104
|
-
}
|
|
105
|
-
function escapeSlackMrkdwnText(text) {
|
|
106
|
-
if (!text) return "";
|
|
107
|
-
if (!text.includes("&") && !text.includes("<") && !text.includes(">")) return text;
|
|
108
|
-
return text.split("\n").map((line) => {
|
|
109
|
-
if (line.startsWith("> ")) return `> ${escapeSlackMrkdwnContent(line.slice(2))}`;
|
|
110
|
-
return escapeSlackMrkdwnContent(line);
|
|
111
|
-
}).join("\n");
|
|
112
|
-
}
|
|
113
|
-
function buildSlackLink(link, text) {
|
|
114
|
-
const href = link.href.trim();
|
|
115
|
-
if (!href) return null;
|
|
116
|
-
const trimmedLabel = text.slice(link.start, link.end).trim();
|
|
117
|
-
const comparableHref = href.startsWith("mailto:") ? href.slice(7) : href;
|
|
118
|
-
if (!(trimmedLabel.length > 0 && trimmedLabel !== href && trimmedLabel !== comparableHref)) return null;
|
|
119
|
-
const safeHref = escapeSlackMrkdwnSegment(href);
|
|
120
|
-
return {
|
|
121
|
-
start: link.start,
|
|
122
|
-
end: link.end,
|
|
123
|
-
open: `<${safeHref}|`,
|
|
124
|
-
close: ">"
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
function buildSlackRenderOptions() {
|
|
128
|
-
return {
|
|
129
|
-
styleMarkers: {
|
|
130
|
-
bold: {
|
|
131
|
-
open: "*",
|
|
132
|
-
close: "*"
|
|
133
|
-
},
|
|
134
|
-
italic: {
|
|
135
|
-
open: "_",
|
|
136
|
-
close: "_"
|
|
137
|
-
},
|
|
138
|
-
strikethrough: {
|
|
139
|
-
open: "~",
|
|
140
|
-
close: "~"
|
|
141
|
-
},
|
|
142
|
-
code: {
|
|
143
|
-
open: "`",
|
|
144
|
-
close: "`"
|
|
145
|
-
},
|
|
146
|
-
code_block: {
|
|
147
|
-
open: "```\n",
|
|
148
|
-
close: "```"
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
escapeText: escapeSlackMrkdwnText,
|
|
152
|
-
buildLink: buildSlackLink
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
function markdownToSlackMrkdwn(markdown, options = {}) {
|
|
156
|
-
return renderMarkdownWithMarkers(markdownToIR(markdown ?? "", {
|
|
157
|
-
linkify: false,
|
|
158
|
-
autolink: false,
|
|
159
|
-
headingStyle: "bold",
|
|
160
|
-
blockquotePrefix: "> ",
|
|
161
|
-
tableMode: options.tableMode
|
|
162
|
-
}), buildSlackRenderOptions());
|
|
163
|
-
}
|
|
164
|
-
function normalizeSlackOutboundText(markdown) {
|
|
165
|
-
return markdownToSlackMrkdwn(markdown ?? "");
|
|
166
|
-
}
|
|
167
|
-
function markdownToSlackMrkdwnChunks(markdown, limit, options = {}) {
|
|
168
|
-
const ir = markdownToIR(markdown ?? "", {
|
|
169
|
-
linkify: false,
|
|
170
|
-
autolink: false,
|
|
171
|
-
headingStyle: "bold",
|
|
172
|
-
blockquotePrefix: "> ",
|
|
173
|
-
tableMode: options.tableMode
|
|
174
|
-
});
|
|
175
|
-
const renderOptions = buildSlackRenderOptions();
|
|
176
|
-
return renderMarkdownIRChunksWithinLimit({
|
|
177
|
-
ir,
|
|
178
|
-
limit,
|
|
179
|
-
renderChunk: (chunk) => renderMarkdownWithMarkers(chunk, renderOptions),
|
|
180
|
-
measureRendered: (rendered) => rendered.length
|
|
181
|
-
}).map(({ rendered }) => rendered);
|
|
182
|
-
}
|
|
183
|
-
//#endregion
|
|
184
81
|
//#region extensions/slack/src/sent-thread-cache.ts
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
82
|
+
const threadParticipation = createPersistentDedupeCache({
|
|
83
|
+
globalKey: Symbol.for("openclaw.slackThreadParticipation"),
|
|
84
|
+
ttlMs: 1440 * 60 * 1e3,
|
|
85
|
+
maxSize: 5e3,
|
|
86
|
+
persistent: {
|
|
87
|
+
namespace: "slack.thread-participation",
|
|
88
|
+
maxEntries: 1e3,
|
|
89
|
+
openStore: (options) => getOptionalSlackRuntime()?.state.openKeyedStore(options),
|
|
90
|
+
logError: (error) => {
|
|
91
|
+
try {
|
|
92
|
+
getOptionalSlackRuntime()?.logging.getChildLogger({
|
|
93
|
+
plugin: "slack",
|
|
94
|
+
feature: "thread-participation-state"
|
|
95
|
+
}).warn("Slack persistent thread participation state failed", { error: String(error) });
|
|
96
|
+
} catch {}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
197
99
|
});
|
|
198
|
-
let persistentStore;
|
|
199
|
-
let persistentStoreDisabled = false;
|
|
200
100
|
function makeKey(accountId, channelId, threadTs) {
|
|
201
101
|
return `${accountId}:${channelId}:${threadTs}`;
|
|
202
102
|
}
|
|
203
|
-
function reportPersistentThreadParticipationError(error) {
|
|
204
|
-
try {
|
|
205
|
-
getOptionalSlackRuntime()?.logging.getChildLogger({
|
|
206
|
-
plugin: "slack",
|
|
207
|
-
feature: "thread-participation-state"
|
|
208
|
-
}).warn("Slack persistent thread participation state failed", { error: String(error) });
|
|
209
|
-
} catch {}
|
|
210
|
-
}
|
|
211
|
-
function disablePersistentThreadParticipation(error) {
|
|
212
|
-
persistentStoreDisabled = true;
|
|
213
|
-
persistentStore = void 0;
|
|
214
|
-
reportPersistentThreadParticipationError(error);
|
|
215
|
-
}
|
|
216
|
-
function getPersistentThreadParticipationStore() {
|
|
217
|
-
if (persistentStoreDisabled) return;
|
|
218
|
-
if (persistentStore) return persistentStore;
|
|
219
|
-
const runtime = getOptionalSlackRuntime();
|
|
220
|
-
if (!runtime) return;
|
|
221
|
-
try {
|
|
222
|
-
persistentStore = runtime.state.openKeyedStore({
|
|
223
|
-
namespace: PERSISTENT_NAMESPACE,
|
|
224
|
-
maxEntries: PERSISTENT_MAX_ENTRIES,
|
|
225
|
-
defaultTtlMs: TTL_MS
|
|
226
|
-
});
|
|
227
|
-
return persistentStore;
|
|
228
|
-
} catch (error) {
|
|
229
|
-
disablePersistentThreadParticipation(error);
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
function rememberPersistentThreadParticipation(params) {
|
|
234
|
-
const store = getPersistentThreadParticipationStore();
|
|
235
|
-
if (!store) return;
|
|
236
|
-
store.register(params.key, {
|
|
237
|
-
...params.agentId ? { agentId: params.agentId } : {},
|
|
238
|
-
repliedAt: Date.now()
|
|
239
|
-
}).catch(disablePersistentThreadParticipation);
|
|
240
|
-
}
|
|
241
|
-
async function lookupPersistentThreadParticipation(key) {
|
|
242
|
-
const store = getPersistentThreadParticipationStore();
|
|
243
|
-
if (!store) return false;
|
|
244
|
-
try {
|
|
245
|
-
return Boolean(await store.lookup(key));
|
|
246
|
-
} catch (error) {
|
|
247
|
-
disablePersistentThreadParticipation(error);
|
|
248
|
-
return false;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
103
|
function recordSlackThreadParticipation(accountId, channelId, threadTs, opts) {
|
|
252
104
|
if (!accountId || !channelId || !threadTs) return;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
key,
|
|
257
|
-
agentId: opts?.agentId
|
|
105
|
+
threadParticipation.register(makeKey(accountId, channelId, threadTs), {
|
|
106
|
+
...opts?.agentId ? { agentId: opts.agentId } : {},
|
|
107
|
+
repliedAt: Date.now()
|
|
258
108
|
});
|
|
259
109
|
}
|
|
260
110
|
function hasSlackThreadParticipation(accountId, channelId, threadTs) {
|
|
@@ -263,16 +113,10 @@ function hasSlackThreadParticipation(accountId, channelId, threadTs) {
|
|
|
263
113
|
}
|
|
264
114
|
async function hasSlackThreadParticipationWithPersistence(params) {
|
|
265
115
|
if (!params.accountId || !params.channelId || !params.threadTs) return false;
|
|
266
|
-
|
|
267
|
-
if (threadParticipation.peek(key)) return true;
|
|
268
|
-
const found = await lookupPersistentThreadParticipation(key);
|
|
269
|
-
if (found) threadParticipation.check(key);
|
|
270
|
-
return found;
|
|
116
|
+
return await threadParticipation.lookup(makeKey(params.accountId, params.channelId, params.threadTs));
|
|
271
117
|
}
|
|
272
118
|
function clearSlackThreadParticipationCache() {
|
|
273
|
-
threadParticipation.
|
|
274
|
-
persistentStore = void 0;
|
|
275
|
-
persistentStoreDisabled = false;
|
|
119
|
+
threadParticipation.clearForTest();
|
|
276
120
|
}
|
|
277
121
|
//#endregion
|
|
278
122
|
//#region extensions/slack/src/send.ts
|
|
@@ -285,15 +129,24 @@ const SLACK_UPLOAD_SSRF_POLICY = {
|
|
|
285
129
|
allowRfc2544BenchmarkRange: true
|
|
286
130
|
};
|
|
287
131
|
const SLACK_DM_CHANNEL_CACHE_MAX = 1024;
|
|
288
|
-
const SLACK_DNS_RETRY_CODES = new Set([
|
|
132
|
+
const SLACK_DNS_RETRY_CODES = /* @__PURE__ */ new Set([
|
|
289
133
|
"EAI_AGAIN",
|
|
290
134
|
"ENOTFOUND",
|
|
291
135
|
"UND_ERR_DNS_RESOLVE_FAILED"
|
|
292
136
|
]);
|
|
293
137
|
const SLACK_DNS_RETRY_ATTEMPTS = 2;
|
|
294
138
|
const SLACK_DNS_RETRY_BASE_DELAY_MS = 250;
|
|
139
|
+
const SLACK_DELIVERY_METADATA_EVENT = "openclaw_delivery";
|
|
140
|
+
const SLACK_DELIVERY_METADATA_KEY = "openclaw_delivery_id";
|
|
141
|
+
const SLACK_DELIVERY_METADATA_PART_INDEX_KEY = "openclaw_delivery_part_index";
|
|
142
|
+
const SLACK_DELIVERY_METADATA_PART_COUNT_KEY = "openclaw_delivery_part_count";
|
|
143
|
+
const SLACK_DELIVERY_METADATA_SIGNATURE_KEY = "openclaw_delivery_signature";
|
|
144
|
+
const SLACK_RECONCILE_LOOKBACK_MS = 3e4;
|
|
145
|
+
const SLACK_RECONCILE_CLOCK_SKEW_MS = 5 * 6e4;
|
|
146
|
+
const SLACK_RECONCILE_LIMIT = 100;
|
|
147
|
+
const SLACK_RECONCILE_MAX_PAGES = 10;
|
|
295
148
|
const slackDmChannelCache = /* @__PURE__ */ new Map();
|
|
296
|
-
const
|
|
149
|
+
const slackSendQueue = new KeyedAsyncQueue();
|
|
297
150
|
const slackDefaultSendIdentities = /* @__PURE__ */ new Map();
|
|
298
151
|
function hasCustomIdentity(identity) {
|
|
299
152
|
return Boolean(identity?.username || identity?.iconUrl || identity?.iconEmoji);
|
|
@@ -427,29 +280,50 @@ function isSlackCustomizeScopeError(err) {
|
|
|
427
280
|
if (normalizeLowercaseStringOrEmpty(normalizeOptionalString(data?.needed))?.includes("chat:write.customize")) return true;
|
|
428
281
|
return [...normalizeSlackScopeList(data?.response_metadata?.scopes), ...normalizeSlackScopeList(data?.response_metadata?.acceptedScopes)].map((scope) => normalizeLowercaseStringOrEmpty(scope)).includes("chat:write.customize");
|
|
429
282
|
}
|
|
283
|
+
function isSlackCustomIdentityRejectedError(err) {
|
|
284
|
+
if (isSlackCustomizeScopeError(err)) return true;
|
|
285
|
+
const code = normalizeLowercaseStringOrEmpty(normalizeOptionalString(getSlackWebApiErrorData(err)?.error));
|
|
286
|
+
return code === "invalid_arguments" || code === "invalid_arg_name";
|
|
287
|
+
}
|
|
430
288
|
async function postSlackMessageBestEffort(params) {
|
|
431
289
|
const basePayload = buildSlackPostMessagePayload(params);
|
|
432
290
|
const postChatMessage = params.client.chat.postMessage.bind(params.client.chat);
|
|
291
|
+
const post = async (payload, identity) => ({
|
|
292
|
+
response: await withSlackDnsRequestRetry("chat.postMessage", () => postChatMessage(payload)),
|
|
293
|
+
identity
|
|
294
|
+
});
|
|
433
295
|
try {
|
|
434
296
|
const identity = params.identity;
|
|
435
|
-
if (identity?.iconUrl) return await
|
|
297
|
+
if (identity?.iconUrl) return await post({
|
|
436
298
|
...basePayload,
|
|
437
299
|
...identity.username ? { username: identity.username } : {},
|
|
438
300
|
icon_url: identity.iconUrl
|
|
439
|
-
})
|
|
440
|
-
if (identity?.iconEmoji) return await
|
|
301
|
+
}, identity);
|
|
302
|
+
if (identity?.iconEmoji) return await post({
|
|
441
303
|
...basePayload,
|
|
442
304
|
...identity.username ? { username: identity.username } : {},
|
|
443
305
|
icon_emoji: identity.iconEmoji
|
|
444
|
-
})
|
|
445
|
-
return await
|
|
306
|
+
}, identity);
|
|
307
|
+
return await post({
|
|
446
308
|
...basePayload,
|
|
447
309
|
...identity?.username ? { username: identity.username } : {}
|
|
448
|
-
})
|
|
310
|
+
}, identity);
|
|
449
311
|
} catch (err) {
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
312
|
+
const identity = params.identity;
|
|
313
|
+
if (!identity || !hasCustomIdentity(identity) || !isSlackCustomIdentityRejectedError(err)) throw err;
|
|
314
|
+
if (!isSlackCustomizeScopeError(err) && identity.username && (identity.iconUrl || identity.iconEmoji)) {
|
|
315
|
+
logVerbose("slack send: custom icon rejected, retrying with username only");
|
|
316
|
+
try {
|
|
317
|
+
return await post({
|
|
318
|
+
...basePayload,
|
|
319
|
+
username: identity.username
|
|
320
|
+
}, { username: identity.username });
|
|
321
|
+
} catch (retryError) {
|
|
322
|
+
if (!isSlackCustomIdentityRejectedError(retryError)) throw retryError;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
logVerbose("slack send: custom identity rejected, retrying without custom identity");
|
|
326
|
+
return post(basePayload);
|
|
453
327
|
}
|
|
454
328
|
}
|
|
455
329
|
function resolvePostedMessageThreadTs(response) {
|
|
@@ -493,20 +367,7 @@ function createSlackSendQueueKey(params) {
|
|
|
493
367
|
return `${params.accountId}:${createSlackTokenCacheKey(params.token)}:${recipientKey}:${params.threadTs ?? ""}`;
|
|
494
368
|
}
|
|
495
369
|
async function runQueuedSlackSend(key, task) {
|
|
496
|
-
|
|
497
|
-
let releaseCurrent;
|
|
498
|
-
const current = new Promise((resolve) => {
|
|
499
|
-
releaseCurrent = resolve;
|
|
500
|
-
});
|
|
501
|
-
const queuedCurrent = previous.catch(() => void 0).then(() => current);
|
|
502
|
-
slackSendQueues.set(key, queuedCurrent);
|
|
503
|
-
await previous.catch(() => void 0);
|
|
504
|
-
try {
|
|
505
|
-
return await task();
|
|
506
|
-
} finally {
|
|
507
|
-
releaseCurrent();
|
|
508
|
-
if (slackSendQueues.get(key) === queuedCurrent) slackSendQueues.delete(key);
|
|
509
|
-
}
|
|
370
|
+
return await slackSendQueue.enqueue(key, task);
|
|
510
371
|
}
|
|
511
372
|
function createSlackDmCacheKey(params) {
|
|
512
373
|
return `${params.accountId ?? "default"}:${createSlackTokenCacheKey(params.token)}:${params.recipientId}`;
|
|
@@ -551,6 +412,268 @@ async function resolveChannelId(client, recipient, params) {
|
|
|
551
412
|
cacheHit: false
|
|
552
413
|
};
|
|
553
414
|
}
|
|
415
|
+
async function resolveSlackDmChannelId(params) {
|
|
416
|
+
return (await resolveChannelId(params.client, {
|
|
417
|
+
kind: "user",
|
|
418
|
+
id: params.userId
|
|
419
|
+
}, {
|
|
420
|
+
accountId: params.accountId,
|
|
421
|
+
token: params.token
|
|
422
|
+
})).channelId;
|
|
423
|
+
}
|
|
424
|
+
function createSlackDeliveryMetadataId(queueId) {
|
|
425
|
+
const normalized = normalizeOptionalString(queueId);
|
|
426
|
+
if (!normalized) return;
|
|
427
|
+
return createHash("sha256").update(normalized).digest("base64url");
|
|
428
|
+
}
|
|
429
|
+
function createSlackDeliveryMetadataSignature(params) {
|
|
430
|
+
return createHmac("sha256", params.queueId).update(JSON.stringify([
|
|
431
|
+
SLACK_DELIVERY_METADATA_EVENT,
|
|
432
|
+
params.channelId,
|
|
433
|
+
params.threadTs ?? "",
|
|
434
|
+
params.partIndex,
|
|
435
|
+
params.partCount
|
|
436
|
+
])).digest("base64url");
|
|
437
|
+
}
|
|
438
|
+
function matchesSlackDeliveryMetadataSignature(actual, expected) {
|
|
439
|
+
if (typeof actual !== "string" || actual.length !== expected.length) return false;
|
|
440
|
+
return timingSafeEqual(Buffer.from(actual), Buffer.from(expected));
|
|
441
|
+
}
|
|
442
|
+
function withSlackDeliveryMetadata(metadata, params) {
|
|
443
|
+
const queueId = normalizeOptionalString(params.queueId);
|
|
444
|
+
const deliveryId = createSlackDeliveryMetadataId(queueId);
|
|
445
|
+
if (!queueId || !deliveryId) return metadata;
|
|
446
|
+
const marker = {
|
|
447
|
+
[SLACK_DELIVERY_METADATA_KEY]: deliveryId,
|
|
448
|
+
[SLACK_DELIVERY_METADATA_PART_INDEX_KEY]: params.partIndex,
|
|
449
|
+
[SLACK_DELIVERY_METADATA_PART_COUNT_KEY]: params.partCount,
|
|
450
|
+
[SLACK_DELIVERY_METADATA_SIGNATURE_KEY]: createSlackDeliveryMetadataSignature({
|
|
451
|
+
queueId,
|
|
452
|
+
channelId: params.channelId,
|
|
453
|
+
threadTs: params.threadTs,
|
|
454
|
+
partIndex: params.partIndex,
|
|
455
|
+
partCount: params.partCount
|
|
456
|
+
})
|
|
457
|
+
};
|
|
458
|
+
if (!metadata) return {
|
|
459
|
+
event_type: SLACK_DELIVERY_METADATA_EVENT,
|
|
460
|
+
event_payload: marker
|
|
461
|
+
};
|
|
462
|
+
return {
|
|
463
|
+
...metadata,
|
|
464
|
+
event_payload: {
|
|
465
|
+
...metadata.event_payload,
|
|
466
|
+
...marker
|
|
467
|
+
}
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
function formatSlackTimestampFromMs(ms) {
|
|
471
|
+
return (Math.max(0, ms) / 1e3).toFixed(6);
|
|
472
|
+
}
|
|
473
|
+
function asSlackConversationMessages(response) {
|
|
474
|
+
return Array.isArray(response.messages) ? response.messages.filter((message) => typeof message === "object" && message !== null && !Array.isArray(message)) : [];
|
|
475
|
+
}
|
|
476
|
+
const SLACK_RECONCILIATION_EVIDENCE_RANK = {
|
|
477
|
+
none: 0,
|
|
478
|
+
partial: 1,
|
|
479
|
+
conflict: 2,
|
|
480
|
+
complete: 3
|
|
481
|
+
};
|
|
482
|
+
function findSlackConversationDeliveryParts(params) {
|
|
483
|
+
const matches = [];
|
|
484
|
+
for (const message of params.messages) {
|
|
485
|
+
if (!message.metadata || typeof message.metadata !== "object" || Array.isArray(message.metadata)) continue;
|
|
486
|
+
const eventPayload = message.metadata.event_payload;
|
|
487
|
+
if (!eventPayload || typeof eventPayload !== "object" || Array.isArray(eventPayload)) continue;
|
|
488
|
+
const marker = eventPayload;
|
|
489
|
+
if (marker[SLACK_DELIVERY_METADATA_KEY] !== params.deliveryId) continue;
|
|
490
|
+
const partIndex = marker[SLACK_DELIVERY_METADATA_PART_INDEX_KEY];
|
|
491
|
+
const partCount = marker[SLACK_DELIVERY_METADATA_PART_COUNT_KEY];
|
|
492
|
+
if (typeof partIndex !== "number" || !Number.isInteger(partIndex) || typeof partCount !== "number" || !Number.isInteger(partCount) || partIndex < 0 || partCount <= 0 || partIndex >= partCount) continue;
|
|
493
|
+
const expectedSignature = createSlackDeliveryMetadataSignature({
|
|
494
|
+
queueId: params.queueId,
|
|
495
|
+
channelId: params.channelId,
|
|
496
|
+
threadTs: params.threadTs,
|
|
497
|
+
partIndex,
|
|
498
|
+
partCount
|
|
499
|
+
});
|
|
500
|
+
if (!matchesSlackDeliveryMetadataSignature(marker[SLACK_DELIVERY_METADATA_SIGNATURE_KEY], expectedSignature)) continue;
|
|
501
|
+
const messageId = typeof message.ts === "string" ? normalizeSlackThreadTsCandidate(message.ts) : void 0;
|
|
502
|
+
if (!messageId) continue;
|
|
503
|
+
const threadTs = typeof message.thread_ts === "string" ? normalizeSlackThreadTsCandidate(message.thread_ts) : void 0;
|
|
504
|
+
matches.push({
|
|
505
|
+
messageId,
|
|
506
|
+
partIndex,
|
|
507
|
+
partCount,
|
|
508
|
+
...threadTs ? { threadTs } : {}
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
return matches;
|
|
512
|
+
}
|
|
513
|
+
async function scanSlackConversationForDelivery(params) {
|
|
514
|
+
const threadTs = params.threadTs;
|
|
515
|
+
let cursor;
|
|
516
|
+
let expectedPartCount;
|
|
517
|
+
const deliveryParts = /* @__PURE__ */ new Map();
|
|
518
|
+
for (let page = 0; page < SLACK_RECONCILE_MAX_PAGES; page += 1) {
|
|
519
|
+
const response = threadTs ? await withSlackDnsRequestRetry("conversations.replies", () => params.client.conversations.replies({
|
|
520
|
+
channel: params.channelId,
|
|
521
|
+
ts: threadTs,
|
|
522
|
+
oldest: params.oldest,
|
|
523
|
+
latest: params.latest,
|
|
524
|
+
include_all_metadata: true,
|
|
525
|
+
limit: SLACK_RECONCILE_LIMIT,
|
|
526
|
+
...cursor ? { cursor } : {}
|
|
527
|
+
})) : await withSlackDnsRequestRetry("conversations.history", () => params.client.conversations.history({
|
|
528
|
+
channel: params.channelId,
|
|
529
|
+
oldest: params.oldest,
|
|
530
|
+
latest: params.latest,
|
|
531
|
+
include_all_metadata: true,
|
|
532
|
+
limit: SLACK_RECONCILE_LIMIT,
|
|
533
|
+
...cursor ? { cursor } : {}
|
|
534
|
+
}));
|
|
535
|
+
const matches = findSlackConversationDeliveryParts({
|
|
536
|
+
messages: asSlackConversationMessages(response),
|
|
537
|
+
queueId: params.queueId,
|
|
538
|
+
deliveryId: params.deliveryId,
|
|
539
|
+
channelId: params.channelId,
|
|
540
|
+
...threadTs ? { threadTs } : {}
|
|
541
|
+
});
|
|
542
|
+
for (const match of matches) {
|
|
543
|
+
expectedPartCount ??= match.partCount;
|
|
544
|
+
const existing = deliveryParts.get(match.partIndex);
|
|
545
|
+
if (expectedPartCount !== match.partCount || existing && existing.messageId !== match.messageId) return {
|
|
546
|
+
reconciliation: {
|
|
547
|
+
status: "unresolved",
|
|
548
|
+
error: "Slack history contains conflicting durable delivery markers",
|
|
549
|
+
retryable: false
|
|
550
|
+
},
|
|
551
|
+
evidence: "conflict"
|
|
552
|
+
};
|
|
553
|
+
deliveryParts.set(match.partIndex, match);
|
|
554
|
+
}
|
|
555
|
+
if (expectedPartCount !== void 0 && deliveryParts.size === expectedPartCount) {
|
|
556
|
+
const orderedParts = Array.from({ length: expectedPartCount }, (_, index) => deliveryParts.get(index));
|
|
557
|
+
if (orderedParts.some((part) => !part)) return {
|
|
558
|
+
reconciliation: {
|
|
559
|
+
status: "unresolved",
|
|
560
|
+
error: "Slack history contains an invalid durable delivery marker set",
|
|
561
|
+
retryable: false
|
|
562
|
+
},
|
|
563
|
+
evidence: "conflict"
|
|
564
|
+
};
|
|
565
|
+
const completeParts = orderedParts;
|
|
566
|
+
const reconciledThreadTs = completeParts[0]?.threadTs ?? params.threadTs;
|
|
567
|
+
const platformMessageIds = completeParts.map((part) => part.messageId);
|
|
568
|
+
return {
|
|
569
|
+
reconciliation: {
|
|
570
|
+
status: "sent",
|
|
571
|
+
messageId: platformMessageIds[0],
|
|
572
|
+
receipt: createSlackSendReceipt({
|
|
573
|
+
platformMessageIds,
|
|
574
|
+
channelId: params.channelId,
|
|
575
|
+
kind: "text",
|
|
576
|
+
...reconciledThreadTs ? { threadTs: reconciledThreadTs } : {}
|
|
577
|
+
})
|
|
578
|
+
},
|
|
579
|
+
evidence: "complete"
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
const nextCursor = normalizeOptionalString(response.response_metadata?.next_cursor);
|
|
583
|
+
if (!nextCursor) {
|
|
584
|
+
if (response.has_more === true) break;
|
|
585
|
+
return {
|
|
586
|
+
reconciliation: {
|
|
587
|
+
status: "unresolved",
|
|
588
|
+
error: deliveryParts.size > 0 ? "Slack history contains an incomplete durable delivery marker set" : "Slack history contains no exact durable delivery marker",
|
|
589
|
+
retryable: params.retryCount < 2
|
|
590
|
+
},
|
|
591
|
+
evidence: deliveryParts.size > 0 ? "partial" : "none"
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
cursor = nextCursor;
|
|
595
|
+
}
|
|
596
|
+
return {
|
|
597
|
+
reconciliation: {
|
|
598
|
+
status: "unresolved",
|
|
599
|
+
error: "Slack unknown-send reconciliation exceeded its history page budget",
|
|
600
|
+
retryable: params.retryCount < 2
|
|
601
|
+
},
|
|
602
|
+
evidence: deliveryParts.size > 0 ? "partial" : "none"
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
async function reconcileSlackUnknownSend(ctx, opts) {
|
|
606
|
+
const account = resolveSlackAccount({
|
|
607
|
+
cfg: requireRuntimeConfig(ctx.cfg, "Slack delivery reconciliation"),
|
|
608
|
+
accountId: ctx.accountId ?? void 0
|
|
609
|
+
});
|
|
610
|
+
const deliveryId = createSlackDeliveryMetadataId(ctx.queueId);
|
|
611
|
+
if (!deliveryId) return {
|
|
612
|
+
status: "unresolved",
|
|
613
|
+
error: "Slack unknown-send reconciliation requires a durable delivery id",
|
|
614
|
+
retryable: false
|
|
615
|
+
};
|
|
616
|
+
const readToken = resolveSlackOperationToken(account, "read");
|
|
617
|
+
if (!readToken) return {
|
|
618
|
+
status: "unresolved",
|
|
619
|
+
error: `Slack read token missing for account "${account.accountId}"`,
|
|
620
|
+
retryable: false
|
|
621
|
+
};
|
|
622
|
+
const recipient = parseRecipient(ctx.to);
|
|
623
|
+
const userRecipient = isSlackUserRecipient(recipient);
|
|
624
|
+
const writeToken = resolveSlackOperationToken(account, "write");
|
|
625
|
+
if (userRecipient && !writeToken) return {
|
|
626
|
+
status: "unresolved",
|
|
627
|
+
error: `Slack write token missing for direct-message reconciliation on account "${account.accountId}"`,
|
|
628
|
+
retryable: false
|
|
629
|
+
};
|
|
630
|
+
const readClient = opts?.client ?? createSlackWebClient(readToken);
|
|
631
|
+
const writeClient = opts?.client ?? (writeToken ? getSlackWriteClient(writeToken) : void 0);
|
|
632
|
+
const payloadReplyToId = ctx.payloads[0]?.replyToId;
|
|
633
|
+
const threadTs = resolveSlackThreadTsValue({
|
|
634
|
+
replyToId: Object.hasOwn(ctx, "effectiveReplyToId") ? normalizeOptionalString(ctx.effectiveReplyToId) : payloadReplyToId != null ? normalizeOptionalString(payloadReplyToId) : ctx.replyToMode === "off" ? void 0 : normalizeOptionalString(ctx.replyToId),
|
|
635
|
+
threadId: ctx.threadId
|
|
636
|
+
});
|
|
637
|
+
const searchStartedAt = ctx.platformSendStartedAt ?? ctx.enqueuedAt;
|
|
638
|
+
const oldest = formatSlackTimestampFromMs(searchStartedAt - SLACK_RECONCILE_LOOKBACK_MS - SLACK_RECONCILE_CLOCK_SKEW_MS);
|
|
639
|
+
const latest = formatSlackTimestampFromMs(searchStartedAt + SLACK_RECONCILE_CLOCK_SKEW_MS);
|
|
640
|
+
try {
|
|
641
|
+
const channelClient = userRecipient ? writeClient : readClient;
|
|
642
|
+
const channelToken = userRecipient ? writeToken : readToken;
|
|
643
|
+
if (!channelClient || !channelToken) throw new Error(`Slack channel resolution token missing for account "${account.accountId}"`);
|
|
644
|
+
const { channelId } = await resolveChannelId(channelClient, recipient, {
|
|
645
|
+
accountId: account.accountId,
|
|
646
|
+
token: channelToken
|
|
647
|
+
});
|
|
648
|
+
const lookupClients = opts?.client ? [opts.client] : [readClient, ...writeClient && writeToken !== readToken ? [writeClient] : []];
|
|
649
|
+
let lookupError;
|
|
650
|
+
let bestUnresolvedScan;
|
|
651
|
+
for (const lookupClient of lookupClients) try {
|
|
652
|
+
const scan = await scanSlackConversationForDelivery({
|
|
653
|
+
client: lookupClient,
|
|
654
|
+
channelId,
|
|
655
|
+
...threadTs ? { threadTs } : {},
|
|
656
|
+
oldest,
|
|
657
|
+
latest,
|
|
658
|
+
queueId: ctx.queueId,
|
|
659
|
+
deliveryId,
|
|
660
|
+
retryCount: ctx.retryCount
|
|
661
|
+
});
|
|
662
|
+
if (scan.reconciliation.status === "sent") return scan.reconciliation;
|
|
663
|
+
if (!bestUnresolvedScan || SLACK_RECONCILIATION_EVIDENCE_RANK[scan.evidence] > SLACK_RECONCILIATION_EVIDENCE_RANK[bestUnresolvedScan.evidence]) bestUnresolvedScan = scan;
|
|
664
|
+
} catch (err) {
|
|
665
|
+
lookupError = err;
|
|
666
|
+
}
|
|
667
|
+
if (bestUnresolvedScan) return bestUnresolvedScan.reconciliation;
|
|
668
|
+
throw lookupError;
|
|
669
|
+
} catch (err) {
|
|
670
|
+
return {
|
|
671
|
+
status: "unresolved",
|
|
672
|
+
error: readSlackRequestErrorMessage(enrichSlackWebApiError(err)),
|
|
673
|
+
retryable: ctx.retryCount < 3
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
}
|
|
554
677
|
async function uploadSlackFile(params) {
|
|
555
678
|
const { buffer, contentType, fileName } = await loadOutboundMediaFromUrl(params.mediaUrl, {
|
|
556
679
|
maxBytes: params.maxBytes,
|
|
@@ -582,6 +705,7 @@ async function uploadSlackFile(params) {
|
|
|
582
705
|
} finally {
|
|
583
706
|
await release();
|
|
584
707
|
}
|
|
708
|
+
await params.onPlatformSendDispatch?.();
|
|
585
709
|
const completeResp = await withSlackDnsRequestRetry("files.completeUploadExternal", () => params.client.files.completeUploadExternal({
|
|
586
710
|
files: [{
|
|
587
711
|
id: uploadFileId,
|
|
@@ -658,7 +782,7 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
658
782
|
unfurlLinks: account.config.unfurlLinks,
|
|
659
783
|
unfurlMedia: account.config.unfurlMedia
|
|
660
784
|
};
|
|
661
|
-
const directUserPostChannelId = resolveDirectUserPostChannelId({
|
|
785
|
+
const directUserPostChannelId = opts.deliveryQueueId ? void 0 : resolveDirectUserPostChannelId({
|
|
662
786
|
recipient,
|
|
663
787
|
hasMedia: Boolean(opts.mediaUrl),
|
|
664
788
|
...opts.threadTs ? { threadTs: opts.threadTs } : {}
|
|
@@ -667,12 +791,18 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
667
791
|
accountId: account.accountId,
|
|
668
792
|
token
|
|
669
793
|
});
|
|
794
|
+
const reportDelivery = async (result) => {
|
|
795
|
+
await opts.onDeliveryResult?.(result);
|
|
796
|
+
return result;
|
|
797
|
+
};
|
|
670
798
|
if (blocks) {
|
|
671
799
|
if (opts.mediaUrl) throw new Error("Slack send does not support blocks with mediaUrl");
|
|
672
|
-
const
|
|
800
|
+
const fallbackText = truncateSlackText(trimmedMessage || buildSlackBlocksFallbackText(blocks), SLACK_TEXT_LIMIT);
|
|
801
|
+
await opts.onPlatformSendDispatch?.();
|
|
802
|
+
const { response } = await postSlackMessageBestEffort({
|
|
673
803
|
client,
|
|
674
804
|
channelId,
|
|
675
|
-
text:
|
|
805
|
+
text: fallbackText,
|
|
676
806
|
threadTs: opts.threadTs,
|
|
677
807
|
replyBroadcast: opts.replyBroadcast,
|
|
678
808
|
identity,
|
|
@@ -683,7 +813,7 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
683
813
|
const messageId = response.ts ?? "unknown";
|
|
684
814
|
const deliveredChannelId = resolvePostedMessageChannelId(response, channelId);
|
|
685
815
|
const deliveredThreadTs = resolvePostedMessageThreadTs(response) ?? normalizeSlackThreadTsCandidate(opts.threadTs);
|
|
686
|
-
return {
|
|
816
|
+
return await reportDelivery({
|
|
687
817
|
messageId,
|
|
688
818
|
channelId: deliveredChannelId,
|
|
689
819
|
threadTs: deliveredThreadTs,
|
|
@@ -693,7 +823,7 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
693
823
|
kind: "card",
|
|
694
824
|
threadTs: deliveredThreadTs
|
|
695
825
|
})
|
|
696
|
-
};
|
|
826
|
+
});
|
|
697
827
|
}
|
|
698
828
|
const textLimit = resolveTextChunkLimit(cfg, "slack", account.accountId, { fallbackLimit: SLACK_TEXT_LIMIT });
|
|
699
829
|
const chunkLimit = Math.min(textLimit, SLACK_TEXT_LIMIT);
|
|
@@ -723,26 +853,63 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
723
853
|
mediaReadFile: opts.mediaReadFile,
|
|
724
854
|
caption: firstChunk,
|
|
725
855
|
threadTs: opts.threadTs,
|
|
726
|
-
maxBytes: mediaMaxBytes
|
|
856
|
+
maxBytes: mediaMaxBytes,
|
|
857
|
+
onPlatformSendDispatch: opts.onPlatformSendDispatch
|
|
727
858
|
});
|
|
728
859
|
sentMessageIds.push(lastMessageId);
|
|
860
|
+
await reportDelivery({
|
|
861
|
+
messageId: lastMessageId,
|
|
862
|
+
channelId,
|
|
863
|
+
threadTs: normalizeSlackThreadTsCandidate(opts.threadTs),
|
|
864
|
+
receipt: createSlackSendReceipt({
|
|
865
|
+
platformMessageIds: [lastMessageId],
|
|
866
|
+
channelId,
|
|
867
|
+
kind: "media",
|
|
868
|
+
threadTs: normalizeSlackThreadTsCandidate(opts.threadTs)
|
|
869
|
+
})
|
|
870
|
+
});
|
|
729
871
|
chunksToPost = rest;
|
|
730
872
|
} else chunksToPost = resolvedChunks.length ? resolvedChunks : [""];
|
|
731
|
-
|
|
732
|
-
|
|
873
|
+
let sendIdentity = identity;
|
|
874
|
+
for (const [partIndex, chunk] of chunksToPost.entries()) {
|
|
875
|
+
const baseMetadata = sentMessageIds.length === 0 ? opts.metadata : void 0;
|
|
876
|
+
const metadata = opts.mediaUrl ? baseMetadata : withSlackDeliveryMetadata(baseMetadata, {
|
|
877
|
+
queueId: opts.deliveryQueueId,
|
|
878
|
+
channelId,
|
|
879
|
+
threadTs: opts.threadTs,
|
|
880
|
+
partIndex,
|
|
881
|
+
partCount: chunksToPost.length
|
|
882
|
+
});
|
|
883
|
+
if (partIndex === 0 && !opts.mediaUrl) await opts.onPlatformSendDispatch?.();
|
|
884
|
+
const posted = await postSlackMessageBestEffort({
|
|
733
885
|
client,
|
|
734
886
|
channelId,
|
|
735
887
|
text: chunk,
|
|
736
888
|
threadTs: opts.threadTs,
|
|
737
889
|
replyBroadcast: sentMessageIds.length === 0 ? opts.replyBroadcast : void 0,
|
|
738
|
-
identity,
|
|
739
|
-
metadata
|
|
890
|
+
identity: sendIdentity,
|
|
891
|
+
metadata,
|
|
740
892
|
unfurl
|
|
741
893
|
});
|
|
894
|
+
const response = posted.response;
|
|
895
|
+
sendIdentity = posted.identity;
|
|
742
896
|
lastMessageId = response.ts ?? lastMessageId;
|
|
743
897
|
deliveredChannelId = resolvePostedMessageChannelId(response, deliveredChannelId);
|
|
744
898
|
canonicalDeliveredThreadTs ??= resolvePostedMessageThreadTs(response);
|
|
745
|
-
if (response.ts)
|
|
899
|
+
if (response.ts) {
|
|
900
|
+
sentMessageIds.push(response.ts);
|
|
901
|
+
await reportDelivery({
|
|
902
|
+
messageId: response.ts,
|
|
903
|
+
channelId: deliveredChannelId,
|
|
904
|
+
threadTs: resolvePostedMessageThreadTs(response) ?? normalizeSlackThreadTsCandidate(opts.threadTs),
|
|
905
|
+
receipt: createSlackSendReceipt({
|
|
906
|
+
platformMessageIds: [response.ts],
|
|
907
|
+
channelId: deliveredChannelId,
|
|
908
|
+
kind: "text",
|
|
909
|
+
threadTs: resolvePostedMessageThreadTs(response) ?? normalizeSlackThreadTsCandidate(opts.threadTs)
|
|
910
|
+
})
|
|
911
|
+
});
|
|
912
|
+
}
|
|
746
913
|
}
|
|
747
914
|
const messageId = lastMessageId || "unknown";
|
|
748
915
|
const deliveredThreadTs = canonicalDeliveredThreadTs ?? normalizeSlackThreadTsCandidate(opts.threadTs);
|
|
@@ -759,4 +926,4 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
759
926
|
};
|
|
760
927
|
}
|
|
761
928
|
//#endregion
|
|
762
|
-
export {
|
|
929
|
+
export { clearSlackThreadParticipationCache as a, recordSlackThreadParticipation as c, setSlackDefaultSendIdentity as i, buildSlackBlocksFallbackText as l, resolveSlackDmChannelId as n, hasSlackThreadParticipation as o, sendMessageSlack as r, hasSlackThreadParticipationWithPersistence as s, reconcileSlackUnknownSend as t };
|