cli-jaw 2.17.43 → 2.17.44
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/README.md +13 -2
- package/dist/bin/commands/slack.js +73 -7
- package/dist/bin/commands/slack.js.map +1 -1
- package/dist/server.js +46 -1
- package/dist/server.js.map +1 -1
- package/dist/src/agent/calendar-context.js +23 -0
- package/dist/src/agent/calendar-context.js.map +1 -0
- package/dist/src/agent/claude-runtime-run.js +10 -1
- package/dist/src/agent/claude-runtime-run.js.map +1 -1
- package/dist/src/agent/cursor-acp-models.js +139 -0
- package/dist/src/agent/cursor-acp-models.js.map +1 -0
- package/dist/src/agent/events/cursor.js +28 -4
- package/dist/src/agent/events/cursor.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +8 -2
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/native-runtime-run.js +22 -1
- package/dist/src/agent/native-runtime-run.js.map +1 -1
- package/dist/src/agent/runtime/acp/config.js +76 -11
- package/dist/src/agent/runtime/acp/config.js.map +1 -1
- package/dist/src/agent/runtime/acp/cursor-session.js +6 -1
- package/dist/src/agent/runtime/acp/cursor-session.js.map +1 -1
- package/dist/src/agent/runtime/liveness.js +24 -0
- package/dist/src/agent/runtime/liveness.js.map +1 -0
- package/dist/src/agent/runtime/start-failure.js +61 -0
- package/dist/src/agent/runtime/start-failure.js.map +1 -0
- package/dist/src/agent/spawn/queue.js +11 -6
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn.js +59 -17
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/api-auth.js +6 -0
- package/dist/src/cli/api-auth.js.map +1 -1
- package/dist/src/manager/design/watcher.js +10 -2
- package/dist/src/manager/design/watcher.js.map +1 -1
- package/dist/src/memory/heartbeat.js +6 -0
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/messaging/channel-validate.js +5 -3
- package/dist/src/messaging/channel-validate.js.map +1 -1
- package/dist/src/messaging/redact.js +30 -8
- package/dist/src/messaging/redact.js.map +1 -1
- package/dist/src/messaging/send.js +7 -0
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/orchestrator/collect.js +5 -3
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +10 -3
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +21 -9
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/request-registry.js +2 -0
- package/dist/src/orchestrator/request-registry.js.map +1 -1
- package/dist/src/prompt/builder.js +74 -6
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +22 -5
- package/dist/src/routes/messaging.js +105 -27
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/settings.js +20 -8
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/slack-tools.js +176 -0
- package/dist/src/routes/slack-tools.js.map +1 -0
- package/dist/src/slack/action-rate.js +43 -0
- package/dist/src/slack/action-rate.js.map +1 -0
- package/dist/src/slack/action-runtime.js +243 -0
- package/dist/src/slack/action-runtime.js.map +1 -0
- package/dist/src/slack/action-store.js +84 -0
- package/dist/src/slack/action-store.js.map +1 -0
- package/dist/src/slack/action-types.js +6 -0
- package/dist/src/slack/action-types.js.map +1 -0
- package/dist/src/slack/actions-canvas.js +108 -0
- package/dist/src/slack/actions-canvas.js.map +1 -0
- package/dist/src/slack/actions-channel.js +88 -0
- package/dist/src/slack/actions-channel.js.map +1 -0
- package/dist/src/slack/actions-interactions.js +204 -0
- package/dist/src/slack/actions-interactions.js.map +1 -0
- package/dist/src/slack/actions-lists.js +308 -0
- package/dist/src/slack/actions-lists.js.map +1 -0
- package/dist/src/slack/actions-message.js +117 -0
- package/dist/src/slack/actions-message.js.map +1 -0
- package/dist/src/slack/actions-resources.js +62 -0
- package/dist/src/slack/actions-resources.js.map +1 -0
- package/dist/src/slack/actions-rts.js +88 -0
- package/dist/src/slack/actions-rts.js.map +1 -0
- package/dist/src/slack/actions-schedule.js +214 -0
- package/dist/src/slack/actions-schedule.js.map +1 -0
- package/dist/src/slack/actions.js +17 -0
- package/dist/src/slack/actions.js.map +1 -0
- package/dist/src/slack/api.js +56 -9
- package/dist/src/slack/api.js.map +1 -1
- package/dist/src/slack/blocks.js +162 -0
- package/dist/src/slack/blocks.js.map +1 -0
- package/dist/src/slack/bot.js +562 -378
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/commands.js +24 -5
- package/dist/src/slack/commands.js.map +1 -1
- package/dist/src/slack/context.js +15 -4
- package/dist/src/slack/context.js.map +1 -1
- package/dist/src/slack/conversation.js +135 -33
- package/dist/src/slack/conversation.js.map +1 -1
- package/dist/src/slack/events.js +41 -17
- package/dist/src/slack/events.js.map +1 -1
- package/dist/src/slack/format.js +181 -0
- package/dist/src/slack/format.js.map +1 -1
- package/dist/src/slack/history.js +133 -8
- package/dist/src/slack/history.js.map +1 -1
- package/dist/src/slack/ingress.js +26 -9
- package/dist/src/slack/ingress.js.map +1 -1
- package/dist/src/slack/interaction-store.js +56 -0
- package/dist/src/slack/interaction-store.js.map +1 -0
- package/dist/src/slack/manifest.js +3 -0
- package/dist/src/slack/manifest.js.map +1 -1
- package/dist/src/slack/message-content.js +132 -0
- package/dist/src/slack/message-content.js.map +1 -0
- package/dist/src/slack/message.js +58 -0
- package/dist/src/slack/message.js.map +1 -0
- package/dist/src/slack/notice-transport.js +49 -19
- package/dist/src/slack/notice-transport.js.map +1 -1
- package/dist/src/slack/operator-auth.js +62 -0
- package/dist/src/slack/operator-auth.js.map +1 -0
- package/dist/src/slack/progress-activity.js +210 -0
- package/dist/src/slack/progress-activity.js.map +1 -0
- package/dist/src/slack/progress-detail.js +473 -0
- package/dist/src/slack/progress-detail.js.map +1 -0
- package/dist/src/slack/progress-files.js +70 -0
- package/dist/src/slack/progress-files.js.map +1 -0
- package/dist/src/slack/progress-lifecycle.js +223 -0
- package/dist/src/slack/progress-lifecycle.js.map +1 -0
- package/dist/src/slack/progress-restore.js +81 -0
- package/dist/src/slack/progress-restore.js.map +1 -0
- package/dist/src/slack/progress.js +325 -143
- package/dist/src/slack/progress.js.map +1 -1
- package/dist/src/slack/quote.js +227 -0
- package/dist/src/slack/quote.js.map +1 -0
- package/dist/src/slack/render-features.js +105 -0
- package/dist/src/slack/render-features.js.map +1 -0
- package/dist/src/slack/reply-delivery.js +110 -0
- package/dist/src/slack/reply-delivery.js.map +1 -0
- package/dist/src/slack/rts-output-store.js +143 -0
- package/dist/src/slack/rts-output-store.js.map +1 -0
- package/dist/src/slack/scope-status.js +17 -3
- package/dist/src/slack/scope-status.js.map +1 -1
- package/dist/src/slack/search-quote.js +70 -0
- package/dist/src/slack/search-quote.js.map +1 -0
- package/dist/src/slack/search.js +54 -0
- package/dist/src/slack/search.js.map +1 -0
- package/dist/src/slack/send-handler.js +11 -7
- package/dist/src/slack/send-handler.js.map +1 -1
- package/dist/src/slack/send-only-client.js +116 -79
- package/dist/src/slack/send-only-client.js.map +1 -1
- package/dist/src/slack/table-content.js +253 -0
- package/dist/src/slack/table-content.js.map +1 -0
- package/dist/src/slack/table-verification.js +64 -0
- package/dist/src/slack/table-verification.js.map +1 -0
- package/dist/src/slack/task-input.js +55 -0
- package/dist/src/slack/task-input.js.map +1 -0
- package/dist/src/slack/tool-access.js +127 -0
- package/dist/src/slack/tool-access.js.map +1 -0
- package/dist/src/slack/tool-capabilities.js +47 -0
- package/dist/src/slack/tool-capabilities.js.map +1 -0
- package/dist/src/slack/tool-context.js +91 -0
- package/dist/src/slack/tool-context.js.map +1 -0
- package/dist/src/slack/verified-workspace.js +17 -6
- package/dist/src/slack/verified-workspace.js.map +1 -1
- package/dist/src/trace/redact.js +2 -1
- package/dist/src/trace/redact.js.map +1 -1
- package/package.json +1 -1
- package/public/dist/.vite/manifest.json +102 -102
- package/public/dist/assets/{Agent-CQ4EBgY8.js → Agent-CNad_A6t.js} +1 -1
- package/public/dist/assets/{ChannelEnablementControl-JsYvNMlM.js → ChannelEnablementControl-DwUDKjX9.js} +4 -4
- package/public/dist/assets/{ChannelSetupEntry-BpyRWEUE.js → ChannelSetupEntry-DH0AuNNX.js} +1 -1
- package/public/dist/assets/{ChannelsDiscord-DNfvz1jn.js → ChannelsDiscord-7NmoTjR7.js} +1 -1
- package/public/dist/assets/{ChannelsSlack-DzpxIdgW.js → ChannelsSlack-Ba0ax6iT.js} +1 -1
- package/public/dist/assets/{ChannelsTelegram-CUhFc5s6.js → ChannelsTelegram-DKA9atf2.js} +1 -1
- package/public/dist/assets/{app-Q0prKOFx.js → app-9OQNfmqw.js} +4 -4
- package/public/dist/assets/{bgtask-badge-DAcWaUfS.js → bgtask-badge-BvxHqMGi.js} +1 -1
- package/public/dist/assets/bgtask-badge-DeSZJGNN.js +1 -0
- package/public/dist/assets/{employees-CWS3Juca.js → employees-CkUqN4oh.js} +1 -1
- package/public/dist/assets/{iframe-renderer-DCDKBMb7.js → iframe-renderer-C2gchtOj.js} +2 -2
- package/public/dist/assets/iframe-renderer-DfvACXIn.js +1 -0
- package/public/dist/assets/{manager-v6GYfoPB.js → manager-rb5X-4DJ.js} +1 -1
- package/public/dist/assets/{memory-DhNdKZLO.js → memory-BiWzpoBq.js} +1 -1
- package/public/dist/assets/memory-Ckp1Eq5a.js +1 -0
- package/public/dist/assets/message-history-Bv0l_t7O.js +1 -0
- package/public/dist/assets/{message-history-DbRTl1P0.js → message-history-CuFefS02.js} +1 -1
- package/public/dist/assets/{render-DP8SJtdZ.js → render-DUGqq9Mu.js} +1 -1
- package/public/dist/assets/{settings-85n9NjvX.js → settings-BqUHavbH.js} +1 -1
- package/public/dist/assets/settings-C81Kf9uX.js +1 -0
- package/public/dist/assets/{settings-C9_D-pn0.js → settings-DQ1fLygB.js} +31 -30
- package/public/dist/assets/{settings-core-BcVD2FgV.js → settings-core-CzdXfoOK.js} +1 -1
- package/public/dist/assets/settings-core-DO_5M7Lv.js +1 -0
- package/public/dist/assets/{settings-embedding-BSpq785l.js → settings-embedding-BAKFrVLV.js} +1 -1
- package/public/dist/assets/{settings-types-B09BmpYe.js → settings-types-D3cd6SWy.js} +1 -1
- package/public/dist/assets/{sidebar-BVhLb5Ft.js → sidebar-CvGbp9x5.js} +3 -3
- package/public/dist/assets/skills-DFpPmMUR.js +1 -0
- package/public/dist/assets/{skills-X7qxmHka.js → skills-abLMqY5_.js} +1 -1
- package/public/dist/assets/slash-commands-BU58xYih.js +1 -0
- package/public/dist/assets/{slash-commands-BnDH4IU_.js → slash-commands-D8o9pqOS.js} +1 -1
- package/public/dist/assets/{trace-drawer-DasaS1z4.js → trace-drawer-C6RvkUAd.js} +1 -1
- package/public/dist/assets/{ui-BtiBTXng.js → ui-Bxapl_Eu.js} +1 -1
- package/public/dist/assets/ui-CUB4iwz3.js +1 -0
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +1 -1
- package/public/dist/settings/index.html +1 -1
- package/public/js/features/settings-cli-status.ts +11 -1
- package/public/js/features/settings-types.ts +21 -0
- package/public/locales/en.json +34 -1
- package/public/locales/ja.json +34 -1
- package/public/locales/ko.json +34 -1
- package/public/locales/zh.json +34 -1
- package/scripts/check-native-load.cjs +17 -4
- package/scripts/release-gates.mjs +84 -3
- package/scripts/service-artifact.mjs +157 -0
- package/scripts/service-shell/zsh/.zlogin +23 -0
- package/scripts/service-shell/zsh/.zlogout +23 -0
- package/scripts/service-shell/zsh/.zprofile +23 -0
- package/scripts/service-shell/zsh/.zshenv +23 -0
- package/scripts/service-shell/zsh/.zshrc +23 -0
- package/public/dist/assets/bgtask-badge-DHA2OQm8.js +0 -1
- package/public/dist/assets/iframe-renderer-RpvBly2x.js +0 -1
- package/public/dist/assets/memory-4YH8sz0L.js +0 -1
- package/public/dist/assets/message-history-lVcLpAw8.js +0 -1
- package/public/dist/assets/settings--EGy3_B9.js +0 -1
- package/public/dist/assets/settings-core-8wBl1mg-.js +0 -1
- package/public/dist/assets/skills-6GFkHTlQ.js +0 -1
- package/public/dist/assets/slash-commands-qu8fPAZ3.js +0 -1
- package/public/dist/assets/ui-BucJ1zMA.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions-channel.js","sourceRoot":"","sources":["../../../src/slack/actions-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { defineAction } from './action-types.js';
|
|
3
|
+
import { baseAction, boundedInteger, enumValue, messageTs, onlyFields, opaqueId, requiredText, strictRecord } from './task-input.js';
|
|
4
|
+
import { redactChannelSecrets, redactOutboundText } from '../messaging/redact.js';
|
|
5
|
+
import { slackToolDenied } from './tool-access.js';
|
|
6
|
+
import { slackApi } from './api.js';
|
|
7
|
+
import { slackCredentialKey } from './tool-context.js';
|
|
8
|
+
import { getSlackInteractionConfiguration } from './interaction-store.js';
|
|
9
|
+
const opaque = () => randomBytes(16).toString('hex');
|
|
10
|
+
const plain = (text) => ({ type: 'plain_text', text });
|
|
11
|
+
const record = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
|
|
12
|
+
function safeText(value, max) { return requiredText(redactOutboundText(requiredText(value, max)), max); }
|
|
13
|
+
function safeUrl(value) {
|
|
14
|
+
const url = requiredText(value, 2048);
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = new URL(url);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw slackToolDenied('slack_link_invalid', 400);
|
|
21
|
+
}
|
|
22
|
+
if (url !== url.trim() || /[\x00-\x20\\]/.test(url) || parsed.protocol !== 'https:' || parsed.username || parsed.password || redactChannelSecrets(url) !== url)
|
|
23
|
+
throw slackToolDenied('slack_link_unsafe', 400);
|
|
24
|
+
return url;
|
|
25
|
+
}
|
|
26
|
+
function parsePost(raw, fields) {
|
|
27
|
+
const base = baseAction(raw, ['text', 'threadTs', ...fields], true);
|
|
28
|
+
return { ...base, text: safeText(raw['text'], 3000), ...(raw['threadTs'] === undefined ? {} : { threadTs: messageTs(raw['threadTs']) }) };
|
|
29
|
+
}
|
|
30
|
+
function array(value) {
|
|
31
|
+
if (!Array.isArray(value) || value.length < 1 || value.length > 10)
|
|
32
|
+
throw slackToolDenied('slack_interaction_choices_invalid', 400);
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
/** Compare chosen rendering/behavior fields; tolerate Slack's optional emoji and generated IDs. */
|
|
36
|
+
function sameElement(expected, actual) {
|
|
37
|
+
const found = record(actual);
|
|
38
|
+
if (!found || found['type'] !== expected['type'] || found['action_id'] !== expected['action_id'])
|
|
39
|
+
return false;
|
|
40
|
+
for (const key of ['url', 'value'])
|
|
41
|
+
if (found[key] !== expected[key])
|
|
42
|
+
return false;
|
|
43
|
+
if (found['agent_prompt'] !== undefined || found['confirm'] !== undefined)
|
|
44
|
+
return false;
|
|
45
|
+
if (expected['type'] === 'button')
|
|
46
|
+
return record(found['text'])?.['type'] === 'plain_text' && record(found['text'])?.['text'] === record(expected['text'])?.['text'];
|
|
47
|
+
const options = found['options'];
|
|
48
|
+
const wanted = expected['options'];
|
|
49
|
+
return found['initial_option'] === undefined && found['option_groups'] === undefined && Array.isArray(options) && options.length === wanted.length
|
|
50
|
+
&& record(found['placeholder'])?.['type'] === 'plain_text' && record(found['placeholder'])?.['text'] === 'Choose an option'
|
|
51
|
+
&& wanted.every((o, i) => record(options[i])?.['value'] === o['value'] && record(record(options[i])?.['text'])?.['type'] === 'plain_text' && record(record(options[i])?.['text'])?.['text'] === record(o['text'])?.['text']);
|
|
52
|
+
}
|
|
53
|
+
async function post(ctx, args, blockId, elements, interaction) {
|
|
54
|
+
const config = getSlackInteractionConfiguration();
|
|
55
|
+
const ids = interaction ? [interaction.id] : [];
|
|
56
|
+
try {
|
|
57
|
+
const sent = await ctx.api('chat.postMessage', {
|
|
58
|
+
channel: args.channel, text: args.text, blocks: [{ type: 'section', text: plain(args.text) }, { type: 'actions', block_id: blockId, elements }],
|
|
59
|
+
...(args.threadTs ? { thread_ts: args.threadTs } : {}),
|
|
60
|
+
}, () => {
|
|
61
|
+
if (interaction && (getSlackInteractionConfiguration() !== config || ctx.now() >= interaction.expiresAt))
|
|
62
|
+
throw slackToolDenied('slack_interaction_expired', 409);
|
|
63
|
+
});
|
|
64
|
+
const ts = sent.data?.ts;
|
|
65
|
+
if (!sent.ok || typeof ts !== 'string' || !/^\d{1,13}\.\d{1,6}$/.test(ts) || sent.data?.channel !== args.channel)
|
|
66
|
+
return ctx.result('unknown', { interactionId: interaction?.id, reason: 'interaction_post_unconfirmed' }, ids);
|
|
67
|
+
ids.push(ts);
|
|
68
|
+
if (interaction && !config?.store.bind(interaction.id, ts))
|
|
69
|
+
return ctx.result('unknown', { interactionId: interaction.id, reason: 'interaction_binding_failed' }, ids);
|
|
70
|
+
const read = await ctx.api(args.threadTs ? 'conversations.replies' : 'conversations.history', {
|
|
71
|
+
channel: args.channel, ...(args.threadTs ? { ts: args.threadTs } : {}), oldest: ts, latest: ts, inclusive: true, limit: 100,
|
|
72
|
+
});
|
|
73
|
+
const matches = read.data?.messages?.filter(m => record(m)?.['ts'] === ts);
|
|
74
|
+
const message = matches?.length === 1 ? record(matches[0]) : undefined;
|
|
75
|
+
if (!read.ok || !message || message['contentExcluded'] === true)
|
|
76
|
+
return ctx.result('unknown', { interactionId: interaction?.id, reason: 'interaction_readback_unavailable' }, ids);
|
|
77
|
+
const blocks = message['blocks'];
|
|
78
|
+
const actionBlocks = Array.isArray(blocks) ? blocks.filter(b => record(b)?.['block_id'] === blockId) : [];
|
|
79
|
+
const got = actionBlocks.length === 1 ? record(actionBlocks[0]) : undefined;
|
|
80
|
+
const actual = got?.['elements'];
|
|
81
|
+
const verified = message['user'] === ctx.botUserId && message['text'] === args.text && (!args.threadTs || message['thread_ts'] === args.threadTs)
|
|
82
|
+
&& got?.['type'] === 'actions' && Array.isArray(actual) && actual.length === elements.length && elements.every((e, i) => sameElement(e, actual[i]));
|
|
83
|
+
return ctx.result(verified ? 'verified' : 'failed', { ...(interaction ? { interactionId: interaction.id, expiresAt: interaction.expiresAt } : {}), channel: args.channel, ts, controls: verified ? 'verified' : 'mismatch' }, ids);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return ctx.result('unknown', { interactionId: interaction?.id, reason: 'interaction_delivery_unconfirmed' }, ids);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const postMethods = ['chat.postMessage', 'conversations.history', 'conversations.replies'];
|
|
90
|
+
export const interactionActions = [
|
|
91
|
+
defineAction({ operation: 'interaction.url', scopes: ['chat:write'], methods: postMethods, mutates: true,
|
|
92
|
+
parse(raw) {
|
|
93
|
+
const args = parsePost(raw, ['buttons']);
|
|
94
|
+
const buttons = array(raw['buttons']).map(value => { const b = strictRecord(value); onlyFields(b, ['text', 'url']); return { text: safeText(b['text'], 75), url: safeUrl(b['url']) }; });
|
|
95
|
+
return { ...args, buttons };
|
|
96
|
+
},
|
|
97
|
+
execute(ctx, args) { return post(ctx, args, `jaw_url_${opaque()}`, args.buttons.map(b => ({ type: 'button', text: plain(b.text), url: b.url, action_id: `jaw_url_${opaque()}` }))); },
|
|
98
|
+
}),
|
|
99
|
+
defineAction({ operation: 'interaction.choice', scopes: ['chat:write'], methods: postMethods, mutates: true, requiresInbound: true,
|
|
100
|
+
parse(raw) {
|
|
101
|
+
const args = parsePost(raw, ['choices', 'style', 'expiresInSeconds']);
|
|
102
|
+
const choices = array(raw['choices']).map(value => { const c = strictRecord(value); onlyFields(c, ['label', 'value']); const v = opaqueId(c['value']); if (redactChannelSecrets(v) !== v)
|
|
103
|
+
throw slackToolDenied('slack_interaction_value_unsafe', 400); return { label: safeText(c['label'], 75), value: v }; });
|
|
104
|
+
if (new Set(choices.map(c => c.value)).size !== choices.length)
|
|
105
|
+
throw slackToolDenied('slack_interaction_duplicate_choice', 400);
|
|
106
|
+
return { ...args, choices, style: raw['style'] === undefined ? 'buttons' : enumValue(raw['style'], ['buttons', 'select']), expiresInSeconds: raw['expiresInSeconds'] === undefined ? 900 : boundedInteger(raw['expiresInSeconds'], 1, 900) };
|
|
107
|
+
},
|
|
108
|
+
execute(ctx, args) {
|
|
109
|
+
if (ctx.operator || !/^[UW][A-Z0-9]+$/.test(ctx.actor))
|
|
110
|
+
return Promise.resolve(ctx.fail('slack_interaction_turn_required', 403));
|
|
111
|
+
const config = getSlackInteractionConfiguration();
|
|
112
|
+
if (!config || slackCredentialKey(config.getToken()) !== ctx.credentialKey)
|
|
113
|
+
return Promise.resolve(ctx.fail('slack_interaction_unavailable', 503));
|
|
114
|
+
const id = opaque();
|
|
115
|
+
const actionId = `jaw_choice_${opaque()}`;
|
|
116
|
+
const row = { id, workspace: ctx.workspace, channel: args.channel, actor: ctx.actor, botUserId: ctx.botUserId, credentialKey: ctx.credentialKey,
|
|
117
|
+
blockId: `jaw_choice_${id}`, style: args.style, options: args.choices.map(c => ({ actionId: args.style === 'select' ? actionId : `jaw_choice_${opaque()}`, wireValue: opaque(), value: c.value })),
|
|
118
|
+
expiresAt: ctx.now() + args.expiresInSeconds * 1000, messageTs: null, selectedValue: null };
|
|
119
|
+
config.store.create(row, ctx.now());
|
|
120
|
+
const elements = args.style === 'buttons' ? args.choices.map((c, i) => ({ type: 'button', text: plain(c.label), action_id: row.options[i].actionId, value: row.options[i].wireValue }))
|
|
121
|
+
: [{ type: 'static_select', action_id: actionId, placeholder: plain('Choose an option'), options: args.choices.map((c, i) => ({ text: plain(c.label), value: row.options[i].wireValue })) }];
|
|
122
|
+
return post(ctx, args, row.blockId, elements, row);
|
|
123
|
+
},
|
|
124
|
+
}),
|
|
125
|
+
defineAction({ operation: 'interaction.get', scopes: [], methods: [], mutates: false,
|
|
126
|
+
parse(raw) { return { ...baseAction(raw, ['interactionId'], false), interactionId: opaqueId(raw['interactionId']) }; },
|
|
127
|
+
async execute(ctx, args) {
|
|
128
|
+
const row = getSlackInteractionConfiguration()?.store.get(args.interactionId);
|
|
129
|
+
if (ctx.operator || !row || row.workspace !== ctx.workspace || row.channel !== args.channel || row.actor !== ctx.actor || row.botUserId !== ctx.botUserId || row.credentialKey !== ctx.credentialKey)
|
|
130
|
+
return ctx.fail('slack_interaction_owner_unverified', 403);
|
|
131
|
+
return ctx.result('verified', { interactionId: row.id, status: row.selectedValue !== null ? 'selected' : ctx.now() >= row.expiresAt ? 'expired' : row.messageTs === null ? 'unbound' : 'pending', selectedValue: row.selectedValue, expiresAt: row.expiresAt }, [row.id]);
|
|
132
|
+
},
|
|
133
|
+
}),
|
|
134
|
+
];
|
|
135
|
+
/** Authenticated Socket transport ONLY; payload.token and response_url are never credentials or destinations. */
|
|
136
|
+
export async function consumeSlackInteractionCallback(payload, token, fetchImpl) {
|
|
137
|
+
const config = getSlackInteractionConfiguration();
|
|
138
|
+
if (!config)
|
|
139
|
+
return { accepted: false };
|
|
140
|
+
const p = record(payload);
|
|
141
|
+
const actions = p?.['actions'];
|
|
142
|
+
if (p?.['type'] !== 'block_actions' || !Array.isArray(actions) || actions.length !== 1)
|
|
143
|
+
return { accepted: false };
|
|
144
|
+
const action = record(actions[0]);
|
|
145
|
+
const block = action?.['block_id'];
|
|
146
|
+
if (typeof block !== 'string' || !/^jaw_choice_[a-f0-9]{32}$/.test(block))
|
|
147
|
+
return { accepted: false };
|
|
148
|
+
const row = config.store.get(block.slice('jaw_choice_'.length));
|
|
149
|
+
const container = record(p['container']);
|
|
150
|
+
const user = record(p['user']);
|
|
151
|
+
const team = record(p['team']);
|
|
152
|
+
const value = action?.['type'] === 'static_select' ? record(action['selected_option'])?.['value'] : action?.['value'];
|
|
153
|
+
if (!row || !row.messageTs || row.selectedValue !== null || container?.['type'] !== 'message' || container['is_ephemeral'] === true
|
|
154
|
+
|| container['channel_id'] !== row.channel || container['message_ts'] !== row.messageTs || user?.['id'] !== row.actor || team?.['id'] !== row.workspace
|
|
155
|
+
|| (record(p['channel']) && record(p['channel'])?.['id'] !== row.channel) || (record(p['message']) && record(p['message'])?.['ts'] !== row.messageTs)
|
|
156
|
+
|| action?.['type'] !== (row.style === 'buttons' ? 'button' : 'static_select') || typeof value !== 'string' || typeof action['action_id'] !== 'string'
|
|
157
|
+
|| !row.options.some(o => o.actionId === action['action_id'] && o.wireValue === value))
|
|
158
|
+
return { accepted: false };
|
|
159
|
+
const current = () => getSlackInteractionConfiguration() === config && config.now() < row.expiresAt && slackCredentialKey(token) === row.credentialKey && slackCredentialKey(config.getToken()) === row.credentialKey;
|
|
160
|
+
if (!current())
|
|
161
|
+
return { accepted: false };
|
|
162
|
+
try {
|
|
163
|
+
const options = { ...(fetchImpl ? { fetchImpl } : {}), sensitiveResponse: true, maxResponseBytes: 65536, timeoutMs: 5000, form: true };
|
|
164
|
+
const auth = await slackApi(token, 'auth.test', {}, options);
|
|
165
|
+
if (!current() || !auth.ok || auth.data?.team_id !== row.workspace || auth.data.user_id !== row.botUserId)
|
|
166
|
+
return { accepted: false };
|
|
167
|
+
const info = await slackApi(token, 'conversations.info', { channel: row.channel }, options);
|
|
168
|
+
const channel = info.data?.channel;
|
|
169
|
+
if (!current() || !info.ok || channel?.['id'] !== row.channel || channel['is_shared'] === true || channel['is_ext_shared'] === true || channel['is_org_shared'] === true)
|
|
170
|
+
return { accepted: false };
|
|
171
|
+
if (channel['is_im'] === true) {
|
|
172
|
+
if (channel['user'] !== row.actor || channel['is_org_shared'] !== false
|
|
173
|
+
|| (channel['is_shared'] !== undefined && channel['is_shared'] !== false)
|
|
174
|
+
|| (channel['is_ext_shared'] !== undefined && channel['is_ext_shared'] !== false)
|
|
175
|
+
|| (channel['context_team_id'] !== undefined && channel['context_team_id'] !== row.workspace))
|
|
176
|
+
return { accepted: false };
|
|
177
|
+
const actor = await slackApi(token, 'users.info', { user: row.actor }, options);
|
|
178
|
+
if (!current() || !actor.ok || actor.data?.user?.id !== row.actor || actor.data.user.team_id !== row.workspace || actor.data.user.deleted !== false)
|
|
179
|
+
return { accepted: false };
|
|
180
|
+
}
|
|
181
|
+
else if (channel['is_shared'] !== false || channel['is_ext_shared'] !== false || channel['context_team_id'] !== row.workspace)
|
|
182
|
+
return { accepted: false };
|
|
183
|
+
const members = await slackApi(token, 'conversations.members', { channel: row.channel, limit: 200 }, options);
|
|
184
|
+
if (!current() || !members.ok || !Array.isArray(members.data?.members) || members.data.members.length > 200 || !members.data.members.includes(row.actor) || !members.data.members.includes(row.botUserId))
|
|
185
|
+
return { accepted: false };
|
|
186
|
+
if (channel['is_im'] === true && (members.data.members.length !== 2 || members.data.has_more === true || members.data.response_metadata?.next_cursor !== ''))
|
|
187
|
+
return { accepted: false };
|
|
188
|
+
const accepted = config.store.consume(row, action['action_id'], value, config.now());
|
|
189
|
+
if (accepted && config.onVerified) {
|
|
190
|
+
// Evidence failure cannot undo the durable choice or make a replay eligible.
|
|
191
|
+
try {
|
|
192
|
+
config.onVerified(row.workspace, row.credentialKey, 'interaction.choice');
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return { accepted: true };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return { accepted };
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return { accepted: false };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=actions-interactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions-interactions.js","sourceRoot":"","sources":["../../../src/slack/actions-interactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
import { defineAction } from './action-types.js';
|
|
3
|
+
import { baseAction, boundedInteger, enumValue, finiteNumber, opaqueId, onlyFields, optionalText, requiredText, strictRecord } from './task-input.js';
|
|
4
|
+
import { acknowledgedFailure, fileAccess, preserve, record, responseId } from './actions-resources.js';
|
|
5
|
+
import { redactOutboundText } from '../messaging/redact.js';
|
|
6
|
+
import { slackToolDenied } from './tool-access.js';
|
|
7
|
+
function invalid() { throw slackToolDenied('invalid_list_action', 400); }
|
|
8
|
+
const aclMethods = ['files.info', 'users.info'];
|
|
9
|
+
const aclScopes = ['files:read', 'users:read'];
|
|
10
|
+
function parseFields(value) {
|
|
11
|
+
if (!Array.isArray(value) || value.length < 1 || value.length > 20)
|
|
12
|
+
return invalid();
|
|
13
|
+
const ids = new Set();
|
|
14
|
+
return value.map(item => {
|
|
15
|
+
const raw = strictRecord(item);
|
|
16
|
+
onlyFields(raw, ['columnId', 'type', 'value']);
|
|
17
|
+
const columnId = opaqueId(raw['columnId']);
|
|
18
|
+
const type = enumValue(raw['type'], ['text', 'number', 'checkbox', 'date', 'user']);
|
|
19
|
+
if (ids.has(columnId))
|
|
20
|
+
invalid();
|
|
21
|
+
ids.add(columnId);
|
|
22
|
+
let result;
|
|
23
|
+
if (type === 'number')
|
|
24
|
+
result = finiteNumber(raw['value']);
|
|
25
|
+
else if (type === 'checkbox') {
|
|
26
|
+
if (typeof raw['value'] !== 'boolean')
|
|
27
|
+
invalid();
|
|
28
|
+
result = raw['value'];
|
|
29
|
+
}
|
|
30
|
+
else if (type === 'user') {
|
|
31
|
+
if (!Array.isArray(raw['value']) || raw['value'].length > 20 || raw['value'].length < 1)
|
|
32
|
+
invalid();
|
|
33
|
+
result = raw['value'].map(v => { const id = opaqueId(v); if (!/^[UW][A-Z0-9]+$/.test(id))
|
|
34
|
+
invalid(); return id; });
|
|
35
|
+
if (new Set(result).size !== result.length)
|
|
36
|
+
invalid();
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
result = requiredText(raw['value'], type === 'date' ? 10 : 2000);
|
|
40
|
+
if (type === 'date' && (!/^\d{4}-\d{2}-\d{2}$/.test(result) || !Number.isFinite(Date.parse(result)) || new Date(result).toISOString().slice(0, 10) !== result))
|
|
41
|
+
invalid();
|
|
42
|
+
if (type === 'text')
|
|
43
|
+
result = redactOutboundText(result);
|
|
44
|
+
}
|
|
45
|
+
return { columnId, type, value: result };
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function wire(field) {
|
|
49
|
+
const base = { column_id: field.columnId };
|
|
50
|
+
if (field.type === 'text')
|
|
51
|
+
return { ...base, rich_text: [{ type: 'rich_text', elements: [{ type: 'rich_text_section', elements: [{ type: 'text', text: field.value }] }] }] };
|
|
52
|
+
if (field.type === 'checkbox')
|
|
53
|
+
return { ...base, checkbox: field.value };
|
|
54
|
+
return { ...base, [field.type]: field.type === 'user' ? field.value : [field.value] };
|
|
55
|
+
}
|
|
56
|
+
function plainRich(value) {
|
|
57
|
+
if (!Array.isArray(value) || value.length !== 1)
|
|
58
|
+
return undefined;
|
|
59
|
+
const block = record(value[0]);
|
|
60
|
+
const sections = block?.['elements'];
|
|
61
|
+
if (block?.['type'] !== 'rich_text' || !Array.isArray(sections) || sections.length !== 1)
|
|
62
|
+
return undefined;
|
|
63
|
+
const section = record(sections[0]);
|
|
64
|
+
const elements = section?.['elements'];
|
|
65
|
+
if (section?.['type'] !== 'rich_text_section' || !Array.isArray(elements) || elements.length > 2000)
|
|
66
|
+
return undefined;
|
|
67
|
+
let text = '';
|
|
68
|
+
for (const node of elements) {
|
|
69
|
+
const e = record(node);
|
|
70
|
+
if (!e || e['type'] !== 'text' || typeof e['text'] !== 'string' || Object.keys(e).some(k => !['type', 'text', 'style'].includes(k)))
|
|
71
|
+
return undefined;
|
|
72
|
+
if (e['style'] !== undefined) {
|
|
73
|
+
const style = record(e['style']);
|
|
74
|
+
if (!style || Object.entries(style).some(([k, v]) => !['bold', 'italic', 'strike', 'code'].includes(k) || v !== false))
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
text += e['text'];
|
|
78
|
+
if (text.length > 2000)
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
return text;
|
|
82
|
+
}
|
|
83
|
+
function matches(item, listId, rowId, fields) {
|
|
84
|
+
const row = record(item);
|
|
85
|
+
const stored = row?.['fields'];
|
|
86
|
+
if (row?.['id'] !== rowId || row['list_id'] !== listId || !Array.isArray(stored) || stored.length > 100)
|
|
87
|
+
return false;
|
|
88
|
+
return fields.every(field => {
|
|
89
|
+
const found = stored.map(record).filter(f => f?.['column_id'] === field.columnId);
|
|
90
|
+
if (found.length !== 1)
|
|
91
|
+
return false;
|
|
92
|
+
const value = found[0];
|
|
93
|
+
if (field.type === 'text')
|
|
94
|
+
return plainRich(value['rich_text']) === field.value;
|
|
95
|
+
const expected = field.type === 'user' ? field.value : [field.value];
|
|
96
|
+
return isDeepStrictEqual(value[field.type], expected);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async function info(ctx, listId, rowId) {
|
|
100
|
+
const read = await ctx.api('slackLists.items.info', { list_id: listId, id: rowId });
|
|
101
|
+
ctx.checkCurrent();
|
|
102
|
+
const row = record(read.data?.['record']);
|
|
103
|
+
return read.ok && row?.['id'] === rowId && row['list_id'] === listId ? row : undefined;
|
|
104
|
+
}
|
|
105
|
+
function schemaMatches(file, fields) {
|
|
106
|
+
const schema = record(file['list_metadata'])?.['schema'];
|
|
107
|
+
if (!Array.isArray(schema) || schema.length > 100)
|
|
108
|
+
return false;
|
|
109
|
+
return fields.every(field => {
|
|
110
|
+
const columns = schema.map(record).filter(c => c?.['id'] === field.columnId);
|
|
111
|
+
const allowed = { text: ['text'], number: ['number'], checkbox: ['checkbox', 'todo_completed', 'completed'], date: ['date', 'todo_due_date'], user: ['user', 'todo_assignee'] };
|
|
112
|
+
return columns.length === 1 && allowed[field.type].includes(String(columns[0]?.['type']));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function publicSchema(file) {
|
|
116
|
+
const schema = record(record(file)?.['list_metadata'])?.['schema'];
|
|
117
|
+
if (!Array.isArray(schema) || schema.length > 100)
|
|
118
|
+
return [];
|
|
119
|
+
return schema.slice(0, 20).flatMap(value => {
|
|
120
|
+
const column = record(value);
|
|
121
|
+
const id = responseId(column?.['id']);
|
|
122
|
+
if (!column || !id || typeof column['type'] !== 'string')
|
|
123
|
+
return [];
|
|
124
|
+
return [{ id, type: column['type'].slice(0, 32),
|
|
125
|
+
name: typeof column['name'] === 'string' ? redactOutboundText(column['name']).slice(0, 64) : undefined,
|
|
126
|
+
key: typeof column['key'] === 'string' ? redactOutboundText(column['key']).slice(0, 64) : undefined,
|
|
127
|
+
primary: column['is_primary_column'] === true }];
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function readFields(value) {
|
|
131
|
+
if (!Array.isArray(value) || value.length > 100)
|
|
132
|
+
return { fields: [], unsupported: true };
|
|
133
|
+
const fields = [];
|
|
134
|
+
let unsupported = false;
|
|
135
|
+
for (const entry of value) {
|
|
136
|
+
const field = record(entry);
|
|
137
|
+
const columnId = responseId(field?.['column_id']);
|
|
138
|
+
if (!field || !columnId) {
|
|
139
|
+
unsupported = true;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const keys = ['rich_text', 'number', 'checkbox', 'date', 'user'].filter(key => field[key] !== undefined);
|
|
143
|
+
if (keys.length !== 1) {
|
|
144
|
+
unsupported = true;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const key = keys[0];
|
|
148
|
+
const raw = field[key];
|
|
149
|
+
if (key === 'rich_text') {
|
|
150
|
+
const text = plainRich(raw);
|
|
151
|
+
if (text === undefined) {
|
|
152
|
+
unsupported = true;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
fields.push({ columnId, type: 'text', value: redactOutboundText(text) });
|
|
156
|
+
}
|
|
157
|
+
else if (Array.isArray(raw) && raw.length <= 20 && raw.every(v => key === 'number' ? typeof v === 'number' && Number.isFinite(v) : key === 'checkbox' ? typeof v === 'boolean'
|
|
158
|
+
: typeof v === 'string' && (key === 'user' ? /^[UW][A-Z0-9]+$/.test(v) : /^\d{4}-\d{2}-\d{2}$/.test(v)))) {
|
|
159
|
+
fields.push({ columnId, type: key, value: raw });
|
|
160
|
+
}
|
|
161
|
+
else
|
|
162
|
+
unsupported = true;
|
|
163
|
+
}
|
|
164
|
+
return { fields, unsupported };
|
|
165
|
+
}
|
|
166
|
+
export const listActions = [
|
|
167
|
+
defineAction({ operation: 'list.create', scopes: ['lists:write', 'lists:read', ...aclScopes], methods: ['slackLists.create', 'slackLists.access.set', 'slackLists.items.list', ...aclMethods], mutates: true,
|
|
168
|
+
parse(raw) { return { ...baseAction(raw, ['name'], true), name: redactOutboundText(requiredText(raw['name'], 256)) }; },
|
|
169
|
+
execute(ctx, args) {
|
|
170
|
+
const ids = [];
|
|
171
|
+
return preserve(ctx, ids, async () => {
|
|
172
|
+
ctx.checkCurrent();
|
|
173
|
+
const created = await ctx.api('slackLists.create', { name: args.name, schema: [{ key: 'name', name: 'Name', type: 'text', is_primary_column: true }] });
|
|
174
|
+
const id = responseId(created.data?.['list_id']);
|
|
175
|
+
if (id) {
|
|
176
|
+
ids.push(id);
|
|
177
|
+
ctx.remember('list', id);
|
|
178
|
+
}
|
|
179
|
+
ctx.checkCurrent();
|
|
180
|
+
if (!created.ok || !id)
|
|
181
|
+
return ctx.result('unknown', { creation: 'unconfirmed' }, ids);
|
|
182
|
+
let sharing = 'not_requested';
|
|
183
|
+
if (!ctx.operator) {
|
|
184
|
+
if (!/^[UW][A-Z0-9]+$/.test(ctx.actor))
|
|
185
|
+
return acknowledgedFailure(ctx, ids, 'requester_identity_unavailable');
|
|
186
|
+
const shared = await ctx.api('slackLists.access.set', { list_id: id, access_level: 'write', user_ids: [ctx.actor] });
|
|
187
|
+
ctx.checkCurrent();
|
|
188
|
+
if (!shared.ok)
|
|
189
|
+
return acknowledgedFailure(ctx, ids, 'sharing_unconfirmed');
|
|
190
|
+
sharing = 'acknowledged';
|
|
191
|
+
}
|
|
192
|
+
const file = await fileAccess(ctx, 'list', id, false);
|
|
193
|
+
if (!file)
|
|
194
|
+
return acknowledgedFailure(ctx, ids, 'requester_access_unverified');
|
|
195
|
+
const read = await ctx.api('slackLists.items.list', { list_id: id, include_list: true, limit: 100, archived: false });
|
|
196
|
+
ctx.checkCurrent();
|
|
197
|
+
const list = record(read.data?.['list']);
|
|
198
|
+
return ctx.result('partial', { creation: 'acknowledged', sharing, requesterView: 'not_checked',
|
|
199
|
+
metadata: read.ok && list?.['id'] === id && list['title'] === args.name ? 'verified' : 'not_checked',
|
|
200
|
+
columns: publicSchema(file), schemaCompleteness: 'partial' }, ids);
|
|
201
|
+
});
|
|
202
|
+
} }),
|
|
203
|
+
defineAction({ operation: 'list.read', scopes: ['lists:read', ...aclScopes], methods: ['slackLists.items.list', ...aclMethods], mutates: false,
|
|
204
|
+
parse(raw) { return { ...baseAction(raw, ['listId', 'cursor', 'limit'], false), listId: opaqueId(raw['listId']), cursor: optionalText(raw['cursor'], 2048), limit: raw['limit'] === undefined ? 100 : boundedInteger(raw['limit'], 1, 100) }; },
|
|
205
|
+
execute(ctx, args) {
|
|
206
|
+
return preserve(ctx, [], async () => {
|
|
207
|
+
const file = await fileAccess(ctx, 'list', args.listId, false);
|
|
208
|
+
if (!file)
|
|
209
|
+
return ctx.fail('resource_requester_access_denied', 403);
|
|
210
|
+
const read = await ctx.api('slackLists.items.list', { list_id: args.listId, include_list: true, limit: args.limit, archived: false, ...(args.cursor ? { cursor: args.cursor } : {}) });
|
|
211
|
+
ctx.checkCurrent();
|
|
212
|
+
if (!read.ok || !Array.isArray(read.data?.['items']) || read.data['items'].length > args.limit)
|
|
213
|
+
return ctx.fail('list_read_unavailable', 502);
|
|
214
|
+
if (!await fileAccess(ctx, 'list', args.listId, false))
|
|
215
|
+
return ctx.fail('resource_requester_access_denied', 403);
|
|
216
|
+
const items = read.data['items'].map(record);
|
|
217
|
+
if (items.some(row => !row || row['list_id'] !== args.listId || !responseId(row['id'])))
|
|
218
|
+
return ctx.fail('list_read_invalid', 502);
|
|
219
|
+
// Project supported typed fields only; cap the complete action receipt independently.
|
|
220
|
+
const cursor = record(read.data['response_metadata'])?.['next_cursor'];
|
|
221
|
+
if (typeof cursor !== 'string' || cursor.length > 2048)
|
|
222
|
+
return ctx.fail('list_cursor_unavailable', 502);
|
|
223
|
+
const projected = [];
|
|
224
|
+
let bytes = 0;
|
|
225
|
+
let truncated = false;
|
|
226
|
+
let unsupported = false;
|
|
227
|
+
for (const row of items) {
|
|
228
|
+
const parsed = readFields(row['fields']);
|
|
229
|
+
unsupported ||= parsed.unsupported;
|
|
230
|
+
const item = { id: row['id'], fields: parsed.fields, updatedTimestamp: typeof row['updated_timestamp'] === 'string' ? row['updated_timestamp'].slice(0, 32) : undefined };
|
|
231
|
+
bytes += Buffer.byteLength(JSON.stringify(item));
|
|
232
|
+
if (bytes > 8000) {
|
|
233
|
+
truncated = true;
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
projected.push(item);
|
|
237
|
+
}
|
|
238
|
+
return ctx.result('partial', { items: projected, columns: publicSchema(file), schemaCompleteness: 'partial', nextCursor: cursor, hasMore: cursor !== '', truncated, unsupported,
|
|
239
|
+
content: 'partial', requesterView: 'not_checked' }, [args.listId]);
|
|
240
|
+
});
|
|
241
|
+
} }),
|
|
242
|
+
...['add', 'update'].map(mode => defineAction({ operation: `list.item.${mode}`, scopes: ['lists:write', 'lists:read', ...aclScopes],
|
|
243
|
+
methods: [...aclMethods, 'slackLists.items.info', mode === 'add' ? 'slackLists.items.create' : 'slackLists.items.update'], mutates: true,
|
|
244
|
+
parse(raw) {
|
|
245
|
+
return { ...baseAction(raw, mode === 'add' ? ['listId', 'fields'] : ['listId', 'rowId', 'fields', 'updatedTimestamp'], true),
|
|
246
|
+
listId: opaqueId(raw['listId']), fields: parseFields(raw['fields']), rowId: mode === 'update' ? opaqueId(raw['rowId']) : undefined,
|
|
247
|
+
updatedTimestamp: mode === 'update' ? optionalText(raw['updatedTimestamp'], 32) : undefined };
|
|
248
|
+
},
|
|
249
|
+
execute(ctx, args) {
|
|
250
|
+
const ids = [];
|
|
251
|
+
return preserve(ctx, ids, async () => {
|
|
252
|
+
let file = await fileAccess(ctx, 'list', args.listId, true);
|
|
253
|
+
if (!file)
|
|
254
|
+
return ctx.fail('resource_requester_write_denied', 403);
|
|
255
|
+
if (!schemaMatches(file, args.fields))
|
|
256
|
+
return ctx.fail('list_schema_unsupported', 400);
|
|
257
|
+
if (args.rowId) {
|
|
258
|
+
const before = await info(ctx, args.listId, args.rowId);
|
|
259
|
+
if (!before)
|
|
260
|
+
return ctx.fail('list_row_unavailable', 404);
|
|
261
|
+
if (args.updatedTimestamp !== undefined && before['updated_timestamp'] !== args.updatedTimestamp)
|
|
262
|
+
return ctx.fail('list_row_changed', 409);
|
|
263
|
+
// Recheck ACL after the precondition await, immediately before dispatch.
|
|
264
|
+
file = await fileAccess(ctx, 'list', args.listId, true);
|
|
265
|
+
if (!file || !schemaMatches(file, args.fields))
|
|
266
|
+
return ctx.fail('resource_requester_write_denied', 403);
|
|
267
|
+
}
|
|
268
|
+
ctx.checkCurrent();
|
|
269
|
+
const beforeDispatch = async () => {
|
|
270
|
+
const fresh = await fileAccess(ctx, 'list', args.listId, true);
|
|
271
|
+
if (!fresh || !schemaMatches(fresh, args.fields))
|
|
272
|
+
throw slackToolDenied('resource_requester_write_denied', 403);
|
|
273
|
+
ctx.checkCurrent();
|
|
274
|
+
};
|
|
275
|
+
let rowId = args.rowId;
|
|
276
|
+
if (mode === 'add') {
|
|
277
|
+
const created = await ctx.api('slackLists.items.create', { list_id: args.listId, initial_fields: args.fields.map(wire) }, beforeDispatch);
|
|
278
|
+
const item = record(created.data?.['item']);
|
|
279
|
+
rowId = responseId(item?.['id']);
|
|
280
|
+
if (rowId) {
|
|
281
|
+
ids.push(args.listId, rowId);
|
|
282
|
+
if (item?.['list_id'] === args.listId)
|
|
283
|
+
ctx.remember('list.item', rowId, { listId: args.listId });
|
|
284
|
+
}
|
|
285
|
+
ctx.checkCurrent();
|
|
286
|
+
if (!created.ok || !rowId || item?.['list_id'] !== args.listId)
|
|
287
|
+
return ctx.result('unknown', { creation: 'unconfirmed' }, ids);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
ids.push(args.listId, rowId);
|
|
291
|
+
const updated = await ctx.api('slackLists.items.update', { list_id: args.listId, cells: args.fields.map(field => ({ ...wire(field), row_id: rowId })) }, beforeDispatch);
|
|
292
|
+
ctx.checkCurrent();
|
|
293
|
+
if (!updated.ok)
|
|
294
|
+
return ctx.result('unknown', { update: 'unconfirmed' }, ids);
|
|
295
|
+
}
|
|
296
|
+
const after = await info(ctx, args.listId, rowId);
|
|
297
|
+
if (!after)
|
|
298
|
+
return acknowledgedFailure(ctx, ids, 'readback_unavailable');
|
|
299
|
+
if (!await fileAccess(ctx, 'list', args.listId, true))
|
|
300
|
+
return acknowledgedFailure(ctx, ids, 'requester_access_changed');
|
|
301
|
+
if (!matches(after, args.listId, rowId, args.fields))
|
|
302
|
+
return ctx.fail('list_typed_content_mismatch', 502, ids);
|
|
303
|
+
return ctx.result('verified', { mutation: 'acknowledged', typedContent: 'verified', requesterAcl: 'write', requesterView: 'not_checked',
|
|
304
|
+
updatedTimestamp: typeof after['updated_timestamp'] === 'string' ? after['updated_timestamp'] : undefined }, ids);
|
|
305
|
+
});
|
|
306
|
+
} })),
|
|
307
|
+
];
|
|
308
|
+
//# sourceMappingURL=actions-lists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions-lists.js","sourceRoot":"","sources":["../../../src/slack/actions-lists.ts"],"names":[],"mappings":"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"}
|