@frogbotai/piece-slack 0.28.0 → 0.30.0

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 (42) hide show
  1. package/README.md +3 -2
  2. package/dist/actions.d.ts +2 -2
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +285 -193
  5. package/dist/actions.js.map +1 -1
  6. package/dist/client.js +47 -35
  7. package/dist/client.js.map +1 -1
  8. package/dist/config.js +17 -5
  9. package/dist/config.js.map +1 -1
  10. package/dist/define.js +1 -0
  11. package/dist/define.js.map +1 -1
  12. package/dist/files.d.ts.map +1 -1
  13. package/dist/files.js +25 -15
  14. package/dist/files.js.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +45 -39
  17. package/dist/index.js.map +1 -1
  18. package/dist/options.js +36 -21
  19. package/dist/options.js.map +1 -1
  20. package/dist/questions/blocks.js +148 -74
  21. package/dist/questions/blocks.js.map +1 -1
  22. package/dist/questions/index.js +2 -1
  23. package/dist/questions/index.js.map +1 -1
  24. package/dist/questions/notify.js +19 -13
  25. package/dist/questions/notify.js.map +1 -1
  26. package/dist/questions/parse.js +110 -59
  27. package/dist/questions/parse.js.map +1 -1
  28. package/dist/questions/render.js +16 -7
  29. package/dist/questions/render.js.map +1 -1
  30. package/dist/questions/settled.js +9 -3
  31. package/dist/questions/settled.js.map +1 -1
  32. package/dist/questions/slackThread.js +12 -6
  33. package/dist/questions/slackThread.js.map +1 -1
  34. package/dist/questions/state.js +18 -5
  35. package/dist/questions/state.js.map +1 -1
  36. package/dist/questions/updated.js +32 -24
  37. package/dist/questions/updated.js.map +1 -1
  38. package/dist/triggers.js +150 -126
  39. package/dist/triggers.js.map +1 -1
  40. package/dist/webhook.js +28 -43
  41. package/dist/webhook.js.map +1 -1
  42. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -1,52 +1,47 @@
1
1
  import { createSlackAdapter } from '@chat-adapter/slack';
2
- import { definePiece, } from 'frogbot/pieces';
2
+ import { definePiece } from 'frogbot/pieces';
3
3
  import { slackActions } from './actions.js';
4
4
  import { createSlackClient } from './client.js';
5
5
  import { slackAuth, slackOptions, slackScopes } from './config.js';
6
6
  import { slackQuestions } from './questions/index.js';
7
7
  import { slackTriggers } from './triggers.js';
8
8
  import { parseSlackWebhook, slackHandshake, verifySlackWebhook } from './webhook.js';
9
- export const slackActionNames = slackActions.map((action) => action.slug);
10
- export const slackTriggerNames = slackTriggers.map((trigger) => trigger.slug);
9
+ export const slackActionNames = slackActions.map((action)=>action.slug);
10
+ export const slackTriggerNames = slackTriggers.map((trigger)=>trigger.slug);
11
11
  export { slackScopes };
12
12
  function userToken(tokens) {
13
13
  const user = tokens.authed_user;
14
- return user &&
15
- typeof user === 'object' &&
16
- 'access_token' in user &&
17
- typeof user.access_token === 'string'
18
- ? user.access_token
19
- : undefined;
14
+ return user && typeof user === 'object' && 'access_token' in user && typeof user.access_token === 'string' ? user.access_token : undefined;
20
15
  }
21
16
  function teamId(tokens) {
22
17
  const team = tokens.team;
23
- return team && typeof team === 'object' && 'id' in team && typeof team.id === 'string'
24
- ? team.id
25
- : undefined;
18
+ return team && typeof team === 'object' && 'id' in team && typeof team.id === 'string' ? team.id : undefined;
26
19
  }
