@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.
Files changed (246) hide show
  1. package/dist/account-configured-sUohAxZr.js +33 -0
  2. package/dist/account-inspect-CN2hBsim.js +87 -0
  3. package/dist/account-inspect-api.js +1 -1
  4. package/dist/{accounts-CK4AVI2_.js → accounts-Dm_H77gH.js} +12 -11
  5. package/dist/{accounts.runtime-Cb7QwWBz.js → accounts.runtime-DRuEK6mL.js} +1 -1
  6. package/dist/{action-runtime-BkGe7ny_.js → action-runtime-044ldvNL.js} +80 -79
  7. package/dist/action-runtime.runtime-BL3KzX13.js +2 -0
  8. package/dist/{actions-BTDXwwE3.js → actions-BI7JkfVm.js} +273 -263
  9. package/dist/api.js +14 -14
  10. package/dist/{approval-handler.runtime-CJaNzAq2.js → approval-handler.runtime-DYv0UIZS.js} +53 -174
  11. package/dist/{channel-D_tovcUL.js → channel-1vIJOzPx.js} +134 -160
  12. package/dist/channel-config-api.js +1 -1
  13. package/dist/channel-plugin-api.js +1 -1
  14. package/dist/{channel-type-B9MSdoGN.js → channel-type-DlFSKeIZ.js} +3 -7
  15. package/dist/{channel.setup-Bch9dYmA.js → channel.setup-ofDi3_Pu.js} +34 -49
  16. package/dist/{config-schema-xto5jFIx.js → config-schema-BVIMyiDN.js} +42 -19
  17. package/dist/configured-state.js +34 -0
  18. package/dist/conversation-binding-route-DFVLUdYF.js +115 -0
  19. package/dist/{directory-config-CNBz8lJa.js → directory-config-DqfQ42OV.js} +1 -1
  20. package/dist/directory-contract-api.js +1 -1
  21. package/dist/{directory-live-CFKUtW9E.js → directory-live-BPaNHjmP.js} +2 -2
  22. package/dist/{group-policy-c4RP9bjc.js → group-policy-BdwszjYn.js} +625 -773
  23. package/dist/{message-tool-api-BykQB4AU.js → message-tool-api-CJ0kjcg5.js} +23 -5
  24. package/dist/message-tool-api.js +1 -1
  25. package/dist/{monitor-1nF1NtqT.js → monitor-Dq5Cmrvp.js} +3 -3
  26. package/dist/{outbound-adapter-S81tsswN.js → outbound-adapter-DYaI8ThX.js} +101 -66
  27. package/dist/{pipeline.runtime-BvYsM5JO.js → pipeline.runtime-Bd22U0ga.js} +494 -474
  28. package/dist/{policy-TapwbeaT.js → policy-CtQVbde1.js} +2 -1
  29. package/dist/{probe-HoEg_WxB.js → probe-0usmAb0i.js} +209 -22
  30. package/dist/{provider-CDNvBXUi.js → provider-CN_8hFv2.js} +296 -178
  31. package/dist/{relay-source-C9leF11u.js → relay-source-BNGpsdwV.js} +1 -1
  32. package/dist/{replies-CeOfv82I.js → replies-BSiRQOJ1.js} +48 -27
  33. package/dist/{resolve-channels-CNPrxaXY.js → resolve-channels-Czheznc8.js} +1 -1
  34. package/dist/{resolve-users-Dzomuwnr.js → resolve-users-BAOlNimr.js} +1 -1
  35. package/dist/runtime-api.js +11 -11
  36. package/dist/{scopes-cYXKkrRD.js → scopes-COSlmhnH.js} +1 -1
  37. package/dist/security-contract-api.js +1 -1
  38. package/dist/{send-Nor0iBwY.js → send-DS9ICrBI.js} +88 -100
  39. package/dist/send-results-eeOu_HYm.js +23 -0
  40. package/dist/{send.runtime-BmgNe6S9.js → send.runtime-D_Bb6IuH.js} +1 -1
  41. package/dist/setup-plugin-api.js +1 -1
  42. package/dist/{setup-surface-CbX1-Knh.js → setup-surface-BGnd2pSe.js} +6 -6
  43. package/dist/{shared-zdT5AMp-.js → shared-D5B-5hBg.js} +35 -9
  44. package/dist/{slash-dispatch.runtime-Bnr9GR1S.js → slash-dispatch.runtime-CilDmI0c.js} +2 -2
  45. package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
  46. package/node_modules/@slack/bolt/node_modules/@types/node/child_process.d.ts +0 -1
  47. package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +6 -6
  48. package/node_modules/@slack/bolt/node_modules/@types/node/dns/promises.d.ts +5 -5
  49. package/node_modules/@slack/bolt/node_modules/@types/node/dns.d.ts +5 -5
  50. package/node_modules/@slack/bolt/node_modules/@types/node/fs.d.ts +7 -0
  51. package/node_modules/@slack/bolt/node_modules/@types/node/http.d.ts +30 -0
  52. package/node_modules/@slack/bolt/node_modules/@types/node/http2.d.ts +4 -4
  53. package/node_modules/@slack/bolt/node_modules/@types/node/os.d.ts +30 -30
  54. package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
  55. package/node_modules/@slack/bolt/node_modules/@types/node/perf_hooks.d.ts +2 -1
  56. package/node_modules/@slack/bolt/node_modules/@types/node/process.d.ts +42 -43
  57. package/node_modules/@slack/bolt/node_modules/@types/node/quic.d.ts +1049 -84
  58. package/node_modules/@slack/bolt/node_modules/@types/node/sqlite.d.ts +14 -1
  59. package/node_modules/@slack/bolt/node_modules/@types/node/stream/iter.d.ts +3 -2
  60. package/node_modules/@slack/bolt/node_modules/@types/node/test.d.ts +61 -0
  61. package/node_modules/@slack/bolt/node_modules/@types/node/v8.d.ts +20 -23
  62. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/README.md +2 -0
  63. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +20 -0
  64. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.js +20 -14
  65. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -1
  66. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/package.json +1 -1
  67. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/README.md +2 -0
  68. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.d.ts +20 -0
  69. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js +20 -14
  70. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -1
  71. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/package.json +1 -1
  72. package/node_modules/@slack/socket-mode/node_modules/@types/node/README.md +1 -1
  73. package/node_modules/@slack/socket-mode/node_modules/@types/node/child_process.d.ts +0 -1
  74. package/node_modules/@slack/socket-mode/node_modules/@types/node/crypto.d.ts +6 -6
  75. package/node_modules/@slack/socket-mode/node_modules/@types/node/dns/promises.d.ts +5 -5
  76. package/node_modules/@slack/socket-mode/node_modules/@types/node/dns.d.ts +5 -5
  77. package/node_modules/@slack/socket-mode/node_modules/@types/node/fs.d.ts +7 -0
  78. package/node_modules/@slack/socket-mode/node_modules/@types/node/http.d.ts +30 -0
  79. package/node_modules/@slack/socket-mode/node_modules/@types/node/http2.d.ts +4 -4
  80. package/node_modules/@slack/socket-mode/node_modules/@types/node/os.d.ts +30 -30
  81. package/node_modules/@slack/socket-mode/node_modules/@types/node/package.json +2 -2
  82. package/node_modules/@slack/socket-mode/node_modules/@types/node/perf_hooks.d.ts +2 -1
  83. package/node_modules/@slack/socket-mode/node_modules/@types/node/process.d.ts +42 -43
  84. package/node_modules/@slack/socket-mode/node_modules/@types/node/quic.d.ts +1049 -84
  85. package/node_modules/@slack/socket-mode/node_modules/@types/node/sqlite.d.ts +14 -1
  86. package/node_modules/@slack/socket-mode/node_modules/@types/node/stream/iter.d.ts +3 -2
  87. package/node_modules/@slack/socket-mode/node_modules/@types/node/test.d.ts +61 -0
  88. package/node_modules/@slack/socket-mode/node_modules/@types/node/v8.d.ts +20 -23
  89. package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
  90. package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +0 -1
  91. package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +6 -6
  92. package/node_modules/@slack/web-api/node_modules/@types/node/dns/promises.d.ts +5 -5
  93. package/node_modules/@slack/web-api/node_modules/@types/node/dns.d.ts +5 -5
  94. package/node_modules/@slack/web-api/node_modules/@types/node/fs.d.ts +7 -0
  95. package/node_modules/@slack/web-api/node_modules/@types/node/http.d.ts +30 -0
  96. package/node_modules/@slack/web-api/node_modules/@types/node/http2.d.ts +4 -4
  97. package/node_modules/@slack/web-api/node_modules/@types/node/os.d.ts +30 -30
  98. package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
  99. package/node_modules/@slack/web-api/node_modules/@types/node/perf_hooks.d.ts +2 -1
  100. package/node_modules/@slack/web-api/node_modules/@types/node/process.d.ts +42 -43
  101. package/node_modules/@slack/web-api/node_modules/@types/node/quic.d.ts +1049 -84
  102. package/node_modules/@slack/web-api/node_modules/@types/node/sqlite.d.ts +14 -1
  103. package/node_modules/@slack/web-api/node_modules/@types/node/stream/iter.d.ts +3 -2
  104. package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +61 -0
  105. package/node_modules/@slack/web-api/node_modules/@types/node/v8.d.ts +20 -23
  106. package/node_modules/typebox/build/format/date.d.mts +1 -1
  107. package/node_modules/typebox/build/format/date.mjs +1 -1
  108. package/node_modules/typebox/build/format/date_time.d.mts +2 -2
  109. package/node_modules/typebox/build/format/date_time.mjs +3 -3
  110. package/node_modules/typebox/build/format/email.d.mts +1 -1
  111. package/node_modules/typebox/build/format/email.mjs +2 -2
  112. package/node_modules/typebox/build/format/hostname.mjs +2 -10
  113. package/node_modules/typebox/build/format/idn_email.d.mts +1 -1
  114. package/node_modules/typebox/build/format/idn_email.mjs +3 -3
  115. package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -0
  116. package/node_modules/typebox/build/format/idn_hostname.mjs +3 -11
  117. package/node_modules/typebox/build/format/idna/format/bidi.d.mts +3 -0
  118. package/node_modules/typebox/build/format/idna/format/bidi.mjs +98 -0
  119. package/node_modules/typebox/build/format/idna/format/puny.d.mts +3 -0
  120. package/node_modules/typebox/build/format/idna/format/puny.mjs +144 -0
  121. package/node_modules/typebox/build/format/idna/hostname.d.mts +1 -0
  122. package/node_modules/typebox/build/format/idna/hostname.mjs +16 -0
  123. package/node_modules/typebox/build/format/idna/idn-hostname.d.mts +1 -0
  124. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +23 -0
  125. package/node_modules/typebox/build/format/idna/index.d.mts +2 -0
  126. package/node_modules/typebox/build/format/idna/index.mjs +2 -0
  127. package/node_modules/typebox/build/format/idna/label/ascii.d.mts +1 -0
  128. package/node_modules/typebox/build/format/idna/label/ascii.mjs +9 -0
  129. package/node_modules/typebox/build/format/idna/label/puny.d.mts +1 -0
  130. package/node_modules/typebox/build/format/idna/label/puny.mjs +28 -0
  131. package/node_modules/typebox/build/format/idna/label/unicode.d.mts +1 -0
  132. package/node_modules/typebox/build/format/idna/label/unicode.mjs +106 -0
  133. package/node_modules/typebox/build/format/idna/pattern/pattern.d.mts +30 -0
  134. package/node_modules/typebox/build/format/idna/pattern/pattern.mjs +70 -0
  135. package/node_modules/typebox/build/format/ipv4.d.mts +0 -1
  136. package/node_modules/typebox/build/format/ipv4.mjs +2 -32
  137. package/node_modules/typebox/build/format/ipv6.mjs +2 -61
  138. package/node_modules/typebox/build/format/iri.d.mts +2 -2
  139. package/node_modules/typebox/build/format/iri.mjs +26 -8
  140. package/node_modules/typebox/build/format/iri_reference.d.mts +2 -2
  141. package/node_modules/typebox/build/format/iri_reference.mjs +9 -55
  142. package/node_modules/typebox/build/format/regex.d.mts +1 -2
  143. package/node_modules/typebox/build/format/regex.mjs +2 -6
  144. package/node_modules/typebox/build/format/time.d.mts +2 -2
  145. package/node_modules/typebox/build/format/time.mjs +19 -14
  146. package/node_modules/typebox/build/format/uri.d.mts +1 -1
  147. package/node_modules/typebox/build/format/uri.mjs +3 -130
  148. package/node_modules/typebox/build/format/uri_reference.d.mts +1 -1
  149. package/node_modules/typebox/build/format/uri_reference.mjs +2 -3
  150. package/node_modules/typebox/build/format/uri_template.d.mts +2 -3
  151. package/node_modules/typebox/build/format/uri_template.mjs +4 -5
  152. package/node_modules/typebox/build/format/url.d.mts +3 -3
  153. package/node_modules/typebox/build/format/url.mjs +4 -5
  154. package/node_modules/typebox/build/guard/emit.d.mts +3 -1
  155. package/node_modules/typebox/build/guard/emit.mjs +12 -5
  156. package/node_modules/typebox/build/guard/guard.d.mts +8 -2
  157. package/node_modules/typebox/build/guard/guard.mjs +25 -4
  158. package/node_modules/typebox/build/guard/string.d.mts +2 -2
  159. package/node_modules/typebox/build/guard/string.mjs +7 -7
  160. package/node_modules/typebox/build/schema/engine/_context.mjs +3 -3
  161. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -2
  162. package/node_modules/typebox/build/schema/engine/_regexp.d.mts +2 -0
  163. package/node_modules/typebox/build/schema/engine/_regexp.mjs +4 -0
  164. package/node_modules/typebox/build/schema/engine/_stack.mjs +12 -13
  165. package/node_modules/typebox/build/schema/engine/additionalItems.mjs +17 -7
  166. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +4 -3
  167. package/node_modules/typebox/build/schema/engine/contains.mjs +18 -6
  168. package/node_modules/typebox/build/schema/engine/enum.mjs +1 -1
  169. package/node_modules/typebox/build/schema/engine/items.mjs +26 -6
  170. package/node_modules/typebox/build/schema/engine/maxContains.mjs +3 -3
  171. package/node_modules/typebox/build/schema/engine/minContains.mjs +14 -4
  172. package/node_modules/typebox/build/schema/engine/not.mjs +4 -2
  173. package/node_modules/typebox/build/schema/engine/oneOf.mjs +7 -6
  174. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -2
  175. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +4 -3
  176. package/node_modules/typebox/build/schema/engine/ref.mjs +1 -7
  177. package/node_modules/typebox/build/schema/engine/schema.mjs +13 -4
  178. package/node_modules/typebox/build/schema/engine/type.mjs +1 -1
  179. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +4 -1
  180. package/node_modules/typebox/build/schema/resolve/resolve.mjs +202 -1
  181. package/node_modules/typebox/build/schema/static/propertyNames.d.mts +5 -0
  182. package/node_modules/typebox/build/schema/static/propertyNames.mjs +3 -0
  183. package/node_modules/typebox/build/schema/static/schema.d.mts +3 -0
  184. package/node_modules/typebox/build/schema/types/index.d.mts +0 -2
  185. package/node_modules/typebox/build/schema/types/index.mjs +0 -2
  186. package/node_modules/typebox/build/system/memory/clone.mjs +14 -11
  187. package/node_modules/typebox/build/system/memory/discard.mjs +6 -5
  188. package/node_modules/typebox/build/system/settings/settings.d.mts +9 -0
  189. package/node_modules/typebox/build/system/settings/settings.mjs +2 -0
  190. package/node_modules/typebox/build/type/engine/call/distribute_arguments.d.mts +6 -1
  191. package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +16 -3
  192. package/node_modules/typebox/build/type/engine/call/instantiate.mjs +34 -4
  193. package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +5 -5
  194. package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +20 -26
  195. package/node_modules/typebox/build/type/engine/evaluate/compare.d.mts +6 -10
  196. package/node_modules/typebox/build/type/engine/evaluate/compare.mjs +9 -13
  197. package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +7 -4
  198. package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +12 -19
  199. package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +4 -20
  200. package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +8 -20
  201. package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +4 -4
  202. package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +11 -8
  203. package/node_modules/typebox/build/type/engine/evaluate/flatten.d.mts +1 -1
  204. package/node_modules/typebox/build/type/engine/evaluate/flatten.mjs +3 -4
  205. package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +17 -2
  206. package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +26 -6
  207. package/node_modules/typebox/build/type/engine/exclude/operation.mjs +3 -4
  208. package/node_modules/typebox/build/type/engine/extract/operation.d.mts +1 -1
  209. package/node_modules/typebox/build/type/engine/extract/operation.mjs +3 -4
  210. package/node_modules/typebox/build/type/engine/priority/priority.d.mts +2 -2
  211. package/node_modules/typebox/build/type/engine/priority/priority.mjs +3 -4
  212. package/node_modules/typebox/build/type/script/mapping.d.mts +32 -29
  213. package/node_modules/typebox/build/type/script/mapping.mjs +18 -25
  214. package/node_modules/typebox/build/type/script/parser.d.mts +19 -25
  215. package/node_modules/typebox/build/type/script/parser.mjs +27 -23
  216. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -2
  217. package/node_modules/typebox/build/value/errors/errors.mjs +1 -1
  218. package/node_modules/typebox/package.json +27 -27
  219. package/node_modules/typebox/readme.md +79 -82
  220. package/node_modules/ws/lib/permessage-deflate.js +3 -1
  221. package/node_modules/ws/package.json +1 -1
  222. package/openclaw.plugin.json +57 -7
  223. package/package.json +9 -9
  224. package/dist/account-configured-BwfXBo_F.js +0 -14
  225. package/dist/account-inspect-Drw2gAiN.js +0 -89
  226. package/dist/account-reply-mode-DrUXogvO.js +0 -14
  227. package/dist/action-runtime.runtime-D9I6uc0Q.js +0 -2
  228. package/dist/actions.runtime-DLFyUkvg.js +0 -2
  229. package/dist/block-text-YtiNkqmx.js +0 -79
  230. package/dist/runtime-api-Cj9nxBNv.js +0 -10
  231. package/node_modules/p-map/index.d.ts +0 -155
  232. package/node_modules/p-map/index.js +0 -285
  233. package/node_modules/p-map/license +0 -9
  234. package/node_modules/p-map/package.json +0 -57
  235. package/node_modules/p-map/readme.md +0 -190
  236. package/node_modules/typebox/build/format/_idna.d.mts +0 -2
  237. package/node_modules/typebox/build/format/_idna.mjs +0 -246
  238. package/node_modules/typebox/build/format/_puny.d.mts +0 -1
  239. package/node_modules/typebox/build/format/_puny.mjs +0 -77
  240. package/node_modules/typebox/build/schema/resolve/ref.d.mts +0 -3
  241. package/node_modules/typebox/build/schema/resolve/ref.mjs +0 -146
  242. package/node_modules/typebox/build/schema/types/contentEncoding.d.mts +0 -9
  243. package/node_modules/typebox/build/schema/types/contentEncoding.mjs +0 -13
  244. package/node_modules/typebox/build/schema/types/contentMediaType.d.mts +0 -9
  245. package/node_modules/typebox/build/schema/types/contentMediaType.mjs +0 -13
  246. 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-Drw2gAiN.js";
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: ["botLoopProtection", "relay"],
43
+ nestedObjectKeys: [
44
+ "botLoopProtection",
45
+ "presenceEvents",
46
+ "relay"
47
+ ],
43
48
  hasImplicitDefaultAccount: (cfg) => {
44
49
  const slack = cfg.channels?.slack;
45
- if (slack?.postAs === "user") {
46
- if (!(hasConfiguredAccountValue(slack.userToken) || hasConfiguredAccountValue(process.env.SLACK_USER_TOKEN))) return false;
47
- if (slack.mode === "http") return hasConfiguredAccountValue(slack.signingSecret);
48
- if (slack.mode === "relay") return hasConfiguredAccountValue(slack.relay?.url) && hasConfiguredAccountValue(slack.relay?.authToken) && hasConfiguredAccountValue(slack.relay?.gatewayId);
49
- return hasConfiguredAccountValue(slack.appToken) || hasConfiguredAccountValue(process.env.SLACK_APP_TOKEN);
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-CK4AVI2_.js";
1
+ import { a as resolveSlackAccount, l as resolveSlackOperationToken, o as resolveSlackAccountAllowFrom } from "./accounts-Dm_H77gH.js";
2
2
  export { resolveSlackAccount, resolveSlackAccountAllowFrom, resolveSlackOperationToken };
@@ -1,16 +1,18 @@
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 { St as getSlackInstallationKind, T as hasSlackNativeDataBlock, lt as parseSlackBlocksInput, p as assertSlackDetachedTargetAllowed, t as buildSlackChannelIdCandidates } from "./group-policy-c4RP9bjc.js";
4
- import { a as readPositiveIntegerParam, c as withNormalizedTimestamp, n as imageResultFromFile, o as readReactionParams, r as jsonResult, s as readStringParam, t as createActionGate } from "./runtime-api-Cj9nxBNv.js";
5
- import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-TapwbeaT.js";
3
+ import { At as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, b as hasSlackNativeDataBlock, c as assertSlackDetachedTargetAllowed, jt as resolveSlackAutoThreadId, ot as parseSlackBlocksInput, t as buildSlackChannelIdCandidates, yt as getSlackInstallationKind } from "./group-policy-BdwszjYn.js";
4
+ import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-CtQVbde1.js";
5
+ import { t as mergeSlackSendResults } from "./send-results-eeOu_HYm.js";
6
6
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
7
7
  import { normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
9
9
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
10
10
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
11
+ import { createActionGate, imageResultFromFile, jsonResult, readPositiveIntegerParam, readReactionParams, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";
11
12
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
12
13
  //#region extensions/slack/src/action-runtime.ts
13
14
  const messagingActions = /* @__PURE__ */ new Set([
15
+ "openConversation",
14
16
  "sendMessage",
15
17
  "uploadFile",
16
18
  "editMessage",
@@ -24,10 +26,10 @@ const pinActions = /* @__PURE__ */ new Set([
24
26
  "unpinMessage",
25
27
  "listPins"
26
28
  ]);
27
- const SLACK_REACTION_USER_LIMIT = 100;
28
- const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions.runtime-DLFyUkvg.js"));
29
- const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts.runtime-Cb7QwWBz.js"));
30
- const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-B9MSdoGN.js").then((n) => n.t));
29
+ const SLACK_REACTION_RESULT_LIMIT = 100;
30
+ const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions-BI7JkfVm.js").then((n) => n.t));
31
+ const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts.runtime-DRuEK6mL.js"));
32
+ const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-DlFSKeIZ.js").then((n) => n.t));
31
33
  function createLazySlackAction(key) {
32
34
  return (async (...args) => {
33
35
  const action = (await loadSlackActionsRuntime())[key];
@@ -42,6 +44,7 @@ const slackActionRuntime = {
42
44
  listSlackEmojis: createLazySlackAction("listSlackEmojis"),
43
45
  listSlackPins: createLazySlackAction("listSlackPins"),
44
46
  listSlackReactions: createLazySlackAction("listSlackReactions"),
47
+ openSlackConversation: createLazySlackAction("openSlackConversation"),
45
48
  parseSlackBlocksInput,
46
49
  pinSlackMessage: createLazySlackAction("pinSlackMessage"),
47
50
  reactSlackMessage: createLazySlackAction("reactSlackMessage"),
@@ -54,26 +57,15 @@ const slackActionRuntime = {
54
57
  sendSlackMessage: createLazySlackAction("sendSlackMessage"),
55
58
  unpinSlackMessage: createLazySlackAction("unpinSlackMessage")
56
59
  };
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
60
  function resolveThreadTsFromContext(explicitThreadTs, targetChannel, context, opts) {
64
61
  if (explicitThreadTs) return explicitThreadTs;
65
62
  if (opts?.suppressImplicitThread) return;
66
- if (!context?.currentChannelId && !context?.currentMessagingTarget) return;
67
- if (!slackContextTargetsMatch(targetChannel, context)) return;
68
- if (!context.currentThreadTs) {
69
- if (context.sameChannelThreadRequired) throw new Error("Slack thread context is required for same-channel replies from a threaded Slack turn. Set topLevel=true or threadId=null to post at the channel root.");
70
- return;
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
- }
63
+ const threadTs = resolveSlackAutoThreadId({
64
+ to: targetChannel,
65
+ toolContext: context
66
+ });
67
+ if (isSingleUseReplyToMode(context?.replyToMode ?? "off") && !context?.hasRepliedRef) return;
68
+ return threadTs;
77
69
  }
78
70
  function readSlackBlocksParam(params) {
79
71
  return slackActionRuntime.parseSlackBlocksInput(params.blocks);
@@ -340,7 +332,7 @@ async function handleSlackAction(params, cfg, context) {
340
332
  });
341
333
  }
342
334
  await assertReadTargetAllowed(target);
343
- const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_USER_LIMIT, SLACK_REACTION_USER_LIMIT);
335
+ const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_RESULT_LIMIT, SLACK_REACTION_RESULT_LIMIT);
344
336
  return jsonResult({
345
337
  ok: true,
346
338
  reactions: (await slackActionRuntime.listSlackReactions(channelId, messageId, readOpts))?.map((reaction) => reaction.users ? Object.assign({}, reaction, { users: reaction.users.slice(0, limit) }) : reaction)
@@ -348,7 +340,31 @@ async function handleSlackAction(params, cfg, context) {
348
340
  }
349
341
  if (messagingActions.has(action)) {
350
342
  if (!isActionEnabled("messages")) throw new Error("Slack messages are disabled.");
343
+ const sentResults = [];
344
+ const sendSlackMessage = async (target, content, options) => {
345
+ const replyReference = context?.hasRepliedRef && slackContextTargetsMatch(target, context) ? context.hasRepliedRef : void 0;
346
+ const result = await slackActionRuntime.sendSlackMessage(target, content, {
347
+ ...options,
348
+ ...replyReference ? { [SLACK_PRIVATE_ACTION_DELIVERY_RESULT]: () => {
349
+ replyReference.value = true;
350
+ } } : {}
351
+ });
352
+ if (replyReference) replyReference.value = true;
353
+ sentResults.push(result);
354
+ return result;
355
+ };
351
356
  switch (action) {
357
+ case "openConversation": {
358
+ const teamId = readStringParam(params, "teamId") ?? resolveTrustedCurrentSlackTeamId({
359
+ account,
360
+ context
361
+ });
362
+ assertSlackDetachedTargetAllowed(account.accountId, teamId);
363
+ return jsonResult({
364
+ ok: true,
365
+ ...await slackActionRuntime.openSlackConversation(params.userIds, buildActionOpts("write", teamId))
366
+ });
367
+ }
352
368
  case "sendMessage": {
353
369
  const destination = resolveSlackActionTarget(account, readStringParam(params, "to", { required: true }), context).routingTarget;
354
370
  const content = readStringParam(params, "content", { allowEmpty: true });
@@ -385,48 +401,38 @@ async function handleSlackAction(params, cfg, context) {
385
401
  const shouldSplitLongContent = content && content.length > 8e3 && !hasSlackNativeDataBlock(blocks);
386
402
  if (content && shouldSplitLongContent) {
387
403
  const { replyBroadcast: _replyBroadcast, ...blockSendOpts } = sendOpts;
388
- await slackActionRuntime.sendSlackMessage(destination, "", {
404
+ await sendSlackMessage(destination, "", {
389
405
  ...blockSendOpts,
390
406
  blocks
391
407
  });
392
- return await slackActionRuntime.sendSlackMessage(destination, content, sendOpts);
408
+ return await sendSlackMessage(destination, content, sendOpts);
393
409
  }
394
- return await slackActionRuntime.sendSlackMessage(destination, content ?? "", {
410
+ return await sendSlackMessage(destination, content ?? "", {
395
411
  ...sendOpts,
396
412
  blocks
397
413
  });
398
414
  };
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 ?? "", {
415
+ if (mediaUrl && (preparedMessages?.length || blocks)) await sendSlackMessage(destination, "", {
416
+ ...preparedMessages?.length ? baseSendOpts : sendOpts,
417
+ mediaUrl
418
+ });
419
+ if (preparedMessages?.length) for (const [index, message] of preparedMessages.entries()) await sendSlackMessage(destination, message.text, {
420
+ ...baseSendOpts,
421
+ ...index === 0 && replyBroadcast ? { replyBroadcast: true } : {},
422
+ ...message.blocks ? { blocks: message.blocks } : {},
423
+ ...message.authoredTextPlacement ? { authoredTextPlacement: message.authoredTextPlacement } : {},
424
+ ...Object.hasOwn(message, "nativeDataFallbackBaseText") ? { nativeDataFallbackBaseText: message.nativeDataFallbackBaseText } : {},
425
+ ...message.textIsSlackPlainText ? { textIsSlackPlainText: true } : {}
426
+ });
427
+ else if (blocks) await sendContentAndBlocks();
428
+ else await sendSlackMessage(destination, content ?? "", {
422
429
  ...sendOpts,
423
430
  mediaUrl: mediaUrl ?? void 0,
424
431
  blocks
425
432
  });
426
- if (context?.hasRepliedRef && slackContextTargetsMatch(destination, context)) context.hasRepliedRef.value = true;
427
433
  return jsonResult({
428
434
  ok: true,
429
- result
435
+ result: mergeSlackSendResults(sentResults)
430
436
  });
431
437
  }
432
438
  case "uploadFile": {
@@ -441,21 +447,19 @@ async function handleSlackAction(params, cfg, context) {
441
447
  const forceDocument = readBooleanParam(params, "forceDocument") === true;
442
448
  if (readBooleanParam(params, "replyBroadcast")) throw new Error("Slack replyBroadcast is only supported for text or block thread replies.");
443
449
  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
450
  return jsonResult({
457
451
  ok: true,
458
- result
452
+ result: await sendSlackMessage(destination, initialComment ?? "", {
453
+ ...buildActionOpts("write"),
454
+ mediaUrl: filePath,
455
+ mediaAccess: context?.mediaAccess,
456
+ mediaLocalRoots: context?.mediaLocalRoots,
457
+ mediaReadFile: context?.mediaReadFile,
458
+ threadTs: threadTs ?? void 0,
459
+ ...forceDocument ? { forceDocument: true } : {},
460
+ ...filename ? { uploadFileName: filename } : {},
461
+ ...title ? { uploadTitle: title } : {}
462
+ })
459
463
  });
460
464
  }
461
465
  case "editMessage": {
@@ -529,7 +533,7 @@ async function handleSlackAction(params, cfg, context) {
529
533
  });
530
534
  if (!downloaded) return jsonResult({
531
535
  ok: false,
532
- error: "File could not be downloaded (not found, too large, or inaccessible)."
536
+ 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
537
  });
534
538
  if (!isImageContentType(downloaded.contentType)) return jsonResult({
535
539
  ok: true,
@@ -605,26 +609,23 @@ async function handleSlackAction(params, cfg, context) {
605
609
  }
606
610
  if (action === "emojiList") {
607
611
  if (!isActionEnabled("emojiList")) throw new Error("Slack emoji list is disabled.");
608
- const limit = readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." });
612
+ const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_RESULT_LIMIT, SLACK_REACTION_RESULT_LIMIT);
609
613
  const teamId = resolveTrustedCurrentSlackTeamId({
610
614
  account,
611
615
  context
612
616
  });
613
617
  assertSlackDetachedTargetAllowed(account.accountId, teamId);
614
618
  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
619
  return jsonResult({
626
620
  ok: true,
627
- emojis: result
621
+ emojis: Object.entries(result.emoji ?? {}).toSorted(([left], [right]) => left.localeCompare(right)).slice(0, limit).map(([name, value]) => value.startsWith("alias:") ? {
622
+ name,
623
+ identifier: name,
624
+ aliasOf: value.slice(6)
625
+ } : {
626
+ name,
627
+ identifier: name
628
+ })
628
629
  });
629
630
  }
630
631
  throw new Error(`Unknown action: ${action}`);
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-044ldvNL.js";
2
+ export { handleSlackAction };