@slack/bolt 3.10.0 → 3.11.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 (55) hide show
  1. package/dist/errors.d.ts +1 -1
  2. package/dist/errors.d.ts.map +1 -1
  3. package/dist/index.d.ts +6 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +12 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/receivers/BufferedIncomingMessage.d.ts +6 -0
  8. package/dist/receivers/BufferedIncomingMessage.d.ts.map +1 -0
  9. package/dist/receivers/BufferedIncomingMessage.js +3 -0
  10. package/dist/receivers/BufferedIncomingMessage.js.map +1 -0
  11. package/dist/receivers/ExpressReceiver.d.ts +20 -6
  12. package/dist/receivers/ExpressReceiver.d.ts.map +1 -1
  13. package/dist/receivers/ExpressReceiver.js +68 -84
  14. package/dist/receivers/ExpressReceiver.js.map +1 -1
  15. package/dist/receivers/HTTPModuleFunctions.d.ts +47 -0
  16. package/dist/receivers/HTTPModuleFunctions.d.ts.map +1 -0
  17. package/dist/receivers/HTTPModuleFunctions.js +197 -0
  18. package/dist/receivers/HTTPModuleFunctions.js.map +1 -0
  19. package/dist/receivers/HTTPReceiver.d.ts +14 -32
  20. package/dist/receivers/HTTPReceiver.d.ts.map +1 -1
  21. package/dist/receivers/HTTPReceiver.js +44 -179
  22. package/dist/receivers/HTTPReceiver.js.map +1 -1
  23. package/dist/receivers/HTTPResponseAck.d.ts +29 -0
  24. package/dist/receivers/HTTPResponseAck.d.ts.map +1 -0
  25. package/dist/receivers/HTTPResponseAck.js +60 -0
  26. package/dist/receivers/HTTPResponseAck.js.map +1 -0
  27. package/dist/receivers/SocketModeFunctions.d.ts +12 -0
  28. package/dist/receivers/SocketModeFunctions.d.ts.map +1 -0
  29. package/dist/receivers/SocketModeFunctions.js +28 -0
  30. package/dist/receivers/SocketModeFunctions.js.map +1 -0
  31. package/dist/receivers/SocketModeReceiver.d.ts +10 -3
  32. package/dist/receivers/SocketModeReceiver.d.ts.map +1 -1
  33. package/dist/receivers/SocketModeReceiver.js +29 -37
  34. package/dist/receivers/SocketModeReceiver.js.map +1 -1
  35. package/dist/receivers/custom-routes.d.ts +1 -1
  36. package/dist/receivers/custom-routes.d.ts.map +1 -1
  37. package/dist/receivers/custom-routes.js +3 -3
  38. package/dist/receivers/custom-routes.js.map +1 -1
  39. package/dist/receivers/http-utils.d.ts.map +1 -1
  40. package/dist/receivers/http-utils.js +9 -25
  41. package/dist/receivers/http-utils.js.map +1 -1
  42. package/dist/receivers/render-html-for-install-path.d.ts.map +1 -1
  43. package/dist/receivers/render-html-for-install-path.js +7 -0
  44. package/dist/receivers/render-html-for-install-path.js.map +1 -1
  45. package/dist/receivers/verify-request.d.ts +25 -33
  46. package/dist/receivers/verify-request.d.ts.map +1 -1
  47. package/dist/receivers/verify-request.js +41 -61
  48. package/dist/receivers/verify-request.js.map +1 -1
  49. package/dist/types/events/base-events.d.ts +20 -2
  50. package/dist/types/events/base-events.d.ts.map +1 -1
  51. package/dist/types/events/base-events.js.map +1 -1
  52. package/dist/types/events/index.d.ts +1 -1
  53. package/dist/types/events/index.d.ts.map +1 -1
  54. package/package.json +8 -5
  55. package/CHANGELOG.md +0 -5
