@slack/bolt 3.4.1 → 3.7.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 (92) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +7 -2
  3. package/dist/App.d.ts +4 -1
  4. package/dist/App.d.ts.map +1 -1
  5. package/dist/App.js +122 -85
  6. package/dist/App.js.map +1 -1
  7. package/dist/WorkflowStep.d.ts.map +1 -1
  8. package/dist/WorkflowStep.js +27 -28
  9. package/dist/WorkflowStep.js.map +1 -1
  10. package/dist/conversation-store.d.ts.map +1 -1
  11. package/dist/conversation-store.js +5 -3
  12. package/dist/conversation-store.js.map +1 -1
  13. package/dist/errors.d.ts +9 -5
  14. package/dist/errors.d.ts.map +1 -1
  15. package/dist/errors.js +17 -9
  16. package/dist/errors.js.map +1 -1
  17. package/dist/helpers.d.ts.map +1 -1
  18. package/dist/helpers.js +1 -0
  19. package/dist/helpers.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +6 -3
  23. package/dist/index.js.map +1 -1
  24. package/dist/middleware/builtin.d.ts.map +1 -1
  25. package/dist/middleware/builtin.js +13 -6
  26. package/dist/middleware/builtin.js.map +1 -1
  27. package/dist/middleware/process.d.ts +1 -1
  28. package/dist/middleware/process.d.ts.map +1 -1
  29. package/dist/middleware/process.js +1 -2
  30. package/dist/middleware/process.js.map +1 -1
  31. package/dist/receivers/AwsLambdaReceiver.d.ts.map +1 -1
  32. package/dist/receivers/AwsLambdaReceiver.js +10 -19
  33. package/dist/receivers/AwsLambdaReceiver.js.map +1 -1
  34. package/dist/receivers/ExpressReceiver.d.ts +17 -7
  35. package/dist/receivers/ExpressReceiver.d.ts.map +1 -1
  36. package/dist/receivers/ExpressReceiver.js +162 -87
  37. package/dist/receivers/ExpressReceiver.js.map +1 -1
  38. package/dist/receivers/HTTPReceiver.d.ts +13 -1
  39. package/dist/receivers/HTTPReceiver.d.ts.map +1 -1
  40. package/dist/receivers/HTTPReceiver.js +147 -74
  41. package/dist/receivers/HTTPReceiver.js.map +1 -1
  42. package/dist/receivers/SocketModeReceiver.d.ts +14 -1
  43. package/dist/receivers/SocketModeReceiver.d.ts.map +1 -1
  44. package/dist/receivers/SocketModeReceiver.js +90 -38
  45. package/dist/receivers/SocketModeReceiver.js.map +1 -1
  46. package/dist/receivers/custom-routes.d.ts +14 -0
  47. package/dist/receivers/custom-routes.d.ts.map +1 -0
  48. package/dist/receivers/custom-routes.js +33 -0
  49. package/dist/receivers/custom-routes.js.map +1 -0
  50. package/dist/receivers/render-html-for-install-path.d.ts +1 -0
  51. package/dist/receivers/render-html-for-install-path.d.ts.map +1 -1
  52. package/dist/receivers/render-html-for-install-path.js +6 -1
  53. package/dist/receivers/render-html-for-install-path.js.map +1 -1
  54. package/dist/receivers/verify-redirect-opts.d.ts +7 -0
  55. package/dist/receivers/verify-redirect-opts.d.ts.map +1 -0
  56. package/dist/receivers/verify-redirect-opts.js +23 -0
  57. package/dist/receivers/verify-redirect-opts.js.map +1 -0
  58. package/dist/receivers/verify-request.d.ts +1 -0
  59. package/dist/receivers/verify-request.d.ts.map +1 -1
  60. package/dist/receivers/verify-request.js +8 -4
  61. package/dist/receivers/verify-request.js.map +1 -1
  62. package/dist/types/actions/block-action.d.ts.map +1 -1
  63. package/dist/types/actions/index.d.ts +4 -4
  64. package/dist/types/actions/index.d.ts.map +1 -1
  65. package/dist/types/actions/index.js.map +1 -1
  66. package/dist/types/actions/workflow-step-edit.d.ts.map +1 -1
  67. package/dist/types/events/base-events.d.ts +82 -5
  68. package/dist/types/events/base-events.d.ts.map +1 -1
  69. package/dist/types/events/base-events.js.map +1 -1
  70. package/dist/types/events/index.d.ts +4 -4
  71. package/dist/types/events/index.d.ts.map +1 -1
  72. package/dist/types/events/index.js.map +1 -1
  73. package/dist/types/events/message-events.d.ts.map +1 -1
  74. package/dist/types/helpers.d.ts +2 -2
  75. package/dist/types/helpers.d.ts.map +1 -1
  76. package/dist/types/options/index.d.ts +2 -2
  77. package/dist/types/options/index.d.ts.map +1 -1
  78. package/dist/types/receiver.d.ts.map +1 -1
  79. package/dist/types/shortcuts/index.d.ts +2 -2
  80. package/dist/types/shortcuts/index.d.ts.map +1 -1
  81. package/dist/types/shortcuts/index.js.map +1 -1
  82. package/dist/types/shortcuts/message-shortcut.d.ts.map +1 -1
  83. package/dist/types/utilities.d.ts.map +1 -1
  84. package/package.json +15 -17
  85. package/dist/ExpressReceiver.d.ts +0 -59
  86. package/dist/ExpressReceiver.d.ts.map +0 -1
  87. package/dist/ExpressReceiver.js +0 -293
  88. package/dist/ExpressReceiver.js.map +0 -1
  89. package/dist/SocketModeReceiver.d.ts +0 -43
  90. package/dist/SocketModeReceiver.d.ts.map +0 -1
  91. package/dist/SocketModeReceiver.js +0 -129
  92. package/dist/SocketModeReceiver.js.map +0 -1
