@frogbotai/piece-slack 0.21.0 → 0.23.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.
@@ -0,0 +1,348 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { z } from 'zod';
3
+ import { slackValue } from './client.js';
4
+ import { slackEvent, slackWorkspace } from './webhook.js';
5
+ const emptyInput = z.object({});
6
+ const messageFilters = {
7
+ ignoreBots: z.boolean().default(false),
8
+ };
9
+ const selfFilters = {
10
+ ...messageFilters,
11
+ ignoreSelfMessages: z.boolean().default(false),
12
+ };
13
+ const channel = z.string().min(1).meta({ label: 'Channel ID' });
14
+ const user = z.string().min(1).meta({ label: 'User ID' });
15
+ const eventOutput = slackValue;
16
+ function appTrigger(trigger) {
17
+ return trigger;
18
+ }
19
+ async function event(args) {
20
+ const deliveredWorkspace = slackWorkspace(args.req);
21
+ if (!deliveredWorkspace || deliveredWorkspace !== (await args.client.workspaceId())) {
22
+ return undefined;
23
+ }
24
+ return slackEvent(args.req);
25
+ }
26
+ function emit(value) {
27
+ return value
28
+ ? [
29
+ {
30
+ dedupeKey: createHash('sha256').update(JSON.stringify(value)).digest('hex'),
31
+ data: value,
32
+ },
33
+ ]
34
+ : [];
35
+ }
36
+ function field(value, key) {
37
+ return key in value ? value[key] : undefined;
38
+ }
39
+ function eventMap(value) {
40
+ return value && typeof value === 'object' && !Array.isArray(value)
41
+ ? Object.fromEntries(Object.entries(value))
42
+ : undefined;
43
+ }
44
+ async function selfUser(client) {
45
+ const response = await client.request('auth.test');
46
+ return typeof response.user_id === 'string' ? response.user_id : undefined;
47
+ }
48
+ function command(text, userId, commands) {
49
+ if (typeof text !== 'string')
50
+ return undefined;
51
+ const match = text.match(new RegExp(`<@${userId}>\\s+(.+)`, 's'));
52
+ if (!match)
53
+ return undefined;
54
+ const parts = match[1].trim().split(/\s+/);
55
+ const name = parts[0].toLowerCase();
56
+ return commands.includes(name) ? { command: name, args: parts.slice(1) } : undefined;
57
+ }
58
+ const anyMessageInput = z.object(messageFilters);
59
+ export const messageCreated = appTrigger({
60
+ slug: 'messageCreated',
61
+ description: 'Trigger for a message in any public or private channel.',
62
+ type: 'app',
63
+ event: 'message',
64
+ input: anyMessageInput,
65
+ output: eventOutput,
66
+ async run(args) {
67
+ const value = await event(args);
68
+ if (!value || !['channel', 'group'].includes(String(field(value, 'channel_type'))))
69
+ return [];
70
+ if (args.input.ignoreBots && field(value, 'bot_id'))
71
+ return [];
72
+ return emit(value);
73
+ },
74
+ });
75
+ const channelMessageInput = anyMessageInput.extend({ channel });
76
+ export const channelMessageCreated = appTrigger({
77
+ slug: 'channelMessageCreated',
78
+ description: 'Trigger for a message in one selected channel.',
79
+ type: 'app',
80
+ event: 'message',
81
+ input: channelMessageInput,
82
+ output: eventOutput,
83
+ async run(args) {
84
+ const value = await event(args);
85
+ if (!value || !['channel', 'group'].includes(String(field(value, 'channel_type'))))
86
+ return [];
87
+ if (field(value, 'channel') !== args.input.channel)
88
+ return [];
89
+ if (args.input.ignoreBots && field(value, 'bot_id'))
90
+ return [];
91
+ return emit(value);
92
+ },
93
+ });
94
+ const directMessageInput = z.object(selfFilters);
95
+ export const directMessageCreated = appTrigger({
96
+ slug: 'directMessageCreated',
97
+ description: 'Trigger for a new direct message.',
98
+ type: 'app',
99
+ event: 'message',
100
+ input: directMessageInput,
101
+ output: eventOutput,
102
+ async run(args) {
103
+ const value = await event(args);
104
+ if (!value || field(value, 'channel_type') !== 'im')
105
+ return [];
106
+ if (args.input.ignoreBots && field(value, 'bot_id'))
107
+ return [];
108
+ if (args.input.ignoreSelfMessages && field(value, 'user') === (await selfUser(args.client))) {
109
+ return [];
110
+ }
111
+ return emit(value);
112
+ },
113
+ });
114
+ const mentionInput = z.object({
115
+ users: z.array(z.string()).default([]).meta({ label: 'User IDs' }),
116
+ userGroups: z.array(z.string()).default([]).meta({ label: 'User group IDs' }),
117
+ channels: z.array(z.string()).default([]).meta({ label: 'Channel IDs' }),
118
+ ignoreBots: z.boolean().default(false),
119
+ removeMention: z.boolean().default(false),
120
+ });
121
+ export const channelMentionCreated = appTrigger({
122
+ slug: 'channelMentionCreated',
123
+ description: 'Trigger when selected users or user groups are mentioned in a channel.',
124
+ type: 'app',
125
+ event: 'message',
126
+ input: mentionInput,
127
+ output: eventOutput,
128
+ async run(args) {
129
+ const value = await event(args);
130
+ if (!value || !['channel', 'group'].includes(String(field(value, 'channel_type'))))
131
+ return [];
132
+ if (args.input.channels.length &&
133
+ !args.input.channels.includes(String(field(value, 'channel')))) {
134
+ return [];
135
+ }
136
+ if (args.input.ignoreBots && field(value, 'bot_id'))
137
+ return [];
138
+ const text = String(field(value, 'text') ?? '');
139
+ const users = args.input.users.filter((id) => text.includes(`<@${id}>`));
140
+ const groups = args.input.userGroups.filter((id) => text.includes(`<!subteam^${id}`));
141
+ if (!users.length && !groups.length)
142
+ return [];
143
+ if (!args.input.removeMention)
144
+ return emit(value);
145
+ let cleanText = text;
146
+ for (const id of users)
147
+ cleanText = cleanText.replaceAll(`<@${id}>`, '');
148
+ for (const id of groups) {
149
+ cleanText = cleanText.replace(new RegExp(`<!subteam\\^${id}(\\|[^>]*)?>`, 'g'), '');
150
+ }
151
+ return emit({ ...value, clean_text: cleanText.trim() });
152
+ },
153
+ });
154
+ const reactionInput = z.object({
155
+ emojis: z.array(z.string()).default([]),
156
+ user: z.string().optional().meta({ label: 'User ID' }),
157
+ channels: z.array(z.string()).default([]).meta({ label: 'Channel IDs' }),
158
+ });
159
+ function reactionTrigger(slug, eventName, description) {
160
+ return appTrigger({
161
+ slug,
162
+ description,
163
+ type: 'app',
164
+ event: eventName,
165
+ input: reactionInput,
166
+ output: eventOutput,
167
+ async run(args) {
168
+ const value = await event(args);
169
+ if (!value)
170
+ return [];
171
+ if (args.input.user && field(value, 'user') !== args.input.user)
172
+ return [];
173
+ if (args.input.emojis.length &&
174
+ !args.input.emojis.includes(String(field(value, 'reaction')))) {
175
+ return [];
176
+ }
177
+ const item = eventMap(field(value, 'item'));
178
+ const itemChannel = item ? field(item, 'channel') : undefined;
179
+ if (args.input.channels.length && !args.input.channels.includes(String(itemChannel))) {
180
+ return [];
181
+ }
182
+ return emit(value);
183
+ },
184
+ });
185
+ }
186
+ export const reactionAdded = reactionTrigger('reactionAdded', 'reaction_added', 'Trigger when a reaction is added.');
187
+ export const reactionRemoved = reactionTrigger('reactionRemoved', 'reaction_removed', 'Trigger when a reaction is removed.');
188
+ export const channelCreated = appTrigger({
189
+ slug: 'channelCreated',
190
+ description: 'Trigger when a Slack channel is created.',
191
+ type: 'app',
192
+ event: 'channel_created',
193
+ input: emptyInput,
194
+ output: eventOutput,
195
+ async run(args) {
196
+ return emit(await event(args));
197
+ },
198
+ });
199
+ const commandInput = z.object({
200
+ user,
201
+ commands: z.array(z.string().min(1)).min(1).default(['help']),
202
+ channels: z.array(z.string()).default([]).meta({ label: 'Channel IDs' }),
203
+ ignoreBots: z.boolean().default(true),
204
+ });
205
+ export const channelCommandCreated = appTrigger({
206
+ slug: 'channelCommandCreated',
207
+ description: 'Trigger for a configured bot command in a channel.',
208
+ type: 'app',
209
+ event: 'message',
210
+ input: commandInput,
211
+ output: eventOutput,
212
+ async run(args) {
213
+ const value = await event(args);
214
+ if (!value || !['channel', 'group'].includes(String(field(value, 'channel_type'))))
215
+ return [];
216
+ if (args.input.channels.length &&
217
+ !args.input.channels.includes(String(field(value, 'channel')))) {
218
+ return [];
219
+ }
220
+ if (args.input.ignoreBots && field(value, 'bot_id'))
221
+ return [];
222
+ const parsed = command(field(value, 'text'), args.input.user, args.input.commands);
223
+ return parsed ? emit({ ...value, parsed_command: parsed }) : [];
224
+ },
225
+ });
226
+ const directMentionInput = z.object({ user, ...selfFilters });
227
+ export const directMentionCreated = appTrigger({
228
+ slug: 'directMentionCreated',
229
+ description: 'Trigger when a selected user is mentioned in a direct message.',
230
+ type: 'app',
231
+ event: 'message',
232
+ input: directMentionInput,
233
+ output: eventOutput,
234
+ async run(args) {
235
+ const value = await event(args);
236
+ if (!value || field(value, 'channel_type') !== 'im')
237
+ return [];
238
+ if (args.input.ignoreBots && field(value, 'bot_id'))
239
+ return [];
240
+ if (args.input.ignoreSelfMessages && field(value, 'user') === (await selfUser(args.client))) {
241
+ return [];
242
+ }
243
+ return String(field(value, 'text') ?? '').includes(`<@${args.input.user}>`) ? emit(value) : [];
244
+ },
245
+ });
246
+ const directCommandInput = commandInput
247
+ .omit({ channels: true })
248
+ .extend({ ignoreSelfMessages: z.boolean().default(false) });
249
+ export const directCommandCreated = appTrigger({
250
+ slug: 'directCommandCreated',
251
+ description: 'Trigger for a configured bot command in a direct message.',
252
+ type: 'app',
253
+ event: 'message',
254
+ input: directCommandInput,
255
+ output: eventOutput,
256
+ async run(args) {
257
+ const value = await event(args);
258
+ if (!value || field(value, 'channel_type') !== 'im')
259
+ return [];
260
+ if (args.input.ignoreBots && field(value, 'bot_id'))
261
+ return [];
262
+ if (args.input.ignoreSelfMessages && field(value, 'user') === (await selfUser(args.client))) {
263
+ return [];
264
+ }
265
+ const parsed = command(field(value, 'text'), args.input.user, args.input.commands);
266
+ return parsed ? emit({ ...value, parsed_command: parsed }) : [];
267
+ },
268
+ });
269
+ export const userJoined = appTrigger({
270
+ slug: 'userJoined',
271
+ description: 'Trigger when a new user joins the workspace.',
272
+ type: 'app',
273
+ event: 'team_join',
274
+ input: emptyInput,
275
+ output: eventOutput,
276
+ async run(args) {
277
+ const value = await event(args);
278
+ if (!value || field(value, 'type') !== 'team_join')
279
+ return [];
280
+ const joined = eventMap(field(value, 'user'));
281
+ return emit(joined);
282
+ },
283
+ });
284
+ export const messageSaved = appTrigger({
285
+ slug: 'messageSaved',
286
+ description: 'Trigger when the connected user saves a message.',
287
+ type: 'app',
288
+ event: 'star_added',
289
+ input: emptyInput,
290
+ output: eventOutput,
291
+ async run(args) {
292
+ const value = await event(args);
293
+ if (!value || field(value, 'type') !== 'star_added')
294
+ return [];
295
+ const item = eventMap(field(value, 'item'));
296
+ return item && field(item, 'type') === 'message' ? emit(item) : [];
297
+ },
298
+ });
299
+ export const customEmojiAdded = appTrigger({
300
+ slug: 'customEmojiAdded',
301
+ description: 'Trigger when a custom emoji is added to the workspace.',
302
+ type: 'app',
303
+ event: 'emoji_changed',
304
+ input: emptyInput,
305
+ output: eventOutput,
306
+ async run(args) {
307
+ const value = await event(args);
308
+ if (!value || field(value, 'type') !== 'emoji_changed' || field(value, 'subtype') !== 'add') {
309
+ return [];
310
+ }
311
+ return emit({ id: field(value, 'name'), image: field(value, 'value') });
312
+ },
313
+ });
314
+ const modalInput = z.object({
315
+ interactionType: z.enum(['view_submission', 'view_closed']).default('view_submission'),
316
+ });
317
+ export const modalInteraction = appTrigger({
318
+ slug: 'modalInteraction',
319
+ description: 'Trigger when a Slack modal is submitted or closed.',
320
+ type: 'app',
321
+ event: 'modal_interaction',
322
+ input: modalInput,
323
+ output: eventOutput,
324
+ async run(args) {
325
+ const value = await event(args);
326
+ if (!value || field(value, 'type') !== args.input.interactionType)
327
+ return [];
328
+ const safe = Object.fromEntries(Object.entries(value).filter(([key]) => key !== 'token'));
329
+ return emit(safe);
330
+ },
331
+ });
332
+ export const slackTriggers = [
333
+ messageCreated,
334
+ channelMessageCreated,
335
+ directMessageCreated,
336
+ channelMentionCreated,
337
+ directMentionCreated,
338
+ reactionAdded,
339
+ reactionRemoved,
340
+ channelCreated,
341
+ channelCommandCreated,
342
+ directCommandCreated,
343
+ userJoined,
344
+ messageSaved,
345
+ customEmojiAdded,
346
+ modalInteraction,
347
+ ];
348
+ //# sourceMappingURL=triggers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.js","sourceRoot":"","sources":["../src/triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAoB,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI1D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG;IACrB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACvC,CAAC;AACF,MAAM,WAAW,GAAG;IAClB,GAAG,cAAc;IACjB,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC/C,CAAC;AACF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;AAChE,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B,SAAS,UAAU,CACjB,OAA6F;IAE7F,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,IAAmB;IACtC,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpD,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACpF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,IAAI,CAAC,KAA0C;IACtD,OAAO,KAAK;QACV,CAAC,CAAC;YACE;gBACE,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3E,IAAI,EAAE,KAAK;aACZ;SACF;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,KAAK,CAAC,KAA8B,EAAE,GAAW;IACxD,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAmB;IACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEnD,OAAO,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,SAAS,OAAO,CAAC,IAAa,EAAE,MAAc,EAAE,QAAkB;IAChE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,MAAM,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAElE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpC,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,yDAAyD;IACtE,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAA4C;QACpD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9F,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,gDAAgD;IAC7D,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,mBAAmB;IAC1B,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAgD;QACxD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9F,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,mCAAmC;IAChD,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAA+C;QACvD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAClE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC7E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IACxE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,wEAAwE;IACrF,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAyC;QACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9F,IACE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;YAC1B,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAC9D,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAElD,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAEzE,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;CACzE,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,IAAY,EAAE,SAAiB,EAAE,WAAmB;IAC3E,OAAO,UAAU,CAAC;QAChB,IAAI;QACJ,WAAW;QACX,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,WAAW;QACnB,KAAK,CAAC,GAAG,CAAC,IAA0C;YAClD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;YAC3E,IACE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;gBACxB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAC7D,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9D,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;gBACrF,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAC1C,eAAe,EACf,gBAAgB,EAChB,mCAAmC,CACpC,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAC5C,iBAAiB,EACjB,kBAAkB,EAClB,qCAAqC,CACtC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,0CAA0C;IACvD,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAkB;QAC1B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI;IACJ,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IACxE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,oDAAoD;IACjE,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAyC;QACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9F,IACE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;YAC1B,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAC9D,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,gEAAgE;IAC7E,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAA+C;QACvD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,YAAY;KACpC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACxB,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,2DAA2D;IACxE,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAA+C;QACvD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,8CAA8C;IAC3D,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAkB;QAC1B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,WAAW;YAAE,OAAO,EAAE,CAAC;QAE9D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAE9C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,kDAAkD;IAC/D,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAkB;QAC1B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY;YAAE,OAAO,EAAE,CAAC;QAE/D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAE5C,OAAO,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,wDAAwD;IACrE,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAkB;QAC1B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,eAAe,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;YAC5F,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,oDAAoD;IACjE,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,mBAAmB;IAC1B,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;IACnB,KAAK,CAAC,GAAG,CAAC,IAAuC;QAC/C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,eAAe;YAAE,OAAO,EAAE,CAAC;QAE7E,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC;QAE1F,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc;IACd,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,aAAa;IACb,eAAe;IACf,cAAc;IACd,qBAAqB;IACrB,oBAAoB;IACpB,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;CACjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { FrogbotRequest } from 'frogbot';
2
+ export declare function slackEvent(req: FrogbotRequest): Record<string, unknown> | undefined;
3
+ export declare function slackWorkspace(req: FrogbotRequest): string | undefined;
4
+ export declare function slackEventType(req: FrogbotRequest): string;
5
+ export declare function verifySlackWebhook({ req, options, }: {
6
+ req: FrogbotRequest;
7
+ options: {
8
+ signingSecret?: string;
9
+ };
10
+ }): Promise<boolean>;
11
+ export declare function slackHandshake(req: FrogbotRequest): Response | null;
12
+ export declare function parseSlackWebhook(req: FrogbotRequest): {
13
+ event: string;
14
+ };
15
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA6B9C,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,uCAU7C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,sBAiBjD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,UAYjD;AAED,wBAAsB,kBAAkB,CAAC,EACvC,GAAG,EACH,OAAO,GACR,EAAE;IACD,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC,oBAyCA;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,mBAQjD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAExE"}
@@ -0,0 +1,99 @@
1
+ import { createHmac, timingSafeEqual } from 'node:crypto';
2
+ const replayWindowSeconds = 300;
3
+ function eventMap(value) {
4
+ return value && typeof value === 'object' && !Array.isArray(value)
5
+ ? Object.fromEntries(Object.entries(value))
6
+ : undefined;
7
+ }
8
+ function interactivePayload(data) {
9
+ if (!data ||
10
+ typeof data !== 'object' ||
11
+ !('payload' in data) ||
12
+ typeof data.payload !== 'string') {
13
+ return undefined;
14
+ }
15
+ try {
16
+ const value = JSON.parse(data.payload);
17
+ return eventMap(value);
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ export function slackEvent(req) {
24
+ const interaction = interactivePayload(req.data);
25
+ if (interaction)
26
+ return interaction;
27
+ const data = eventMap(req.data);
28
+ if (!data)
29
+ return undefined;
30
+ return eventMap(data.event);
31
+ }
32
+ export function slackWorkspace(req) {
33
+ const interaction = interactivePayload(req.data);
34
+ if (interaction &&
35
+ 'team' in interaction &&
36
+ interaction.team &&
37
+ typeof interaction.team === 'object') {
38
+ return 'id' in interaction.team && typeof interaction.team.id === 'string'
39
+ ? interaction.team.id
40
+ : undefined;
41
+ }
42
+ const data = eventMap(req.data);
43
+ return data && typeof data.team_id === 'string' ? data.team_id : undefined;
44
+ }
45
+ export function slackEventType(req) {
46
+ const interaction = interactivePayload(req.data);
47
+ if (interaction && 'type' in interaction && typeof interaction.type === 'string') {
48
+ return ['view_submission', 'view_closed'].includes(interaction.type)
49
+ ? 'modal_interaction'
50
+ : interaction.type;
51
+ }
52
+ const event = slackEvent(req);
53
+ return event && 'type' in event && typeof event.type === 'string' ? event.type : '';
54
+ }
55
+ export async function verifySlackWebhook({ req, options, }) {
56
+ if (!options.signingSecret)
57
+ return false;
58
+ const timestampHeader = req.headers.get('x-slack-request-timestamp');
59
+ const signature = req.headers.get('x-slack-signature');
60
+ if (!timestampHeader || !signature || !/^v0=[a-f0-9]{64}$/.test(signature))
61
+ return false;
62
+ const timestamp = Number(timestampHeader);
63
+ const now = Math.floor(Date.now() / 1000);
64
+ if (!Number.isSafeInteger(timestamp) || Math.abs(now - timestamp) > replayWindowSeconds) {
65
+ return false;
66
+ }
67
+ const parse = req.clone;
68
+ if (typeof parse !== 'function')
69
+ return false;
70
+ let rawBody;
71
+ try {
72
+ rawBody = await parse.call(req).text();
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ const expected = `v0=${createHmac('sha256', options.signingSecret)
78
+ .update(`v0:${timestampHeader}:${rawBody}`)
79
+ .digest('hex')}`;
80
+ const suppliedBytes = Buffer.from(signature);
81
+ const expectedBytes = Buffer.from(expected);
82
+ if (suppliedBytes.length !== expectedBytes.length ||
83
+ !timingSafeEqual(suppliedBytes, expectedBytes)) {
84
+ return false;
85
+ }
86
+ return true;
87
+ }
88
+ export function slackHandshake(req) {
89
+ const data = eventMap(req.data);
90
+ if (!data)
91
+ return null;
92
+ return typeof data.challenge === 'string'
93
+ ? new Response(data.challenge, { headers: { 'content-type': 'text/plain' } })
94
+ : null;
95
+ }
96
+ export function parseSlackWebhook(req) {
97
+ return { event: slackEventType(req) };
98
+ }
99
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,9 @@
1
1
  {
2
2
  "name": "@frogbotai/piece-slack",
3
- "version": "0.21.0",
4
- "description": "Slack tools for FrogBot.",
3
+ "version": "0.23.0",
4
+ "description": "slack tools for FrogBot.",
5
5
  "license": "MIT",
6
6
  "author": "Colby Gilbert",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/frogbotai/frogbot.git",
10
- "directory": "packages/pieces/piece-slack"
11
- },
12
7
  "type": "module",
13
8
  "main": "./dist/index.js",
14
9
  "types": "./dist/index.d.ts",
@@ -20,18 +15,20 @@
20
15
  }
21
16
  },
22
17
  "files": [
23
- "dist"
18
+ "dist",
19
+ "slack-manifest.yaml"
24
20
  ],
25
21
  "sideEffects": false,
26
22
  "dependencies": {
27
- "@activepieces/piece-slack": "0.17.3"
23
+ "@chat-adapter/slack": "^4.40.0",
24
+ "zod": "^4.3.6"
28
25
  },
29
26
  "peerDependencies": {
30
- "frogbot": "0.21.0"
27
+ "frogbot": "0.23.0"
31
28
  },
32
29
  "devDependencies": {
33
30
  "typescript": "5.6.2",
34
- "frogbot": "0.21.0"
31
+ "frogbot": "0.23.0"
35
32
  },
36
33
  "publishConfig": {
37
34
  "access": "public"
@@ -0,0 +1,32 @@
1
+ display_information:
2
+ name: FrogBot
3
+ features:
4
+ bot_user:
5
+ display_name: FrogBot
6
+ always_online: true
7
+ oauth_config:
8
+ scopes:
9
+ bot:
10
+ - app_mentions:read
11
+ - channels:history
12
+ - chat:write
13
+ - groups:history
14
+ - im:history
15
+ - mpim:history
16
+ - users:read
17
+ - users:read.email
18
+ settings:
19
+ event_subscriptions:
20
+ request_url: '{{FROGBOT_URL}}/api/webhooks/{{SLACK_INSTANCE_SLUG}}'
21
+ bot_events:
22
+ - app_mention
23
+ - message.channels
24
+ - message.groups
25
+ - message.im
26
+ - message.mpim
27
+ interactivity:
28
+ is_enabled: true
29
+ request_url: '{{FROGBOT_URL}}/api/webhooks/{{SLACK_INSTANCE_SLUG}}'
30
+ org_deploy_enabled: false
31
+ socket_mode_enabled: false
32
+ token_rotation_enabled: false