@slack/bolt 3.8.0 → 3.8.1

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 (146) hide show
  1. package/dist/App.d.ts +212 -0
  2. package/dist/App.d.ts.map +1 -0
  3. package/dist/App.js +796 -0
  4. package/dist/App.js.map +1 -0
  5. package/dist/WorkflowStep.d.ts +106 -0
  6. package/dist/WorkflowStep.d.ts.map +1 -0
  7. package/dist/WorkflowStep.js +196 -0
  8. package/dist/WorkflowStep.js.map +1 -0
  9. package/dist/conversation-store.d.ts +31 -0
  10. package/dist/conversation-store.d.ts.map +1 -0
  11. package/dist/conversation-store.js +72 -0
  12. package/dist/conversation-store.js.map +1 -0
  13. package/dist/errors.d.ts +79 -0
  14. package/dist/errors.d.ts.map +1 -0
  15. package/dist/errors.js +120 -0
  16. package/dist/errors.js.map +1 -0
  17. package/dist/helpers.d.ts +24 -0
  18. package/dist/helpers.d.ts.map +1 -0
  19. package/dist/helpers.js +100 -0
  20. package/dist/helpers.js.map +1 -0
  21. package/dist/index.d.ts +13 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +43 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/middleware/builtin.d.ts +52 -0
  26. package/dist/middleware/builtin.d.ts.map +1 -0
  27. package/dist/middleware/builtin.js +311 -0
  28. package/dist/middleware/builtin.js.map +1 -0
  29. package/dist/middleware/process.d.ts +5 -0
  30. package/dist/middleware/process.d.ts.map +1 -0
  31. package/dist/middleware/process.js +25 -0
  32. package/dist/middleware/process.js.map +1 -0
  33. package/dist/receivers/AwsLambdaReceiver.d.ts +53 -0
  34. package/dist/receivers/AwsLambdaReceiver.d.ts.map +1 -0
  35. package/dist/receivers/AwsLambdaReceiver.js +188 -0
  36. package/dist/receivers/AwsLambdaReceiver.js.map +1 -0
  37. package/dist/receivers/ExpressReceiver.d.ts +77 -0
  38. package/dist/receivers/ExpressReceiver.d.ts.map +1 -0
  39. package/dist/receivers/ExpressReceiver.js +445 -0
  40. package/dist/receivers/ExpressReceiver.js.map +1 -0
  41. package/dist/receivers/HTTPReceiver.d.ts +109 -0
  42. package/dist/receivers/HTTPReceiver.d.ts.map +1 -0
  43. package/dist/receivers/HTTPReceiver.js +501 -0
  44. package/dist/receivers/HTTPReceiver.js.map +1 -0
  45. package/dist/receivers/SocketModeReceiver.d.ts +61 -0
  46. package/dist/receivers/SocketModeReceiver.d.ts.map +1 -0
  47. package/dist/receivers/SocketModeReceiver.js +175 -0
  48. package/dist/receivers/SocketModeReceiver.js.map +1 -0
  49. package/dist/receivers/custom-routes.d.ts +14 -0
  50. package/dist/receivers/custom-routes.d.ts.map +1 -0
  51. package/dist/receivers/custom-routes.js +33 -0
  52. package/dist/receivers/custom-routes.js.map +1 -0
  53. package/dist/receivers/http-utils.d.ts +5 -0
  54. package/dist/receivers/http-utils.d.ts.map +1 -0
  55. package/dist/receivers/http-utils.js +35 -0
  56. package/dist/receivers/http-utils.js.map +1 -0
  57. package/dist/receivers/render-html-for-install-path.d.ts +3 -0
  58. package/dist/receivers/render-html-for-install-path.d.ts.map +1 -0
  59. package/dist/receivers/render-html-for-install-path.js +25 -0
  60. package/dist/receivers/render-html-for-install-path.js.map +1 -0
  61. package/dist/receivers/verify-redirect-opts.d.ts +7 -0
  62. package/dist/receivers/verify-redirect-opts.d.ts.map +1 -0
  63. package/dist/receivers/verify-redirect-opts.js +23 -0
  64. package/dist/receivers/verify-redirect-opts.js.map +1 -0
  65. package/dist/receivers/verify-request.d.ts +41 -0
  66. package/dist/receivers/verify-request.d.ts.map +1 -0
  67. package/dist/receivers/verify-request.js +98 -0
  68. package/dist/receivers/verify-request.js.map +1 -0
  69. package/dist/types/actions/block-action.d.ts +231 -0
  70. package/dist/types/actions/block-action.d.ts.map +1 -0
  71. package/dist/types/actions/block-action.js +3 -0
  72. package/dist/types/actions/block-action.js.map +1 -0
  73. package/dist/types/actions/dialog-action.d.ts +47 -0
  74. package/dist/types/actions/dialog-action.d.ts.map +1 -0
  75. package/dist/types/actions/dialog-action.js +3 -0
  76. package/dist/types/actions/dialog-action.js.map +1 -0
  77. package/dist/types/actions/index.d.ts +46 -0
  78. package/dist/types/actions/index.d.ts.map +1 -0
  79. package/dist/types/actions/index.js +17 -0
  80. package/dist/types/actions/index.js.map +1 -0
  81. package/dist/types/actions/interactive-message.d.ts +66 -0
  82. package/dist/types/actions/interactive-message.d.ts.map +1 -0
  83. package/dist/types/actions/interactive-message.js +3 -0
  84. package/dist/types/actions/interactive-message.js.map +1 -0
  85. package/dist/types/actions/workflow-step-edit.d.ts +49 -0
  86. package/dist/types/actions/workflow-step-edit.d.ts.map +1 -0
  87. package/dist/types/actions/workflow-step-edit.js +3 -0
  88. package/dist/types/actions/workflow-step-edit.js.map +1 -0
  89. package/dist/types/command/index.d.ts +36 -0
  90. package/dist/types/command/index.d.ts.map +1 -0
  91. package/dist/types/command/index.js +3 -0
  92. package/dist/types/command/index.js.map +1 -0
  93. package/dist/types/events/base-events.d.ts +699 -0
  94. package/dist/types/events/base-events.d.ts.map +1 -0
  95. package/dist/types/events/base-events.js +5 -0
  96. package/dist/types/events/base-events.js.map +1 -0
  97. package/dist/types/events/index.d.ts +63 -0
  98. package/dist/types/events/index.d.ts.map +1 -0
  99. package/dist/types/events/index.js +14 -0
  100. package/dist/types/events/index.js.map +1 -0
  101. package/dist/types/events/message-events.d.ts +312 -0
  102. package/dist/types/events/message-events.d.ts.map +1 -0
  103. package/dist/types/events/message-events.js +3 -0
  104. package/dist/types/events/message-events.js.map +1 -0
  105. package/dist/types/helpers.d.ts +17 -0
  106. package/dist/types/helpers.d.ts.map +1 -0
  107. package/dist/types/helpers.js +3 -0
  108. package/dist/types/helpers.js.map +1 -0
  109. package/dist/types/index.d.ts +10 -0
  110. package/dist/types/index.d.ts.map +1 -0
  111. package/dist/types/index.js +22 -0
  112. package/dist/types/index.js.map +1 -0
  113. package/dist/types/middleware.d.ts +65 -0
  114. package/dist/types/middleware.d.ts.map +1 -0
  115. package/dist/types/middleware.js +14 -0
  116. package/dist/types/middleware.js.map +1 -0
  117. package/dist/types/options/index.d.ts +192 -0
  118. package/dist/types/options/index.d.ts.map +1 -0
  119. package/dist/types/options/index.js +3 -0
  120. package/dist/types/options/index.js.map +1 -0
  121. package/dist/types/receiver.d.ts +16 -0
  122. package/dist/types/receiver.d.ts.map +1 -0
  123. package/dist/types/receiver.js +3 -0
  124. package/dist/types/receiver.js.map +1 -0
  125. package/dist/types/shortcuts/global-shortcut.d.ts +29 -0
  126. package/dist/types/shortcuts/global-shortcut.d.ts.map +1 -0
  127. package/dist/types/shortcuts/global-shortcut.js +3 -0
  128. package/dist/types/shortcuts/global-shortcut.js.map +1 -0
  129. package/dist/types/shortcuts/index.d.ts +23 -0
  130. package/dist/types/shortcuts/index.d.ts.map +1 -0
  131. package/dist/types/shortcuts/index.js +16 -0
  132. package/dist/types/shortcuts/index.js.map +1 -0
  133. package/dist/types/shortcuts/message-shortcut.d.ts +43 -0
  134. package/dist/types/shortcuts/message-shortcut.d.ts.map +1 -0
  135. package/dist/types/shortcuts/message-shortcut.js +3 -0
  136. package/dist/types/shortcuts/message-shortcut.js.map +1 -0
  137. package/dist/types/utilities.d.ts +23 -0
  138. package/dist/types/utilities.d.ts.map +1 -0
  139. package/dist/types/utilities.js +3 -0
  140. package/dist/types/utilities.js.map +1 -0
  141. package/dist/types/view/index.d.ts +175 -0
  142. package/dist/types/view/index.d.ts.map +1 -0
  143. package/dist/types/view/index.js +3 -0
  144. package/dist/types/view/index.js.map +1 -0
  145. package/package.json +1 -1
  146. package/dist/package.json +0 -88
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTTPReceiver.d.ts","sourceRoot":"","sources":["../../src/receivers/HTTPReceiver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,501 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.defaultUnhandledRequestHandler = exports.defaultProcessEventErrorHandler = exports.defaultDispatchErrorHandler = void 0;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ const http_1 = require("http");
9
+ const https_1 = require("https");
10
+ const querystring_1 = require("querystring");
11
+ const logger_1 = require("@slack/logger");
12
+ const oauth_1 = require("@slack/oauth");
13
+ const url_1 = require("url");
14
+ const verify_request_1 = require("./verify-request");
15
+ const verify_redirect_opts_1 = require("./verify-redirect-opts");
16
+ const render_html_for_install_path_1 = __importDefault(require("./render-html-for-install-path"));
17
+ const errors_1 = require("../errors");
18
+ const custom_routes_1 = require("./custom-routes");
19
+ const http_utils_1 = require("./http-utils");
20
+ // Option keys for tls.createServer() and tls.createSecureContext(), exclusive of those for http.createServer()
21
+ const httpsOptionKeys = [
22
+ 'ALPNProtocols',
23
+ 'clientCertEngine',
24
+ 'enableTrace',
25
+ 'handshakeTimeout',
26
+ 'rejectUnauthorized',
27
+ 'requestCert',
28
+ 'sessionTimeout',
29
+ 'SNICallback',
30
+ 'ticketKeys',
31
+ 'pskCallback',
32
+ 'pskIdentityHint',
33
+ 'ca',
34
+ 'cert',
35
+ 'sigalgs',
36
+ 'ciphers',
37
+ 'clientCertEngine',
38
+ 'crl',
39
+ 'dhparam',
40
+ 'ecdhCurve',
41
+ 'honorCipherOrder',
42
+ 'key',
43
+ 'privateKeyEngine',
44
+ 'privateKeyIdentifier',
45
+ 'maxVersion',
46
+ 'minVersion',
47
+ 'passphrase',
48
+ 'pfx',
49
+ 'secureOptions',
50
+ 'secureProtocol',
51
+ 'sessionIdContext',
52
+ ];
53
+ const missingServerErrorDescription = 'The receiver cannot be started because private state was mutated. Please report this to the maintainers.';
54
+ // The default dispathErrorHandler implementation:
55
+ // Developers can customize this behavior by passing dispatchErrorHandler to the constructor
56
+ // Note that it was not possible to make this function async due to the limitation of http module
57
+ function defaultDispatchErrorHandler(args) {
58
+ const { error, logger, request, response } = args;
59
+ if ('code' in error) {
60
+ if (error.code === errors_1.ErrorCode.HTTPReceiverDeferredRequestError) {
61
+ logger.info(`Unhandled HTTP request (${request.method}) made to ${request.url}`);
62
+ response.writeHead(404);
63
+ response.end();
64
+ return;
65
+ }
66
+ }
67
+ logger.error(`An unexpected error occurred during a request (${request.method}) made to ${request.url}`);
68
+ logger.debug(`Error details: ${error}`);
69
+ response.writeHead(500);
70
+ response.end();
71
+ }
72
+ exports.defaultDispatchErrorHandler = defaultDispatchErrorHandler;
73
+ // The default processEventErrorHandler implementation:
74
+ // Developers can customize this behavior by passing processEventErrorHandler to the constructor
75
+ async function defaultProcessEventErrorHandler(args) {
76
+ const { error, response, logger, storedResponse } = args;
77
+ if ('code' in error) {
78
+ // CodedError has code: string
79
+ const errorCode = error.code;
80
+ if (errorCode === errors_1.ErrorCode.AuthorizationError) {
81
+ // authorize function threw an exception, which means there is no valid installation data
82
+ response.writeHead(401);
83
+ response.end();
84
+ return true;
85
+ }
86
+ }
87
+ logger.error('An unhandled error occurred while Bolt processed an event');
88
+ logger.debug(`Error details: ${error}, storedResponse: ${storedResponse}`);
89
+ response.writeHead(500);
90
+ response.end();
91
+ return false;
92
+ }
93
+ exports.defaultProcessEventErrorHandler = defaultProcessEventErrorHandler;
94
+ // The default unhandledRequestHandler implementation:
95
+ // Developers can customize this behavior by passing unhandledRequestHandler to the constructor
96
+ // Note that this method cannot be an async function to align with the implementation using setTimeout
97
+ function defaultUnhandledRequestHandler(args) {
98
+ const { logger } = args;
99
+ logger.error('An incoming event was not acknowledged within 3 seconds. ' +
100
+ 'Ensure that the ack() argument is called in a listener.');
101
+ }
102
+ exports.defaultUnhandledRequestHandler = defaultUnhandledRequestHandler;
103
+ /**
104
+ * Receives HTTP requests with Events, Slash Commands, and Actions
105
+ */
106
+ class HTTPReceiver {
107
+ constructor({ signingSecret = '', endpoints = ['/slack/events'], port = 3000, customRoutes = [], logger = undefined, logLevel = logger_1.LogLevel.INFO, processBeforeResponse = false, signatureVerification = true, clientId = undefined, clientSecret = undefined, stateSecret = undefined, redirectUri = undefined, installationStore = undefined, scopes = undefined, installerOptions = {}, customPropertiesExtractor = (_req) => ({}), dispatchErrorHandler = defaultDispatchErrorHandler, processEventErrorHandler = defaultProcessEventErrorHandler, unhandledRequestHandler = defaultUnhandledRequestHandler, unhandledRequestTimeoutMillis = 3001, }) {
108
+ var _a, _b, _c;
109
+ // Initialize instance variables, substituting defaults for each value
110
+ this.signingSecret = signingSecret;
111
+ this.processBeforeResponse = processBeforeResponse;
112
+ this.signatureVerification = signatureVerification;
113
+ this.logger = logger !== null && logger !== void 0 ? logger : (() => {
114
+ const defaultLogger = new logger_1.ConsoleLogger();
115
+ defaultLogger.setLevel(logLevel);
116
+ return defaultLogger;
117
+ })();
118
+ this.endpoints = Array.isArray(endpoints) ? endpoints : [endpoints];
119
+ this.port = (installerOptions === null || installerOptions === void 0 ? void 0 : installerOptions.port) ? installerOptions.port : port;
120
+ this.routes = (0, custom_routes_1.prepareRoutes)(customRoutes);
121
+ // Verify redirect options if supplied, throws coded error if invalid
122
+ (0, verify_redirect_opts_1.verifyRedirectOpts)({ redirectUri, redirectUriPath: installerOptions.redirectUriPath });
123
+ this.stateVerification = installerOptions.stateVerification;
124
+ // Initialize InstallProvider when it's required options are provided
125
+ if (clientId !== undefined &&
126
+ clientSecret !== undefined &&
127
+ (this.stateVerification === false || // state store not needed
128
+ stateSecret !== undefined ||
129
+ installerOptions.stateStore !== undefined) // user provided state store
130
+ ) {
131
+ this.installer = new oauth_1.InstallProvider({
132
+ clientId,
133
+ clientSecret,
134
+ stateSecret,
135
+ installationStore,
136
+ logger,
137
+ logLevel,
138
+ stateStore: installerOptions.stateStore,
139
+ stateVerification: installerOptions.stateVerification,
140
+ authVersion: installerOptions.authVersion,
141
+ clientOptions: installerOptions.clientOptions,
142
+ authorizationUrl: installerOptions.authorizationUrl,
143
+ });
144
+ // Store the remaining instance variables that are related to using the InstallProvider
145
+ this.installPath = (_a = installerOptions.installPath) !== null && _a !== void 0 ? _a : '/slack/install';
146
+ this.directInstall = installerOptions.directInstall !== undefined && installerOptions.directInstall;
147
+ this.installRedirectUriPath = (_b = installerOptions.redirectUriPath) !== null && _b !== void 0 ? _b : '/slack/oauth_redirect';
148
+ this.installCallbackOptions = (_c = installerOptions.callbackOptions) !== null && _c !== void 0 ? _c : {};
149
+ this.installUrlOptions = {
150
+ scopes: scopes !== null && scopes !== void 0 ? scopes : [],
151
+ userScopes: installerOptions.userScopes,
152
+ metadata: installerOptions.metadata,
153
+ redirectUri,
154
+ };
155
+ }
156
+ this.renderHtmlForInstallPath = installerOptions.renderHtmlForInstallPath !== undefined ?
157
+ installerOptions.renderHtmlForInstallPath :
158
+ render_html_for_install_path_1.default;
159
+ this.customPropertiesExtractor = customPropertiesExtractor;
160
+ this.dispatchErrorHandler = dispatchErrorHandler;
161
+ this.processEventErrorHandler = processEventErrorHandler;
162
+ this.unhandledRequestHandler = unhandledRequestHandler;
163
+ this.unhandledRequestTimeoutMillis = unhandledRequestTimeoutMillis;
164
+ // Assign the requestListener property by binding the unboundRequestListener to this instance
165
+ this.requestListener = this.unboundRequestListener.bind(this);
166
+ }
167
+ init(app) {
168
+ this.app = app;
169
+ }
170
+ start(portOrListenOptions, serverOptions = {}) {
171
+ let createServerFn = http_1.createServer;
172
+ // Decide which kind of server, HTTP or HTTPS, by searching for any keys in the serverOptions that are exclusive
173
+ // to HTTPS
174
+ if (Object.keys(serverOptions).filter((k) => httpsOptionKeys.includes(k)).length > 0) {
175
+ createServerFn = https_1.createServer;
176
+ }
177
+ if (this.server !== undefined) {
178
+ return Promise.reject(new errors_1.ReceiverInconsistentStateError('The receiver cannot be started because it was already started.'));
179
+ }
180
+ this.server = createServerFn(serverOptions, (req, res) => {
181
+ try {
182
+ this.requestListener(req, res);
183
+ }
184
+ catch (error) {
185
+ // You may get an error here only when the requestListener failed
186
+ // to start processing incoming requests, or your app receives a request to an unexpected path.
187
+ this.dispatchErrorHandler({
188
+ error: error,
189
+ logger: this.logger,
190
+ request: req,
191
+ response: res,
192
+ });
193
+ }
194
+ });
195
+ return new Promise((resolve, reject) => {
196
+ if (this.server === undefined) {
197
+ throw new errors_1.ReceiverInconsistentStateError(missingServerErrorDescription);
198
+ }
199
+ this.server.on('error', (error) => {
200
+ if (this.server === undefined) {
201
+ throw new errors_1.ReceiverInconsistentStateError(missingServerErrorDescription);
202
+ }
203
+ this.server.close();
204
+ // If the error event occurs before listening completes (like EADDRINUSE), this works well. However, if the
205
+ // error event happens some after the Promise is already resolved, the error would be silently swallowed up.
206
+ // The documentation doesn't describe any specific errors that can occur after listening has started, so this
207
+ // feels safe.
208
+ reject(error);
209
+ });
210
+ this.server.on('close', () => {
211
+ // Not removing all listeners because consumers could have added their own `close` event listener, and those
212
+ // should be called. If the consumer doesn't dispose of any references to the server properly, this would be
213
+ // a memory leak.
214
+ // this.server?.removeAllListeners();
215
+ this.server = undefined;
216
+ });
217
+ let listenOptions = this.port;
218
+ if (portOrListenOptions !== undefined) {
219
+ if (typeof portOrListenOptions === 'number') {
220
+ listenOptions = portOrListenOptions;
221
+ }
222
+ else if (typeof portOrListenOptions === 'object') {
223
+ listenOptions = portOrListenOptions;
224
+ }
225
+ }
226
+ this.server.listen(listenOptions, () => {
227
+ if (this.server === undefined) {
228
+ return reject(new errors_1.ReceiverInconsistentStateError(missingServerErrorDescription));
229
+ }
230
+ return resolve(this.server);
231
+ });
232
+ });
233
+ }
234
+ // TODO: the arguments should be defined as the arguments to close() (which happen to be none), but for sake of
235
+ // generic types
236
+ stop() {
237
+ if (this.server === undefined) {
238
+ return Promise.reject(new errors_1.ReceiverInconsistentStateError('The receiver cannot be stopped because it was not started.'));
239
+ }
240
+ return new Promise((resolve, reject) => {
241
+ var _a;
242
+ (_a = this.server) === null || _a === void 0 ? void 0 : _a.close((error) => {
243
+ if (error !== undefined) {
244
+ return reject(error);
245
+ }
246
+ this.server = undefined;
247
+ return resolve();
248
+ });
249
+ });
250
+ }
251
+ unboundRequestListener(req, res) {
252
+ // Route the request
253
+ // NOTE: the domain and scheme of the following URL object are not necessarily accurate. The URL object is only
254
+ // meant to be used to parse the path and query
255
+ const { pathname: path } = new url_1.URL(req.url, `http://${req.headers.host}`);
256
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
257
+ const method = req.method.toUpperCase();
258
+ if (this.endpoints.includes(path) && method === 'POST') {
259
+ // Handle incoming ReceiverEvent
260
+ return this.handleIncomingEvent(req, res);
261
+ }
262
+ if (this.installer !== undefined && method === 'GET') {
263
+ // When installer is defined then installPath and installRedirectUriPath are always defined
264
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
265
+ const [installPath, installRedirectUriPath] = [this.installPath, this.installRedirectUriPath];
266
+ // Visiting the installation endpoint
267
+ if (path === installPath) {
268
+ // Render installation path (containing Add to Slack button)
269
+ return this.handleInstallPathRequest(res);
270
+ }
271
+ // Installation has been initiated
272
+ if (path === installRedirectUriPath) {
273
+ // Handle OAuth callback request (to exchange authorization grant for a new access token)
274
+ return this.handleInstallRedirectRequest(req, res);
275
+ }
276
+ }
277
+ // Handle custom routes
278
+ if (Object.keys(this.routes).length) {
279
+ const match = this.routes[path] && this.routes[path][method] !== undefined;
280
+ if (match) {
281
+ return this.routes[path][method](req, res);
282
+ }
283
+ }
284
+ // If the request did not match the previous conditions, an error is thrown. The error can be caught by the
285
+ // the caller in order to defer to other routing logic (similar to calling `next()` in connect middleware).
286
+ // If you would like to customize the HTTP repsonse for this pattern,
287
+ // implement your own dispatchErrorHandler that handles an exception
288
+ // with ErrorCode.HTTPReceiverDeferredRequestError.
289
+ throw new errors_1.HTTPReceiverDeferredRequestError(`Unhandled HTTP request (${method}) made to ${path}`, req, res);
290
+ }
291
+ handleIncomingEvent(req, res) {
292
+ // Wrapped in an async closure for ease of using await
293
+ (async () => {
294
+ var _a;
295
+ let bufferedReq;
296
+ let body;
297
+ // Verify authenticity
298
+ try {
299
+ bufferedReq = await (0, verify_request_1.verify)({
300
+ // If enabled: false, this method returns bufferredReq without verification
301
+ enabled: this.signatureVerification,
302
+ signingSecret: this.signingSecret,
303
+ }, req);
304
+ }
305
+ catch (err) {
306
+ const e = err;
307
+ this.logger.warn(`Request verification failed: ${e.message}`);
308
+ res.writeHead(401);
309
+ res.end();
310
+ return;
311
+ }
312
+ // Parse request body
313
+ // The object containing the parsed body is not exposed to the caller. It is preferred to reduce mutations to the
314
+ // req object, so that its as reusable as possible. Later, we should consider adding an option for assigning the
315
+ // parsed body to `req.body`, as this convention has been established by the popular `body-parser` package.
316
+ try {
317
+ body = parseBody(bufferedReq);
318
+ }
319
+ catch (err) {
320
+ const e = err;
321
+ this.logger.warn(`Malformed request body: ${e.message}`);
322
+ res.writeHead(400);
323
+ res.end();
324
+ return;
325
+ }
326
+ // Handle SSL checks
327
+ if (body.ssl_check) {
328
+ res.writeHead(200);
329
+ res.end();
330
+ return;
331
+ }
332
+ // Handle URL verification
333
+ if (body.type === 'url_verification') {
334
+ res.writeHead(200, { 'content-type': 'application/json' });
335
+ res.end(JSON.stringify({ challenge: body.challenge }));
336
+ return;
337
+ }
338
+ // Setup ack timeout warning
339
+ let isAcknowledged = false;
340
+ setTimeout(() => {
341
+ if (!isAcknowledged) {
342
+ this.unhandledRequestHandler({
343
+ logger: this.logger,
344
+ request: req,
345
+ response: res,
346
+ });
347
+ }
348
+ }, this.unhandledRequestTimeoutMillis);
349
+ // Structure the ReceiverEvent
350
+ let storedResponse;
351
+ const event = {
352
+ body,
353
+ ack: async (response) => {
354
+ this.logger.debug('ack() begin');
355
+ if (isAcknowledged) {
356
+ throw new errors_1.ReceiverMultipleAckError();
357
+ }
358
+ isAcknowledged = true;
359
+ if (this.processBeforeResponse) {
360
+ // In the case where processBeforeResponse: true is enabled, we don't send the HTTP response immediately.
361
+ // We hold off until the listener execution is completed.
362
+ if (!response) {
363
+ storedResponse = '';
364
+ }
365
+ else {
366
+ storedResponse = response;
367
+ }
368
+ this.logger.debug('ack() response stored');
369
+ }
370
+ else {
371
+ if (!response) {
372
+ res.writeHead(200);
373
+ res.end();
374
+ }
375
+ else if (typeof response === 'string') {
376
+ res.writeHead(200);
377
+ res.end(response);
378
+ }
379
+ else {
380
+ res.writeHead(200, { 'content-type': 'application/json' });
381
+ res.end(JSON.stringify(response));
382
+ }
383
+ this.logger.debug('ack() response sent');
384
+ }
385
+ },
386
+ retryNum: (0, http_utils_1.extractRetryNum)(req),
387
+ retryReason: (0, http_utils_1.extractRetryReason)(req),
388
+ customProperties: this.customPropertiesExtractor(bufferedReq),
389
+ };
390
+ // Send the event to the app for processing
391
+ try {
392
+ await ((_a = this.app) === null || _a === void 0 ? void 0 : _a.processEvent(event));
393
+ if (storedResponse !== undefined) {
394
+ // in the case of processBeforeResponse: true
395
+ if (typeof storedResponse === 'string') {
396
+ res.writeHead(200);
397
+ res.end(storedResponse);
398
+ }
399
+ else {
400
+ res.writeHead(200, { 'content-type': 'application/json' });
401
+ res.end(JSON.stringify(storedResponse));
402
+ }
403
+ this.logger.debug('stored response sent');
404
+ }
405
+ }
406
+ catch (error) {
407
+ const acknowledgedByHandler = await this.processEventErrorHandler({
408
+ error: error,
409
+ logger: this.logger,
410
+ request: req,
411
+ response: res,
412
+ storedResponse,
413
+ });
414
+ if (acknowledgedByHandler) {
415
+ // If the value is false, we don't touch the value as a race condition
416
+ // with ack() call may occur especially when processBeforeResponse: false
417
+ isAcknowledged = true;
418
+ }
419
+ }
420
+ })();
421
+ }
422
+ handleInstallPathRequest(res) {
423
+ // Wrapped in an async closure for ease of using await
424
+ (async () => {
425
+ // NOTE: Skipping some ceremony such as content negotiation, setting informative headers, etc. These may be nice
426
+ // to have for completeness, but there's no clear benefit to adding them, so just keeping things simple. If a
427
+ // user desires a more custom page, they can always call `App.installer.generateInstallUrl()` and render their
428
+ // own page instead of using this one.
429
+ try {
430
+ // This function is only called from within unboundRequestListener after checking that installer is defined, and
431
+ // when installer is defined then installUrlOptions is always defined too.
432
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
433
+ const [installer, installUrlOptions] = [this.installer, this.installUrlOptions];
434
+ // Generate the URL for the "Add to Slack" button.
435
+ const url = await installer.generateInstallUrl(installUrlOptions, this.stateVerification);
436
+ if (this.directInstall !== undefined && this.directInstall) {
437
+ // If a Slack app sets "Direct Install URL" in the Slack app configruation,
438
+ // the installation flow of the app should start with the Slack authorize URL.
439
+ // See https://api.slack.com/start/distributing/directory#direct_install for more details.
440
+ res.writeHead(302, { Location: url });
441
+ res.end('');
442
+ }
443
+ else {
444
+ // The installation starts from a landing page served by this app.
445
+ // Generate HTML response body
446
+ const body = this.renderHtmlForInstallPath(url);
447
+ // Serve a basic HTML page including the "Add to Slack" button.
448
+ // Regarding headers:
449
+ // - Content-Type is usually automatically detected by browsers
450
+ // - Content-Length is not used because Transfer-Encoding='chunked' is automatically used.
451
+ res.writeHead(200);
452
+ res.end(body);
453
+ }
454
+ }
455
+ catch (err) {
456
+ const e = err;
457
+ this.logger.error('An unhandled error occurred while Bolt processed a request to the installation path');
458
+ this.logger.debug(`Error details: ${e}`);
459
+ }
460
+ })();
461
+ }
462
+ handleInstallRedirectRequest(req, res) {
463
+ // This function is only called from within unboundRequestListener after checking that installer is defined, and
464
+ // when installer is defined then installCallbackOptions is always defined too.
465
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
466
+ const [installer, installCallbackOptions, installUrlOptions] = [
467
+ this.installer,
468
+ this.installCallbackOptions,
469
+ this.installUrlOptions,
470
+ ];
471
+ /* eslint-enable @typescript-eslint/no-non-null-assertion */
472
+ const errorHandler = (err) => {
473
+ this.logger.error('HTTPReceiver encountered an unexpected error while handling the OAuth install redirect. Please report to the maintainers.');
474
+ this.logger.debug(`Error details: ${err}`);
475
+ };
476
+ if (this.stateVerification === false) {
477
+ // when stateVerification is disabled pass install options directly to handler
478
+ // since they won't be encoded in the state param of the generated url
479
+ installer.handleCallback(req, res, installCallbackOptions, installUrlOptions).catch(errorHandler);
480
+ }
481
+ else {
482
+ installer.handleCallback(req, res, installCallbackOptions).catch(errorHandler);
483
+ }
484
+ }
485
+ }
486
+ exports.default = HTTPReceiver;
487
+ // Helpers
488
+ function parseBody(req) {
489
+ const bodyAsString = req.rawBody.toString();
490
+ const contentType = req.headers['content-type'];
491
+ if (contentType === 'application/x-www-form-urlencoded') {
492
+ const parsedQs = (0, querystring_1.parse)(bodyAsString);
493
+ const { payload } = parsedQs;
494
+ if (typeof payload === 'string') {
495
+ return JSON.parse(payload);
496
+ }
497
+ return parsedQs;
498
+ }
499
+ return JSON.parse(bodyAsString);
500
+ }
501
+ //# sourceMappingURL=HTTPReceiver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTTPReceiver.js","sourceRoot":"","sources":["../../src/receivers/HTTPReceiver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /// <reference types="node" />
2
+ import { SocketModeClient } from '@slack/socket-mode';
3
+ import { IncomingMessage, ServerResponse } from 'http';
4
+ import { Logger, LogLevel } from '@slack/logger';
5
+ import { InstallProvider, CallbackOptions, InstallProviderOptions, InstallURLOptions } from '@slack/oauth';
6
+ import { AppsConnectionsOpenResponse } from '@slack/web-api';
7
+ import App from '../App';
8
+ import { Receiver } from '../types';
9
+ import { StringIndexed } from '../types/helpers';
10
+ export interface SocketModeReceiverOptions {
11
+ logger?: Logger;
12
+ logLevel?: LogLevel;
13
+ clientId?: string;
14
+ clientSecret?: string;
15
+ stateSecret?: InstallProviderOptions['stateSecret'];
16
+ redirectUri?: string;
17
+ installationStore?: InstallProviderOptions['installationStore'];
18
+ scopes?: InstallURLOptions['scopes'];
19
+ installerOptions?: InstallerOptions;
20
+ appToken: string;
21
+ customRoutes?: CustomRoute[];
22
+ customPropertiesExtractor?: (args: any) => StringIndexed;
23
+ }
24
+ export interface CustomRoute {
25
+ path: string;
26
+ method: string | string[];
27
+ handler: (req: IncomingMessage, res: ServerResponse) => void;
28
+ }
29
+ interface InstallerOptions {
30
+ stateStore?: InstallProviderOptions['stateStore'];
31
+ stateVerification?: InstallProviderOptions['stateVerification'];
32
+ authVersion?: InstallProviderOptions['authVersion'];
33
+ metadata?: InstallURLOptions['metadata'];
34
+ installPath?: string;
35
+ directInstall?: boolean;
36
+ renderHtmlForInstallPath?: (url: string) => string;
37
+ redirectUriPath?: string;
38
+ callbackOptions?: CallbackOptions;
39
+ userScopes?: InstallURLOptions['userScopes'];
40
+ clientOptions?: InstallProviderOptions['clientOptions'];
41
+ authorizationUrl?: InstallProviderOptions['authorizationUrl'];
42
+ port?: number;
43
+ }
44
+ /**
45
+ * Receives Events, Slash Commands, and Actions of a web socket connection
46
+ */
47
+ export default class SocketModeReceiver implements Receiver {
48
+ client: SocketModeClient;
49
+ private app;
50
+ private logger;
51
+ installer: InstallProvider | undefined;
52
+ private httpServer?;
53
+ private httpServerPort?;
54
+ private routes;
55
+ constructor({ appToken, logger, logLevel, clientId, clientSecret, stateSecret, redirectUri, installationStore, scopes, installerOptions, customRoutes, customPropertiesExtractor, }: SocketModeReceiverOptions);
56
+ init(app: App): void;
57
+ start(): Promise<AppsConnectionsOpenResponse>;
58
+ stop(): Promise<void>;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=SocketModeReceiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocketModeReceiver.d.ts","sourceRoot":"","sources":["../../src/receivers/SocketModeReceiver.ts"],"names":[],"mappings":"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"}