@@ -1,293 +0,0 @@
1
- "use strict";
2
- /* eslint-disable @typescript-eslint/explicit-member-accessibility, @typescript-eslint/strict-boolean-expressions */
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
6
- }) : (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- o[k2] = m[k];
9
- }));
10
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
11
- Object.defineProperty(o, "default", { enumerable: true, value: v });
12
- }) : function(o, v) {
13
- o["default"] = v;
14
- });
15
- var __importStar = (this && this.__importStar) || function (mod) {
16
- if (mod && mod.__esModule) return mod;
17
- var result = {};
18
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
19
- __setModuleDefault(result, mod);
20
- return result;
21
- };
22
- var __importDefault = (this && this.__importDefault) || function (mod) {
23
- return (mod && mod.__esModule) ? mod : { "default": mod };
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.verifySignatureAndParseRawBody = exports.respondToUrlVerification = exports.respondToSslCheck = void 0;
27
- const http_1 = require("http");
28
- const express_1 = __importStar(require("express"));
29
- const raw_body_1 = __importDefault(require("raw-body"));
30
- const querystring_1 = __importDefault(require("querystring"));
31
- const crypto_1 = __importDefault(require("crypto"));
32
- const tsscmp_1 = __importDefault(require("tsscmp"));
33
- const logger_1 = require("@slack/logger");
34
- const oauth_1 = require("@slack/oauth");
35
- const errors_1 = require("./errors");
36
- /**
37
- * Receives HTTP requests with Events, Slash Commands, and Actions
38
- */
39
- class ExpressReceiver {
40
- constructor({ signingSecret = '', logger = new logger_1.ConsoleLogger(), endpoints = { events: '/slack/events' }, processBeforeResponse = false, clientId = undefined, clientSecret = undefined, stateSecret = undefined, installationStore = undefined, scopes = undefined, installerOptions = {}, }) {
41
- this.installer = undefined;
42
- this.app = express_1.default();
43
- // TODO: what about starting an https server instead of http? what about other options to create the server?
44
- this.server = http_1.createServer(this.app);
45
- const expressMiddleware = [
46
- verifySignatureAndParseRawBody(logger, signingSecret),
47
- exports.respondToSslCheck,
48
- exports.respondToUrlVerification,
49
- this.requestHandler.bind(this),
50
- ];
51
- this.processBeforeResponse = processBeforeResponse;
52
- this.logger = logger;
53
- const endpointList = typeof endpoints === 'string' ? [endpoints] : Object.values(endpoints);
54
- this.router = express_1.Router();
55
- endpointList.forEach((endpoint) => {
56
- this.router.post(endpoint, ...expressMiddleware);
57
- });
58
- if (clientId !== undefined &&
59
- clientSecret !== undefined &&
60
- (stateSecret !== undefined || installerOptions.stateStore !== undefined)) {
61
- this.installer = new oauth_1.InstallProvider({
62
- clientId,
63
- clientSecret,
64
- stateSecret,
65
- installationStore,
66
- stateStore: installerOptions.stateStore,
67
- authVersion: installerOptions.authVersion,
68
- clientOptions: installerOptions.clientOptions,
69
- authorizationUrl: installerOptions.authorizationUrl,
70
- });
71
- }
72
- // Add OAuth routes to receiver
73
- if (this.installer !== undefined) {
74
- const redirectUriPath = installerOptions.redirectUriPath === undefined ? '/slack/oauth_redirect' : installerOptions.redirectUriPath;
75
- this.router.use(redirectUriPath, async (req, res) => {
76
- await this.installer.handleCallback(req, res, installerOptions.callbackOptions);
77
- });
78
- const installPath = installerOptions.installPath === undefined ? '/slack/install' : installerOptions.installPath;
79
- this.router.get(installPath, async (_req, res, next) => {
80
- try {
81
- const url = await this.installer.generateInstallUrl({
82
- metadata: installerOptions.metadata,
83
- scopes: scopes,
84
- userScopes: installerOptions.userScopes,
85
- });
86
- res.send(`<a href=${url}><img alt=""Add to Slack"" height="40" width="139"
87
- src="https://platform.slack-edge.com/img/add_to_slack.png"
88
- srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x,
89
- https://platform.slack-edge.com/img/add_to_slack@2x.png 2x" /></a>`);
90
- }
91
- catch (error) {
92
- next(error);
93
- }
94
- });
95
- }
96
- this.app.use(this.router);
97
- }
98
- async requestHandler(req, res) {
99
- var _a;
100
- let isAcknowledged = false;
101
- setTimeout(() => {
102
- if (!isAcknowledged) {
103
- this.logger.error('An incoming event was not acknowledged within 3 seconds. ' +
104
- 'Ensure that the ack() argument is called in a listener.');
105
- }
106
- // tslint:disable-next-line: align
107
- }, 3001);
108
- let storedResponse;
109
- const event = {
110
- body: req.body,
111
- ack: async (response) => {
112
- this.logger.debug('ack() begin');
113
- if (isAcknowledged) {
114
- throw new errors_1.ReceiverMultipleAckError();
115
- }
116
- isAcknowledged = true;
117
- if (this.processBeforeResponse) {
118
- if (!response) {
119
- storedResponse = '';
120
- }
121
- else {
122
- storedResponse = response;
123
- }
124
- this.logger.debug('ack() response stored');
125
- }
126
- else {
127
- if (!response) {
128
- res.send('');
129
- }
130
- else if (typeof response === 'string') {
131
- res.send(response);
132
- }
133
- else {
134
- res.json(response);
135
- }
136
- this.logger.debug('ack() response sent');
137
- }
138
- },
139
- };
140
- try {
141
- await ((_a = this.bolt) === null || _a === void 0 ? void 0 : _a.processEvent(event));
142
- if (storedResponse !== undefined) {
143
- if (typeof storedResponse === 'string') {
144
- res.send(storedResponse);
145
- }
146
- else {
147
- res.json(storedResponse);
148
- }
149
- this.logger.debug('stored response sent');
150
- }
151
- }
152
- catch (err) {
153
- res.status(500).send();
154
- throw err;
155
- }
156
- }
157
- init(bolt) {
158
- this.bolt = bolt;
159
- }
160
- // TODO: the arguments should be defined as the arguments of Server#listen()
161
- // TODO: the return value should be defined as a type that both http and https servers inherit from, or a union
162
- start(port) {
163
- return new Promise((resolve, reject) => {
164
- try {
165
- // TODO: what about other listener options?
166
- // TODO: what about asynchronous errors? should we attach a handler for this.server.on('error', ...)?
167
- // if so, how can we check for only errors related to listening, as opposed to later errors?
168
- this.server.listen(port, () => {
169
- resolve(this.server);
170
- });
171
- }
172
- catch (error) {
173
- reject(error);
174
- }
175
- });
176
- }
177
- // TODO: the arguments should be defined as the arguments to close() (which happen to be none), but for sake of
178
- // generic types
179
- stop() {
180
- return new Promise((resolve, reject) => {
181
- // TODO: what about synchronous errors?
182
- this.server.close((error) => {
183
- if (error !== undefined) {
184
- reject(error);
185
- return;
186
- }
187
- resolve();
188
- });
189
- });
190
- }
191
- }
192
- exports.default = ExpressReceiver;
193
- exports.respondToSslCheck = (req, res, next) => {
194
- if (req.body && req.body.ssl_check) {
195
- res.send();
196
- return;
197
- }
198
- next();
199
- };
200
- exports.respondToUrlVerification = (req, res, next) => {
201
- if (req.body && req.body.type && req.body.type === 'url_verification') {
202
- res.json({ challenge: req.body.challenge });
203
- return;
204
- }
205
- next();
206
- };
207
- /**
208
- * This request handler has two responsibilities:
209
- * - Verify the request signature
210
- * - Parse request.body and assign the successfully parsed object to it.
211
- */
212
- function verifySignatureAndParseRawBody(logger, signingSecret) {
213
- return async (req, res, next) => {
214
- let stringBody;
215
- // On some environments like GCP (Google Cloud Platform),
216
- // req.body can be pre-parsed and be passed as req.rawBody here
217
- const preparsedRawBody = req.rawBody;
218
- if (preparsedRawBody !== undefined) {
219
- stringBody = preparsedRawBody.toString();
220
- }
221
- else {
222
- stringBody = (await raw_body_1.default(req)).toString();
223
- }
224
- // *** Parsing body ***
225
- // As the verification passed, parse the body as an object and assign it to req.body
226
- // Following middlewares can expect `req.body` is already a parsed one.
227
- try {
228
- // This handler parses `req.body` or `req.rawBody`(on Google Could Platform)
229
- // and overwrites `req.body` with the parsed JS object.
230
- req.body = verifySignatureAndParseBody(signingSecret, stringBody, req.headers);
231
- }
232
- catch (error) {
233
- if (error) {
234
- if (error instanceof errors_1.ReceiverAuthenticityError) {
235
- logError(logger, 'Request verification failed', error);
236
- return res.status(401).send();
237
- }
238
- logError(logger, 'Parsing request body failed', error);
239
- return res.status(400).send();
240
- }
241
- }
242
- return next();
243
- };
244
- }
245
- exports.verifySignatureAndParseRawBody = verifySignatureAndParseRawBody;
246
- function logError(logger, message, error) {
247
- const logMessage = 'code' in error ? `${message} (code: ${error.code}, message: ${error.message})` : `${message} (error: ${error})`;
248
- logger.warn(logMessage);
249
- }
250
- function verifyRequestSignature(signingSecret, body, signature, requestTimestamp) {
251
- if (signature === undefined || requestTimestamp === undefined) {
252
- throw new errors_1.ReceiverAuthenticityError('Slack request signing verification failed. Some headers are missing.');
253
- }
254
- const ts = Number(requestTimestamp);
255
- // eslint-disable-next-line no-restricted-globals
256
- if (isNaN(ts)) {
257
- throw new errors_1.ReceiverAuthenticityError('Slack request signing verification failed. Timestamp is invalid.');
258
- }
259
- // Divide current date to match Slack ts format
260
- // Subtract 5 minutes from current time
261
- const fiveMinutesAgo = Math.floor(Date.now() / 1000) - 60 * 5;
262
- if (ts < fiveMinutesAgo) {
263
- throw new errors_1.ReceiverAuthenticityError('Slack request signing verification failed. Timestamp is too old.');
264
- }
265
- const hmac = crypto_1.default.createHmac('sha256', signingSecret);
266
- const [version, hash] = signature.split('=');
267
- hmac.update(`${version}:${ts}:${body}`);
268
- if (!tsscmp_1.default(hash, hmac.digest('hex'))) {
269
- throw new errors_1.ReceiverAuthenticityError('Slack request signing verification failed. Signature mismatch.');
270
- }
271
- }
272
- /**
273
- * This request handler has two responsibilities:
274
- * - Verify the request signature
275
- * - Parse request.body and assign the successfully parsed object to it.
276
- */
277
- function verifySignatureAndParseBody(signingSecret, body, headers) {
278
- // *** Request verification ***
279
- const { 'x-slack-signature': signature, 'x-slack-request-timestamp': requestTimestamp, 'content-type': contentType, } = headers;
280
- verifyRequestSignature(signingSecret, body, signature, requestTimestamp);
281
- return parseRequestBody(body, contentType);
282
- }
283
- function parseRequestBody(stringBody, contentType) {
284
- if (contentType === 'application/x-www-form-urlencoded') {
285
- const parsedBody = querystring_1.default.parse(stringBody);
286
- if (typeof parsedBody.payload === 'string') {
287
- return JSON.parse(parsedBody.payload);
288
- }
289
- return parsedBody;
290
- }
291
- return JSON.parse(stringBody);
292
- }
293
- //# sourceMappingURL=ExpressReceiver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExpressReceiver.js","sourceRoot":"","sources":["../src/ExpressReceiver.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import { SocketModeClient } from '@slack/socket-mode';
2
- import { Logger, LogLevel } from '@slack/logger';
3
- import { InstallProvider, CallbackOptions, InstallProviderOptions, InstallURLOptions } from '@slack/oauth';
4
- import App from './App';
5
- import { Receiver } from './types';
6
- export interface SocketModeReceiverOptions {
7
- logger?: Logger;
8
- logLevel?: LogLevel;
9
- clientId?: string;
10
- clientSecret?: string;
11
- stateSecret?: InstallProviderOptions['stateSecret'];
12
- installationStore?: InstallProviderOptions['installationStore'];
13
- scopes?: InstallURLOptions['scopes'];
14
- installerOptions?: InstallerOptions;
15
- appToken: string;
16
- }
17
- interface InstallerOptions {
18
- stateStore?: InstallProviderOptions['stateStore'];
19
- authVersion?: InstallProviderOptions['authVersion'];
20
- metadata?: InstallURLOptions['metadata'];
21
- installPath?: string;
22
- redirectUriPath?: string;
23
- callbackOptions?: CallbackOptions;
24
- userScopes?: InstallURLOptions['userScopes'];
25
- clientOptions?: InstallProviderOptions['clientOptions'];
26
- authorizationUrl?: InstallProviderOptions['authorizationUrl'];
27
- port?: number;
28
- }
29
- /**
30
- * Receives Events, Slash Commands, and Actions of a web socket connection
31
- */
32
- export default class SocketModeReceiver implements Receiver {
33
- client: SocketModeClient;
34
- private app;
35
- private logger;
36
- installer: InstallProvider | undefined;
37
- constructor({ appToken, logger, logLevel, clientId, clientSecret, stateSecret, installationStore, scopes, installerOptions, }: SocketModeReceiverOptions);
38
- init(app: App): void;
39
- start(): Promise<void>;
40
- stop(): Promise<void>;
41
- }
42
- export {};
43
- //# sourceMappingURL=SocketModeReceiver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SocketModeReceiver.d.ts","sourceRoot":"","sources":["../src/SocketModeReceiver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAiB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3G,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAiB,MAAM,SAAS,CAAC;AAIlD,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACpD,iBAAiB,CAAC,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACpD,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,UAAU,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACxD,gBAAgB,CAAC,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,YAAW,QAAQ;IAElD,MAAM,EAAE,gBAAgB,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAkB;IAE7B,OAAO,CAAC,MAAM,CAAS;IAEhB,SAAS,EAAE,eAAe,GAAG,SAAS,CAAa;gBAE9C,EACV,QAAQ,EACR,MAAkB,EAClB,QAAwB,EACxB,QAAoB,EACpB,YAAwB,EACxB,WAAuB,EACvB,iBAA6B,EAC7B,MAAkB,EAClB,gBAAqB,GACtB,EAAE,yBAAyB;IAgGrB,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAIpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
@@ -1,129 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /* eslint-disable @typescript-eslint/explicit-member-accessibility, @typescript-eslint/strict-boolean-expressions */
4
- const socket_mode_1 = require("@slack/socket-mode");
5
- const http_1 = require("http");
6
- const logger_1 = require("@slack/logger");
7
- const oauth_1 = require("@slack/oauth");
8
- /**
9
- * Receives Events, Slash Commands, and Actions of a web socket connection
10
- */
11
- class SocketModeReceiver {
12
- constructor({ appToken, logger = undefined, logLevel = logger_1.LogLevel.INFO, clientId = undefined, clientSecret = undefined, stateSecret = undefined, installationStore = undefined, scopes = undefined, installerOptions = {}, }) {
13
- this.installer = undefined;
14
- this.client = new socket_mode_1.SocketModeClient({
15
- appToken,
16
- logLevel,
17
- logger,
18
- clientOptions: installerOptions.clientOptions,
19
- });
20
- console.log('installerOptions', installerOptions);
21
- // const expressMiddleware: RequestHandler[] = [
22
- // verifySignatureAndParseRawBody(logger, signingSecret),
23
- // respondToSslCheck,
24
- // respondToUrlVerification,
25
- // this.requestHandler.bind(this),
26
- // ];
27
- if (typeof logger !== 'undefined') {
28
- this.logger = logger;
29
- }
30
- else {
31
- this.logger = new logger_1.ConsoleLogger();
32
- this.logger.setLevel(logLevel);
33
- }
34
- if (clientId !== undefined &&
35
- clientSecret !== undefined &&
36
- (stateSecret !== undefined || installerOptions.stateStore !== undefined)) {
37
- this.installer = new oauth_1.InstallProvider({
38
- clientId,
39
- clientSecret,
40
- stateSecret,
41
- installationStore,
42
- logLevel,
43
- logger,
44
- stateStore: installerOptions.stateStore,
45
- authVersion: installerOptions.authVersion,
46
- clientOptions: installerOptions.clientOptions,
47
- authorizationUrl: installerOptions.authorizationUrl,
48
- });
49
- }
50
- // Add OAuth routes to receiver
51
- if (this.installer !== undefined) {
52
- // use default or passed in redirect path
53
- const redirectUriPath = installerOptions.redirectUriPath === undefined ? '/slack/oauth_redirect' : installerOptions.redirectUriPath;
54
- // use default or passed in installPath
55
- const installPath = installerOptions.installPath === undefined ? '/slack/install' : installerOptions.installPath;
56
- const server = http_1.createServer(async (req, res) => {
57
- if (req.url !== undefined && req.url.startsWith(redirectUriPath)) {
58
- console.log(installerOptions.callbackOptions);
59
- // call installer.handleCallback to wrap up the install flow
60
- await this.installer.handleCallback(req, res, installerOptions.callbackOptions);
61
- }
62
- else if (req.url !== undefined && req.url.startsWith(installPath)) {
63
- try {
64
- const url = await this.installer.generateInstallUrl({
65
- metadata: installerOptions.metadata,
66
- scopes: scopes,
67
- userScopes: installerOptions.userScopes,
68
- });
69
- res.writeHead(200, {});
70
- res.end(`<html><body><a href=${url}><img alt=""Add to Slack"" height="40" width="139"
71
- src="https://platform.slack-edge.com/img/add_to_slack.png"
72
- srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x,
73
- https://platform.slack-edge.com/img/add_to_slack@2x.png 2x" /></a></body></html>`);
74
- }
75
- catch (err) {
76
- throw new Error(err);
77
- }
78
- }
79
- else {
80
- this.logger.error(`Tried to reach ${req.url} which isn't a`);
81
- // Return 404 because we don't support route
82
- res.writeHead(404, {});
83
- res.end(`route ${req.url} doesn't exist!`);
84
- }
85
- });
86
- const port = installerOptions.port === undefined ? 3000 : installerOptions.port;
87
- this.logger.debug(`listening on port ${port} for OAuth`);
88
- this.logger.debug(`Go to http://localhost:${port}${installPath} to initiate OAuth flow`);
89
- // use port 3000 by default
90
- server.listen(port);
91
- }
92
- this.client.on('slack_event', async ({ ack, body }) => {
93
- var _a;
94
- const event = {
95
- body,
96
- ack,
97
- };
98
- await ((_a = this.app) === null || _a === void 0 ? void 0 : _a.processEvent(event));
99
- });
100
- }
101
- init(app) {
102
- this.app = app;
103
- }
104
- start() {
105
- return new Promise((resolve, reject) => {
106
- try {
107
- // start socket mode client
108
- this.client.start();
109
- resolve();
110
- }
111
- catch (error) {
112
- reject(error);
113
- }
114
- });
115
- }
116
- stop() {
117
- return new Promise((resolve, reject) => {
118
- try {
119
- this.client.disconnect();
120
- resolve();
121
- }
122
- catch (error) {
123
- reject(error);
124
- }
125
- });
126
- }
127
- }
128
- exports.default = SocketModeReceiver;
129
- //# sourceMappingURL=SocketModeReceiver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SocketModeReceiver.js","sourceRoot":"","sources":["../src/SocketModeReceiver.ts"],"names":[],"mappings":"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"}