@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.
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/receivers/BufferedIncomingMessage.d.ts +6 -0
- package/dist/receivers/BufferedIncomingMessage.d.ts.map +1 -0
- package/dist/receivers/BufferedIncomingMessage.js +3 -0
- package/dist/receivers/BufferedIncomingMessage.js.map +1 -0
- package/dist/receivers/ExpressReceiver.d.ts +20 -6
- package/dist/receivers/ExpressReceiver.d.ts.map +1 -1
- package/dist/receivers/ExpressReceiver.js +68 -84
- package/dist/receivers/ExpressReceiver.js.map +1 -1
- package/dist/receivers/HTTPModuleFunctions.d.ts +47 -0
- package/dist/receivers/HTTPModuleFunctions.d.ts.map +1 -0
- package/dist/receivers/HTTPModuleFunctions.js +197 -0
- package/dist/receivers/HTTPModuleFunctions.js.map +1 -0
- package/dist/receivers/HTTPReceiver.d.ts +14 -32
- package/dist/receivers/HTTPReceiver.d.ts.map +1 -1
- package/dist/receivers/HTTPReceiver.js +44 -179
- package/dist/receivers/HTTPReceiver.js.map +1 -1
- package/dist/receivers/HTTPResponseAck.d.ts +29 -0
- package/dist/receivers/HTTPResponseAck.d.ts.map +1 -0
- package/dist/receivers/HTTPResponseAck.js +60 -0
- package/dist/receivers/HTTPResponseAck.js.map +1 -0
- package/dist/receivers/SocketModeFunctions.d.ts +12 -0
- package/dist/receivers/SocketModeFunctions.d.ts.map +1 -0
- package/dist/receivers/SocketModeFunctions.js +28 -0
- package/dist/receivers/SocketModeFunctions.js.map +1 -0
- package/dist/receivers/SocketModeReceiver.d.ts +10 -3
- package/dist/receivers/SocketModeReceiver.d.ts.map +1 -1
- package/dist/receivers/SocketModeReceiver.js +29 -37
- package/dist/receivers/SocketModeReceiver.js.map +1 -1
- package/dist/receivers/custom-routes.d.ts +1 -1
- package/dist/receivers/custom-routes.d.ts.map +1 -1
- package/dist/receivers/custom-routes.js +3 -3
- package/dist/receivers/custom-routes.js.map +1 -1
- package/dist/receivers/http-utils.d.ts.map +1 -1
- package/dist/receivers/http-utils.js +9 -25
- package/dist/receivers/http-utils.js.map +1 -1
- package/dist/receivers/render-html-for-install-path.d.ts.map +1 -1
- package/dist/receivers/render-html-for-install-path.js +7 -0
- package/dist/receivers/render-html-for-install-path.js.map +1 -1
- package/dist/receivers/verify-request.d.ts +25 -33
- package/dist/receivers/verify-request.d.ts.map +1 -1
- package/dist/receivers/verify-request.js +41 -61
- package/dist/receivers/verify-request.js.map +1 -1
- package/dist/types/events/base-events.d.ts +20 -2
- package/dist/types/events/base-events.d.ts.map +1 -1
- package/dist/types/events/base-events.js.map +1 -1
- package/dist/types/events/index.d.ts +1 -1
- package/dist/types/events/index.d.ts.map +1 -1
- package/package.json +8 -5
- 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
|
|
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:
|
|
31
|
-
processEventErrorHandler?: (args:
|
|
32
|
-
unhandledRequestHandler?: (args:
|
|
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?:
|
|
38
|
-
renderHtmlForInstallPath?:
|
|
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":";AACA,OAAO,EAAgB,MAAM,EAAE,aAAa,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"HTTPReceiver.d.ts","sourceRoot":"","sources":["../../src/receivers/HTTPReceiver.ts"],"names":[],"mappings":"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"}
|