@@ -0,0 +1,197 @@
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.HTTPModuleFunctions = void 0;
7
+ /* eslint-disable import/prefer-default-export */
8
+ const querystring_1 = require("querystring");
9
+ const raw_body_1 = __importDefault(require("raw-body"));
10
+ const errors_1 = require("../errors");
11
+ const verify_request_1 = require("./verify-request");
12
+ const verifyErrorPrefix = 'Failed to verify authenticity';
13
+ class HTTPModuleFunctions {
14
+ // ------------------------------------------
15
+ // Request header extraction
16
+ // ------------------------------------------
17
+ static extractRetryNumFromHTTPRequest(req) {
18
+ let retryNum;
19
+ const retryNumHeaderValue = req.headers['x-slack-retry-num'];
20
+ if (retryNumHeaderValue === undefined) {
21
+ retryNum = undefined;
22
+ }
23
+ else if (typeof retryNumHeaderValue === 'string') {
24
+ retryNum = parseInt(retryNumHeaderValue, 10);
25
+ }
26
+ else if (Array.isArray(retryNumHeaderValue) && retryNumHeaderValue.length > 0) {
27
+ retryNum = parseInt(retryNumHeaderValue[0], 10);
28
+ }
29
+ return retryNum;
30
+ }
31
+ static extractRetryReasonFromHTTPRequest(req) {
32
+ let retryReason;
33
+ const retryReasonHeaderValue = req.headers['x-slack-retry-reason'];
34
+ if (retryReasonHeaderValue === undefined) {
35
+ retryReason = undefined;
36
+ }
37
+ else if (typeof retryReasonHeaderValue === 'string') {
38
+ retryReason = retryReasonHeaderValue;
39
+ }
40
+ else if (Array.isArray(retryReasonHeaderValue) && retryReasonHeaderValue.length > 0) {
41
+ // eslint-disable-next-line prefer-destructuring
42
+ retryReason = retryReasonHeaderValue[0];
43
+ }
44
+ return retryReason;
45
+ }
46
+ // ------------------------------------------
47
+ // HTTP request parsing and verification
48
+ // ------------------------------------------
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ static parseHTTPRequestBody(req) {
51
+ const bodyAsString = req.rawBody.toString();
52
+ const contentType = req.headers['content-type'];
53
+ if (contentType === 'application/x-www-form-urlencoded') {
54
+ const parsedQs = (0, querystring_1.parse)(bodyAsString);
55
+ const { payload } = parsedQs;
56
+ if (typeof payload === 'string') {
57
+ return JSON.parse(payload);
58
+ }
59
+ return parsedQs;
60
+ }
61
+ return JSON.parse(bodyAsString);
62
+ }
63
+ static async parseAndVerifyHTTPRequest(options, req, _res) {
64
+ const { signingSecret } = options;
65
+ // Consume the readable stream (or use the previously consumed readable stream)
66
+ const bufferedReq = await HTTPModuleFunctions.bufferIncomingMessage(req);
67
+ if (options.enabled !== undefined && !options.enabled) {
68
+ // As the validation is disabled, immediately return the bufferred reuest
69
+ return bufferedReq;
70
+ }
71
+ const textBody = bufferedReq.rawBody.toString();
72
+ const contentType = req.headers['content-type'];
73
+ if (contentType === 'application/x-www-form-urlencoded') {
74
+ // `ssl_check=1` requests do not require x-slack-signature verification
75
+ const parsedQs = (0, querystring_1.parse)(textBody);
76
+ if (parsedQs && parsedQs.ssl_check) {
77
+ return bufferedReq;
78
+ }
79
+ }
80
+ // Find the relevant request headers
81
+ const signature = HTTPModuleFunctions.getHeader(req, 'x-slack-signature');
82
+ const requestTimestampSec = Number(HTTPModuleFunctions.getHeader(req, 'x-slack-request-timestamp'));
83
+ (0, verify_request_1.verifySlackRequest)({
84
+ signingSecret,
85
+ body: textBody,
86
+ headers: {
87
+ 'x-slack-signature': signature,
88
+ 'x-slack-request-timestamp': requestTimestampSec,
89
+ },
90
+ logger: options.logger,
91
+ });
92
+ // Checks have passed! Return the value that has a side effect (the buffered request)
93
+ return bufferedReq;
94
+ }
95
+ static isBufferedIncomingMessage(req) {
96
+ return Buffer.isBuffer(req.rawBody);
97
+ }
98
+ static getHeader(req, header) {
99
+ const value = req.headers[header];
100
+ if (value === undefined || Array.isArray(value)) {
101
+ throw new Error(`${verifyErrorPrefix}: header ${header} did not have the expected type (received ${typeof value}, expected string)`);
102
+ }
103
+ return value;
104
+ }
105
+ static async bufferIncomingMessage(req) {
106
+ if (HTTPModuleFunctions.isBufferedIncomingMessage(req)) {
107
+ return req;
108
+ }
109
+ const bufferedRequest = req;
110
+ bufferedRequest.rawBody = await (0, raw_body_1.default)(req);
111
+ return bufferedRequest;
112
+ }
113
+ // ------------------------------------------
114
+ // HTTP response builder methods
115
+ // ------------------------------------------
116
+ static buildNoBodyResponse(res, status) {
117
+ res.writeHead(status);
118
+ }
119
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
+ static buildUrlVerificationResponse(res, body) {
121
+ res.writeHead(200, { 'content-type': 'application/json' });
122
+ res.end(JSON.stringify({ challenge: body.challenge }));
123
+ }
124
+ static buildSSLCheckResponse(res) {
125
+ res.writeHead(200);
126
+ res.end();
127
+ }
128
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
129
+ static buildContentResponse(res, body) {
130
+ if (!body) {
131
+ res.writeHead(200);
132
+ res.end();
133
+ }
134
+ else if (typeof body === 'string') {
135
+ res.writeHead(200);
136
+ res.end(body);
137
+ }
138
+ else {
139
+ res.writeHead(200, { 'content-type': 'application/json' });
140
+ res.end(JSON.stringify(body));
141
+ }
142
+ }
143
+ // ------------------------------------------
144
+ // Error handlers for event processing
145
+ // ------------------------------------------
146
+ // The default dispathErrorHandler implementation:
147
+ // Developers can customize this behavior by passing dispatchErrorHandler to the constructor
148
+ // Note that it was not possible to make this function async due to the limitation of http module
149
+ static defaultDispatchErrorHandler(args) {
150
+ const { error, logger, request, response } = args;
151
+ if ('code' in error) {
152
+ if (error.code === errors_1.ErrorCode.HTTPReceiverDeferredRequestError) {
153
+ logger.info(`Unhandled HTTP request (${request.method}) made to ${request.url}`);
154
+ response.writeHead(404);
155
+ response.end();
156
+ return;
157
+ }
158
+ }
159
+ logger.error(`An unexpected error occurred during a request (${request.method}) made to ${request.url}`);
160
+ logger.debug(`Error details: ${error}`);
161
+ response.writeHead(500);
162
+ response.end();
163
+ }
164
+ static async defaultAsyncDispatchErrorHandler(args) {
165
+ return HTTPModuleFunctions.defaultDispatchErrorHandler(args);
166
+ }
167
+ // The default processEventErrorHandler implementation:
168
+ // Developers can customize this behavior by passing processEventErrorHandler to the constructor
169
+ static async defaultProcessEventErrorHandler(args) {
170
+ const { error, response, logger, storedResponse } = args;
171
+ if ('code' in error) {
172
+ // CodedError has code: string
173
+ const errorCode = error.code;
174
+ if (errorCode === errors_1.ErrorCode.AuthorizationError) {
175
+ // authorize function threw an exception, which means there is no valid installation data
176
+ response.writeHead(401);
177
+ response.end();
178
+ return true;
179
+ }
180
+ }
181
+ logger.error('An unhandled error occurred while Bolt processed an event');
182
+ logger.debug(`Error details: ${error}, storedResponse: ${storedResponse}`);
183
+ response.writeHead(500);
184
+ response.end();
185
+ return false;
186
+ }
187
+ // The default unhandledRequestHandler implementation:
188
+ // Developers can customize this behavior by passing unhandledRequestHandler to the constructor
189
+ // Note that this method cannot be an async function to align with the implementation using setTimeout
190
+ static defaultUnhandledRequestHandler(args) {
191
+ const { logger } = args;
192
+ logger.error('An incoming event was not acknowledged within 3 seconds. ' +
193
+ 'Ensure that the ack() argument is called in a listener.');
194
+ }
195
+ }
196
+ exports.HTTPModuleFunctions = HTTPModuleFunctions;
197
+ //# sourceMappingURL=HTTPModuleFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTTPModuleFunctions.js","sourceRoot":"","sources":["../../src/receivers/HTTPModuleFunctions.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  /// <reference types="node" />
2
- import { Server, ServerOptions, RequestListener, IncomingMessage, ServerResponse } from 'http';
2
+ import { Server, ServerOptions, RequestListener } from 'http';
3
3
  import { Server as HTTPSServer, ServerOptions as HTTPSServerOptions } from 'https';
