@slack/bolt 3.17.2-rc.1 → 3.18.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slack/bolt",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.18.0",
|
|
4
4
|
"description": "A framework for building Slack apps, fast.",
|
|
5
5
|
"author": "Slack Technologies, LLC",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@slack/logger": "^4.0.0",
|
|
44
44
|
"@slack/oauth": "^2.6.2",
|
|
45
|
-
"@slack/socket-mode": "^1.3.
|
|
45
|
+
"@slack/socket-mode": "^1.3.3",
|
|
46
46
|
"@slack/types": "^2.11.0",
|
|
47
47
|
"@slack/web-api": "^6.11.2",
|
|
48
48
|
"@types/express": "^4.16.1",
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { FunctionsCompleteErrorResponse, FunctionsCompleteSuccessResponse } from '@slack/web-api';
|
|
2
|
-
import { Middleware, AllMiddlewareArgs, AnyMiddlewareArgs, SlackEventMiddlewareArgs } from './types';
|
|
3
|
-
/** Interfaces */
|
|
4
|
-
export interface FunctionCompleteArguments {
|
|
5
|
-
outputs?: {
|
|
6
|
-
[key: string]: any;
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
export interface FunctionFailArguments {
|
|
10
|
-
error: string;
|
|
11
|
-
}
|
|
12
|
-
export interface FunctionCompleteFn {
|
|
13
|
-
(params?: FunctionCompleteArguments): Promise<FunctionsCompleteSuccessResponse>;
|
|
14
|
-
}
|
|
15
|
-
export interface FunctionFailFn {
|
|
16
|
-
(params: FunctionFailArguments): Promise<FunctionsCompleteErrorResponse>;
|
|
17
|
-
}
|
|
18
|
-
export interface WorkflowFunctionExecuteMiddlewareArgs extends SlackEventMiddlewareArgs<'function_executed'> {
|
|
19
|
-
complete: FunctionCompleteFn;
|
|
20
|
-
fail: FunctionFailFn;
|
|
21
|
-
}
|
|
22
|
-
/** Types */
|
|
23
|
-
export declare type SlackWorkflowFunctionMiddlewareArgs = WorkflowFunctionExecuteMiddlewareArgs;
|
|
24
|
-
export declare type WorkflowFunctionExecuteMiddleware = Middleware<WorkflowFunctionExecuteMiddlewareArgs>;
|
|
25
|
-
export declare type WorkflowFunctionMiddleware = WorkflowFunctionExecuteMiddleware[];
|
|
26
|
-
export declare type AllWorkflowFunctionMiddlewareArgs<T extends SlackWorkflowFunctionMiddlewareArgs = SlackWorkflowFunctionMiddlewareArgs> = T & AllMiddlewareArgs;
|
|
27
|
-
/** Class */
|
|
28
|
-
export declare class WorkflowFunction {
|
|
29
|
-
/** Function callback_id */
|
|
30
|
-
callbackId: string;
|
|
31
|
-
private middleware;
|
|
32
|
-
constructor(callbackId: string, middleware: WorkflowFunctionMiddleware);
|
|
33
|
-
getMiddleware(): Middleware<AnyMiddlewareArgs>;
|
|
34
|
-
private matchesConstraints;
|
|
35
|
-
private processEvent;
|
|
36
|
-
private getStepMiddleware;
|
|
37
|
-
}
|
|
38
|
-
/** Helper Functions */
|
|
39
|
-
export declare function validate(callbackId: string, listeners: WorkflowFunctionMiddleware): void;
|
|
40
|
-
/**
|
|
41
|
-
* `processStepMiddleware()` invokes each callback for lifecycle event
|
|
42
|
-
* @param args workflow_step_edit action
|
|
43
|
-
*/
|
|
44
|
-
export declare function processStepMiddleware(args: AllWorkflowFunctionMiddlewareArgs, middleware: WorkflowFunctionMiddleware): Promise<void>;
|
|
45
|
-
export declare function isFunctionEvent(args: AnyMiddlewareArgs): args is AllWorkflowFunctionMiddlewareArgs;
|
|
46
|
-
/**
|
|
47
|
-
* Factory for `complete()` utility
|
|
48
|
-
* @param args function_executed event
|
|
49
|
-
*/
|
|
50
|
-
export declare function createFunctionComplete(args: AllWorkflowFunctionMiddlewareArgs<WorkflowFunctionExecuteMiddlewareArgs>): FunctionCompleteFn;
|
|
51
|
-
/**
|
|
52
|
-
* Factory for `fail()` utility
|
|
53
|
-
* @param args function_executed event
|
|
54
|
-
*/
|
|
55
|
-
export declare function createFunctionFail(args: AllWorkflowFunctionMiddlewareArgs<WorkflowFunctionExecuteMiddlewareArgs>): FunctionFailFn;
|
|
56
|
-
/**
|
|
57
|
-
* `prepareFunctionArgs()` takes in a function's args and:
|
|
58
|
-
* 1. removes the next() passed in from App-level middleware processing
|
|
59
|
-
* - events will *not* continue down global middleware chain to subsequent listeners
|
|
60
|
-
* 2. augments args with step lifecycle-specific properties/utilities
|
|
61
|
-
* */
|
|
62
|
-
export declare function prepareFunctionArgs(args: any): AllWorkflowFunctionMiddlewareArgs;
|
|
63
|
-
//# sourceMappingURL=WorkflowFunction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowFunction.d.ts","sourceRoot":"","sources":["../src/WorkflowFunction.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,8BAA8B,EAC9B,gCAAgC,EACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AAIjB,iBAAiB;AAEjB,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,qCAAsC,SAAQ,wBAAwB,CAAC,mBAAmB,CAAC;IAC1G,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,YAAY;AAEZ,oBAAY,mCAAmC,GAAG,qCAAqC,CAAC;AAExF,oBAAY,iCAAiC,GAAG,UAAU,CAAC,qCAAqC,CAAC,CAAC;AAElG,oBAAY,0BAA0B,GAAG,iCAAiC,EAAE,CAAC;AAE7E,oBAAY,iCAAiC,CAC1C,CAAC,SAAS,mCAAmC,GAAG,mCAAmC,IAAI,CAAC,GAAG,iBAAiB,CAAC;AAMhH,YAAY;AAEZ,qBAAa,gBAAgB;IAC3B,2BAA2B;IACpB,UAAU,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,UAAU,CAA6B;gBAG7C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,0BAA0B;IAQjC,aAAa,IAAI,UAAU,CAAC,iBAAiB,CAAC;IASrD,OAAO,CAAC,kBAAkB;YAIZ,YAAY;IAM1B,OAAO,CAAC,iBAAiB;CAG1B;AAED,uBAAuB;AAEvB,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,0BAA0B,GAAG,IAAI,CAcxF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,iCAAiC,EACvC,UAAU,EAAE,0BAA0B,GACrC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,IAAI,iCAAiC,CAElG;AAOD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iCAAiC,CAAC,qCAAqC,CAAC,GAC7E,kBAAkB,CAapB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,iCAAiC,CAAC,qCAAqC,CAAC,GAC7E,cAAc,CAiBhB;AAED;;;;;KAKK;AACL,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,iCAAiC,CAgBhF"}
|
package/dist/WorkflowFunction.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
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.prepareFunctionArgs = exports.createFunctionFail = exports.createFunctionComplete = exports.isFunctionEvent = exports.processStepMiddleware = exports.validate = exports.WorkflowFunction = void 0;
|
|
7
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
|
-
const web_api_1 = require("@slack/web-api");
|
|
9
|
-
const process_1 = __importDefault(require("./middleware/process"));
|
|
10
|
-
const errors_1 = require("./errors");
|
|
11
|
-
/** Constants */
|
|
12
|
-
const VALID_PAYLOAD_TYPES = new Set(['function_executed']);
|
|
13
|
-
/** Class */
|
|
14
|
-
class WorkflowFunction {
|
|
15
|
-
constructor(callbackId, middleware) {
|
|
16
|
-
validate(callbackId, middleware);
|
|
17
|
-
this.callbackId = callbackId;
|
|
18
|
-
this.middleware = middleware;
|
|
19
|
-
}
|
|
20
|
-
getMiddleware() {
|
|
21
|
-
return async (args) => {
|
|
22
|
-
if (isFunctionEvent(args) && this.matchesConstraints(args)) {
|
|
23
|
-
return this.processEvent(args);
|
|
24
|
-
}
|
|
25
|
-
return args.next();
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
matchesConstraints(args) {
|
|
29
|
-
return args.payload.function.callback_id === this.callbackId;
|
|
30
|
-
}
|
|
31
|
-
async processEvent(args) {
|
|
32
|
-
const functionArgs = prepareFunctionArgs(args);
|
|
33
|
-
const stepMiddleware = this.getStepMiddleware();
|
|
34
|
-
return processStepMiddleware(functionArgs, stepMiddleware);
|
|
35
|
-
}
|
|
36
|
-
getStepMiddleware() {
|
|
37
|
-
return this.middleware;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
exports.WorkflowFunction = WorkflowFunction;
|
|
41
|
-
/** Helper Functions */
|
|
42
|
-
function validate(callbackId, listeners) {
|
|
43
|
-
// Ensure callbackId is valid
|
|
44
|
-
if (typeof callbackId !== 'string') {
|
|
45
|
-
const errorMsg = 'WorkflowFunction expects a callback_id as the first argument';
|
|
46
|
-
throw new errors_1.WorkflowFunctionInitializationError(errorMsg);
|
|
47
|
-
}
|
|
48
|
-
// Ensure all listeners are functions
|
|
49
|
-
listeners.forEach((listener) => {
|
|
50
|
-
if (!(listener instanceof Function)) {
|
|
51
|
-
const errorMsg = 'All WorkflowFunction listeners must be functions';
|
|
52
|
-
throw new errors_1.WorkflowFunctionInitializationError(errorMsg);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
exports.validate = validate;
|
|
57
|
-
/**
|
|
58
|
-
* `processStepMiddleware()` invokes each callback for lifecycle event
|
|
59
|
-
* @param args workflow_step_edit action
|
|
60
|
-
*/
|
|
61
|
-
async function processStepMiddleware(args, middleware) {
|
|
62
|
-
const { context, client, logger } = args;
|
|
63
|
-
const callbacks = [...middleware];
|
|
64
|
-
const lastCallback = callbacks.pop();
|
|
65
|
-
if (lastCallback !== undefined) {
|
|
66
|
-
await (0, process_1.default)(callbacks, args, context, client, logger, async () => lastCallback({ ...args, context, client, logger }));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
exports.processStepMiddleware = processStepMiddleware;
|
|
70
|
-
function isFunctionEvent(args) {
|
|
71
|
-
return VALID_PAYLOAD_TYPES.has(args.payload.type);
|
|
72
|
-
}
|
|
73
|
-
exports.isFunctionEvent = isFunctionEvent;
|
|
74
|
-
function selectToken(context) {
|
|
75
|
-
// If attachFunctionToken = false, fallback to botToken or userToken
|
|
76
|
-
return context.functionBotToken ? context.functionBotToken : context.botToken || context.userToken;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Factory for `complete()` utility
|
|
80
|
-
* @param args function_executed event
|
|
81
|
-
*/
|
|
82
|
-
function createFunctionComplete(args) {
|
|
83
|
-
const { context, client, payload: { function_execution_id }, } = args;
|
|
84
|
-
const token = selectToken(context);
|
|
85
|
-
return (params = {}) => client.functions.completeSuccess({
|
|
86
|
-
token,
|
|
87
|
-
outputs: params.outputs || {},
|
|
88
|
-
function_execution_id,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
exports.createFunctionComplete = createFunctionComplete;
|
|
92
|
-
/**
|
|
93
|
-
* Factory for `fail()` utility
|
|
94
|
-
* @param args function_executed event
|
|
95
|
-
*/
|
|
96
|
-
function createFunctionFail(args) {
|
|
97
|
-
const { context, client, payload: { function_execution_id }, } = args;
|
|
98
|
-
const token = selectToken(context);
|
|
99
|
-
return (params) => {
|
|
100
|
-
const { error } = params !== null && params !== void 0 ? params : {};
|
|
101
|
-
return client.functions.completeError({
|
|
102
|
-
token,
|
|
103
|
-
error,
|
|
104
|
-
function_execution_id,
|
|
105
|
-
});
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
exports.createFunctionFail = createFunctionFail;
|
|
109
|
-
/**
|
|
110
|
-
* `prepareFunctionArgs()` takes in a function's args and:
|
|
111
|
-
* 1. removes the next() passed in from App-level middleware processing
|
|
112
|
-
* - events will *not* continue down global middleware chain to subsequent listeners
|
|
113
|
-
* 2. augments args with step lifecycle-specific properties/utilities
|
|
114
|
-
* */
|
|
115
|
-
function prepareFunctionArgs(args) {
|
|
116
|
-
const { next: _next, ...functionArgs } = args;
|
|
117
|
-
const preparedArgs = { ...functionArgs };
|
|
118
|
-
const token = selectToken(functionArgs.context);
|
|
119
|
-
// Making calls with a functionBotToken establishes continuity between
|
|
120
|
-
// a function_executed event and subsequent interactive events (actions)
|
|
121
|
-
const client = new web_api_1.WebClient(token, { ...functionArgs.client });
|
|
122
|
-
preparedArgs.client = client;
|
|
123
|
-
// Utility args
|
|
124
|
-
preparedArgs.inputs = preparedArgs.event.inputs;
|
|
125
|
-
preparedArgs.complete = createFunctionComplete(preparedArgs);
|
|
126
|
-
preparedArgs.fail = createFunctionFail(preparedArgs);
|
|
127
|
-
return preparedArgs;
|
|
128
|
-
}
|
|
129
|
-
exports.prepareFunctionArgs = prepareFunctionArgs;
|
|
130
|
-
//# sourceMappingURL=WorkflowFunction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowFunction.js","sourceRoot":"","sources":["../src/WorkflowFunction.ts"],"names":[],"mappings":"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"}
|