27
- const slackAccount = async ({ client }) => {
20
+ const slackAccount = async ({ client })=>{
28
21
  const account = await client.request('auth.test');
29
22
  const id = typeof account.team_id === 'string' ? account.team_id : '';
30
23
  const label = typeof account.team === 'string' ? account.team : id;
31
- if (!id)
32
- throw new Error('Slack auth.test did not return a workspace ID.');
33
- return { id, label };
24
+ if (!id) throw new Error('Slack auth.test did not return a workspace ID.');
25
+ return {
26
+ id,
27
+ label
28
+ };
34
29
  };
35
30
  const slackWebhook = {
36
31
  verify: verifySlackWebhook,
37
- async handshake({ req }) {
32
+ async handshake ({ req }) {
38
33
  return slackHandshake(req);
39
34
  },
40
- parse({ req }) {
35
+ parse ({ req }) {
41
36
  return parseSlackWebhook(req);
42
- },
37
+ }
43
38
  };
44
39
  export const createSlack = definePiece({
45
40
  slug: 'slack',
46
41
  label: 'Slack',
47
42
  admin: {
48
43
  description: 'Manage Slack messages, files, channels, users, groups, and workspace events',
49
- group: 'Communication',
44
+ group: 'Communication'
50
45
  },
51
46
  auth: slackAuth,
52
47
  options: slackOptions,
@@ -54,50 +49,61 @@ export const createSlack = definePiece({
54
49
  oauth: {
55
50
  authorizationUrl: 'https://slack.com/oauth/v2/authorize',
56
51
  tokenUrl: 'https://slack.com/api/oauth.v2.access',
57
- scopes: [...slackScopes],
52
+ scopes: [
53
+ ...slackScopes
54
+ ],
58
55
  params: {
59
- user_scope: 'search:read,users.profile:write,reactions:read,reactions:write,im:history,stars:read,channels:write,groups:write,im:write,mpim:write,channels:write.invites,groups:write.invites,channels:history,groups:history,chat:write,users:read,usergroups:write',
56
+ user_scope: 'search:read,users.profile:write,reactions:read,reactions:write,im:history,stars:read,channels:write,groups:write,im:write,mpim:write,channels:write.invites,groups:write.invites,channels:history,groups:history,chat:write,users:read,usergroups:write'
60
57
  },
61
- toAuth: ({ tokens }) => ({
62
- botToken: tokens.access_token ?? '',
63
- userToken: userToken(tokens),
64
- teamId: teamId(tokens),
65
- }),
66
- account: slackAccount,
58
+ toAuth: ({ tokens })=>({
59
+ botToken: tokens.access_token ?? '',
60
+ userToken: userToken(tokens),
61
+ teamId: teamId(tokens)
62
+ }),
63
+ account: slackAccount
67
64
  },
68
65
  webhook: slackWebhook,
69
66
  channel: {
70
- adapter({ auth, options }) {
67
+ adapter ({ auth, options }) {
71
68
  if (!options.signingSecret) {
72
69
  throw new Error('Slack channels require a signingSecret option for webhook verification.');
73
70
  }
74
71
  return createSlackAdapter({
75
72
  botToken: auth.botToken,
76
- signingSecret: options.signingSecret,
73
+ signingSecret: options.signingSecret
77
74
  });
78
75
  },
79
- async identity({ author, client, req }) {
80
- const response = await client.request('users.info', { user: author.userId });
76
+ async identity ({ author, client, req }) {
77
+ const response = await client.request('users.info', {
78
+ user: author.userId
79
+ });
81
80
  const user = response.user;
82
81
  const profile = user && typeof user === 'object' && 'profile' in user ? user.profile : undefined;
83
82
  const email = profile && typeof profile === 'object' && 'email' in profile ? profile.email : undefined;
84
- if (typeof email !== 'string' || !email.trim())
85
- return null;
83
+ if (typeof email !== 'string' || !email.trim()) return null;
86
84
  const config = await req.frogbot.config;
87
85
  const payloadConfig = await config._internal.payloadConfig;
88
86
  const result = await req.frogbot.find({
89
87
  collection: payloadConfig.admin.user,
90
- where: { email: { equals: email.trim().toLowerCase() } },
88
+ where: {
89
+ email: {
90
+ equals: email.trim().toLowerCase()
91
+ }
92
+ },
91
93
  limit: 1,
92
94
  overrideAccess: true,
93
- req,
95
+ req
94
96
  });
95
97
  const match = result.docs[0];
96
- return match ? { ...match, collection: payloadConfig.admin.user } : null;
98
+ return match ? {
99
+ ...match,
100
+ collection: payloadConfig.admin.user
101
+ } : null;
97
102
  },
98
- questions: slackQuestions,
103
+ questions: slackQuestions
99
104
  },
100
105
  actions: slackActions,
101
- triggers: slackTriggers,
106
+ triggers: slackTriggers
102
107
  });
108
+
103
109
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["createSlackAdapter","definePiece","slackActions","createSlackClient","slackAuth","slackOptions","slackScopes","slackQuestions","slackTriggers","parseSlackWebhook","slackHandshake","verifySlackWebhook","slackActionNames","map","action","slug","slackTriggerNames","trigger","userToken","tokens","user","authed_user","access_token","undefined","teamId","team","id","slackAccount","client","account","request","team_id","label","Error","slackWebhook","verify","handshake","req","parse","createSlack","admin","description","group","auth","options","oauth","authorizationUrl","tokenUrl","scopes","params","user_scope","toAuth","botToken","webhook","channel","adapter","signingSecret","identity","author","response","userId","profile","email","trim","config","frogbot","payloadConfig","_internal","result","find","collection","where","equals","toLowerCase","limit","overrideAccess","match","docs","questions","actions","triggers"],"mappings":"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","file":"index.js"}
package/dist/options.js CHANGED
@@ -4,47 +4,62 @@ function text(value) {
4
4
  export async function channelOptions({ client }) {
5
5
  const channels = await client.paginate({
6
6
  path: 'conversations.list',
7
- body: { types: 'public_channel,private_channel', exclude_archived: true },
7
+ body: {
8
+ types: 'public_channel,private_channel',
9
+ exclude_archived: true
10
+ },
8
11
  item: 'channels',
9
- limit: 2000,
12
+ limit: 2000
10
13
  });
11
- return channels.flatMap((channel) => {
12
- if (!channel || typeof channel !== 'object')
13
- return [];
14
- if (!('id' in channel) || !('name' in channel))
15
- return [];
14
+ return channels.flatMap((channel)=>{
15
+ if (!channel || typeof channel !== 'object') return [];
16
+ if (!('id' in channel) || !('name' in channel)) return [];
16
17
  const value = text(channel.id);
17
18
  const label = text(channel.name);
18
- return value && label ? [{ label, value }] : [];
19
+ return value && label ? [
20
+ {
21
+ label,
22
+ value
23
+ }
24
+ ] : [];
19
25
  });
20
26
  }
21
27
  export async function userOptions({ client }) {
22
28
  const users = await client.paginate({
23
29
  path: 'users.list',
24
30
  item: 'members',
25
- body: { limit: 1000 },
31
+ body: {
32
+ limit: 1000
33
+ }
26
34
  });
27
- return users.flatMap((user) => {
28
- if (!user || typeof user !== 'object' || !('id' in user) || !('name' in user))
29
- return [];
30
- if ('deleted' in user && user.deleted === true)
31
- return [];
35
+ return users.flatMap((user)=>{
36
+ if (!user || typeof user !== 'object' || !('id' in user) || !('name' in user)) return [];
37
+ if ('deleted' in user && user.deleted === true) return [];
32
38
  const value = text(user.id);
33
39
  const label = text(user.name);
34
- return value && label ? [{ label, value }] : [];
40
+ return value && label ? [
41
+ {
42
+ label,
43
+ value
44
+ }
45
+ ] : [];
35
46
  });
36
47
  }
37
48
  export async function userGroupOptions({ client }) {
38
49
  const response = await client.request('usergroups.list');
39
50
  const groups = Array.isArray(response.usergroups) ? response.usergroups : [];
40
- return groups.flatMap((group) => {
41
- if (!group || typeof group !== 'object' || !('id' in group))
42
- return [];
43
- if ('date_delete' in group && Boolean(group.date_delete))
44
- return [];
51
+ return groups.flatMap((group)=>{
52
+ if (!group || typeof group !== 'object' || !('id' in group)) return [];
53
+ if ('date_delete' in group && Boolean(group.date_delete)) return [];
45
54
  const value = text(group.id);
46
55
  const label = 'handle' in group ? text(group.handle) : 'name' in group ? text(group.name) : '';
47
- return value && label ? [{ label, value }] : [];
56
+ return value && label ? [
57
+ {
58
+ label,
59
+ value
60
+ }
61
+ ] : [];
48
62
  });
49
63
  }
64
+
50
65
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/options.ts"],"names":["text","value","channelOptions","client","channels","paginate","path","body","types","exclude_archived","item","limit","flatMap","channel","id","label","name","userOptions","users","user","deleted","userGroupOptions","response","request","groups","Array","isArray","usergroups","group","Boolean","date_delete","handle"],"mappings":"AAIA,SAASA,KAAKC,KAAc;IAC1B,OAAO,OAAOA,UAAU,WAAWA,QAAQ;AAC7C;AAEA,OAAO,eAAeC,eAAe,EAAEC,MAAM,EAA2B;IACtE,MAAMC,WAAW,MAAMD,OAAOE,QAAQ,CAAC;QACrCC,MAAM;QACNC,MAAM;YAAEC,OAAO;YAAkCC,kBAAkB;QAAK;QACxEC,MAAM;QACNC,OAAO;IACT;IAEA,OAAOP,SAASQ,OAAO,CAAC,CAACC;QACvB,IAAI,CAACA,WAAW,OAAOA,YAAY,UAAU,OAAO,EAAE;QACtD,IAAI,CAAE,CAAA,QAAQA,OAAM,KAAM,CAAE,CAAA,UAAUA,OAAM,GAAI,OAAO,EAAE;QAEzD,MAAMZ,QAAQD,KAAKa,QAAQC,EAAE;QAC7B,MAAMC,QAAQf,KAAKa,QAAQG,IAAI;QAE/B,OAAOf,SAASc,QAAQ;YAAC;gBAAEA;gBAAOd;YAAM;SAAE,GAAG,EAAE;IACjD;AACF;AAEA,OAAO,eAAegB,YAAY,EAAEd,MAAM,EAA2B;IACnE,MAAMe,QAAQ,MAAMf,OAAOE,QAAQ,CAAC;QAClCC,MAAM;QACNI,MAAM;QACNH,MAAM;YAAEI,OAAO;QAAK;IACtB;IAEA,OAAOO,MAAMN,OAAO,CAAC,CAACO;QACpB,IAAI,CAACA,QAAQ,OAAOA,SAAS,YAAY,CAAE,CAAA,QAAQA,IAAG,KAAM,CAAE,CAAA,UAAUA,IAAG,GAAI,OAAO,EAAE;QACxF,IAAI,aAAaA,QAAQA,KAAKC,OAAO,KAAK,MAAM,OAAO,EAAE;QAEzD,MAAMnB,QAAQD,KAAKmB,KAAKL,EAAE;QAC1B,MAAMC,QAAQf,KAAKmB,KAAKH,IAAI;QAE5B,OAAOf,SAASc,QAAQ;YAAC;gBAAEA;gBAAOd;YAAM;SAAE,GAAG,EAAE;IACjD;AACF;AAEA,OAAO,eAAeoB,iBAAiB,EAAElB,MAAM,EAA2B;IACxE,MAAMmB,WAAW,MAAMnB,OAAOoB,OAAO,CAAC;IACtC,MAAMC,SAASC,MAAMC,OAAO,CAACJ,SAASK,UAAU,IAAIL,SAASK,UAAU,GAAG,EAAE;IAE5E,OAAOH,OAAOZ,OAAO,CAAC,CAACgB;QACrB,IAAI,CAACA,SAAS,OAAOA,UAAU,YAAY,CAAE,CAAA,QAAQA,KAAI,GAAI,OAAO,EAAE;QACtE,IAAI,iBAAiBA,SAASC,QAAQD,MAAME,WAAW,GAAG,OAAO,EAAE;QAEnE,MAAM7B,QAAQD,KAAK4B,MAAMd,EAAE;QAC3B,MAAMC,QAAQ,YAAYa,QAAQ5B,KAAK4B,MAAMG,MAAM,IAAI,UAAUH,QAAQ5B,KAAK4B,MAAMZ,IAAI,IAAI;QAE5F,OAAOf,SAASc,QAAQ;YAAC;gBAAEA;gBAAOd;YAAM;SAAE,GAAG,EAAE;IACjD;AACF","file":"options.js"}
@@ -7,14 +7,14 @@ const SELECT_OPTIONS = 100;
7
7
  const OPTION_TEXT = 75;
8
8
  const MODAL_TITLE = 24;
9
9
  export const actionIds = {
10
- choose: (call, q) => `${QUESTION_PREFIX}:choose:${call.toolCallId}:${q}`,
11
- custom: (call, q) => `${QUESTION_PREFIX}:custom:${call.toolCallId}:${q}`,
12
- dismiss: (call) => `${QUESTION_PREFIX}:dismiss:${call.toolCallId}`,
13
- submit: (call) => `${QUESTION_PREFIX}:submit:${call.toolCallId}`,
10
+ choose: (call, q)=>`${QUESTION_PREFIX}:choose:${call.toolCallId}:${q}`,
11
+ custom: (call, q)=>`${QUESTION_PREFIX}:custom:${call.toolCallId}:${q}`,
12
+ dismiss: (call)=>`${QUESTION_PREFIX}:dismiss:${call.toolCallId}`,
13
+ submit: (call)=>`${QUESTION_PREFIX}:submit:${call.toolCallId}`
14
14
  };
15
15
  export const blockIds = {
16
- question: (call, q) => `${QUESTION_PREFIX}:${call.toolCallId}:${q}`,
17
- custom: (call, q) => `${QUESTION_PREFIX}:custom:${call.toolCallId}:${q}`,
16
+ question: (call, q)=>`${QUESTION_PREFIX}:${call.toolCallId}:${q}`,
17
+ custom: (call, q)=>`${QUESTION_PREFIX}:custom:${call.toolCallId}:${q}`
18
18
  };
19
19
  export function isQuickQuestion(input) {
20
20
  return input.questions.length === 1 && !input.questions[0].multiple;
@@ -22,27 +22,34 @@ export function isQuickQuestion(input) {
22
22
  export function questionBlocks(call) {
23
23
  return isQuickQuestion(call.input) ? quickBlocks(call) : formBlocks(call);
24
24
  }
25
- export function settledBlocks({ actorId, answers, call, }) {
26
- const blocks = call.input.questions.map((item, q) => {
25
+ export function settledBlocks({ actorId, answers, call }) {
26
+ const blocks = call.input.questions.map((item, q)=>{
27
27
  const answer = answers?.[q];
28
- const lines = [prompt(item)];
28
+ const lines = [
29
+ prompt(item)
30
+ ];
29
31
  if (answer) {
30
- const values = [...answer.selected, ...(answer.custom ? [`“${answer.custom}”`] : [])];
32
+ const values = [
33
+ ...answer.selected,
34
+ ...answer.custom ? [
35
+ `“${answer.custom}”`
36
+ ] : []
37
+ ];
31
38
  lines.push(`:white_check_mark: *${escape(values.join(', '))}*`);
32
39
  }
33
40
  return section(lines.join('\n'));
34
41
  });
35
42
  const verb = answers ? 'Answered' : 'Dismissed';
36
- if (!answers)
37
- blocks.push(section(':no_entry_sign: *Dismissed*'));
38
- return [...blocks, context(actorId ? `${verb} by <@${actorId}>` : verb)];
43
+ if (!answers) blocks.push(section(':no_entry_sign: *Dismissed*'));
44
+ return [
45
+ ...blocks,
46
+ context(actorId ? `${verb} by <@${actorId}>` : verb)
47
+ ];
39
48
  }
40
49
  export function fallbackText(input) {
41
- return input.questions
42
- .map(({ header, question }) => `${escape(header)}: ${escape(question)}`)
43
- .join('\n');
50
+ return input.questions.map(({ header, question })=>`${escape(header)}: ${escape(question)}`).join('\n');
44
51
  }
45
- export function customAnswerView({ call, initialValue, metadata, q, }) {
52
+ export function customAnswerView({ call, initialValue, metadata, q }) {
46
53
  const item = call.input.questions[q];
47
54
  const quick = isQuickQuestion(call.input);
48
55
  return {
@@ -51,7 +58,9 @@ export function customAnswerView({ call, initialValue, metadata, q, }) {
51
58
  title: plain(truncate(item.header, MODAL_TITLE)),
52
59
  submit: plain(quick ? 'Submit' : 'Save'),
53
60
  close: plain('Cancel'),
54
- private_metadata: JSON.stringify({ m: metadata }),
61
+ private_metadata: JSON.stringify({
62
+ m: metadata
63
+ }),
55
64
  blocks: [
56
65
  section(prompt(item)),
57
66
  {
@@ -63,103 +72,165 @@ export function customAnswerView({ call, initialValue, metadata, q, }) {
63
72
  type: 'plain_text_input',
64
73
  action_id: CUSTOM_ANSWER_ACTION_ID,
65
74
  multiline: true,
66
- ...(initialValue ? { initial_value: initialValue } : {}),
67
- },
68
- },
69
- ],
75
+ ...initialValue ? {
76
+ initial_value: initialValue
77
+ } : {}
78
+ }
79
+ }
80
+ ]
70
81
  };
71
82
  }
72
83
  function quickBlocks(call) {
73
84
  const item = call.input.questions[0];
74
85
  const buttons = item.options.length <= BUTTON_OPTIONS;
75
- const descriptions = buttons
76
- ? item.options.flatMap(({ label, description }) => description ? [`• *${escape(label)}* — ${escape(description)}`] : [])
77
- : [];
78
- const controls = buttons
79
- ? item.options.map((option, index) => ({
86
+ const descriptions = buttons ? item.options.flatMap(({ label, description })=>description ? [
87
+ `• *${escape(label)}* — ${escape(description)}`
88
+ ] : []) : [];
89
+ const controls = buttons ? item.options.map((option, index)=>({
80
90
  type: 'button',
81
91
  action_id: `${actionIds.choose(call, 0)}:${index}`,
82
92
  text: plain(truncate(option.label, OPTION_TEXT)),
83
- value: String(index),
84
- }))
85
- : [choiceElement({ call, item, q: 0 })];
93
+ value: String(index)
94
+ })) : [
95
+ choiceElement({
96
+ call,
97
+ item,
98
+ q: 0
99
+ })
100
+ ];
86
101
  return [
87
- section([prompt(item), ...descriptions].join('\n')),
102
+ section([
103
+ prompt(item),
104
+ ...descriptions
105
+ ].join('\n')),
88
106
  {
89
107
  type: 'actions',
90
108
  elements: [
91
109
  ...controls,
92
- ...(item.custom
93
- ? [button({ actionId: actionIds.custom(call, 0), text: 'Type your answer' })]
94
- : []),
95
- button({ actionId: actionIds.dismiss(call), text: 'Dismiss', style: 'danger' }),
96
- ],
97
- },
110
+ ...item.custom ? [
111
+ button({
112
+ actionId: actionIds.custom(call, 0),
113
+ text: 'Type your answer'
114
+ })
115
+ ] : [],
116
+ button({
117
+ actionId: actionIds.dismiss(call),
118
+ text: 'Dismiss',
119
+ style: 'danger'
120
+ })
121
+ ]
122
+ }
98
123
  ];
99
124
  }
100
125
  function formBlocks(call) {
101
- const questions = call.input.questions.flatMap((item, q) => [
102
- section(prompt(item)),
103
- {
104
- type: 'actions',
105
- block_id: blockIds.question(call, q),
106
- elements: [
107
- choiceElement({ call, item, q }),
108
- ...(item.custom
109
- ? [button({ actionId: actionIds.custom(call, q), text: 'Type an answer' })]
110
- : []),
111
- ],
112
- },
113
- ]);
126
+ const questions = call.input.questions.flatMap((item, q)=>[
127
+ section(prompt(item)),
128
+ {
129
+ type: 'actions',
130
+ block_id: blockIds.question(call, q),
131
+ elements: [
132
+ choiceElement({
133
+ call,
134
+ item,
135
+ q
136
+ }),
137
+ ...item.custom ? [
138
+ button({
139
+ actionId: actionIds.custom(call, q),
140
+ text: 'Type an answer'
141
+ })
142
+ ] : []
143
+ ]
144
+ }
145
+ ]);
114
146
  return [
115
147
  ...questions,
116
148
  {
117
149
  type: 'actions',
118
150
  elements: [
119
- button({ actionId: actionIds.submit(call), text: 'Submit', style: 'primary' }),
120
- button({ actionId: actionIds.dismiss(call), text: 'Dismiss', style: 'danger' }),
121
- ],
122
- },
151
+ button({
152
+ actionId: actionIds.submit(call),
153
+ text: 'Submit',
154
+ style: 'primary'
155
+ }),
156
+ button({
157
+ actionId: actionIds.dismiss(call),
158
+ text: 'Dismiss',
159
+ style: 'danger'
160
+ })
161
+ ]
162
+ }
123
163
  ];
124
164
  }
125
- function choiceElement({ call, item, q, }) {
126
- const options = item.options.map(({ label, description }, index) => ({
127
- text: plain(truncate(label, OPTION_TEXT)),
128
- value: String(index),
129
- ...(description ? { description: plain(truncate(description, OPTION_TEXT)) } : {}),
130
- }));
165
+ function choiceElement({ call, item, q }) {
166
+ const options = item.options.map(({ label, description }, index)=>({
167
+ text: plain(truncate(label, OPTION_TEXT)),
168
+ value: String(index),
169
+ ...description ? {
170
+ description: plain(truncate(description, OPTION_TEXT))
171
+ } : {}
172
+ }));
131
173
  const actionId = actionIds.choose(call, q);
132
174
  if (options.length <= RADIO_OPTIONS) {
133
- return { type: item.multiple ? 'checkboxes' : 'radio_buttons', action_id: actionId, options };
175
+ return {
176
+ type: item.multiple ? 'checkboxes' : 'radio_buttons',
177
+ action_id: actionId,
178
+ options
179
+ };
134
180
  }
135
181
  return {
136
182
  type: item.multiple ? 'multi_static_select' : 'static_select',
137
183
  action_id: actionId,
138
184
  placeholder: plain(item.multiple ? 'Choose options' : 'Choose an option'),
139
- ...(options.length <= SELECT_OPTIONS
140
- ? { options }
141
- : {
142
- option_groups: chunk(options, SELECT_OPTIONS).map((group, index) => ({
185
+ ...options.length <= SELECT_OPTIONS ? {
186
+ options
187
+ } : {
188
+ option_groups: chunk(options, SELECT_OPTIONS).map((group, index)=>({
143
189
  label: plain(`Options ${index * SELECT_OPTIONS + 1}–${index * SELECT_OPTIONS + group.length}`),
144
- options: group,
145
- })),
146
- }),
190
+ options: group
191
+ }))
192
+ }
147
193
  };
148
194
  }
149
195
  function prompt({ header, question }) {
150
196
  return `*${escape(header)}*\n${escape(question)}`;
151
197
  }
152
- function button({ actionId, style, text, }) {
153
- return { type: 'button', action_id: actionId, text: plain(text), ...(style ? { style } : {}) };
198
+ function button({ actionId, style, text }) {
199
+ return {
200
+ type: 'button',
201
+ action_id: actionId,
202
+ text: plain(text),
203
+ ...style ? {
204
+ style
205
+ } : {}
206
+ };
154
207
  }
155
208
  function section(text) {
156
- return { type: 'section', text: { type: 'mrkdwn', text: truncate(text, 3000) } };
209
+ return {
210
+ type: 'section',
211
+ text: {
212
+ type: 'mrkdwn',
213
+ text: truncate(text, 3000)
214
+ }
215
+ };
157
216
  }
158
217
  function context(text) {
159
- return { type: 'context', elements: [{ type: 'mrkdwn', text }] };
218
+ return {
219
+ type: 'context',
220
+ elements: [
221
+ {
222
+ type: 'mrkdwn',
223
+ text
224
+ }
225
+ ]
226
+ };
160
227
  }
161
228
  function plain(text) {
162
- return { type: 'plain_text', text, emoji: true };
229
+ return {
230
+ type: 'plain_text',
231
+ text,
232
+ emoji: true
233
+ };
163
234
  }
164
235
  function escape(text) {
165
236
  return text.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
@@ -168,6 +239,9 @@ function truncate(text, limit) {
168
239
  return text.length > limit ? `${text.slice(0, limit - 1)}…` : text;
169
240
  }
170
241
  function chunk(values, size) {
171
- return Array.from({ length: Math.ceil(values.length / size) }, (_, index) => values.slice(index * size, (index + 1) * size));
242
+ return Array.from({
243
+ length: Math.ceil(values.length / size)
244
+ }, (_, index)=>values.slice(index * size, (index + 1) * size));
172
245
  }
246
+
173
247
  //# sourceMappingURL=blocks.js.map