4
4
  import { ListenOptions } from 'net';
5
5
  import { Logger, LogLevel } from '@slack/logger';
6
- import { InstallProvider, CallbackOptions, InstallProviderOptions, InstallURLOptions } from '@slack/oauth';
7
- import { BufferedIncomingMessage } from './verify-request';
6
+ import { InstallProvider, CallbackOptions, InstallProviderOptions, InstallURLOptions, InstallPathOptions } from '@slack/oauth';
8
7
  import App from '../App';
9
8
  import { Receiver } from '../types';
10
- import { CodedError } from '../errors';
11
9
  import { CustomRoute } from './custom-routes';
12
10
  import { StringIndexed } from '../types/helpers';
11
+ import { BufferedIncomingMessage } from './BufferedIncomingMessage';
12
+ import { ReceiverDispatchErrorHandlerArgs, ReceiverProcessEventErrorHandlerArgs, ReceiverUnhandledRequestHandlerArgs } from './HTTPModuleFunctions';
13
13
  export interface HTTPReceiverOptions {
14
14
  signingSecret: string;
15
15
  endpoints?: string | string[];
@@ -27,47 +27,30 @@ export interface HTTPReceiverOptions {
27
27
  scopes?: InstallURLOptions['scopes'];
28
28
  installerOptions?: HTTPReceiverInstallerOptions;
29
29
  customPropertiesExtractor?: (request: BufferedIncomingMessage) => StringIndexed;
30
- dispatchErrorHandler?: (args: HTTPReceiverDispatchErrorHandlerArgs) => void;
31
- processEventErrorHandler?: (args: HTTPReceiverProcessEventErrorHandlerArgs) => Promise<boolean>;
32
- unhandledRequestHandler?: (args: HTTPReceiverUnhandledRequestHandlerArgs) => void;
30
+ dispatchErrorHandler?: (args: ReceiverDispatchErrorHandlerArgs) => void;
31
+ processEventErrorHandler?: (args: ReceiverProcessEventErrorHandlerArgs) => Promise<boolean>;
32
+ unhandledRequestHandler?: (args: ReceiverUnhandledRequestHandlerArgs) => void;
33
33
  unhandledRequestTimeoutMillis?: number;
34
34
  }
35
35
  export interface HTTPReceiverInstallerOptions {
36
36
  installPath?: string;
37
- directInstall?: boolean;
38
- renderHtmlForInstallPath?: (url: string) => string;
37
+ directInstall?: InstallProviderOptions['directInstall'];
38
+ renderHtmlForInstallPath?: InstallProviderOptions['renderHtmlForInstallPath'];
39
39
  redirectUriPath?: string;
40
40
  stateStore?: InstallProviderOptions['stateStore'];
41
41
  stateVerification?: InstallProviderOptions['stateVerification'];
42
+ legacyStateVerification?: InstallProviderOptions['legacyStateVerification'];
43
+ stateCookieName?: InstallProviderOptions['stateCookieName'];
44
+ stateCookieExpirationSeconds?: InstallProviderOptions['stateCookieExpirationSeconds'];
42
45
  authVersion?: InstallProviderOptions['authVersion'];
43
46
  clientOptions?: InstallProviderOptions['clientOptions'];
44
47
  authorizationUrl?: InstallProviderOptions['authorizationUrl'];
45
48
  metadata?: InstallURLOptions['metadata'];
46
49
  userScopes?: InstallURLOptions['userScopes'];
50
+ installPathOptions?: InstallPathOptions;
47
51
  callbackOptions?: CallbackOptions;
48
52
  port?: number;
49
53
  }
50
- export interface HTTPReceiverDispatchErrorHandlerArgs {
51
- error: Error | CodedError;
52
- logger: Logger;
53
- request: IncomingMessage;
54
- response: ServerResponse;
55
- }
56
- export declare function defaultDispatchErrorHandler(args: HTTPReceiverDispatchErrorHandlerArgs): void;
57
- export interface HTTPReceiverProcessEventErrorHandlerArgs {
58
- error: Error | CodedError;
59
- logger: Logger;
60
- request: IncomingMessage;
61
- response: ServerResponse;
62
- storedResponse: any;
63
- }
64
- export declare function defaultProcessEventErrorHandler(args: HTTPReceiverProcessEventErrorHandlerArgs): Promise<boolean>;
65
- export interface HTTPReceiverUnhandledRequestHandlerArgs {
66
- logger: Logger;
67
- request: IncomingMessage;
68
- response: ServerResponse;
69
- }
70
- export declare function defaultUnhandledRequestHandler(args: HTTPReceiverUnhandledRequestHandlerArgs): void;
71
54
  /**
72
55
  * Receives HTTP requests with Events, Slash Commands, and Actions
73
56
  */
@@ -83,10 +66,9 @@ export default class HTTPReceiver implements Receiver {
83
66
  private server?;
84
67
  installer?: InstallProvider;
85
68
  private installPath?;
86
- private directInstall?;
87
- private renderHtmlForInstallPath;
88
69
  private installRedirectUriPath?;
89
70
  private installUrlOptions?;
71
+ private installPathOptions?;
90
72
  private installCallbackOptions?;
91
73
  private stateVerification?;
92
74
  private logger;
@@ -1 +1 @@
1
- {"version":3,"file":"HTTPReceiver.d.ts","sourceRoot":"","sources":["../../src/receivers/HTTPReceiver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HTTPReceiver.d.ts","sourceRoot":"","sources":["../../src/receivers/HTTPReceiver.ts"],"names":[],"mappings":"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"}