@openclaw/slack 2026.8.1-beta.2 → 2026.9.1-beta.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-BoSeX09X.js} +76 -83
- package/dist/action-runtime.runtime-Dpa16J87.js +2 -0
- package/dist/{actions-BTDXwwE3.js → actions-XdQyjG_p.js} +134 -262
- package/dist/api.js +14 -14
- package/dist/{approval-handler.runtime-CJaNzAq2.js → approval-handler.runtime-DxXfGX_Z.js} +53 -174
- package/dist/{channel-D_tovcUL.js → channel-C_vnTgxo.js} +117 -72
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-type-B9MSdoGN.js → channel-type-j-2lalcC.js} +3 -7
- package/dist/{channel.setup-Bch9dYmA.js → channel.setup-aal8tokM.js} +34 -49
- package/dist/{config-schema-xto5jFIx.js → config-schema-CN3XZRX5.js} +23 -7
- 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-lC6X_Ru-.js} +2 -2
- package/dist/{group-policy-c4RP9bjc.js → group-policy-CU1tEGpS.js} +583 -642
- package/dist/{message-tool-api-BykQB4AU.js → message-tool-api-CWosHSi5.js} +6 -5
- package/dist/message-tool-api.js +1 -1
- package/dist/{monitor-1nF1NtqT.js → monitor-DrNCGneD.js} +3 -3
- package/dist/{outbound-adapter-S81tsswN.js → outbound-adapter-DkT2vUE9.js} +50 -19
- package/dist/{pipeline.runtime-BvYsM5JO.js → pipeline.runtime-CRRng_Nw.js} +440 -451
- package/dist/{policy-TapwbeaT.js → policy-BoP6t88v.js} +1 -1
- package/dist/{probe-HoEg_WxB.js → probe-4_aHtVT3.js} +2 -21
- package/dist/{provider-CDNvBXUi.js → provider-D4nDgxCh.js} +240 -95
- package/dist/{relay-source-C9leF11u.js → relay-source-CEmze11m.js} +1 -1
- package/dist/{replies-CeOfv82I.js → replies-D9XMM_S0.js} +47 -26
- package/dist/{resolve-channels-CNPrxaXY.js → resolve-channels-DSamDgVs.js} +1 -1
- package/dist/{resolve-users-Dzomuwnr.js → resolve-users-CIzwbaJR.js} +1 -1
- package/dist/runtime-api.js +11 -11
- package/dist/{scopes-cYXKkrRD.js → scopes-BBrUzpBH.js} +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/{send-Nor0iBwY.js → send-DtjEnlLh.js} +86 -98
- package/dist/{send.runtime-BmgNe6S9.js → send.runtime-DQeNKa2J.js} +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-CbX1-Knh.js → setup-surface-CsBCM4rP.js} +6 -6
- package/dist/{shared-zdT5AMp-.js → shared-D9GeeR9K.js} +33 -9
- package/dist/{block-text-YtiNkqmx.js → slack-client-kind-hSfjXyUM.js} +17 -2
- package/dist/{slash-dispatch.runtime-Bnr9GR1S.js → slash-dispatch.runtime-Chr3YHnT.js} +3 -3
- 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 +43 -1
- 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/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
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { hasConfiguredAccountValue } from "openclaw/plugin-sdk/account-resolution";
|
|
2
|
+
import { hasConfiguredSecretInput } from "openclaw/plugin-sdk/secret-input";
|
|
3
|
+
//#region extensions/slack/src/account-configured.ts
|
|
4
|
+
function hasSlackAccountCredentials(params) {
|
|
5
|
+
if (!params.identityTokenConfigured) return false;
|
|
6
|
+
const mode = params.config.mode ?? "socket";
|
|
7
|
+
if (mode === "http") return hasConfiguredAccountValue(params.config.signingSecret);
|
|
8
|
+
if (mode === "relay") {
|
|
9
|
+
const relay = params.config.relay;
|
|
10
|
+
return hasConfiguredAccountValue(relay?.url) && hasConfiguredAccountValue(relay?.authToken) && hasConfiguredAccountValue(relay?.gatewayId);
|
|
11
|
+
}
|
|
12
|
+
return params.appTokenConfigured;
|
|
13
|
+
}
|
|
14
|
+
function isSlackPluginAccountConfigured(account) {
|
|
15
|
+
const identityToken = account.identity === "user" ? account.userToken : account.botToken;
|
|
16
|
+
return hasSlackAccountCredentials({
|
|
17
|
+
config: account.config,
|
|
18
|
+
identityTokenConfigured: Boolean(identityToken?.trim()),
|
|
19
|
+
appTokenConfigured: Boolean(account.appToken?.trim())
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function isSlackSetupAccountConfigured(account) {
|
|
23
|
+
if (account.config.mode === "relay") return isSlackPluginAccountConfigured(account);
|
|
24
|
+
const identityToken = account.identity === "user" ? account.userToken : account.botToken;
|
|
25
|
+
const configuredIdentityToken = account.identity === "user" ? account.config.userToken : account.config.botToken;
|
|
26
|
+
return hasSlackAccountCredentials({
|
|
27
|
+
config: account.config,
|
|
28
|
+
identityTokenConfigured: Boolean(identityToken?.trim()) || hasConfiguredSecretInput(configuredIdentityToken),
|
|
29
|
+
appTokenConfigured: Boolean(account.appToken?.trim()) || hasConfiguredSecretInput(account.config.appToken)
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { isSlackPluginAccountConfigured as n, isSlackSetupAccountConfigured as r, hasSlackAccountCredentials as t };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { t as hasSlackAccountCredentials } from "./account-configured-sUohAxZr.js";
|
|
2
|
+
import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-Dm_H77gH.js";
|
|
3
|
+
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
4
|
+
import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
5
|
+
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
|
+
//#region extensions/slack/src/account-inspect.ts
|
|
7
|
+
function inspectSlackToken(value) {
|
|
8
|
+
const token = normalizeSecretInputString(value);
|
|
9
|
+
if (token) return {
|
|
10
|
+
token,
|
|
11
|
+
source: "config",
|
|
12
|
+
status: "available"
|
|
13
|
+
};
|
|
14
|
+
if (hasConfiguredSecretInput(value)) return {
|
|
15
|
+
source: "config",
|
|
16
|
+
status: "configured_unavailable"
|
|
17
|
+
};
|
|
18
|
+
return {
|
|
19
|
+
source: "none",
|
|
20
|
+
status: "missing"
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function resolveInspectedSlackToken(configured, envToken) {
|
|
24
|
+
return configured.status === "missing" && envToken ? {
|
|
25
|
+
token: envToken,
|
|
26
|
+
source: "env",
|
|
27
|
+
status: "available"
|
|
28
|
+
} : configured;
|
|
29
|
+
}
|
|
30
|
+
function inspectSlackAccount(params) {
|
|
31
|
+
const accountId = normalizeAccountId(params.accountId ?? resolveDefaultSlackAccountId(params.cfg));
|
|
32
|
+
const merged = mergeSlackAccountConfig(params.cfg, accountId);
|
|
33
|
+
const enabled = params.cfg.channels?.slack?.enabled !== false && merged.enabled !== false;
|
|
34
|
+
const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
|
|
35
|
+
const mode = merged.mode ?? "socket";
|
|
36
|
+
const identity = merged.postAs ?? "bot";
|
|
37
|
+
const isHttpMode = mode === "http";
|
|
38
|
+
const isRelayMode = mode === "relay";
|
|
39
|
+
const configBot = inspectSlackToken(merged.botToken);
|
|
40
|
+
const configApp = inspectSlackToken(merged.appToken);
|
|
41
|
+
const configSigningSecret = inspectSlackToken(merged.signingSecret);
|
|
42
|
+
const configUser = inspectSlackToken(merged.userToken);
|
|
43
|
+
const envBot = allowEnv ? normalizeSecretInputString(params.envBotToken ?? process.env.SLACK_BOT_TOKEN) : void 0;
|
|
44
|
+
const envApp = allowEnv && !isRelayMode ? normalizeSecretInputString(params.envAppToken ?? process.env.SLACK_APP_TOKEN) : void 0;
|
|
45
|
+
const envUser = allowEnv ? normalizeSecretInputString(params.envUserToken ?? process.env.SLACK_USER_TOKEN) : void 0;
|
|
46
|
+
const botCredential = resolveInspectedSlackToken(configBot, envBot);
|
|
47
|
+
const appCredential = resolveInspectedSlackToken(configApp, envApp);
|
|
48
|
+
const userCredential = resolveInspectedSlackToken(configUser, envUser);
|
|
49
|
+
return {
|
|
50
|
+
accountId,
|
|
51
|
+
enabled,
|
|
52
|
+
...identity === "user" ? { identity } : {},
|
|
53
|
+
name: normalizeOptionalString(merged.name),
|
|
54
|
+
mode,
|
|
55
|
+
botToken: botCredential.token,
|
|
56
|
+
appToken: appCredential.token,
|
|
57
|
+
...isHttpMode ? { signingSecret: configSigningSecret.token } : {},
|
|
58
|
+
userToken: userCredential.token,
|
|
59
|
+
botTokenSource: botCredential.source,
|
|
60
|
+
appTokenSource: appCredential.source,
|
|
61
|
+
...isHttpMode ? { signingSecretSource: configSigningSecret.source } : {},
|
|
62
|
+
userTokenSource: userCredential.source,
|
|
63
|
+
botTokenStatus: botCredential.status,
|
|
64
|
+
appTokenStatus: appCredential.status,
|
|
65
|
+
...isHttpMode ? { signingSecretStatus: configSigningSecret.status } : {},
|
|
66
|
+
userTokenStatus: userCredential.status,
|
|
67
|
+
configured: hasSlackAccountCredentials({
|
|
68
|
+
config: merged,
|
|
69
|
+
identityTokenConfigured: (identity === "user" ? userCredential : botCredential).status !== "missing",
|
|
70
|
+
appTokenConfigured: appCredential.status !== "missing"
|
|
71
|
+
}),
|
|
72
|
+
config: merged,
|
|
73
|
+
groupPolicy: merged.groupPolicy,
|
|
74
|
+
textChunkLimit: merged.textChunkLimit,
|
|
75
|
+
mediaMaxMb: merged.mediaMaxMb,
|
|
76
|
+
reactionNotifications: merged.reactionNotifications,
|
|
77
|
+
reactionAllowlist: merged.reactionAllowlist,
|
|
78
|
+
replyToMode: merged.replyToMode,
|
|
79
|
+
replyToModeByChatType: merged.replyToModeByChatType,
|
|
80
|
+
actions: merged.actions,
|
|
81
|
+
slashCommand: merged.slashCommand,
|
|
82
|
+
dm: merged.dm,
|
|
83
|
+
channels: merged.channels
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { inspectSlackAccount as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as inspectSlackAccount } from "./account-inspect-
|
|
1
|
+
import { t as inspectSlackAccount } from "./account-inspect-CN2hBsim.js";
|
|
2
2
|
//#region extensions/slack/account-inspect-api.ts
|
|
3
3
|
function inspectSlackReadOnlyAccount(cfg, accountId) {
|
|
4
4
|
return inspectSlackAccount({
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t as hasSlackAccountCredentials } from "./account-configured-sUohAxZr.js";
|
|
1
2
|
import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, hasConfiguredAccountValue, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
2
3
|
import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
3
4
|
import { asOptionalRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
@@ -39,19 +40,19 @@ function resolveSlackOperationToken(account, operation) {
|
|
|
39
40
|
return account.config.userTokenReadOnly === false ? botToken ?? userToken : botToken;
|
|
40
41
|
}
|
|
41
42
|
const { listAccountIds, resolveDefaultAccountId, resolveAccountConfig: resolveMergedSlackAccountConfig } = createAccountListHelpers("slack", {
|
|
42
|
-
nestedObjectKeys: [
|
|
43
|
+
nestedObjectKeys: [
|
|
44
|
+
"botLoopProtection",
|
|
45
|
+
"presenceEvents",
|
|
46
|
+
"relay"
|
|
47
|
+
],
|
|
43
48
|
hasImplicitDefaultAccount: (cfg) => {
|
|
44
49
|
const slack = cfg.channels?.slack;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
if (!(hasConfiguredAccountValue(slack?.botToken) || hasConfiguredAccountValue(process.env.SLACK_BOT_TOKEN))) return false;
|
|
52
|
-
if (slack?.mode === "http") return hasConfiguredAccountValue(slack.signingSecret);
|
|
53
|
-
if (slack?.mode === "relay") return hasConfiguredAccountValue(slack.relay?.url) && hasConfiguredAccountValue(slack.relay?.authToken) && hasConfiguredAccountValue(slack.relay?.gatewayId);
|
|
54
|
-
return hasConfiguredAccountValue(slack?.appToken) || hasConfiguredAccountValue(process.env.SLACK_APP_TOKEN);
|
|
50
|
+
const userIdentity = slack?.postAs === "user";
|
|
51
|
+
return hasSlackAccountCredentials({
|
|
52
|
+
config: slack ?? {},
|
|
53
|
+
identityTokenConfigured: hasConfiguredAccountValue(userIdentity ? slack?.userToken : slack?.botToken) || hasConfiguredAccountValue(userIdentity ? process.env.SLACK_USER_TOKEN : process.env.SLACK_BOT_TOKEN),
|
|
54
|
+
appTokenConfigured: hasConfiguredAccountValue(slack?.appToken) || hasConfiguredAccountValue(process.env.SLACK_APP_TOKEN)
|
|
55
|
+
});
|
|
55
56
|
}
|
|
56
57
|
});
|
|
57
58
|
const listSlackAccountIds = listAccountIds;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as resolveSlackAccount, l as resolveSlackOperationToken, o as resolveSlackAccountAllowFrom } from "./accounts-
|
|
1
|
+
import { a as resolveSlackAccount, l as resolveSlackOperationToken, o as resolveSlackAccountAllowFrom } from "./accounts-Dm_H77gH.js";
|
|
2
2
|
export { resolveSlackAccount, resolveSlackAccountAllowFrom, resolveSlackOperationToken };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { a as parseSlackTarget, n as formatSlackTarget, o as resolveSlackChannelId } from "./target-parsing-BnMD2ZqZ.js";
|
|
2
2
|
import { t as slackContextTargetsMatch } from "./targets-Cx5W_n3W.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-TapwbeaT.js";
|
|
3
|
+
import { Dt as getSlackInstallationKind, O as hasSlackNativeDataBlock, Rt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, g as assertSlackDetachedTargetAllowed, mt as parseSlackBlocksInput, t as buildSlackChannelIdCandidates, zt as resolveSlackAutoThreadId } from "./group-policy-CU1tEGpS.js";
|
|
4
|
+
import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-BoP6t88v.js";
|
|
6
5
|
import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
7
6
|
import { normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
8
7
|
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
9
8
|
import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
|
|
10
9
|
import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
|
|
10
|
+
import { createActionGate, imageResultFromFile, jsonResult, readPositiveIntegerParam, readReactionParams, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";
|
|
11
11
|
import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
|
|
12
12
|
//#region extensions/slack/src/action-runtime.ts
|
|
13
13
|
const messagingActions = /* @__PURE__ */ new Set([
|
|
@@ -24,10 +24,10 @@ const pinActions = /* @__PURE__ */ new Set([
|
|
|
24
24
|
"unpinMessage",
|
|
25
25
|
"listPins"
|
|
26
26
|
]);
|
|
27
|
-
const
|
|
28
|
-
const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions
|
|
29
|
-
const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts.runtime-
|
|
30
|
-
const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-
|
|
27
|
+
const SLACK_REACTION_RESULT_LIMIT = 100;
|
|
28
|
+
const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions-XdQyjG_p.js").then((n) => n.t));
|
|
29
|
+
const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts.runtime-DRuEK6mL.js"));
|
|
30
|
+
const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-j-2lalcC.js").then((n) => n.t));
|
|
31
31
|
function createLazySlackAction(key) {
|
|
32
32
|
return (async (...args) => {
|
|
33
33
|
const action = (await loadSlackActionsRuntime())[key];
|
|
@@ -54,26 +54,15 @@ const slackActionRuntime = {
|
|
|
54
54
|
sendSlackMessage: createLazySlackAction("sendSlackMessage"),
|
|
55
55
|
unpinSlackMessage: createLazySlackAction("unpinSlackMessage")
|
|
56
56
|
};
|
|
57
|
-
/**
|
|
58
|
-
* Resolve threadTs for a Slack message based on context and replyToMode.
|
|
59
|
-
* - "all": always inject threadTs
|
|
60
|
-
* - "first"/"batched": inject only for the first eligible message (updates hasRepliedRef)
|
|
61
|
-
* - "off": never auto-inject
|
|
62
|
-
*/
|
|
63
57
|
function resolveThreadTsFromContext(explicitThreadTs, targetChannel, context, opts) {
|
|
64
58
|
if (explicitThreadTs) return explicitThreadTs;
|
|
65
59
|
if (opts?.suppressImplicitThread) return;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (context.replyToMode === "all") return context.currentThreadTs;
|
|
73
|
-
if (isSingleUseReplyToMode(context.replyToMode ?? "off") && context.hasRepliedRef && !context.hasRepliedRef.value) {
|
|
74
|
-
context.hasRepliedRef.value = true;
|
|
75
|
-
return context.currentThreadTs;
|
|
76
|
-
}
|
|
60
|
+
const threadTs = resolveSlackAutoThreadId({
|
|
61
|
+
to: targetChannel,
|
|
62
|
+
toolContext: context
|
|
63
|
+
});
|
|
64
|
+
if (isSingleUseReplyToMode(context?.replyToMode ?? "off") && !context?.hasRepliedRef) return;
|
|
65
|
+
return threadTs;
|
|
77
66
|
}
|
|
78
67
|
function readSlackBlocksParam(params) {
|
|
79
68
|
return slackActionRuntime.parseSlackBlocksInput(params.blocks);
|
|
@@ -340,7 +329,7 @@ async function handleSlackAction(params, cfg, context) {
|
|
|
340
329
|
});
|
|
341
330
|
}
|
|
342
331
|
await assertReadTargetAllowed(target);
|
|
343
|
-
const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ??
|
|
332
|
+
const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_RESULT_LIMIT, SLACK_REACTION_RESULT_LIMIT);
|
|
344
333
|
return jsonResult({
|
|
345
334
|
ok: true,
|
|
346
335
|
reactions: (await slackActionRuntime.listSlackReactions(channelId, messageId, readOpts))?.map((reaction) => reaction.users ? Object.assign({}, reaction, { users: reaction.users.slice(0, limit) }) : reaction)
|
|
@@ -348,6 +337,17 @@ async function handleSlackAction(params, cfg, context) {
|
|
|
348
337
|
}
|
|
349
338
|
if (messagingActions.has(action)) {
|
|
350
339
|
if (!isActionEnabled("messages")) throw new Error("Slack messages are disabled.");
|
|
340
|
+
const sendSlackMessage = async (target, content, options) => {
|
|
341
|
+
const replyReference = context?.hasRepliedRef && slackContextTargetsMatch(target, context) ? context.hasRepliedRef : void 0;
|
|
342
|
+
const result = await slackActionRuntime.sendSlackMessage(target, content, {
|
|
343
|
+
...options,
|
|
344
|
+
...replyReference ? { [SLACK_PRIVATE_ACTION_DELIVERY_RESULT]: () => {
|
|
345
|
+
replyReference.value = true;
|
|
346
|
+
} } : {}
|
|
347
|
+
});
|
|
348
|
+
if (replyReference) replyReference.value = true;
|
|
349
|
+
return result;
|
|
350
|
+
};
|
|
351
351
|
switch (action) {
|
|
352
352
|
case "sendMessage": {
|
|
353
353
|
const destination = resolveSlackActionTarget(account, readStringParam(params, "to", { required: true }), context).routingTarget;
|
|
@@ -385,48 +385,46 @@ async function handleSlackAction(params, cfg, context) {
|
|
|
385
385
|
const shouldSplitLongContent = content && content.length > 8e3 && !hasSlackNativeDataBlock(blocks);
|
|
386
386
|
if (content && shouldSplitLongContent) {
|
|
387
387
|
const { replyBroadcast: _replyBroadcast, ...blockSendOpts } = sendOpts;
|
|
388
|
-
await
|
|
388
|
+
await sendSlackMessage(destination, "", {
|
|
389
389
|
...blockSendOpts,
|
|
390
390
|
blocks
|
|
391
391
|
});
|
|
392
|
-
return await
|
|
392
|
+
return await sendSlackMessage(destination, content, sendOpts);
|
|
393
393
|
}
|
|
394
|
-
return await
|
|
394
|
+
return await sendSlackMessage(destination, content ?? "", {
|
|
395
395
|
...sendOpts,
|
|
396
396
|
blocks
|
|
397
397
|
});
|
|
398
398
|
};
|
|
399
|
-
const result = preparedMessages?.length ? await (async () => {
|
|
400
|
-
let lastResult;
|
|
401
|
-
if (mediaUrl) lastResult = await slackActionRuntime.sendSlackMessage(destination, "", {
|
|
402
|
-
...baseSendOpts,
|
|
403
|
-
mediaUrl
|
|
404
|
-
});
|
|
405
|
-
for (const [index, message] of preparedMessages.entries()) lastResult = await slackActionRuntime.sendSlackMessage(destination, message.text, {
|
|
406
|
-
...baseSendOpts,
|
|
407
|
-
...index === 0 && replyBroadcast ? { replyBroadcast: true } : {},
|
|
408
|
-
...message.blocks ? { blocks: message.blocks } : {},
|
|
409
|
-
...message.authoredTextPlacement ? { authoredTextPlacement: message.authoredTextPlacement } : {},
|
|
410
|
-
...Object.hasOwn(message, "nativeDataFallbackBaseText") ? { nativeDataFallbackBaseText: message.nativeDataFallbackBaseText } : {},
|
|
411
|
-
...message.textIsSlackPlainText ? { textIsSlackPlainText: true } : {}
|
|
412
|
-
});
|
|
413
|
-
if (!lastResult) throw new Error("Slack prepared message plan produced no delivery.");
|
|
414
|
-
return lastResult;
|
|
415
|
-
})() : blocks ? await (async () => {
|
|
416
|
-
if (mediaUrl) await slackActionRuntime.sendSlackMessage(destination, "", {
|
|
417
|
-
...sendOpts,
|
|
418
|
-
mediaUrl
|
|
419
|
-
});
|
|
420
|
-
return await sendContentAndBlocks();
|
|
421
|
-
})() : await slackActionRuntime.sendSlackMessage(destination, content ?? "", {
|
|
422
|
-
...sendOpts,
|
|
423
|
-
mediaUrl: mediaUrl ?? void 0,
|
|
424
|
-
blocks
|
|
425
|
-
});
|
|
426
|
-
if (context?.hasRepliedRef && slackContextTargetsMatch(destination, context)) context.hasRepliedRef.value = true;
|
|
427
399
|
return jsonResult({
|
|
428
400
|
ok: true,
|
|
429
|
-
result
|
|
401
|
+
result: preparedMessages?.length ? await (async () => {
|
|
402
|
+
let lastResult;
|
|
403
|
+
if (mediaUrl) lastResult = await sendSlackMessage(destination, "", {
|
|
404
|
+
...baseSendOpts,
|
|
405
|
+
mediaUrl
|
|
406
|
+
});
|
|
407
|
+
for (const [index, message] of preparedMessages.entries()) lastResult = await sendSlackMessage(destination, message.text, {
|
|
408
|
+
...baseSendOpts,
|
|
409
|
+
...index === 0 && replyBroadcast ? { replyBroadcast: true } : {},
|
|
410
|
+
...message.blocks ? { blocks: message.blocks } : {},
|
|
411
|
+
...message.authoredTextPlacement ? { authoredTextPlacement: message.authoredTextPlacement } : {},
|
|
412
|
+
...Object.hasOwn(message, "nativeDataFallbackBaseText") ? { nativeDataFallbackBaseText: message.nativeDataFallbackBaseText } : {},
|
|
413
|
+
...message.textIsSlackPlainText ? { textIsSlackPlainText: true } : {}
|
|
414
|
+
});
|
|
415
|
+
if (!lastResult) throw new Error("Slack prepared message plan produced no delivery.");
|
|
416
|
+
return lastResult;
|
|
417
|
+
})() : blocks ? await (async () => {
|
|
418
|
+
if (mediaUrl) await sendSlackMessage(destination, "", {
|
|
419
|
+
...sendOpts,
|
|
420
|
+
mediaUrl
|
|
421
|
+
});
|
|
422
|
+
return await sendContentAndBlocks();
|
|
423
|
+
})() : await sendSlackMessage(destination, content ?? "", {
|
|
424
|
+
...sendOpts,
|
|
425
|
+
mediaUrl: mediaUrl ?? void 0,
|
|
426
|
+
blocks
|
|
427
|
+
})
|
|
430
428
|
});
|
|
431
429
|
}
|
|
432
430
|
case "uploadFile": {
|
|
@@ -441,21 +439,19 @@ async function handleSlackAction(params, cfg, context) {
|
|
|
441
439
|
const forceDocument = readBooleanParam(params, "forceDocument") === true;
|
|
442
440
|
if (readBooleanParam(params, "replyBroadcast")) throw new Error("Slack replyBroadcast is only supported for text or block thread replies.");
|
|
443
441
|
const threadTs = resolveThreadTsFromContext(readStringParam(params, "threadTs"), destination, context, { suppressImplicitThread: params.topLevel === true || params.threadTs === null });
|
|
444
|
-
const result = await slackActionRuntime.sendSlackMessage(destination, initialComment ?? "", {
|
|
445
|
-
...buildActionOpts("write"),
|
|
446
|
-
mediaUrl: filePath,
|
|
447
|
-
mediaAccess: context?.mediaAccess,
|
|
448
|
-
mediaLocalRoots: context?.mediaLocalRoots,
|
|
449
|
-
mediaReadFile: context?.mediaReadFile,
|
|
450
|
-
threadTs: threadTs ?? void 0,
|
|
451
|
-
...forceDocument ? { forceDocument: true } : {},
|
|
452
|
-
...filename ? { uploadFileName: filename } : {},
|
|
453
|
-
...title ? { uploadTitle: title } : {}
|
|
454
|
-
});
|
|
455
|
-
if (context?.hasRepliedRef && slackContextTargetsMatch(destination, context)) context.hasRepliedRef.value = true;
|
|
456
442
|
return jsonResult({
|
|
457
443
|
ok: true,
|
|
458
|
-
result
|
|
444
|
+
result: await sendSlackMessage(destination, initialComment ?? "", {
|
|
445
|
+
...buildActionOpts("write"),
|
|
446
|
+
mediaUrl: filePath,
|
|
447
|
+
mediaAccess: context?.mediaAccess,
|
|
448
|
+
mediaLocalRoots: context?.mediaLocalRoots,
|
|
449
|
+
mediaReadFile: context?.mediaReadFile,
|
|
450
|
+
threadTs: threadTs ?? void 0,
|
|
451
|
+
...forceDocument ? { forceDocument: true } : {},
|
|
452
|
+
...filename ? { uploadFileName: filename } : {},
|
|
453
|
+
...title ? { uploadTitle: title } : {}
|
|
454
|
+
})
|
|
459
455
|
});
|
|
460
456
|
}
|
|
461
457
|
case "editMessage": {
|
|
@@ -529,7 +525,7 @@ async function handleSlackAction(params, cfg, context) {
|
|
|
529
525
|
});
|
|
530
526
|
if (!downloaded) return jsonResult({
|
|
531
527
|
ok: false,
|
|
532
|
-
error: "File could not be downloaded
|
|
528
|
+
error: "File could not be downloaded. Confirm the fileId came from the requested Slack channel or explicit thread and that the file is accessible and within the size limit."
|
|
533
529
|
});
|
|
534
530
|
if (!isImageContentType(downloaded.contentType)) return jsonResult({
|
|
535
531
|
ok: true,
|
|
@@ -605,26 +601,23 @@ async function handleSlackAction(params, cfg, context) {
|
|
|
605
601
|
}
|
|
606
602
|
if (action === "emojiList") {
|
|
607
603
|
if (!isActionEnabled("emojiList")) throw new Error("Slack emoji list is disabled.");
|
|
608
|
-
const limit = readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." });
|
|
604
|
+
const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_RESULT_LIMIT, SLACK_REACTION_RESULT_LIMIT);
|
|
609
605
|
const teamId = resolveTrustedCurrentSlackTeamId({
|
|
610
606
|
account,
|
|
611
607
|
context
|
|
612
608
|
});
|
|
613
609
|
assertSlackDetachedTargetAllowed(account.accountId, teamId);
|
|
614
610
|
const result = await slackActionRuntime.listSlackEmojis(buildActionOpts("read", teamId));
|
|
615
|
-
if (limit != null && limit > 0 && result.emoji != null) {
|
|
616
|
-
const entries = Object.entries(result.emoji).toSorted(([a], [b]) => a.localeCompare(b));
|
|
617
|
-
if (entries.length > limit) return jsonResult({
|
|
618
|
-
ok: true,
|
|
619
|
-
emojis: {
|
|
620
|
-
...result,
|
|
621
|
-
emoji: Object.fromEntries(entries.slice(0, limit))
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
}
|
|
625
611
|
return jsonResult({
|
|
626
612
|
ok: true,
|
|
627
|
-
emojis: result
|
|
613
|
+
emojis: Object.entries(result.emoji ?? {}).toSorted(([left], [right]) => left.localeCompare(right)).slice(0, limit).map(([name, value]) => value.startsWith("alias:") ? {
|
|
614
|
+
name,
|
|
615
|
+
identifier: name,
|
|
616
|
+
aliasOf: value.slice(6)
|
|
617
|
+
} : {
|
|
618
|
+
name,
|
|
619
|
+
identifier: name
|
|
620
|
+
})
|
|
628
621
|
});
|
|
629
622
|
}
|
|
630
623
|
throw new Error(`Unknown action: ${action}`);
|