@openclaw/slack 2026.8.1-beta.2 → 2026.8.1
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-configured-sUohAxZr.js +33 -0
- package/dist/account-inspect-CN2hBsim.js +87 -0
- package/dist/account-inspect-api.js +1 -1
- package/dist/{accounts-CK4AVI2_.js → accounts-Dm_H77gH.js} +12 -11
- package/dist/{accounts.runtime-Cb7QwWBz.js → accounts.runtime-DRuEK6mL.js} +1 -1
- package/dist/{action-runtime-BkGe7ny_.js → action-runtime-044ldvNL.js} +80 -79
- package/dist/action-runtime.runtime-BL3KzX13.js +2 -0
- package/dist/{actions-BTDXwwE3.js → actions-BI7JkfVm.js} +273 -263
- package/dist/api.js +14 -14
- package/dist/{approval-handler.runtime-CJaNzAq2.js → approval-handler.runtime-DYv0UIZS.js} +53 -174
- package/dist/{channel-D_tovcUL.js → channel-1vIJOzPx.js} +134 -160
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-type-B9MSdoGN.js → channel-type-DlFSKeIZ.js} +3 -7
- package/dist/{channel.setup-Bch9dYmA.js → channel.setup-ofDi3_Pu.js} +34 -49
- package/dist/{config-schema-xto5jFIx.js → config-schema-BVIMyiDN.js} +42 -19
- package/dist/configured-state.js +34 -0
- package/dist/conversation-binding-route-DFVLUdYF.js +115 -0
- package/dist/{directory-config-CNBz8lJa.js → directory-config-DqfQ42OV.js} +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/{directory-live-CFKUtW9E.js → directory-live-BPaNHjmP.js} +2 -2
- package/dist/{group-policy-c4RP9bjc.js → group-policy-BdwszjYn.js} +625 -773
- package/dist/{message-tool-api-BykQB4AU.js → message-tool-api-CJ0kjcg5.js} +23 -5
- package/dist/message-tool-api.js +1 -1
- package/dist/{monitor-1nF1NtqT.js → monitor-Dq5Cmrvp.js} +3 -3
- package/dist/{outbound-adapter-S81tsswN.js → outbound-adapter-DYaI8ThX.js} +101 -66
- package/dist/{pipeline.runtime-BvYsM5JO.js → pipeline.runtime-Bd22U0ga.js} +494 -474
- package/dist/{policy-TapwbeaT.js → policy-CtQVbde1.js} +2 -1
- package/dist/{probe-HoEg_WxB.js → probe-0usmAb0i.js} +209 -22
- package/dist/{provider-CDNvBXUi.js → provider-CN_8hFv2.js} +296 -178
- package/dist/{relay-source-C9leF11u.js → relay-source-BNGpsdwV.js} +1 -1
- package/dist/{replies-CeOfv82I.js → replies-BSiRQOJ1.js} +48 -27
- package/dist/{resolve-channels-CNPrxaXY.js → resolve-channels-Czheznc8.js} +1 -1
- package/dist/{resolve-users-Dzomuwnr.js → resolve-users-BAOlNimr.js} +1 -1
- package/dist/runtime-api.js +11 -11
- package/dist/{scopes-cYXKkrRD.js → scopes-COSlmhnH.js} +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/{send-Nor0iBwY.js → send-DS9ICrBI.js} +88 -100
- package/dist/send-results-eeOu_HYm.js +23 -0
- package/dist/{send.runtime-BmgNe6S9.js → send.runtime-D_Bb6IuH.js} +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-CbX1-Knh.js → setup-surface-BGnd2pSe.js} +6 -6
- package/dist/{shared-zdT5AMp-.js → shared-D5B-5hBg.js} +35 -9
- package/dist/{slash-dispatch.runtime-Bnr9GR1S.js → slash-dispatch.runtime-CilDmI0c.js} +2 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/child_process.d.ts +0 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +6 -6
- package/node_modules/@slack/bolt/node_modules/@types/node/dns/promises.d.ts +5 -5
- package/node_modules/@slack/bolt/node_modules/@types/node/dns.d.ts +5 -5
- package/node_modules/@slack/bolt/node_modules/@types/node/fs.d.ts +7 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/http.d.ts +30 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/http2.d.ts +4 -4
- package/node_modules/@slack/bolt/node_modules/@types/node/os.d.ts +30 -30
- package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/perf_hooks.d.ts +2 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/process.d.ts +42 -43
- package/node_modules/@slack/bolt/node_modules/@types/node/quic.d.ts +1049 -84
- package/node_modules/@slack/bolt/node_modules/@types/node/sqlite.d.ts +14 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/stream/iter.d.ts +3 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/test.d.ts +61 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/v8.d.ts +20 -23
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/README.md +2 -0
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +20 -0
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.js +20 -14
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -1
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/package.json +1 -1
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/README.md +2 -0
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.d.ts +20 -0
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js +20 -14
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -1
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/package.json +1 -1
- package/node_modules/@slack/socket-mode/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/socket-mode/node_modules/@types/node/child_process.d.ts +0 -1
- package/node_modules/@slack/socket-mode/node_modules/@types/node/crypto.d.ts +6 -6
- package/node_modules/@slack/socket-mode/node_modules/@types/node/dns/promises.d.ts +5 -5
- package/node_modules/@slack/socket-mode/node_modules/@types/node/dns.d.ts +5 -5
- package/node_modules/@slack/socket-mode/node_modules/@types/node/fs.d.ts +7 -0
- package/node_modules/@slack/socket-mode/node_modules/@types/node/http.d.ts +30 -0
- package/node_modules/@slack/socket-mode/node_modules/@types/node/http2.d.ts +4 -4
- package/node_modules/@slack/socket-mode/node_modules/@types/node/os.d.ts +30 -30
- package/node_modules/@slack/socket-mode/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/socket-mode/node_modules/@types/node/perf_hooks.d.ts +2 -1
- package/node_modules/@slack/socket-mode/node_modules/@types/node/process.d.ts +42 -43
- package/node_modules/@slack/socket-mode/node_modules/@types/node/quic.d.ts +1049 -84
- package/node_modules/@slack/socket-mode/node_modules/@types/node/sqlite.d.ts +14 -1
- package/node_modules/@slack/socket-mode/node_modules/@types/node/stream/iter.d.ts +3 -2
- package/node_modules/@slack/socket-mode/node_modules/@types/node/test.d.ts +61 -0
- package/node_modules/@slack/socket-mode/node_modules/@types/node/v8.d.ts +20 -23
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +0 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +6 -6
- package/node_modules/@slack/web-api/node_modules/@types/node/dns/promises.d.ts +5 -5
- package/node_modules/@slack/web-api/node_modules/@types/node/dns.d.ts +5 -5
- package/node_modules/@slack/web-api/node_modules/@types/node/fs.d.ts +7 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/http.d.ts +30 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/http2.d.ts +4 -4
- package/node_modules/@slack/web-api/node_modules/@types/node/os.d.ts +30 -30
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/perf_hooks.d.ts +2 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/process.d.ts +42 -43
- package/node_modules/@slack/web-api/node_modules/@types/node/quic.d.ts +1049 -84
- package/node_modules/@slack/web-api/node_modules/@types/node/sqlite.d.ts +14 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/stream/iter.d.ts +3 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +61 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/v8.d.ts +20 -23
- package/node_modules/typebox/build/format/date.d.mts +1 -1
- package/node_modules/typebox/build/format/date.mjs +1 -1
- package/node_modules/typebox/build/format/date_time.d.mts +2 -2
- package/node_modules/typebox/build/format/date_time.mjs +3 -3
- package/node_modules/typebox/build/format/email.d.mts +1 -1
- package/node_modules/typebox/build/format/email.mjs +2 -2
- package/node_modules/typebox/build/format/hostname.mjs +2 -10
- package/node_modules/typebox/build/format/idn_email.d.mts +1 -1
- package/node_modules/typebox/build/format/idn_email.mjs +3 -3
- package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -0
- package/node_modules/typebox/build/format/idn_hostname.mjs +3 -11
- package/node_modules/typebox/build/format/idna/format/bidi.d.mts +3 -0
- package/node_modules/typebox/build/format/idna/format/bidi.mjs +98 -0
- package/node_modules/typebox/build/format/idna/format/puny.d.mts +3 -0
- package/node_modules/typebox/build/format/idna/format/puny.mjs +144 -0
- package/node_modules/typebox/build/format/idna/hostname.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/hostname.mjs +16 -0
- package/node_modules/typebox/build/format/idna/idn-hostname.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/idn-hostname.mjs +23 -0
- package/node_modules/typebox/build/format/idna/index.d.mts +2 -0
- package/node_modules/typebox/build/format/idna/index.mjs +2 -0
- package/node_modules/typebox/build/format/idna/label/ascii.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/label/ascii.mjs +9 -0
- package/node_modules/typebox/build/format/idna/label/puny.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/label/puny.mjs +28 -0
- package/node_modules/typebox/build/format/idna/label/unicode.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/label/unicode.mjs +106 -0
- package/node_modules/typebox/build/format/idna/pattern/pattern.d.mts +30 -0
- package/node_modules/typebox/build/format/idna/pattern/pattern.mjs +70 -0
- package/node_modules/typebox/build/format/ipv4.d.mts +0 -1
- package/node_modules/typebox/build/format/ipv4.mjs +2 -32
- package/node_modules/typebox/build/format/ipv6.mjs +2 -61
- package/node_modules/typebox/build/format/iri.d.mts +2 -2
- package/node_modules/typebox/build/format/iri.mjs +26 -8
- package/node_modules/typebox/build/format/iri_reference.d.mts +2 -2
- package/node_modules/typebox/build/format/iri_reference.mjs +9 -55
- package/node_modules/typebox/build/format/regex.d.mts +1 -2
- package/node_modules/typebox/build/format/regex.mjs +2 -6
- package/node_modules/typebox/build/format/time.d.mts +2 -2
- package/node_modules/typebox/build/format/time.mjs +19 -14
- package/node_modules/typebox/build/format/uri.d.mts +1 -1
- package/node_modules/typebox/build/format/uri.mjs +3 -130
- package/node_modules/typebox/build/format/uri_reference.d.mts +1 -1
- package/node_modules/typebox/build/format/uri_reference.mjs +2 -3
- package/node_modules/typebox/build/format/uri_template.d.mts +2 -3
- package/node_modules/typebox/build/format/uri_template.mjs +4 -5
- package/node_modules/typebox/build/format/url.d.mts +3 -3
- package/node_modules/typebox/build/format/url.mjs +4 -5
- package/node_modules/typebox/build/guard/emit.d.mts +3 -1
- package/node_modules/typebox/build/guard/emit.mjs +12 -5
- package/node_modules/typebox/build/guard/guard.d.mts +8 -2
- package/node_modules/typebox/build/guard/guard.mjs +25 -4
- package/node_modules/typebox/build/guard/string.d.mts +2 -2
- package/node_modules/typebox/build/guard/string.mjs +7 -7
- package/node_modules/typebox/build/schema/engine/_context.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -2
- package/node_modules/typebox/build/schema/engine/_regexp.d.mts +2 -0
- package/node_modules/typebox/build/schema/engine/_regexp.mjs +4 -0
- package/node_modules/typebox/build/schema/engine/_stack.mjs +12 -13
- package/node_modules/typebox/build/schema/engine/additionalItems.mjs +17 -7
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +4 -3
- package/node_modules/typebox/build/schema/engine/contains.mjs +18 -6
- package/node_modules/typebox/build/schema/engine/enum.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/items.mjs +26 -6
- package/node_modules/typebox/build/schema/engine/maxContains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/minContains.mjs +14 -4
- package/node_modules/typebox/build/schema/engine/not.mjs +4 -2
- package/node_modules/typebox/build/schema/engine/oneOf.mjs +7 -6
- package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +4 -3
- package/node_modules/typebox/build/schema/engine/ref.mjs +1 -7
- package/node_modules/typebox/build/schema/engine/schema.mjs +13 -4
- package/node_modules/typebox/build/schema/engine/type.mjs +1 -1
- package/node_modules/typebox/build/schema/resolve/resolve.d.mts +4 -1
- package/node_modules/typebox/build/schema/resolve/resolve.mjs +202 -1
- package/node_modules/typebox/build/schema/static/propertyNames.d.mts +5 -0
- package/node_modules/typebox/build/schema/static/propertyNames.mjs +3 -0
- package/node_modules/typebox/build/schema/static/schema.d.mts +3 -0
- package/node_modules/typebox/build/schema/types/index.d.mts +0 -2
- package/node_modules/typebox/build/schema/types/index.mjs +0 -2
- package/node_modules/typebox/build/system/memory/clone.mjs +14 -11
- package/node_modules/typebox/build/system/memory/discard.mjs +6 -5
- package/node_modules/typebox/build/system/settings/settings.d.mts +9 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +2 -0
- package/node_modules/typebox/build/type/engine/call/distribute_arguments.d.mts +6 -1
- package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +16 -3
- package/node_modules/typebox/build/type/engine/call/instantiate.mjs +34 -4
- package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +5 -5
- package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +20 -26
- package/node_modules/typebox/build/type/engine/evaluate/compare.d.mts +6 -10
- package/node_modules/typebox/build/type/engine/evaluate/compare.mjs +9 -13
- package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +7 -4
- package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +12 -19
- package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +4 -20
- package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +8 -20
- package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +4 -4
- package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +11 -8
- package/node_modules/typebox/build/type/engine/evaluate/flatten.d.mts +1 -1
- package/node_modules/typebox/build/type/engine/evaluate/flatten.mjs +3 -4
- package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +17 -2
- package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +26 -6
- package/node_modules/typebox/build/type/engine/exclude/operation.mjs +3 -4
- package/node_modules/typebox/build/type/engine/extract/operation.d.mts +1 -1
- package/node_modules/typebox/build/type/engine/extract/operation.mjs +3 -4
- package/node_modules/typebox/build/type/engine/priority/priority.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/priority/priority.mjs +3 -4
- package/node_modules/typebox/build/type/script/mapping.d.mts +32 -29
- package/node_modules/typebox/build/type/script/mapping.mjs +18 -25
- package/node_modules/typebox/build/type/script/parser.d.mts +19 -25
- package/node_modules/typebox/build/type/script/parser.mjs +27 -23
- package/node_modules/typebox/build/value/errors/errors.d.mts +2 -2
- package/node_modules/typebox/build/value/errors/errors.mjs +1 -1
- package/node_modules/typebox/package.json +27 -27
- package/node_modules/typebox/readme.md +79 -82
- package/node_modules/ws/lib/permessage-deflate.js +3 -1
- package/node_modules/ws/package.json +1 -1
- package/openclaw.plugin.json +57 -7
- package/package.json +9 -9
- package/dist/account-configured-BwfXBo_F.js +0 -14
- package/dist/account-inspect-Drw2gAiN.js +0 -89
- package/dist/account-reply-mode-DrUXogvO.js +0 -14
- package/dist/action-runtime.runtime-D9I6uc0Q.js +0 -2
- package/dist/actions.runtime-DLFyUkvg.js +0 -2
- package/dist/block-text-YtiNkqmx.js +0 -79
- package/dist/runtime-api-Cj9nxBNv.js +0 -10
- package/node_modules/p-map/index.d.ts +0 -155
- package/node_modules/p-map/index.js +0 -285
- package/node_modules/p-map/license +0 -9
- package/node_modules/p-map/package.json +0 -57
- package/node_modules/p-map/readme.md +0 -190
- package/node_modules/typebox/build/format/_idna.d.mts +0 -2
- package/node_modules/typebox/build/format/_idna.mjs +0 -246
- package/node_modules/typebox/build/format/_puny.d.mts +0 -1
- package/node_modules/typebox/build/format/_puny.mjs +0 -77
- package/node_modules/typebox/build/schema/resolve/ref.d.mts +0 -3
- package/node_modules/typebox/build/schema/resolve/ref.mjs +0 -146
- package/node_modules/typebox/build/schema/types/contentEncoding.d.mts +0 -9
- package/node_modules/typebox/build/schema/types/contentEncoding.mjs +0 -13
- package/node_modules/typebox/build/schema/types/contentMediaType.d.mts +0 -9
- package/node_modules/typebox/build/schema/types/contentMediaType.mjs +0 -13
- package/dist/{security-audit-DR097212.js → security-audit-B_yKr7MW.js} +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as SlackChannelConfigSchema } from "./config-schema-
|
|
5
|
-
import {
|
|
1
|
+
import { r as isSlackSetupAccountConfigured } from "./account-configured-sUohAxZr.js";
|
|
2
|
+
import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-Dm_H77gH.js";
|
|
3
|
+
import { t as inspectSlackAccount } from "./account-inspect-CN2hBsim.js";
|
|
4
|
+
import { t as SlackChannelConfigSchema } from "./config-schema-BVIMyiDN.js";
|
|
5
|
+
import { normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
6
6
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
7
7
|
import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
8
8
|
import { formatAllowFromLowercase } from "openclaw/plugin-sdk/allow-from";
|
|
@@ -102,13 +102,13 @@ function buildSlackManifest(botName = "OpenClaw") {
|
|
|
102
102
|
}
|
|
103
103
|
function buildSlackSetupLines() {
|
|
104
104
|
return [
|
|
105
|
-
"1) Slack API -> Create App -> From scratch or
|
|
106
|
-
"2)
|
|
107
|
-
"3)
|
|
108
|
-
"4)
|
|
109
|
-
"5)
|
|
110
|
-
"
|
|
111
|
-
"Tip:
|
|
105
|
+
"1) Slack API -> Create App -> From scratch or a transport-specific manifest",
|
|
106
|
+
"2) Install App to workspace to get the xoxb- bot token",
|
|
107
|
+
"3) Socket Mode: enable it and create an app-level token (xapp-...)",
|
|
108
|
+
"4) HTTP: configure a public HTTPS Request URL and copy the app Signing Secret",
|
|
109
|
+
"5) Enable Event Subscriptions for message, App Home, and Agent View events",
|
|
110
|
+
"6) App Home -> enable the Home tab, Messages tab for DMs, and Agent View",
|
|
111
|
+
"Tip: Socket Mode can use SLACK_BOT_TOKEN + SLACK_APP_TOKEN in your env.",
|
|
112
112
|
`Docs: ${formatDocsLink("/slack", "slack")}`
|
|
113
113
|
];
|
|
114
114
|
}
|
|
@@ -121,17 +121,6 @@ function setSlackChannelAllowlist(cfg, accountId, channelKeys) {
|
|
|
121
121
|
patch: { channels }
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
-
function isSlackSetupAccountConfigured(account) {
|
|
125
|
-
if (account.config.mode === "relay") return isSlackPluginAccountConfigured(account);
|
|
126
|
-
const hasConfiguredUserToken = Boolean(account.userToken?.trim()) || hasConfiguredSecretInput(account.config.userToken);
|
|
127
|
-
const hasConfiguredBotToken = Boolean(account.botToken?.trim()) || hasConfiguredSecretInput(account.config.botToken);
|
|
128
|
-
const hasConfiguredAppToken = Boolean(account.appToken?.trim()) || hasConfiguredSecretInput(account.config.appToken);
|
|
129
|
-
if (account.identity === "user") {
|
|
130
|
-
const hasTransportCredential = account.config.mode === "http" ? hasConfiguredSecretInput(account.config.signingSecret) : hasConfiguredAppToken;
|
|
131
|
-
return hasConfiguredUserToken && hasTransportCredential;
|
|
132
|
-
}
|
|
133
|
-
return hasConfiguredBotToken && hasConfiguredAppToken;
|
|
134
|
-
}
|
|
135
124
|
function describeSlackSetupAccount(account) {
|
|
136
125
|
return describeAccountSnapshot({
|
|
137
126
|
account,
|
|
@@ -229,12 +218,9 @@ function createSlackTokenCredential(params) {
|
|
|
229
218
|
});
|
|
230
219
|
}
|
|
231
220
|
function hasSlackSetupCredentials(params) {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
if (params.mode === "http") return Boolean(params.input.userToken && params.input.signingSecret);
|
|
237
|
-
return params.mode === "socket" && Boolean(params.input.userToken && params.input.appToken);
|
|
221
|
+
const identityToken = params.identity === "user" ? params.input.userToken : params.input.botToken;
|
|
222
|
+
const transportCredential = params.mode === "http" ? params.input.signingSecret : params.input.appToken;
|
|
223
|
+
return Boolean(identityToken && transportCredential);
|
|
238
224
|
}
|
|
239
225
|
const slackSetupAdapterBase = createPatchedAccountSetupAdapter({
|
|
240
226
|
channelKey: SLACK_CHANNEL,
|
|
@@ -260,13 +246,13 @@ const slackSetupAdapterBase = createPatchedAccountSetupAdapter({
|
|
|
260
246
|
mode
|
|
261
247
|
})) return null;
|
|
262
248
|
if (identity === "user") return mode === "http" ? "Slack user identity requires --user-token and --signing-secret." : "Slack user identity requires --user-token and --app-token.";
|
|
263
|
-
return "Slack requires --bot-token and --app-token (or --use-env).";
|
|
249
|
+
return mode === "http" ? "Slack HTTP mode requires --bot-token and --signing-secret (or --use-env)." : "Slack requires --bot-token and --app-token (or --use-env).";
|
|
264
250
|
},
|
|
265
251
|
buildPatch: (input) => {
|
|
266
252
|
const setupInput = input;
|
|
267
253
|
return {
|
|
268
254
|
...setupInput.identity ? { postAs: setupInput.identity } : {},
|
|
269
|
-
...setupInput.
|
|
255
|
+
...setupInput.mode ? { mode: setupInput.mode } : {},
|
|
270
256
|
...setupInput.botToken ? { botToken: setupInput.botToken } : {},
|
|
271
257
|
...setupInput.appToken ? { appToken: setupInput.appToken } : {},
|
|
272
258
|
...setupInput.userToken ? { userToken: setupInput.userToken } : {},
|
|
@@ -421,23 +407,24 @@ function createSlackSetupWizardBase(handlers) {
|
|
|
421
407
|
`Docs: ${formatDocsLink("/channels/slack#user-identity-post-as-a-real-person", "channels/slack")}`
|
|
422
408
|
].join("\n"), "Slack user identity");
|
|
423
409
|
} else {
|
|
424
|
-
await prompter.note(buildSlackSetupLines().join("\n"), t("wizard.
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
410
|
+
await prompter.note(buildSlackSetupLines().join("\n"), t("wizard.channels.setupTitle"));
|
|
411
|
+
if (currentAccount.config.mode !== "http") {
|
|
412
|
+
const manifest = buildSlackManifest();
|
|
413
|
+
await (prompter.plain ? prompter.plain(manifest) : prompter.note(manifest, "Slack manifest JSON"));
|
|
414
|
+
}
|
|
428
415
|
}
|
|
429
416
|
return { cfg: next };
|
|
430
417
|
},
|
|
431
418
|
envShortcut: {
|
|
432
419
|
prompt: t("wizard.slack.envPrompt"),
|
|
433
420
|
preferredEnvVar: "SLACK_BOT_TOKEN",
|
|
434
|
-
isAvailable: ({ cfg, accountId }) =>
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
accountId
|
|
440
|
-
}
|
|
421
|
+
isAvailable: ({ cfg, accountId }) => {
|
|
422
|
+
const account = inspectSlackAccount({
|
|
423
|
+
cfg,
|
|
424
|
+
accountId
|
|
425
|
+
});
|
|
426
|
+
return accountId === DEFAULT_ACCOUNT_ID && (account.config.postAs ?? "bot") === "bot" && (account.config.mode ?? "socket") === "socket" && Boolean(process.env.SLACK_BOT_TOKEN?.trim()) && Boolean(process.env.SLACK_APP_TOKEN?.trim()) && !account.configured;
|
|
427
|
+
},
|
|
441
428
|
apply: ({ cfg, accountId }) => enableSlackAccount(cfg, accountId)
|
|
442
429
|
},
|
|
443
430
|
credentials: [
|
|
@@ -473,11 +460,10 @@ function createSlackSetupWizardBase(handlers) {
|
|
|
473
460
|
keepPrompt: t("wizard.slack.appTokenKeep"),
|
|
474
461
|
inputPrompt: t("wizard.slack.appTokenInput"),
|
|
475
462
|
shouldPrompt: ({ cfg, accountId }) => {
|
|
476
|
-
|
|
463
|
+
return (inspectSlackAccount({
|
|
477
464
|
cfg,
|
|
478
465
|
accountId
|
|
479
|
-
});
|
|
480
|
-
return (account.config.postAs ?? "bot") === "bot" || (account.config.mode ?? "socket") === "socket";
|
|
466
|
+
}).config.mode ?? "socket") === "socket";
|
|
481
467
|
}
|
|
482
468
|
}),
|
|
483
469
|
createSlackTokenCredential({
|
|
@@ -487,11 +473,10 @@ function createSlackSetupWizardBase(handlers) {
|
|
|
487
473
|
keepPrompt: "Slack signing secret already configured. Keep it?",
|
|
488
474
|
inputPrompt: "Enter Slack signing secret",
|
|
489
475
|
shouldPrompt: ({ cfg, accountId }) => {
|
|
490
|
-
|
|
476
|
+
return inspectSlackAccount({
|
|
491
477
|
cfg,
|
|
492
478
|
accountId
|
|
493
|
-
});
|
|
494
|
-
return account.config.postAs === "user" && account.config.mode === "http";
|
|
479
|
+
}).config.mode === "http";
|
|
495
480
|
}
|
|
496
481
|
})
|
|
497
482
|
],
|
|
@@ -570,7 +555,7 @@ const slackBaseConfigAdapter = createScopedChannelConfigAdapter({
|
|
|
570
555
|
});
|
|
571
556
|
//#endregion
|
|
572
557
|
//#region extensions/slack/src/channel.setup.ts
|
|
573
|
-
const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-
|
|
558
|
+
const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-BGnd2pSe.js")).slackSetupWizard }));
|
|
574
559
|
const slackSetupPlugin = {
|
|
575
560
|
id: SLACK_CHANNEL,
|
|
576
561
|
meta: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { buildSecretInputSchema, hasConfiguredSecretInput } from "openclaw/plugin-sdk/secret-input";
|
|
2
2
|
import { createChannelConfigUiHints } from "openclaw/plugin-sdk/channel-core";
|
|
3
|
-
import { ChannelBotLoopProtectionSchema, ChannelDangerouslyAllowNameMatchingSchema, ChannelImplicitMentionsSchema, ChannelPreviewStreamingConfigSchema, ChannelStreamingProgressSchema,
|
|
3
|
+
import { ChannelBotLoopProtectionSchema, ChannelDangerouslyAllowNameMatchingSchema, ChannelImplicitMentionsSchema, ChannelPreviewStreamingConfigSchema, ChannelStreamingProgressSchema, ProviderCommandsSchema, ReplyToModeSchema, buildChannelAccountSchemaParts, buildChannelAllowBotsSchema, buildChannelConfigSchema, buildChannelExecApprovalsSchema, buildChannelReactionShape, buildGroupEntrySchema, requireAllowlistAllowFrom, requireOpenAllowFrom } from "openclaw/plugin-sdk/channel-config-schema";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
//#region extensions/slack/src/config-ui-hints.ts
|
|
6
6
|
const slackChannelConfigUiHints = {
|
|
@@ -32,10 +32,15 @@ const slackChannelConfigUiHints = {
|
|
|
32
32
|
nativeTransport: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming.mode is partial (default: true). Native streaming and Slack assistant thread status require a reply thread target; top-level DMs can still use draft post-and-edit preview streaming.",
|
|
33
33
|
"preview.toolProgress": "Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active.",
|
|
34
34
|
"preview.commandText": "Command/exec detail in preview tool-progress lines: \"status\" is the safe default; \"raw\" opts into command text.",
|
|
35
|
-
"progress.
|
|
35
|
+
"progress.style": "Slack progress presentation: \"card\" (default) uses structured task/session cards; \"compact\" keeps one editable text draft that the final answer replaces in place when Slack can safely edit it.",
|
|
36
|
+
"progress.nativeTaskCards": "Slack native task-card progress updates when channels.slack.streaming.mode=\"progress\", progress.style=\"card\", and streaming.nativeTransport is enabled. Set false to fall back to the Block Kit progress card. Default: true."
|
|
36
37
|
},
|
|
37
38
|
progress: { labels: "openclaw" }
|
|
38
39
|
}),
|
|
40
|
+
joinIntro: {
|
|
41
|
+
label: "Slack Channel Join Introduction",
|
|
42
|
+
help: "Post one brief, room-specific introduction when the bot joins an allowed Slack channel (default: true). Account settings override the channel-wide setting."
|
|
43
|
+
},
|
|
39
44
|
allowBots: {
|
|
40
45
|
label: "Slack Allow Bot Messages",
|
|
41
46
|
help: "Allow bot-authored messages to trigger Slack replies (default: false)."
|
|
@@ -94,7 +99,7 @@ const slackChannelConfigUiHints = {
|
|
|
94
99
|
},
|
|
95
100
|
execApprovals: {
|
|
96
101
|
label: "Slack Exec Approvals",
|
|
97
|
-
help: "Slack-native exec approval routing and approver authorization.
|
|
102
|
+
help: "Slack-native exec approval routing and approver authorization. Set enabled to \"auto\" or true to enable DM-first native approvals when approvers can be resolved for this Slack account; unset or false disables them."
|
|
98
103
|
},
|
|
99
104
|
presenceEvents: {
|
|
100
105
|
label: "Slack Presence Events",
|
|
@@ -104,13 +109,21 @@ const slackChannelConfigUiHints = {
|
|
|
104
109
|
label: "Slack Presence Event Mode",
|
|
105
110
|
help: "\"off\" disables polling; \"auto\" covers DMs, MPIMs, and recent threads with up to 8 observed people; \"on\" also covers larger threads and top-level channels."
|
|
106
111
|
},
|
|
112
|
+
"presenceEvents.prompt": {
|
|
113
|
+
label: "Slack Presence Event Prompt",
|
|
114
|
+
help: "Replace the default greeting guidance appended after presence facts. Use an empty string to omit event-specific guidance and let workspace instructions such as AGENTS.md govern behavior. Maximum: 20,000 characters."
|
|
115
|
+
},
|
|
107
116
|
"channels.*.presenceEvents.mode": {
|
|
108
117
|
label: "Slack Channel Presence Event Mode",
|
|
109
118
|
help: "Override presence events for one Slack channel. Use \"on\" to include large threads or top-level channel sessions."
|
|
110
119
|
},
|
|
120
|
+
"channels.*.presenceEvents.prompt": {
|
|
121
|
+
label: "Slack Channel Presence Event Prompt",
|
|
122
|
+
help: "Override the account-level presence-event prompt for one Slack channel. Maximum: 20,000 characters."
|
|
123
|
+
},
|
|
111
124
|
"execApprovals.enabled": {
|
|
112
125
|
label: "Slack Exec Approvals Enabled",
|
|
113
|
-
help: "Controls Slack native exec approvals for this account:
|
|
126
|
+
help: "Controls Slack native exec approvals for this account: \"auto\" or true enables DM-first native approvals when approvers can be resolved; unset or false disables them."
|
|
114
127
|
},
|
|
115
128
|
"execApprovals.approvers": {
|
|
116
129
|
label: "Slack Exec Approval Approvers",
|
|
@@ -144,7 +157,11 @@ const slackChannelConfigUiHints = {
|
|
|
144
157
|
//#endregion
|
|
145
158
|
//#region extensions/slack/src/config-schema.ts
|
|
146
159
|
const SecretInputSchema = buildSecretInputSchema();
|
|
147
|
-
const
|
|
160
|
+
const SLACK_PRESENCE_EVENT_PROMPT_MAX_CHARS = 2e4;
|
|
161
|
+
const SlackStreamingProgressSchema = ChannelStreamingProgressSchema.extend({
|
|
162
|
+
style: z.enum(["card", "compact"]).optional(),
|
|
163
|
+
nativeTaskCards: z.boolean().optional()
|
|
164
|
+
}).strict();
|
|
148
165
|
const SlackStreamingConfigSchema = ChannelPreviewStreamingConfigSchema.extend({
|
|
149
166
|
nativeTransport: z.boolean().optional(),
|
|
150
167
|
progress: SlackStreamingProgressSchema.optional()
|
|
@@ -154,11 +171,14 @@ const SlackDmSchema = z.object({
|
|
|
154
171
|
groupEnabled: z.boolean().optional(),
|
|
155
172
|
groupChannels: z.array(z.union([z.string(), z.number()])).optional()
|
|
156
173
|
}).strict();
|
|
157
|
-
const SlackPresenceEventsSchema = z.object({
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
174
|
+
const SlackPresenceEventsSchema = z.object({
|
|
175
|
+
mode: z.enum([
|
|
176
|
+
"off",
|
|
177
|
+
"auto",
|
|
178
|
+
"on"
|
|
179
|
+
]).optional(),
|
|
180
|
+
prompt: z.string().max(SLACK_PRESENCE_EVENT_PROMPT_MAX_CHARS).optional()
|
|
181
|
+
}).strict();
|
|
162
182
|
const SlackChannelSchema = buildGroupEntrySchema({
|
|
163
183
|
ignoreOtherMentions: z.boolean().optional(),
|
|
164
184
|
replyToMode: ReplyToModeSchema.optional(),
|
|
@@ -183,12 +203,14 @@ const SlackRelaySchema = z.object({
|
|
|
183
203
|
gatewayId: z.string().optional()
|
|
184
204
|
}).strict();
|
|
185
205
|
const SlackIdentitySchema = z.enum(["bot", "user"]);
|
|
206
|
+
const { accountShape, rootPolicyShape } = buildChannelAccountSchemaParts({
|
|
207
|
+
omit: ["groupAllowFrom"],
|
|
208
|
+
streaming: SlackStreamingConfigSchema.optional()
|
|
209
|
+
});
|
|
186
210
|
const SlackAccountSchema = z.object({
|
|
187
|
-
...
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}),
|
|
191
|
-
postAs: SlackIdentitySchema.default("bot"),
|
|
211
|
+
...accountShape,
|
|
212
|
+
joinIntro: z.boolean().optional(),
|
|
213
|
+
postAs: SlackIdentitySchema.optional(),
|
|
192
214
|
mode: z.enum([
|
|
193
215
|
"socket",
|
|
194
216
|
"http",
|
|
@@ -202,7 +224,7 @@ const SlackAccountSchema = z.object({
|
|
|
202
224
|
botToken: SecretInputSchema.optional(),
|
|
203
225
|
appToken: SecretInputSchema.optional(),
|
|
204
226
|
userToken: SecretInputSchema.optional(),
|
|
205
|
-
userTokenReadOnly: z.boolean().optional()
|
|
227
|
+
userTokenReadOnly: z.boolean().optional(),
|
|
206
228
|
allowBots: buildChannelAllowBotsSchema({ allowMentions: true }),
|
|
207
229
|
botLoopProtection: ChannelBotLoopProtectionSchema.optional(),
|
|
208
230
|
dangerouslyAllowNameMatching: ChannelDangerouslyAllowNameMatchingSchema,
|
|
@@ -243,7 +265,6 @@ const SlackAccountSchema = z.object({
|
|
|
243
265
|
channels: z.record(z.string(), SlackChannelSchema.optional()).optional(),
|
|
244
266
|
typingReaction: z.string().optional()
|
|
245
267
|
}).strict();
|
|
246
|
-
const SlackAccountEntrySchema = SlackAccountSchema.extend({ postAs: SlackIdentitySchema.optional() });
|
|
247
268
|
function validateSlackSigningSecretRequirements(value, ctx) {
|
|
248
269
|
const resolveMode = (mode) => mode === "http" || mode === "socket" || mode === "relay" ? mode : void 0;
|
|
249
270
|
const baseMode = resolveMode(value.mode) ?? "socket";
|
|
@@ -268,6 +289,9 @@ function validateSlackSigningSecretRequirements(value, ctx) {
|
|
|
268
289
|
}
|
|
269
290
|
}
|
|
270
291
|
const SlackChannelConfigSchema = buildChannelConfigSchema(SlackAccountSchema.safeExtend({
|
|
292
|
+
...rootPolicyShape,
|
|
293
|
+
postAs: SlackIdentitySchema.default("bot"),
|
|
294
|
+
userTokenReadOnly: z.boolean().optional().default(true),
|
|
271
295
|
mode: z.enum([
|
|
272
296
|
"socket",
|
|
273
297
|
"http",
|
|
@@ -275,8 +299,7 @@ const SlackChannelConfigSchema = buildChannelConfigSchema(SlackAccountSchema.saf
|
|
|
275
299
|
]).optional().default("socket"),
|
|
276
300
|
signingSecret: SecretInputSchema.optional(),
|
|
277
301
|
webhookPath: z.string().optional().default("/slack/events"),
|
|
278
|
-
|
|
279
|
-
accounts: z.record(z.string(), SlackAccountEntrySchema.optional()).optional(),
|
|
302
|
+
accounts: z.record(z.string(), SlackAccountSchema.optional()).optional(),
|
|
280
303
|
defaultAccount: z.string().optional()
|
|
281
304
|
}).superRefine((value, ctx) => {
|
|
282
305
|
if (value.enabled === false) return;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { t as hasSlackAccountCredentials } from "./account-configured-sUohAxZr.js";
|
|
2
|
+
import { DEFAULT_ACCOUNT_ID, hasConfiguredAccountValue, mergeAccountConfig } from "openclaw/plugin-sdk/account-core";
|
|
3
|
+
//#region extensions/slack/configured-state.ts
|
|
4
|
+
function hasConfiguredSlackAccount(account, env) {
|
|
5
|
+
const userIdentity = account?.postAs === "user";
|
|
6
|
+
return hasSlackAccountCredentials({
|
|
7
|
+
config: account ?? {},
|
|
8
|
+
identityTokenConfigured: hasConfiguredAccountValue(userIdentity ? account?.userToken : account?.botToken) || hasConfiguredAccountValue(userIdentity ? env.SLACK_USER_TOKEN : env.SLACK_BOT_TOKEN),
|
|
9
|
+
appTokenConfigured: hasConfiguredAccountValue(account?.appToken) || hasConfiguredAccountValue(env.SLACK_APP_TOKEN)
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/** Resolve Slack activation through its account owner's real transport credential contract. */
|
|
13
|
+
function hasConfiguredSlackChannelState(params) {
|
|
14
|
+
const channel = params.cfg.channels?.slack;
|
|
15
|
+
if (channel?.enabled === false) return false;
|
|
16
|
+
const defaultAccount = channel?.accounts?.[DEFAULT_ACCOUNT_ID];
|
|
17
|
+
if (defaultAccount?.enabled !== false) {
|
|
18
|
+
if (hasConfiguredSlackAccount(defaultAccount ? mergeAccountConfig({
|
|
19
|
+
channelConfig: channel,
|
|
20
|
+
accountConfig: defaultAccount,
|
|
21
|
+
nestedObjectKeys: ["relay"]
|
|
22
|
+
}) : channel, params.env ?? process.env)) return true;
|
|
23
|
+
}
|
|
24
|
+
return Object.entries(channel?.accounts ?? {}).some(([accountId, account]) => {
|
|
25
|
+
if (accountId === DEFAULT_ACCOUNT_ID || account.enabled === false) return false;
|
|
26
|
+
return hasConfiguredSlackAccount(mergeAccountConfig({
|
|
27
|
+
channelConfig: channel,
|
|
28
|
+
accountConfig: account,
|
|
29
|
+
nestedObjectKeys: ["relay"]
|
|
30
|
+
}), {});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { hasConfiguredSlackChannelState };
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { a as parseSlackTarget } from "./target-parsing-BnMD2ZqZ.js";
|
|
2
|
+
import "./targets-Cx5W_n3W.js";
|
|
3
|
+
import { resolveConfiguredBindingRoute, resolveRuntimeConversationBindingRoute } from "openclaw/plugin-sdk/conversation-runtime";
|
|
4
|
+
//#region extensions/slack/src/account-reply-mode.ts
|
|
5
|
+
function normalizeSlackChatType(raw) {
|
|
6
|
+
const value = raw?.trim().toLowerCase();
|
|
7
|
+
if (!value) return;
|
|
8
|
+
if (value === "direct" || value === "dm") return "direct";
|
|
9
|
+
if (value === "group" || value === "channel") return value;
|
|
10
|
+
}
|
|
11
|
+
function resolveSlackReplyToMode(account, chatType) {
|
|
12
|
+
const normalized = normalizeSlackChatType(chatType ?? void 0);
|
|
13
|
+
if (normalized && account.replyToModeByChatType?.[normalized] !== void 0) return account.replyToModeByChatType[normalized] ?? "off";
|
|
14
|
+
return account.replyToMode ?? "off";
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region extensions/slack/src/conversation-binding-route.ts
|
|
18
|
+
const slackRouteBindingConfigCache = /* @__PURE__ */ new WeakMap();
|
|
19
|
+
function slackTargetDefaultKindForPeer(kind) {
|
|
20
|
+
return kind === "direct" ? "user" : "channel";
|
|
21
|
+
}
|
|
22
|
+
function slackTargetKindMatchesPeer(peerKind, targetKind) {
|
|
23
|
+
if (targetKind === "user") return peerKind === "direct";
|
|
24
|
+
return peerKind === "channel" || peerKind === "group";
|
|
25
|
+
}
|
|
26
|
+
function normalizeSlackRouteBindingPeer(peer) {
|
|
27
|
+
const rawId = peer.id.trim();
|
|
28
|
+
if (!rawId || rawId === "*") return peer;
|
|
29
|
+
const target = (() => {
|
|
30
|
+
try {
|
|
31
|
+
return parseSlackTarget(rawId, { defaultKind: slackTargetDefaultKindForPeer(peer.kind) });
|
|
32
|
+
} catch {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
})();
|
|
36
|
+
if (!target || !slackTargetKindMatchesPeer(peer.kind, target.kind)) return peer;
|
|
37
|
+
const normalizedId = target.teamId ? `team:${target.teamId}:${target.kind}:${target.id}` : target.id;
|
|
38
|
+
return normalizedId === peer.id ? peer : {
|
|
39
|
+
...peer,
|
|
40
|
+
id: normalizedId
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function normalizeSlackRouteBindingConfig(cfg) {
|
|
44
|
+
const bindings = cfg.bindings;
|
|
45
|
+
const cached = slackRouteBindingConfigCache.get(cfg);
|
|
46
|
+
if (cached && cached.bindingsRef === bindings) return cached.normalizedCfg;
|
|
47
|
+
if (!Array.isArray(bindings)) return cfg;
|
|
48
|
+
let changed = false;
|
|
49
|
+
const normalizedBindings = bindings.map((binding) => {
|
|
50
|
+
if (binding.type === "acp" || binding.match.channel.trim().toLowerCase() !== "slack") return binding;
|
|
51
|
+
const peer = binding.match.peer;
|
|
52
|
+
if (!peer) return binding;
|
|
53
|
+
const normalizedPeer = normalizeSlackRouteBindingPeer(peer);
|
|
54
|
+
if (normalizedPeer === peer) return binding;
|
|
55
|
+
changed = true;
|
|
56
|
+
return {
|
|
57
|
+
...binding,
|
|
58
|
+
match: {
|
|
59
|
+
...binding.match,
|
|
60
|
+
peer: normalizedPeer
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
const normalizedCfg = changed ? {
|
|
65
|
+
...cfg,
|
|
66
|
+
bindings: normalizedBindings
|
|
67
|
+
} : cfg;
|
|
68
|
+
slackRouteBindingConfigCache.set(cfg, {
|
|
69
|
+
bindingsRef: bindings,
|
|
70
|
+
normalizedCfg
|
|
71
|
+
});
|
|
72
|
+
return normalizedCfg;
|
|
73
|
+
}
|
|
74
|
+
function resolveSlackConversationBindingRoute(params) {
|
|
75
|
+
const boundThreadRoute = params.bindingsEnabled && params.runtimeBindingThreadId ? resolveRuntimeConversationBindingRoute({
|
|
76
|
+
route: params.route,
|
|
77
|
+
touchBinding: params.touchBinding,
|
|
78
|
+
conversation: {
|
|
79
|
+
channel: "slack",
|
|
80
|
+
accountId: params.accountId,
|
|
81
|
+
conversationId: params.runtimeBindingThreadId,
|
|
82
|
+
parentConversationId: params.baseConversationId
|
|
83
|
+
}
|
|
84
|
+
}) : null;
|
|
85
|
+
const runtimeRoute = !params.bindingsEnabled ? {
|
|
86
|
+
bindingOwnerAvailable: true,
|
|
87
|
+
route: params.route,
|
|
88
|
+
bindingRecord: null,
|
|
89
|
+
boundSessionKey: void 0
|
|
90
|
+
} : boundThreadRoute?.boundSessionKey || boundThreadRoute?.bindingRecord ? boundThreadRoute : resolveRuntimeConversationBindingRoute({
|
|
91
|
+
route: params.route,
|
|
92
|
+
touchBinding: params.touchBinding,
|
|
93
|
+
conversation: {
|
|
94
|
+
channel: "slack",
|
|
95
|
+
accountId: params.accountId,
|
|
96
|
+
conversationId: params.baseConversationId
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
const configuredRoute = params.bindingsEnabled && !runtimeRoute.boundSessionKey && !runtimeRoute.bindingRecord ? resolveConfiguredBindingRoute({
|
|
100
|
+
cfg: params.cfg,
|
|
101
|
+
route: params.route,
|
|
102
|
+
conversation: {
|
|
103
|
+
channel: "slack",
|
|
104
|
+
accountId: params.accountId,
|
|
105
|
+
conversationId: params.baseConversationId
|
|
106
|
+
}
|
|
107
|
+
}) : null;
|
|
108
|
+
return {
|
|
109
|
+
runtimeRoute,
|
|
110
|
+
configuredRoute,
|
|
111
|
+
route: runtimeRoute.boundSessionKey ? runtimeRoute.route : configuredRoute?.route ?? params.route
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//#endregion
|
|
115
|
+
export { resolveSlackConversationBindingRoute as n, resolveSlackReplyToMode as r, normalizeSlackRouteBindingConfig as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-
|
|
2
|
+
import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-Dm_H77gH.js";
|
|
3
3
|
import { a as parseSlackTarget } from "./target-parsing-BnMD2ZqZ.js";
|
|
4
4
|
import "./targets-Cx5W_n3W.js";
|
|
5
5
|
import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-
|
|
1
|
+
import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-DqfQ42OV.js";
|
|
2
2
|
export { listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { a as resolveSlackAccount } from "./accounts-
|
|
3
|
-
import {
|
|
2
|
+
import { a as resolveSlackAccount } from "./accounts-Dm_H77gH.js";
|
|
3
|
+
import { h as createSlackLookupClient } from "./probe-0usmAb0i.js";
|
|
4
4
|
import { t as collectSlackCursorPages } from "./cursor-pages-eX7p8Wwt.js";
|
|
5
5
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
6
|
//#region extensions/slack/src/directory-live.ts
|