@openclaw/slack 2026.5.27 → 2026.5.28-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{account-inspect-vVg3pT03.js → account-inspect-CdGk6R7l.js} +1 -1
- package/dist/account-inspect-api.js +1 -1
- package/dist/{accounts-BnLQ3fe2.js → accounts-f6Xcv9Vi.js} +42 -1
- package/dist/accounts.runtime-BJt1IxOS.js +2 -0
- package/dist/{action-runtime-JVb7KyQs.js → action-runtime-BOEgcnv6.js} +7 -8
- package/dist/action-runtime.runtime-BXQYV0yA.js +2 -0
- package/dist/{actions-1o9nMIY8.js → actions-zfVWcIY6.js} +4 -4
- package/dist/{actions.runtime-qQtdNww-.js → actions.runtime-CoijPN8g.js} +1 -1
- package/dist/api.js +14 -17
- package/dist/{approval-handler.runtime-Ba8nwnYi.js → approval-handler.runtime-CWz3XLfN.js} +12 -69
- package/dist/{channel-Bd7eept6.js → channel-D8p_1twn.js} +25 -28
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel.setup-WNNVmCm0.js → channel.setup-oGp4gSTP.js} +4 -4
- package/dist/{client-Dc2Ji2YN.js → client-DowBk5k0.js} +6 -24
- package/dist/{config-schema-CUiDK8HV.js → config-schema-C0RewpJQ.js} +4 -0
- package/dist/contract-api.js +1 -1
- package/dist/{directory-config-9_djLTOK.js → directory-config-8UPAEyNg.js} +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/{directory-live-Cl83cGLZ.js → directory-live-BFB1pSax.js} +2 -2
- package/dist/http-routes-api.js +1 -1
- package/dist/index.js +3 -7
- package/dist/{interactive-replies-DtYu4Sf5.js → interactive-replies-DrBq4Mld.js} +1 -1
- package/dist/interactive-replies-api.js +1 -1
- package/dist/{message-tool-api-BieXX5lk.js → message-tool-api-B9M0zzlQ.js} +2 -2
- package/dist/message-tool-api.js +1 -1
- package/dist/{monitor-Cn7LUDFL.js → monitor-D7jGKmQk.js} +3 -4
- package/dist/{outbound-adapter-ChuR4_0v.js → outbound-adapter-BHZMgblN.js} +4 -7
- package/dist/pipeline.runtime-xM6ppqQZ.js +3492 -0
- package/dist/plugin-routes-B9PvcDQJ.js +22 -0
- package/dist/{policy-pu8tsF8_.js → policy-BBDU-PQK.js} +1 -1
- package/dist/{probe-cBVPhCKZ.js → probe-Djes9Fy6.js} +1 -1
- package/dist/{provider-Bccng2Wp.js → provider-CxMP_s2o.js} +828 -28
- package/dist/{replies-jiEDV6lH.js → replies-DkmWK7JW.js} +2 -4
- package/dist/{resolve-channels-CT4oiz_9.js → resolve-channels-zXt5f47h.js} +1 -1
- package/dist/{resolve-users-o5S-Ijks.js → resolve-users-BLfGAz1v.js} +1 -1
- package/dist/{runtime-api-CyPE-EvY.js → runtime-api-DvpUD2hw.js} +2 -2
- package/dist/runtime-api.js +12 -12
- package/dist/{scopes-CnyhLIPT.js → scopes-DiiHsqh1.js} +1 -1
- package/dist/{send-DvfE8LVm.js → send-BURYyCXI.js} +4 -4
- package/dist/send.runtime-CKaMG3s-.js +2 -0
- package/dist/{setup-core-DKe7Ug3V.js → setup-core-POfI_bgP.js} +2 -2
- package/dist/setup-entry.js +8 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-gjRthuZA.js → setup-surface-DJTHAguz.js} +5 -5
- package/dist/{shared-D8A7iVVH.js → shared-D9WMYymo.js} +5 -5
- package/dist/{slash-dispatch.runtime-BBhdJHb8.js → slash-dispatch.runtime-lsyTm_q5.js} +1 -1
- package/dist/thread-ts-NSVqWybn.js +646 -0
- package/node_modules/semver/classes/range.js +7 -0
- package/node_modules/semver/package.json +1 -1
- package/node_modules/semver/ranges/subset.js +2 -2
- package/npm-shrinkwrap.json +6 -29
- package/openclaw.plugin.json +10 -0
- package/package.json +8 -7
- package/dist/accounts.runtime-BVdtQeuq.js +0 -2
- package/dist/action-runtime.runtime-BZa5VDjs.js +0 -2
- package/dist/allow-list-B1lkGjwl.js +0 -82
- package/dist/blocks-render-CNC4vQnd.js +0 -232
- package/dist/inbound-contract-test-api.js +0 -3
- package/dist/magic-string.es-BPXBBMwL.js +0 -1011
- package/dist/outbound-payload-test-api.js +0 -2
- package/dist/outbound-payload.test-harness-8MnHFgR1.js +0 -13551
- package/dist/pipeline.runtime-BVK8yXw_.js +0 -1473
- package/dist/plugin-routes-DRR3ijKM.js +0 -20
- package/dist/prepare-Bl5WcC3f.js +0 -1713
- package/dist/prepare.test-helpers-BcAo4KMw.js +0 -49
- package/dist/reply-blocks-BlOURkUm.js +0 -290
- package/dist/room-context-BmNTBiw5.js +0 -816
- package/dist/send.runtime-Dv6ajTGK.js +0 -2
- package/dist/send.runtime-v3TSw9xY.js +0 -2
- package/dist/test-api.js +0 -8
- package/dist/thread-ts-ks-O8cEG.js +0 -52
- package/node_modules/agent-base/LICENSE +0 -22
- package/node_modules/agent-base/README.md +0 -69
- package/node_modules/agent-base/dist/helpers.d.ts +0 -10
- package/node_modules/agent-base/dist/helpers.d.ts.map +0 -1
- package/node_modules/agent-base/dist/helpers.js +0 -37
- package/node_modules/agent-base/dist/helpers.js.map +0 -1
- package/node_modules/agent-base/dist/index.d.ts +0 -37
- package/node_modules/agent-base/dist/index.d.ts.map +0 -1
- package/node_modules/agent-base/dist/index.js +0 -146
- package/node_modules/agent-base/dist/index.js.map +0 -1
- package/node_modules/agent-base/package.json +0 -46
- package/node_modules/https-proxy-agent/LICENSE +0 -22
- package/node_modules/https-proxy-agent/README.md +0 -70
- package/node_modules/https-proxy-agent/dist/index.d.ts +0 -43
- package/node_modules/https-proxy-agent/dist/index.d.ts.map +0 -1
- package/node_modules/https-proxy-agent/dist/index.js +0 -150
- package/node_modules/https-proxy-agent/dist/index.js.map +0 -1
- package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +0 -12
- package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts.map +0 -1
- package/node_modules/https-proxy-agent/dist/parse-proxy-response.js +0 -94
- package/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +0 -1
- package/node_modules/https-proxy-agent/package.json +0 -50
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { p as createSlackMonitorContext } from "./room-context-BmNTBiw5.js";
|
|
2
|
-
import "openclaw/plugin-sdk/temp-path";
|
|
3
|
-
//#region extensions/slack/src/monitor/message-handler/prepare.test-helpers.ts
|
|
4
|
-
function createInboundSlackTestContext(params) {
|
|
5
|
-
return createSlackMonitorContext({
|
|
6
|
-
cfg: params.cfg,
|
|
7
|
-
accountId: "default",
|
|
8
|
-
botToken: "token",
|
|
9
|
-
app: { client: params.appClient ?? {} },
|
|
10
|
-
runtime: {},
|
|
11
|
-
botUserId: "B1",
|
|
12
|
-
botId: "B1",
|
|
13
|
-
teamId: "T1",
|
|
14
|
-
apiAppId: "A1",
|
|
15
|
-
historyLimit: 0,
|
|
16
|
-
dmHistoryLimit: params.dmHistoryLimit,
|
|
17
|
-
sessionScope: "per-sender",
|
|
18
|
-
mainKey: "main",
|
|
19
|
-
dmEnabled: true,
|
|
20
|
-
dmPolicy: "open",
|
|
21
|
-
allowFrom: ["*"],
|
|
22
|
-
allowNameMatching: false,
|
|
23
|
-
groupDmEnabled: true,
|
|
24
|
-
groupDmChannels: [],
|
|
25
|
-
defaultRequireMention: params.defaultRequireMention ?? true,
|
|
26
|
-
channelsConfig: params.channelsConfig,
|
|
27
|
-
groupPolicy: "open",
|
|
28
|
-
useAccessGroups: false,
|
|
29
|
-
reactionMode: "off",
|
|
30
|
-
reactionAllowlist: [],
|
|
31
|
-
replyToMode: params.replyToMode ?? "off",
|
|
32
|
-
threadHistoryScope: "thread",
|
|
33
|
-
threadInheritParent: false,
|
|
34
|
-
threadRequireExplicitMention: params.threadRequireExplicitMention ?? false,
|
|
35
|
-
slashCommand: {
|
|
36
|
-
enabled: false,
|
|
37
|
-
name: "openclaw",
|
|
38
|
-
sessionPrefix: "slack:slash",
|
|
39
|
-
ephemeral: true
|
|
40
|
-
},
|
|
41
|
-
textLimit: 4e3,
|
|
42
|
-
ackReactionScope: "group-mentions",
|
|
43
|
-
typingReaction: "",
|
|
44
|
-
mediaMaxBytes: 1024,
|
|
45
|
-
removeAckAfterReply: false
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
//#endregion
|
|
49
|
-
export { createInboundSlackTestContext as t };
|
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-BnLQ3fe2.js";
|
|
2
|
-
import { n as buildSlackPresentationBlocks, r as resolveSlackInteractiveBlockOffsets, t as buildSlackInteractiveBlocks } from "./blocks-render-CNC4vQnd.js";
|
|
3
|
-
import { i as parseSlackBlocksInput } from "./thread-ts-ks-O8cEG.js";
|
|
4
|
-
import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
5
|
-
import { normalizeOptionalString, normalizeStringifiedOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
|
-
import { normalizeMessageChannel } from "openclaw/plugin-sdk/routing";
|
|
7
|
-
import { doesApprovalRequestMatchChannelAccount, resolveApprovalRequestSessionConversation } from "openclaw/plugin-sdk/approval-native-runtime";
|
|
8
|
-
import { createResolvedApproverActionAuthAdapter, resolveApprovalApprovers } from "openclaw/plugin-sdk/approval-auth-runtime";
|
|
9
|
-
import { createChannelExecApprovalProfile, isChannelExecApprovalClientEnabledFromConfig, isChannelExecApprovalTargetRecipient, matchesApprovalRequestFilters } from "openclaw/plugin-sdk/approval-client-runtime";
|
|
10
|
-
import { normalizeHyphenSlug } from "openclaw/plugin-sdk/string-normalization-runtime";
|
|
11
|
-
import { resolveToolsBySender } from "openclaw/plugin-sdk/channel-policy";
|
|
12
|
-
//#region extensions/slack/src/exec-approvals.ts
|
|
13
|
-
function normalizeSlackUserLikeId(value) {
|
|
14
|
-
const upper = value.toUpperCase();
|
|
15
|
-
return /^[UW][A-Z0-9]+$/.test(upper) ? upper : void 0;
|
|
16
|
-
}
|
|
17
|
-
function normalizeSlackApproverId(value) {
|
|
18
|
-
const trimmed = normalizeStringifiedOptionalString(value);
|
|
19
|
-
if (!trimmed) return;
|
|
20
|
-
const prefixed = trimmed.match(/^(?:slack|user):([A-Z0-9]+)$/i);
|
|
21
|
-
if (prefixed?.[1]) return normalizeSlackUserLikeId(prefixed[1]);
|
|
22
|
-
const mention = trimmed.match(/^<@([A-Z0-9]+)>$/i);
|
|
23
|
-
if (mention?.[1]) return normalizeSlackUserLikeId(mention[1]);
|
|
24
|
-
return normalizeSlackUserLikeId(trimmed);
|
|
25
|
-
}
|
|
26
|
-
function resolveSlackOwnerApprovers(cfg) {
|
|
27
|
-
const ownerAllowFrom = cfg.commands?.ownerAllowFrom;
|
|
28
|
-
if (!Array.isArray(ownerAllowFrom) || ownerAllowFrom.length === 0) return [];
|
|
29
|
-
return resolveApprovalApprovers({
|
|
30
|
-
explicit: ownerAllowFrom,
|
|
31
|
-
normalizeApprover: normalizeSlackApproverId
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
function getSlackExecApprovalApprovers(params) {
|
|
35
|
-
const account = resolveSlackAccount(params).config;
|
|
36
|
-
return resolveApprovalApprovers({
|
|
37
|
-
explicit: account.execApprovals?.approvers ?? resolveSlackOwnerApprovers(params.cfg),
|
|
38
|
-
normalizeApprover: normalizeSlackApproverId
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
function isSlackExecApprovalTargetRecipient(params) {
|
|
42
|
-
return isChannelExecApprovalTargetRecipient({
|
|
43
|
-
...params,
|
|
44
|
-
channel: "slack",
|
|
45
|
-
normalizeSenderId: normalizeSlackApproverId,
|
|
46
|
-
matchTarget: ({ target, normalizedSenderId }) => normalizeSlackApproverId(target.to) === normalizedSenderId
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
const slackExecApprovalProfile = createChannelExecApprovalProfile({
|
|
50
|
-
resolveConfig: (params) => resolveSlackAccount(params).config.execApprovals,
|
|
51
|
-
resolveApprovers: getSlackExecApprovalApprovers,
|
|
52
|
-
normalizeSenderId: normalizeSlackApproverId,
|
|
53
|
-
isTargetRecipient: isSlackExecApprovalTargetRecipient,
|
|
54
|
-
matchesRequestAccount: (params) => doesApprovalRequestMatchChannelAccount({
|
|
55
|
-
cfg: params.cfg,
|
|
56
|
-
request: params.request,
|
|
57
|
-
channel: "slack",
|
|
58
|
-
accountId: params.accountId
|
|
59
|
-
})
|
|
60
|
-
});
|
|
61
|
-
const isSlackExecApprovalClientEnabled = slackExecApprovalProfile.isClientEnabled;
|
|
62
|
-
slackExecApprovalProfile.isApprover;
|
|
63
|
-
const isSlackExecApprovalAuthorizedSender = slackExecApprovalProfile.isAuthorizedSender;
|
|
64
|
-
const resolveSlackExecApprovalTarget = slackExecApprovalProfile.resolveTarget;
|
|
65
|
-
slackExecApprovalProfile.shouldHandleRequest;
|
|
66
|
-
const shouldSuppressLocalSlackExecApprovalPrompt = slackExecApprovalProfile.shouldSuppressLocalPrompt;
|
|
67
|
-
//#endregion
|
|
68
|
-
//#region extensions/slack/src/approval-auth.ts
|
|
69
|
-
function getSlackApprovalApprovers(params) {
|
|
70
|
-
const account = resolveSlackAccount(params).config;
|
|
71
|
-
return resolveApprovalApprovers({
|
|
72
|
-
allowFrom: resolveSlackAccountAllowFrom(params),
|
|
73
|
-
defaultTo: account.defaultTo,
|
|
74
|
-
normalizeApprover: normalizeSlackApproverId,
|
|
75
|
-
normalizeDefaultTo: normalizeSlackApproverId
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
function isSlackApprovalAuthorizedSender(params) {
|
|
79
|
-
const senderId = params.senderId ? normalizeSlackApproverId(params.senderId) : void 0;
|
|
80
|
-
if (!senderId) return false;
|
|
81
|
-
return getSlackApprovalApprovers(params).includes(senderId);
|
|
82
|
-
}
|
|
83
|
-
createResolvedApproverActionAuthAdapter({
|
|
84
|
-
channelLabel: "Slack",
|
|
85
|
-
resolveApprovers: ({ cfg, accountId }) => getSlackApprovalApprovers({
|
|
86
|
-
cfg,
|
|
87
|
-
accountId
|
|
88
|
-
}),
|
|
89
|
-
normalizeSenderId: (value) => normalizeSlackApproverId(value)
|
|
90
|
-
});
|
|
91
|
-
//#endregion
|
|
92
|
-
//#region extensions/slack/src/approval-native-gates.ts
|
|
93
|
-
function resolveSlackApprovalKind(request) {
|
|
94
|
-
return request.id.startsWith("plugin:") ? "plugin" : "exec";
|
|
95
|
-
}
|
|
96
|
-
function resolveSlackNativeApprovalConfig(params) {
|
|
97
|
-
return resolveSlackAccount(params).config.execApprovals;
|
|
98
|
-
}
|
|
99
|
-
function resolvePluginApprovalForwardingConfig(cfg) {
|
|
100
|
-
return cfg.approvals?.plugin;
|
|
101
|
-
}
|
|
102
|
-
function getSlackNativeApprovalApprovers(params) {
|
|
103
|
-
return params.approvalKind === "plugin" ? getSlackApprovalApprovers(params) : getSlackExecApprovalApprovers(params);
|
|
104
|
-
}
|
|
105
|
-
function normalizeAccountId$2(value) {
|
|
106
|
-
return normalizeOptionalString(value)?.toLowerCase();
|
|
107
|
-
}
|
|
108
|
-
function matchesSlackAccount(params) {
|
|
109
|
-
const expected = normalizeAccountId$2(params.expectedAccountId);
|
|
110
|
-
const actual = normalizeAccountId$2(params.actualAccountId);
|
|
111
|
-
return !expected || !actual || expected === actual;
|
|
112
|
-
}
|
|
113
|
-
function modeIncludesSession(mode) {
|
|
114
|
-
return mode === void 0 || mode === "session" || mode === "both";
|
|
115
|
-
}
|
|
116
|
-
function modeIncludesTargets(mode) {
|
|
117
|
-
return mode === "targets" || mode === "both";
|
|
118
|
-
}
|
|
119
|
-
function hasSlackPluginForwardingTarget(params) {
|
|
120
|
-
return (resolvePluginApprovalForwardingConfig(params.cfg)?.targets ?? []).some((target) => {
|
|
121
|
-
return (normalizeMessageChannel(target.channel) ?? target.channel) === "slack" && matchesSlackAccount({
|
|
122
|
-
expectedAccountId: params.accountId,
|
|
123
|
-
actualAccountId: target.accountId
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
function requestHasSlackOriginOrSession(params) {
|
|
128
|
-
const request = params.request.request;
|
|
129
|
-
const turnSourceChannel = normalizeMessageChannel(request.turnSourceChannel);
|
|
130
|
-
if (turnSourceChannel) return turnSourceChannel === "slack" && matchesSlackAccount({
|
|
131
|
-
expectedAccountId: params.accountId,
|
|
132
|
-
actualAccountId: request.turnSourceAccountId
|
|
133
|
-
});
|
|
134
|
-
return resolveApprovalRequestSessionConversation({
|
|
135
|
-
request: params.request,
|
|
136
|
-
channel: "slack",
|
|
137
|
-
bundledFallback: false
|
|
138
|
-
}) !== null && doesApprovalRequestMatchChannelAccount({
|
|
139
|
-
cfg: params.cfg,
|
|
140
|
-
request: params.request,
|
|
141
|
-
channel: "slack",
|
|
142
|
-
accountId: params.accountId
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
function isPluginForwardingEnabledForRequest(params) {
|
|
146
|
-
const config = resolvePluginApprovalForwardingConfig(params.cfg);
|
|
147
|
-
if (!config?.enabled) return false;
|
|
148
|
-
return matchesApprovalRequestFilters({
|
|
149
|
-
request: params.request.request,
|
|
150
|
-
agentFilter: config.agentFilter,
|
|
151
|
-
sessionFilter: config.sessionFilter
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
function canPluginForwardingRouteToSlack(params) {
|
|
155
|
-
const mode = resolvePluginApprovalForwardingConfig(params.cfg)?.mode;
|
|
156
|
-
if (modeIncludesSession(mode) && requestHasSlackOriginOrSession({
|
|
157
|
-
cfg: params.cfg,
|
|
158
|
-
request: params.request,
|
|
159
|
-
accountId: params.accountId
|
|
160
|
-
})) return true;
|
|
161
|
-
return modeIncludesTargets(mode) && hasSlackPluginForwardingTarget(params);
|
|
162
|
-
}
|
|
163
|
-
function isSlackPluginNativeApprovalClientEnabled(params) {
|
|
164
|
-
if (isChannelExecApprovalClientEnabledFromConfig({
|
|
165
|
-
enabled: resolveSlackNativeApprovalConfig(params)?.enabled,
|
|
166
|
-
approverCount: getSlackApprovalApprovers(params).length
|
|
167
|
-
})) return true;
|
|
168
|
-
const config = resolvePluginApprovalForwardingConfig(params.cfg);
|
|
169
|
-
if (!config?.enabled || getSlackApprovalApprovers(params).length <= 0) return false;
|
|
170
|
-
const mode = config.mode;
|
|
171
|
-
return modeIncludesSession(mode) || modeIncludesTargets(mode) && hasSlackPluginForwardingTarget(params);
|
|
172
|
-
}
|
|
173
|
-
function shouldHandleSlackPluginViaNativeClientConfig(params) {
|
|
174
|
-
if (!doesApprovalRequestMatchChannelAccount({
|
|
175
|
-
cfg: params.cfg,
|
|
176
|
-
request: params.request,
|
|
177
|
-
channel: "slack",
|
|
178
|
-
accountId: params.accountId
|
|
179
|
-
})) return false;
|
|
180
|
-
const config = resolveSlackNativeApprovalConfig(params);
|
|
181
|
-
if (!isChannelExecApprovalClientEnabledFromConfig({
|
|
182
|
-
enabled: config?.enabled,
|
|
183
|
-
approverCount: getSlackApprovalApprovers(params).length
|
|
184
|
-
})) return false;
|
|
185
|
-
return matchesApprovalRequestFilters({
|
|
186
|
-
request: params.request.request,
|
|
187
|
-
agentFilter: config?.agentFilter,
|
|
188
|
-
sessionFilter: config?.sessionFilter
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
function shouldHandleSlackPluginNativeApprovalRequest(params) {
|
|
192
|
-
if (getSlackApprovalApprovers(params).length <= 0) return false;
|
|
193
|
-
if (shouldHandleSlackPluginViaNativeClientConfig(params)) return true;
|
|
194
|
-
if (!isPluginForwardingEnabledForRequest(params)) return false;
|
|
195
|
-
return canPluginForwardingRouteToSlack(params);
|
|
196
|
-
}
|
|
197
|
-
function isSlackNativeApprovalClientEnabled(params) {
|
|
198
|
-
if (params.approvalKind === "exec") return isSlackExecApprovalClientEnabled(params);
|
|
199
|
-
return isSlackPluginNativeApprovalClientEnabled(params);
|
|
200
|
-
}
|
|
201
|
-
function isSlackAnyNativeApprovalClientEnabled(params) {
|
|
202
|
-
return isSlackNativeApprovalClientEnabled({
|
|
203
|
-
...params,
|
|
204
|
-
approvalKind: "exec"
|
|
205
|
-
}) || isSlackNativeApprovalClientEnabled({
|
|
206
|
-
...params,
|
|
207
|
-
approvalKind: "plugin"
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
function shouldHandleSlackNativeApprovalRequest(params) {
|
|
211
|
-
const approvalKind = params.approvalKind ?? resolveSlackApprovalKind(params.request);
|
|
212
|
-
if (approvalKind === "plugin") return shouldHandleSlackPluginNativeApprovalRequest({
|
|
213
|
-
cfg: params.cfg,
|
|
214
|
-
accountId: params.accountId,
|
|
215
|
-
request: params.request
|
|
216
|
-
});
|
|
217
|
-
if (!doesApprovalRequestMatchChannelAccount({
|
|
218
|
-
cfg: params.cfg,
|
|
219
|
-
request: params.request,
|
|
220
|
-
channel: "slack",
|
|
221
|
-
accountId: params.accountId
|
|
222
|
-
})) return false;
|
|
223
|
-
const config = resolveSlackNativeApprovalConfig(params);
|
|
224
|
-
if (!isChannelExecApprovalClientEnabledFromConfig({
|
|
225
|
-
enabled: config?.enabled,
|
|
226
|
-
approverCount: getSlackNativeApprovalApprovers({
|
|
227
|
-
...params,
|
|
228
|
-
approvalKind
|
|
229
|
-
}).length
|
|
230
|
-
})) return false;
|
|
231
|
-
return matchesApprovalRequestFilters({
|
|
232
|
-
request: params.request.request,
|
|
233
|
-
agentFilter: config?.agentFilter,
|
|
234
|
-
sessionFilter: config?.sessionFilter
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
//#endregion
|
|
238
|
-
//#region extensions/slack/src/group-policy.ts
|
|
239
|
-
function resolveSlackChannelPolicyEntry(params) {
|
|
240
|
-
const accountId = normalizeAccountId(params.accountId ?? resolveDefaultSlackAccountId(params.cfg));
|
|
241
|
-
const channelMap = mergeSlackAccountConfig(params.cfg, accountId).channels ?? {};
|
|
242
|
-
if (Object.keys(channelMap).length === 0) return;
|
|
243
|
-
const channelId = params.groupId?.trim();
|
|
244
|
-
const channelName = params.groupChannel?.replace(/^#/, "");
|
|
245
|
-
const normalizedName = normalizeHyphenSlug(channelName);
|
|
246
|
-
const candidates = [
|
|
247
|
-
channelId ?? "",
|
|
248
|
-
channelName ? `#${channelName}` : "",
|
|
249
|
-
channelName ?? "",
|
|
250
|
-
normalizedName
|
|
251
|
-
].filter(Boolean);
|
|
252
|
-
for (const candidate of candidates) if (candidate && channelMap[candidate]) return channelMap[candidate];
|
|
253
|
-
return channelMap["*"];
|
|
254
|
-
}
|
|
255
|
-
function resolveSenderToolsEntry(entry, params) {
|
|
256
|
-
if (!entry) return;
|
|
257
|
-
return resolveToolsBySender({
|
|
258
|
-
toolsBySender: entry.toolsBySender,
|
|
259
|
-
senderId: params.senderId,
|
|
260
|
-
senderName: params.senderName,
|
|
261
|
-
senderUsername: params.senderUsername,
|
|
262
|
-
senderE164: params.senderE164
|
|
263
|
-
}) ?? entry.tools;
|
|
264
|
-
}
|
|
265
|
-
function resolveSlackGroupRequireMention(params) {
|
|
266
|
-
const resolved = resolveSlackChannelPolicyEntry(params);
|
|
267
|
-
if (typeof resolved?.requireMention === "boolean") return resolved.requireMention;
|
|
268
|
-
return true;
|
|
269
|
-
}
|
|
270
|
-
function resolveSlackGroupToolPolicy(params) {
|
|
271
|
-
return resolveSenderToolsEntry(resolveSlackChannelPolicyEntry(params), params);
|
|
272
|
-
}
|
|
273
|
-
//#endregion
|
|
274
|
-
//#region extensions/slack/src/reply-blocks.ts
|
|
275
|
-
function resolveSlackReplyBlocks(payload) {
|
|
276
|
-
const slackData = payload.channelData?.slack;
|
|
277
|
-
let channelBlocks = [];
|
|
278
|
-
if (slackData && typeof slackData === "object" && !Array.isArray(slackData)) channelBlocks = parseSlackBlocksInput(slackData.blocks) ?? [];
|
|
279
|
-
const presentationBlocks = buildSlackPresentationBlocks(payload.presentation, resolveSlackInteractiveBlockOffsets(channelBlocks));
|
|
280
|
-
const interactiveBlocks = buildSlackInteractiveBlocks(payload.interactive, resolveSlackInteractiveBlockOffsets([...channelBlocks, ...presentationBlocks]));
|
|
281
|
-
const blocks = [
|
|
282
|
-
...channelBlocks,
|
|
283
|
-
...presentationBlocks,
|
|
284
|
-
...interactiveBlocks
|
|
285
|
-
];
|
|
286
|
-
if (blocks.length > 50) throw new Error(`Slack blocks cannot exceed 50 items after interactive render`);
|
|
287
|
-
return blocks.length > 0 ? blocks : void 0;
|
|
288
|
-
}
|
|
289
|
-
//#endregion
|
|
290
|
-
export { resolveSlackApprovalKind as a, isSlackApprovalAuthorizedSender as c, isSlackExecApprovalClientEnabled as d, normalizeSlackApproverId as f, isSlackAnyNativeApprovalClientEnabled as i, getSlackExecApprovalApprovers as l, shouldSuppressLocalSlackExecApprovalPrompt as m, resolveSlackGroupRequireMention as n, shouldHandleSlackNativeApprovalRequest as o, resolveSlackExecApprovalTarget as p, resolveSlackGroupToolPolicy as r, getSlackApprovalApprovers as s, resolveSlackReplyBlocks as t, isSlackExecApprovalAuthorizedSender as u };
|