@slack/bolt 3.12.1 → 4.0.0-nextGen.3
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/App.d.ts +35 -6
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +132 -45
- package/dist/App.js.map +1 -1
- package/dist/Manifest.d.ts +5 -0
- package/dist/Manifest.d.ts.map +1 -0
- package/dist/Manifest.js +16 -0
- package/dist/Manifest.js.map +1 -0
- package/dist/SlackFunction.d.ts +181 -0
- package/dist/SlackFunction.d.ts.map +1 -0
- package/dist/SlackFunction.js +418 -0
- package/dist/SlackFunction.js.map +1 -0
- package/dist/Subscription.d.ts +61 -0
- package/dist/Subscription.d.ts.map +1 -0
- package/dist/Subscription.js +169 -0
- package/dist/Subscription.js.map +1 -0
- package/dist/cli/get-hooks.d.ts +2 -0
- package/dist/cli/get-hooks.d.ts.map +1 -0
- package/dist/cli/get-hooks.js +18 -0
- package/dist/cli/get-hooks.js.map +1 -0
- package/dist/cli/get-manifest.d.ts +3 -0
- package/dist/cli/get-manifest.d.ts.map +1 -0
- package/dist/cli/get-manifest.js +16 -0
- package/dist/cli/get-manifest.js.map +1 -0
- package/dist/cli/hook-utils/manifest.d.ts +7 -0
- package/dist/cli/hook-utils/manifest.d.ts.map +1 -0
- package/dist/cli/hook-utils/manifest.js +104 -0
- package/dist/cli/hook-utils/manifest.js.map +1 -0
- package/dist/cli/hook-utils/manifest.spec.d.ts +2 -0
- package/dist/cli/hook-utils/manifest.spec.d.ts.map +1 -0
- package/dist/cli/hook-utils/manifest.spec.js +75 -0
- package/dist/cli/hook-utils/manifest.spec.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +37 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/start.d.ts +3 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +40 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/errors.d.ts +13 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +25 -1
- package/dist/errors.js.map +1 -1
- package/dist/helpers.d.ts +2 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +8 -0
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/builtin.d.ts.map +1 -1
- package/dist/middleware/builtin.js +0 -1
- package/dist/middleware/builtin.js.map +1 -1
- package/dist/middleware/process.d.ts.map +1 -1
- package/dist/middleware/process.js.map +1 -1
- package/dist/receivers/ExpressReceiver.d.ts +1 -1
- package/dist/receivers/ExpressReceiver.js +2 -1
- package/dist/receivers/ExpressReceiver.js.map +1 -1
- package/dist/receivers/HTTPModuleFunctions.js +1 -1
- package/dist/receivers/HTTPReceiver.js +4 -4
- package/dist/receivers/HTTPReceiver.js.map +1 -1
- package/dist/receivers/SocketModeFunctions.js +2 -1
- package/dist/receivers/SocketModeFunctions.js.map +1 -1
- package/dist/receivers/SocketModeReceiver.js.map +1 -1
- package/dist/receivers/verify-request.d.ts +2 -2
- package/dist/receivers/verify-request.js +3 -3
- package/dist/types/actions/block-action.d.ts +4 -3
- package/dist/types/actions/block-action.d.ts.map +1 -1
- package/dist/types/actions/dialog-action.d.ts +4 -0
- package/dist/types/actions/dialog-action.d.ts.map +1 -1
- package/dist/types/events/base-events.d.ts +30 -1
- package/dist/types/events/base-events.d.ts.map +1 -1
- package/dist/types/events/base-events.js.map +1 -1
- package/dist/types/functions/index.d.ts +26 -0
- package/dist/types/functions/index.d.ts.map +1 -0
- package/dist/types/functions/index.js +3 -0
- package/dist/types/functions/index.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/middleware.d.ts +17 -1
- package/dist/types/middleware.d.ts.map +1 -1
- package/dist/types/middleware.js.map +1 -1
- package/dist/types/subscription/index.d.ts +80 -0
- package/dist/types/subscription/index.d.ts.map +1 -0
- package/dist/types/subscription/index.js +3 -0
- package/dist/types/subscription/index.js.map +1 -0
- package/dist/types/view/index.d.ts +6 -5
- package/dist/types/view/index.d.ts.map +1 -1
- package/package.json +16 -5
- package/src/cli/get-hooks.js +16 -0
- package/src/cli/get-manifest.js +16 -0
- package/src/cli/hook-utils/manifest.js +114 -0
- package/src/cli/start.js +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../src/Manifest.ts"],"names":[],"mappings":";;;AAAA,0DAS+B;AAa7B,8FArBA,8BAAa,OAqBA;AAJb,+FAfA,+BAAc,OAeA;AACd,+FAfA,+BAAc,OAeA;AAId,2FAlBA,2BAAU,OAkBA;AAFV,uFAfA,uBAAM,OAeA;AADN,qGAZA,qCAAoB,OAYA;AATf,MAAM,QAAQ,GAAG,CAAC,UAA6B,EAAkB,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAI,8BAAa,CAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { AllMiddlewareArgs, AnyMiddlewareArgs, Middleware, SlackAction, SlackActionMiddlewareArgs, SlackEventMiddlewareArgs, SlackViewAction, SlackViewMiddlewareArgs } from './types';
|
|
2
|
+
import { ActionConstraints, ViewConstraints } from './App';
|
|
3
|
+
export declare const manifestUtil: any;
|
|
4
|
+
export interface SlackFunctionExecutedMiddlewareArgs extends SlackEventMiddlewareArgs<'function_executed'> {
|
|
5
|
+
complete: CompleteFunction;
|
|
6
|
+
}
|
|
7
|
+
export interface CompleteFunction {
|
|
8
|
+
(args: CompleteFunctionArgs): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export interface CompleteFunctionArgs {
|
|
11
|
+
outputs?: Record<string, unknown>;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare type AllSlackFunctionExecutedMiddlewareArgs = SlackFunctionExecutedMiddlewareArgs & SlackActionMiddlewareArgs & AllMiddlewareArgs;
|
|
15
|
+
declare type FunctionInteractivityConstraints = ActionConstraints | ViewConstraints;
|
|
16
|
+
interface SlackFnValidateResult {
|
|
17
|
+
pass: boolean;
|
|
18
|
+
msg?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ManifestDefinitionResult {
|
|
21
|
+
matchFound: boolean;
|
|
22
|
+
fnKeys?: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* *SlackFunction*
|
|
26
|
+
*
|
|
27
|
+
* Configure a SlackFunction's callbackId,
|
|
28
|
+
* and any expected inputs and outputs
|
|
29
|
+
* in your project's manifest file (json or js).
|
|
30
|
+
*
|
|
31
|
+
* Use this class to declare your handling logic:
|
|
32
|
+
*
|
|
33
|
+
* Example:
|
|
34
|
+
* ```
|
|
35
|
+
* const myFunc = new SlackFunction('fn_callback_id', () => {});
|
|
36
|
+
* ```
|
|
37
|
+
* You can also declare
|
|
38
|
+
* optional handlers for `block_action` and `view` events
|
|
39
|
+
* related to your function.
|
|
40
|
+
*
|
|
41
|
+
* Example:
|
|
42
|
+
* ```
|
|
43
|
+
* myFunc.action('action_id', () => {})
|
|
44
|
+
* .view('view_callback_id', () => {});
|
|
45
|
+
* ```
|
|
46
|
+
* Note: This is not equivalent to app.action() or app.view()
|
|
47
|
+
*
|
|
48
|
+
* *Completing your function*
|
|
49
|
+
*
|
|
50
|
+
* Call the supplied utility `complete` when your function is
|
|
51
|
+
* done executing. This tells Slack it can proceed
|
|
52
|
+
* with any next steps in any workflow this function might
|
|
53
|
+
* be included in.
|
|
54
|
+
*
|
|
55
|
+
* Supply outputs or an error or nothing when your
|
|
56
|
+
* function is done. Note, your outputs should match what you
|
|
57
|
+
* have defined in your in your manifest.
|
|
58
|
+
*
|
|
59
|
+
* Example:
|
|
60
|
+
* ```
|
|
61
|
+
* const myFunc = new SlackFunction('fn_callback_id', ({ complete }) => {
|
|
62
|
+
* // do my work here
|
|
63
|
+
*
|
|
64
|
+
* complete() // or
|
|
65
|
+
* complete({ outputs: {} }); // or
|
|
66
|
+
* complete({ error: "error details here" });
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* Call `complete()` from your main handler or
|
|
71
|
+
* an interactivity handler. Note, once a function is
|
|
72
|
+
* completed (either with outputs or an error), interactions
|
|
73
|
+
* from views generated in the course of function execution
|
|
74
|
+
* will no longer trigger associated handlers, so remember to clean those up.
|
|
75
|
+
* */
|
|
76
|
+
export declare class SlackFunction {
|
|
77
|
+
/**
|
|
78
|
+
* @description The callback_id of the function
|
|
79
|
+
* as defined in your manifest file
|
|
80
|
+
* */
|
|
81
|
+
private callbackId;
|
|
82
|
+
/**
|
|
83
|
+
* @description handler to to process corresponding
|
|
84
|
+
* function_executed event
|
|
85
|
+
*/
|
|
86
|
+
private handler;
|
|
87
|
+
private interactivityHandlers;
|
|
88
|
+
private logger;
|
|
89
|
+
constructor(callbackId: string, handler: Middleware<SlackEventMiddlewareArgs>);
|
|
90
|
+
/**
|
|
91
|
+
* Attach a block_actions interactivity handler to your SlackFunction
|
|
92
|
+
*
|
|
93
|
+
* ```
|
|
94
|
+
* Example:
|
|
95
|
+
* const actionHandler = async () => {};
|
|
96
|
+
* const actionHandler1 = async () => {};
|
|
97
|
+
* myFunc.action("id", actionHandler).action("id1", actionHandler1);
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @param actionIdOrConstraints Provide an action_id string
|
|
101
|
+
* corresponding to the value supplied in your blocks or a
|
|
102
|
+
* constraint object of type ActionConstraints<SlackAction>
|
|
103
|
+
*
|
|
104
|
+
* ```
|
|
105
|
+
* Example:
|
|
106
|
+
* myFunc.action({ type: "action_submission" });
|
|
107
|
+
* myFunc.action({ action_id: "id" }, actionHandler);
|
|
108
|
+
* ```
|
|
109
|
+
* @param handler Provide a handler function
|
|
110
|
+
* @returns SlackFunction instance
|
|
111
|
+
*/
|
|
112
|
+
action<Action extends SlackAction = SlackAction, Constraints extends ActionConstraints<Action> = ActionConstraints<Action>>(actionIdOrConstraints: string | RegExp | Constraints, handler: Middleware<SlackActionMiddlewareArgs>): this;
|
|
113
|
+
/**
|
|
114
|
+
* Attach a view_submission or view_closed interactivity handler
|
|
115
|
+
* to your SlackFunction
|
|
116
|
+
*
|
|
117
|
+
* ```
|
|
118
|
+
* Example:
|
|
119
|
+
* const viewHandler = async () => {};
|
|
120
|
+
* const viewHandler1 = async () => {};
|
|
121
|
+
* myFunc.view("id", viewHandler).view("id1", viewHandler1)
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* @param callbackIdOrConstraints Provide a `callback_id` string
|
|
125
|
+
* a constraint object of type ViewConstraints
|
|
126
|
+
*
|
|
127
|
+
* ```
|
|
128
|
+
* Example:
|
|
129
|
+
* myFunc.view({ type: "view_submission" });
|
|
130
|
+
* myFunc.view({ callback_id: "id", }, viewHandler)
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @param handler Provide a handler function
|
|
134
|
+
* @returns SlackFunction instance
|
|
135
|
+
*/
|
|
136
|
+
view(callbackIdOrConstraints: string | RegExp | ViewConstraints, handler: Middleware<SlackViewMiddlewareArgs<SlackViewAction>>): this;
|
|
137
|
+
private matchesFuncConstraints;
|
|
138
|
+
/**
|
|
139
|
+
* Returns a a single middleware to global
|
|
140
|
+
* middleware chain. Responsible for returning
|
|
141
|
+
* handlers required for either function execution
|
|
142
|
+
* or function interactivity event handlering to
|
|
143
|
+
* the global event processing chain.
|
|
144
|
+
*/
|
|
145
|
+
getMiddleware(): Middleware<AnyMiddlewareArgs>;
|
|
146
|
+
runHandler: (args: AnyMiddlewareArgs & AllMiddlewareArgs) => Promise<void>;
|
|
147
|
+
runInteractivityHandlers: (args: AnyMiddlewareArgs & AllMiddlewareArgs) => Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* Ensure that SlackFunction `complete()` utility callback is provided
|
|
150
|
+
* as args to all function and interactivity handlers registered on
|
|
151
|
+
* SlackFunction instance
|
|
152
|
+
* @param args middleware arguments
|
|
153
|
+
*/
|
|
154
|
+
private prepareFnArgs;
|
|
155
|
+
/**
|
|
156
|
+
* Creates a `complete()` utility function
|
|
157
|
+
*
|
|
158
|
+
* @param args
|
|
159
|
+
* @returns A `complete()` utility callback
|
|
160
|
+
* which can be accessed from any SlackFunction
|
|
161
|
+
* handler and used to to complete your SlackFunction.
|
|
162
|
+
*
|
|
163
|
+
* ```
|
|
164
|
+
* Example:
|
|
165
|
+
* const handler = async ({ complete }) => { complete() };
|
|
166
|
+
* const myFunc = new SlackFunction("id", handler);
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
private createComplete;
|
|
170
|
+
}
|
|
171
|
+
export declare function isFunctionExecutedEvent(args: AnyMiddlewareArgs): boolean;
|
|
172
|
+
export declare function isFunctionInteractivityEvent(args: AnyMiddlewareArgs & AllMiddlewareArgs): boolean;
|
|
173
|
+
export declare function passConstraint(constraintKey: Extract<(keyof ActionConstraints), string> | Extract<(keyof ViewConstraints), string>, constraints: FunctionInteractivityConstraints, payload: any): boolean;
|
|
174
|
+
export declare function validate(callbackId: string, handler: Middleware<SlackEventMiddlewareArgs>): void;
|
|
175
|
+
export declare function errorIfInvalidConstraintKeys(constraints: FunctionInteractivityConstraints, validKeys: string[], handler: Middleware<SlackActionMiddlewareArgs> | Middleware<SlackViewMiddlewareArgs<SlackViewAction>>): void;
|
|
176
|
+
export declare function hasCallbackId(callbackId: string, _?: Middleware<SlackEventMiddlewareArgs>): SlackFnValidateResult;
|
|
177
|
+
export declare function hasMatchingManifestDefinition(callbackId: string, _?: Middleware<SlackEventMiddlewareArgs>): SlackFnValidateResult;
|
|
178
|
+
export declare function findMatchingManifestDefinition(callbackId: string): ManifestDefinitionResult;
|
|
179
|
+
export declare function hasHandler(_: string, handler: Middleware<SlackEventMiddlewareArgs>): SlackFnValidateResult;
|
|
180
|
+
export {};
|
|
181
|
+
//# sourceMappingURL=SlackFunction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackFunction.d.ts","sourceRoot":"","sources":["../src/SlackFunction.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,yBAAyB,EACzB,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,OAAO,CAAC;AASf,eAAO,MAAM,YAAY,KAAuC,CAAC;AAGjE,MAAM,WAAW,mCAAoC,SAAQ,wBAAwB,CAAC,mBAAmB,CAAC;IACxG,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IAEnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oBAAY,sCAAsC,GAClD,mCAAmC,GACnC,yBAAyB,GACzB,iBAAiB,CAAC;AAOlB,aAAK,gCAAgC,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAK5E,UAAU,qBAAqB;IAAG,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAC/D,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmDK;AACL,qBAAa,aAAa;IACxB;;;UAGM;IACN,OAAO,CAAC,UAAU,CAAS;IAE3B;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAuC;IAEtD,OAAO,CAAC,qBAAqB,CAAoC;IAEjE,OAAO,CAAC,MAAM,CAAS;gBAEJ,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,wBAAwB,CAAC;IAcpF;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,MAAM,CACX,MAAM,SAAS,WAAW,GAAG,WAAW,EACxC,WAAW,SAAS,iBAAiB,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAEzE,qBAAqB,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,EACpD,OAAO,EAAE,UAAU,CAAC,yBAAyB,CAAC,GAC7C,IAAI;IAoBP;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,IAAI,CACT,uBAAuB,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,EAC1D,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,GAC5D,IAAI;IAoBP,OAAO,CAAC,sBAAsB;IAO9B;;;;;;MAME;IACK,aAAa,IAAI,UAAU,CAAC,iBAAiB,CAAC;IAe9C,UAAU,SAAgB,iBAAiB,GAAG,iBAAiB,KAAG,QAAQ,IAAI,CAAC,CAQpF;IAEK,wBAAwB,SAAgB,iBAAiB,GAAG,iBAAiB,KAAG,QAAQ,IAAI,CAAC,CAsBlG;IAEF;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IASrB;;;;;;;;;;;;;OAaG;IAEH,OAAO,CAAC,cAAc;CAyCvB;AAID,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAKxE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,OAAO,CAQjG;AAsBD,wBAAgB,cAAc,CAC5B,aAAa,EAAE,OAAO,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,eAAe,CAAC,EAAE,MAAM,CAAC,EACpG,WAAW,EAAE,gCAAgC,EAE7C,OAAO,EAAE,GAAG,GACX,OAAO,CA4BT;AAMD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAOhG;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,gCAAgC,EAC7C,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,UAAU,CAAC,yBAAyB,CAAC,GAAG,UAAU,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,GACpG,IAAI,CAQN;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,wBAAwB,CAAC,GAAG,qBAAqB,CAWjH;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,EAClB,CAAC,CAAC,EAAE,UAAU,CAAC,wBAAwB,CAAC,GACvC,qBAAqB,CAUvB;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,wBAAwB,CAmB3F;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,wBAAwB,CAAC,GAAG,qBAAqB,CAO1G"}
|
|
@@ -0,0 +1,418 @@
|
|
|
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.hasHandler = exports.findMatchingManifestDefinition = exports.hasMatchingManifestDefinition = exports.hasCallbackId = exports.errorIfInvalidConstraintKeys = exports.validate = exports.passConstraint = exports.isFunctionInteractivityEvent = exports.isFunctionExecutedEvent = exports.SlackFunction = exports.manifestUtil = void 0;
|
|
7
|
+
const util_1 = __importDefault(require("util"));
|
|
8
|
+
const logger_1 = require("@slack/logger");
|
|
9
|
+
const errors_1 = require("./errors");
|
|
10
|
+
// eslint-disable-next-line
|
|
11
|
+
exports.manifestUtil = require('./cli/hook-utils/manifest');
|
|
12
|
+
/**
|
|
13
|
+
* *SlackFunction*
|
|
14
|
+
*
|
|
15
|
+
* Configure a SlackFunction's callbackId,
|
|
16
|
+
* and any expected inputs and outputs
|
|
17
|
+
* in your project's manifest file (json or js).
|
|
18
|
+
*
|
|
19
|
+
* Use this class to declare your handling logic:
|
|
20
|
+
*
|
|
21
|
+
* Example:
|
|
22
|
+
* ```
|
|
23
|
+
* const myFunc = new SlackFunction('fn_callback_id', () => {});
|
|
24
|
+
* ```
|
|
25
|
+
* You can also declare
|
|
26
|
+
* optional handlers for `block_action` and `view` events
|
|
27
|
+
* related to your function.
|
|
28
|
+
*
|
|
29
|
+
* Example:
|
|
30
|
+
* ```
|
|
31
|
+
* myFunc.action('action_id', () => {})
|
|
32
|
+
* .view('view_callback_id', () => {});
|
|
33
|
+
* ```
|
|
34
|
+
* Note: This is not equivalent to app.action() or app.view()
|
|
35
|
+
*
|
|
36
|
+
* *Completing your function*
|
|
37
|
+
*
|
|
38
|
+
* Call the supplied utility `complete` when your function is
|
|
39
|
+
* done executing. This tells Slack it can proceed
|
|
40
|
+
* with any next steps in any workflow this function might
|
|
41
|
+
* be included in.
|
|
42
|
+
*
|
|
43
|
+
* Supply outputs or an error or nothing when your
|
|
44
|
+
* function is done. Note, your outputs should match what you
|
|
45
|
+
* have defined in your in your manifest.
|
|
46
|
+
*
|
|
47
|
+
* Example:
|
|
48
|
+
* ```
|
|
49
|
+
* const myFunc = new SlackFunction('fn_callback_id', ({ complete }) => {
|
|
50
|
+
* // do my work here
|
|
51
|
+
*
|
|
52
|
+
* complete() // or
|
|
53
|
+
* complete({ outputs: {} }); // or
|
|
54
|
+
* complete({ error: "error details here" });
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* Call `complete()` from your main handler or
|
|
59
|
+
* an interactivity handler. Note, once a function is
|
|
60
|
+
* completed (either with outputs or an error), interactions
|
|
61
|
+
* from views generated in the course of function execution
|
|
62
|
+
* will no longer trigger associated handlers, so remember to clean those up.
|
|
63
|
+
* */
|
|
64
|
+
class SlackFunction {
|
|
65
|
+
constructor(callbackId, handler) {
|
|
66
|
+
this.runHandler = async (args) => {
|
|
67
|
+
this.logger.debug('🚀 Executing my main handler:', this.handler);
|
|
68
|
+
try {
|
|
69
|
+
const handlerArgs = this.prepareFnArgs(args);
|
|
70
|
+
await this.handler(handlerArgs);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
this.logger.error('⚠️ Something went wrong executing:', this.handler, '\n⚠️ Error Details:', err);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
this.runInteractivityHandlers = async (args) => {
|
|
77
|
+
const jobs = [];
|
|
78
|
+
for (let i = 0; i < this.interactivityHandlers.length; i += 1) {
|
|
79
|
+
const { constraints, handler } = this.interactivityHandlers[i];
|
|
80
|
+
if (passInteractivityConstraints(constraints, args)) {
|
|
81
|
+
const handlerArgs = this.prepareFnArgs(args);
|
|
82
|
+
// helpful logging
|
|
83
|
+
this.logger.debug('🚀 Executing my interactive handler:', handler);
|
|
84
|
+
this.logger.debug('🚀 Registered with constraints:', constraints);
|
|
85
|
+
jobs.push(handler(handlerArgs));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return new Promise((resolve, reject) => {
|
|
89
|
+
Promise.all(jobs).then((_) => resolve()).catch((error) => {
|
|
90
|
+
const msg = `⚠️ A SlackFunction handler promise rejected. Error details: ${error}`;
|
|
91
|
+
const err = new errors_1.SlackFunctionExecutionError(msg);
|
|
92
|
+
reject(err);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
validate(callbackId, handler);
|
|
97
|
+
this.callbackId = callbackId;
|
|
98
|
+
this.handler = handler;
|
|
99
|
+
this.interactivityHandlers = [];
|
|
100
|
+
// set an initial default logging
|
|
101
|
+
const logger = new logger_1.ConsoleLogger();
|
|
102
|
+
logger.setName(`SlackFunction: [${this.callbackId}]`);
|
|
103
|
+
logger.setLevel(logger_1.LogLevel.DEBUG);
|
|
104
|
+
this.logger = logger;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Attach a block_actions interactivity handler to your SlackFunction
|
|
108
|
+
*
|
|
109
|
+
* ```
|
|
110
|
+
* Example:
|
|
111
|
+
* const actionHandler = async () => {};
|
|
112
|
+
* const actionHandler1 = async () => {};
|
|
113
|
+
* myFunc.action("id", actionHandler).action("id1", actionHandler1);
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @param actionIdOrConstraints Provide an action_id string
|
|
117
|
+
* corresponding to the value supplied in your blocks or a
|
|
118
|
+
* constraint object of type ActionConstraints<SlackAction>
|
|
119
|
+
*
|
|
120
|
+
* ```
|
|
121
|
+
* Example:
|
|
122
|
+
* myFunc.action({ type: "action_submission" });
|
|
123
|
+
* myFunc.action({ action_id: "id" }, actionHandler);
|
|
124
|
+
* ```
|
|
125
|
+
* @param handler Provide a handler function
|
|
126
|
+
* @returns SlackFunction instance
|
|
127
|
+
*/
|
|
128
|
+
action(actionIdOrConstraints, handler) {
|
|
129
|
+
// normalize constraints
|
|
130
|
+
const constraints = (typeof actionIdOrConstraints === 'string' ||
|
|
131
|
+
util_1.default.types.isRegExp(actionIdOrConstraints)) ?
|
|
132
|
+
{ action_id: actionIdOrConstraints } :
|
|
133
|
+
actionIdOrConstraints;
|
|
134
|
+
// declare our valid constraints keys
|
|
135
|
+
const validConstraintsKeys = ['action_id', 'block_id', 'callback_id', 'type'];
|
|
136
|
+
// cast to string array for convenience
|
|
137
|
+
const validConstraintsKeysAsStrings = validConstraintsKeys;
|
|
138
|
+
errorIfInvalidConstraintKeys(constraints, validConstraintsKeysAsStrings, handler);
|
|
139
|
+
this.interactivityHandlers.push({ constraints, handler });
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Attach a view_submission or view_closed interactivity handler
|
|
144
|
+
* to your SlackFunction
|
|
145
|
+
*
|
|
146
|
+
* ```
|
|
147
|
+
* Example:
|
|
148
|
+
* const viewHandler = async () => {};
|
|
149
|
+
* const viewHandler1 = async () => {};
|
|
150
|
+
* myFunc.view("id", viewHandler).view("id1", viewHandler1)
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* @param callbackIdOrConstraints Provide a `callback_id` string
|
|
154
|
+
* a constraint object of type ViewConstraints
|
|
155
|
+
*
|
|
156
|
+
* ```
|
|
157
|
+
* Example:
|
|
158
|
+
* myFunc.view({ type: "view_submission" });
|
|
159
|
+
* myFunc.view({ callback_id: "id", }, viewHandler)
|
|
160
|
+
* ```
|
|
161
|
+
*
|
|
162
|
+
* @param handler Provide a handler function
|
|
163
|
+
* @returns SlackFunction instance
|
|
164
|
+
*/
|
|
165
|
+
view(callbackIdOrConstraints, handler) {
|
|
166
|
+
// normalize constraints
|
|
167
|
+
const constraints = (typeof callbackIdOrConstraints === 'string' ||
|
|
168
|
+
util_1.default.types.isRegExp(callbackIdOrConstraints)) ?
|
|
169
|
+
{ callback_id: callbackIdOrConstraints, type: 'view_submission' } :
|
|
170
|
+
callbackIdOrConstraints;
|
|
171
|
+
// declare our valid constraints keys
|
|
172
|
+
const validConstraintsKeys = ['callback_id', 'type'];
|
|
173
|
+
// cast to string array for convenience
|
|
174
|
+
const validConstraintsKeysAsStrings = validConstraintsKeys;
|
|
175
|
+
errorIfInvalidConstraintKeys(constraints, validConstraintsKeysAsStrings, handler);
|
|
176
|
+
this.interactivityHandlers.push({ constraints, handler });
|
|
177
|
+
return this;
|
|
178
|
+
}
|
|
179
|
+
matchesFuncConstraints(args) {
|
|
180
|
+
if ('function' in args.payload) {
|
|
181
|
+
return this.callbackId === args.payload.function.callback_id;
|
|
182
|
+
}
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Returns a a single middleware to global
|
|
187
|
+
* middleware chain. Responsible for returning
|
|
188
|
+
* handlers required for either function execution
|
|
189
|
+
* or function interactivity event handlering to
|
|
190
|
+
* the global event processing chain.
|
|
191
|
+
*/
|
|
192
|
+
getMiddleware() {
|
|
193
|
+
return (args) => {
|
|
194
|
+
// handle function executed event
|
|
195
|
+
if ((isFunctionExecutedEvent(args) && this.matchesFuncConstraints(args))) {
|
|
196
|
+
return this.runHandler(args);
|
|
197
|
+
}
|
|
198
|
+
// handle function interactivity events
|
|
199
|
+
if (isFunctionInteractivityEvent(args)) {
|
|
200
|
+
return this.runInteractivityHandlers(args);
|
|
201
|
+
}
|
|
202
|
+
// call the next middleware in the global middleware chain
|
|
203
|
+
return args.next();
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Ensure that SlackFunction `complete()` utility callback is provided
|
|
208
|
+
* as args to all function and interactivity handlers registered on
|
|
209
|
+
* SlackFunction instance
|
|
210
|
+
* @param args middleware arguments
|
|
211
|
+
*/
|
|
212
|
+
prepareFnArgs(args) {
|
|
213
|
+
var _a;
|
|
214
|
+
const { next: _next, ...subArgs } = args;
|
|
215
|
+
// eslint-disable-next-line
|
|
216
|
+
const preparedArgs = { ...subArgs };
|
|
217
|
+
// ensure all handlers have complete utility
|
|
218
|
+
preparedArgs.complete = (_a = preparedArgs.complete) !== null && _a !== void 0 ? _a : this.createComplete(preparedArgs);
|
|
219
|
+
return preparedArgs;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Creates a `complete()` utility function
|
|
223
|
+
*
|
|
224
|
+
* @param args
|
|
225
|
+
* @returns A `complete()` utility callback
|
|
226
|
+
* which can be accessed from any SlackFunction
|
|
227
|
+
* handler and used to to complete your SlackFunction.
|
|
228
|
+
*
|
|
229
|
+
* ```
|
|
230
|
+
* Example:
|
|
231
|
+
* const handler = async ({ complete }) => { complete() };
|
|
232
|
+
* const myFunc = new SlackFunction("id", handler);
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
// eslint-disable-next-line
|
|
236
|
+
createComplete(args) {
|
|
237
|
+
const { payload, body, client } = args;
|
|
238
|
+
// gets the function execution id from a function executed event
|
|
239
|
+
let { function_execution_id } = payload;
|
|
240
|
+
// gets the function execution id from the function data in a function interactivity event
|
|
241
|
+
if (function_execution_id === undefined && body !== undefined && 'function_data' in body) {
|
|
242
|
+
function_execution_id = body.function_data.execution_id;
|
|
243
|
+
}
|
|
244
|
+
// if stil undefined, error
|
|
245
|
+
if (function_execution_id === undefined) {
|
|
246
|
+
const msg = '⚠️ Cannot generate required complete utility without a function_execution_id';
|
|
247
|
+
throw new errors_1.SlackFunctionCompleteError(msg);
|
|
248
|
+
}
|
|
249
|
+
// return the utility callback
|
|
250
|
+
return ({ outputs, error } = {}) => {
|
|
251
|
+
// Slack API requires functions complete with either outputs or error, not both
|
|
252
|
+
if (outputs && error) {
|
|
253
|
+
throw new errors_1.SlackFunctionCompleteError('⚠️ Cannot complete with outputs and error message supplied');
|
|
254
|
+
}
|
|
255
|
+
// if user has supplied outputs OR has supplied neither outputs nor error
|
|
256
|
+
if (outputs !== undefined || (outputs === undefined && error === undefined)) {
|
|
257
|
+
// helpful logging
|
|
258
|
+
this.logger.debug('🚀 Attempting to complete with outputs:', outputs);
|
|
259
|
+
return client.apiCall('functions.completeSuccess', {
|
|
260
|
+
outputs: outputs !== null && outputs !== void 0 ? outputs : {},
|
|
261
|
+
function_execution_id,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
if (error !== undefined) {
|
|
265
|
+
this.logger.debug('🚀 Attempting to complete with error:', error);
|
|
266
|
+
return client.apiCall('functions.completeError', {
|
|
267
|
+
error,
|
|
268
|
+
function_execution_id,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
return null;
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
exports.SlackFunction = SlackFunction;
|
|
276
|
+
/* Event handling validation */
|
|
277
|
+
function isFunctionExecutedEvent(args) {
|
|
278
|
+
if (args.payload === undefined || args.payload === null) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
return (args.payload.type === 'function_executed');
|
|
282
|
+
}
|
|
283
|
+
exports.isFunctionExecutedEvent = isFunctionExecutedEvent;
|
|
284
|
+
function isFunctionInteractivityEvent(args) {
|
|
285
|
+
const allowedInteractivityTypes = [
|
|
286
|
+
'block_actions', 'view_submission', 'view_closed'
|
|
287
|
+
];
|
|
288
|
+
if (args.body === undefined || args.body === null)
|
|
289
|
+
return false;
|
|
290
|
+
return (allowedInteractivityTypes.includes(args.body.type) &&
|
|
291
|
+
('function_data' in args.body));
|
|
292
|
+
}
|
|
293
|
+
exports.isFunctionInteractivityEvent = isFunctionInteractivityEvent;
|
|
294
|
+
function passInteractivityConstraints(constraints, args) {
|
|
295
|
+
const { payload, body } = args;
|
|
296
|
+
if (!passConstraint('type', constraints, body))
|
|
297
|
+
return false;
|
|
298
|
+
if (!passConstraint('block_id', constraints, payload))
|
|
299
|
+
return false;
|
|
300
|
+
if (!passConstraint('action_id', constraints, payload))
|
|
301
|
+
return false;
|
|
302
|
+
if ('callback_id' in constraints) {
|
|
303
|
+
if ('view' in body) {
|
|
304
|
+
if (!passConstraint('callback_id', constraints, body.view))
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
function passConstraint(constraintKey, constraints,
|
|
314
|
+
// eslint-disable-next-line
|
|
315
|
+
payload) {
|
|
316
|
+
let regExpMatches;
|
|
317
|
+
let pass = true;
|
|
318
|
+
// user provided constraint key, e.g. action_id
|
|
319
|
+
if (constraintKey in constraints) {
|
|
320
|
+
// event payload contains constraint key
|
|
321
|
+
if (constraintKey in payload) {
|
|
322
|
+
// eslint-disable-next-line
|
|
323
|
+
// @ts-ignore - we ensure constraintKey exists in constraints above
|
|
324
|
+
const constraintVal = constraints[constraintKey];
|
|
325
|
+
if (typeof constraintVal === 'string') {
|
|
326
|
+
if (constraintVal !== payload[constraintKey]) {
|
|
327
|
+
pass = false;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
// treat constraintKey as regular expression and check payload for matches
|
|
332
|
+
regExpMatches = payload[constraintKey].match(constraintVal);
|
|
333
|
+
if (regExpMatches === null) {
|
|
334
|
+
pass = false;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
// user provided constraint, but payload doesn't contain key value
|
|
340
|
+
pass = false;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return pass;
|
|
344
|
+
}
|
|
345
|
+
exports.passConstraint = passConstraint;
|
|
346
|
+
// all tests to run
|
|
347
|
+
const validations = [hasCallbackId, hasMatchingManifestDefinition, hasHandler];
|
|
348
|
+
/* Initialization validators */
|
|
349
|
+
function validate(callbackId, handler) {
|
|
350
|
+
validations.forEach((test) => {
|
|
351
|
+
const res = test(callbackId, handler);
|
|
352
|
+
if (!res.pass) {
|
|
353
|
+
throw new errors_1.SlackFunctionInitializationError(res.msg);
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
exports.validate = validate;
|
|
358
|
+
function errorIfInvalidConstraintKeys(constraints, validKeys, handler) {
|
|
359
|
+
const invalidKeys = Object.keys(constraints).filter((key) => !validKeys.includes(key));
|
|
360
|
+
if (invalidKeys.length > 0) {
|
|
361
|
+
const msg = `⚠️ You supplied invalid constraints: ${invalidKeys} for handler: ${handler}`;
|
|
362
|
+
throw new errors_1.SlackFunctionInitializationError(msg);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
exports.errorIfInvalidConstraintKeys = errorIfInvalidConstraintKeys;
|
|
366
|
+
function hasCallbackId(callbackId, _) {
|
|
367
|
+
const res = { pass: true, msg: '' };
|
|
368
|
+
if (callbackId === undefined ||
|
|
369
|
+
typeof callbackId !== 'string' ||
|
|
370
|
+
callbackId === '') {
|
|
371
|
+
res.pass = false;
|
|
372
|
+
res.msg = 'SlackFunction expects a callback_id string as its first argument';
|
|
373
|
+
}
|
|
374
|
+
return res;
|
|
375
|
+
}
|
|
376
|
+
exports.hasCallbackId = hasCallbackId;
|
|
377
|
+
function hasMatchingManifestDefinition(callbackId, _) {
|
|
378
|
+
const res = { pass: true, msg: '' };
|
|
379
|
+
const { matchFound, fnKeys } = findMatchingManifestDefinition(callbackId);
|
|
380
|
+
if (!matchFound) {
|
|
381
|
+
res.pass = false;
|
|
382
|
+
res.msg = `Provided SlackFunction callback_id: "${callbackId}" does not have a matching manifest ` +
|
|
383
|
+
'definition. Please check your manifest file.\n' +
|
|
384
|
+
`Definitions we were able to find: ${fnKeys}`;
|
|
385
|
+
}
|
|
386
|
+
return res;
|
|
387
|
+
}
|
|
388
|
+
exports.hasMatchingManifestDefinition = hasMatchingManifestDefinition;
|
|
389
|
+
function findMatchingManifestDefinition(callbackId) {
|
|
390
|
+
const result = { matchFound: false, fnKeys: [] };
|
|
391
|
+
// call the hook to get the manifest
|
|
392
|
+
const manifest = exports.manifestUtil.getManifestData(process.cwd());
|
|
393
|
+
// manifest file must exist in the project
|
|
394
|
+
if (!('functions' in manifest)) {
|
|
395
|
+
const msg = '⚠️ Could not find functions in your project manifest.';
|
|
396
|
+
throw new errors_1.SlackFunctionInitializationError(msg);
|
|
397
|
+
}
|
|
398
|
+
try {
|
|
399
|
+
// set the keys
|
|
400
|
+
result.fnKeys = Object.keys(manifest.functions);
|
|
401
|
+
result.matchFound = result.fnKeys.includes(callbackId);
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
throw new errors_1.SlackFunctionInitializationError('Something went wrong when trying to read your manifest function definitions');
|
|
405
|
+
}
|
|
406
|
+
return result;
|
|
407
|
+
}
|
|
408
|
+
exports.findMatchingManifestDefinition = findMatchingManifestDefinition;
|
|
409
|
+
function hasHandler(_, handler) {
|
|
410
|
+
const res = { pass: true, msg: '' };
|
|
411
|
+
if (handler === undefined) {
|
|
412
|
+
res.pass = false;
|
|
413
|
+
res.msg = 'You must provide a SlackFunction handler';
|
|
414
|
+
}
|
|
415
|
+
return res;
|
|
416
|
+
}
|
|
417
|
+
exports.hasHandler = hasHandler;
|
|
418
|
+
//# sourceMappingURL=SlackFunction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackFunction.js","sourceRoot":"","sources":["../src/SlackFunction.ts"],"names":[],"mappings":"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"}
|