@botpress/sdk 1.6.3 → 2.0.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/.turbo/turbo-build.log +3 -3
- package/dist/bot/client/index.d.ts +1 -0
- package/dist/bot/client/types.d.ts +2 -0
- package/dist/bot/definition.d.ts +31 -8
- package/dist/bot/implementation.d.ts +561 -150
- package/dist/bot/merge-bots.d.ts +2 -0
- package/dist/bot/server/types.d.ts +174 -84
- package/dist/bot/types/generic.d.ts +11 -1
- package/dist/fixtures.d.ts +31 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/integration/definition/generic.d.ts +7 -7
- package/dist/integration/definition/index.d.ts +8 -8
- package/dist/integration/definition/types.d.ts +2 -2
- package/dist/interface/definition.d.ts +12 -12
- package/dist/interface/types/generic.d.ts +34 -0
- package/dist/interface/types/generic.test.d.ts +1 -0
- package/dist/package.d.ts +29 -11
- package/dist/plugin/definition.d.ts +50 -0
- package/dist/plugin/implementation.d.ts +900 -0
- package/dist/plugin/index.d.ts +3 -0
- package/dist/plugin/server/types.d.ts +1 -0
- package/dist/plugin/server/types.test.d.ts +1 -0
- package/dist/plugin/types/generic.d.ts +30 -0
- package/dist/plugin/types/generic.test.d.ts +1 -0
- package/dist/schema.d.ts +3 -3
- package/dist/utils/array-utils.d.ts +1 -1
- package/dist/utils/record-utils.d.ts +1 -0
- package/dist/zui.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as client from '@botpress/client';
|
|
2
|
+
import * as plugin from '../../plugin';
|
|
2
3
|
import * as utils from '../../utils/type-utils';
|
|
3
4
|
import { BotSpecificClient } from '../client';
|
|
4
5
|
import * as types from '../types';
|
|
@@ -11,25 +12,25 @@ export type BotContext = {
|
|
|
11
12
|
payload: string;
|
|
12
13
|
};
|
|
13
14
|
};
|
|
14
|
-
type
|
|
15
|
+
type _IncomingEvents<TBot extends types.BaseBot> = {
|
|
15
16
|
[K in keyof types.EnumerateEvents<TBot>]: utils.Merge<client.Event, {
|
|
16
17
|
type: K;
|
|
17
18
|
payload: types.EnumerateEvents<TBot>[K];
|
|
18
19
|
}>;
|
|
19
20
|
};
|
|
20
|
-
type
|
|
21
|
+
type _IncomingMessages<TBot extends types.BaseBot> = {
|
|
21
22
|
[K in keyof types.GetMessages<TBot>]: utils.Merge<client.Message, {
|
|
22
23
|
type: K;
|
|
23
24
|
payload: types.GetMessages<TBot>[K];
|
|
24
25
|
}>;
|
|
25
26
|
};
|
|
26
|
-
type
|
|
27
|
+
type _OutgoingMessageRequests<TBot extends types.BaseBot> = {
|
|
27
28
|
[K in keyof types.GetMessages<TBot>]: utils.Merge<client.ClientInputs['createMessage'], {
|
|
28
29
|
type: K;
|
|
29
30
|
payload: types.GetMessages<TBot>[K];
|
|
30
31
|
}>;
|
|
31
32
|
};
|
|
32
|
-
type
|
|
33
|
+
type _OutgoingMessageResponses<TBot extends types.BaseBot> = {
|
|
33
34
|
[K in keyof types.GetMessages<TBot>]: utils.Merge<client.ClientOutputs['createMessage'], {
|
|
34
35
|
message: utils.Merge<client.Message, {
|
|
35
36
|
type: K;
|
|
@@ -37,126 +38,215 @@ type OutgoingMessageResponses<TBot extends types.BaseBot> = {
|
|
|
37
38
|
}>;
|
|
38
39
|
}>;
|
|
39
40
|
};
|
|
40
|
-
type
|
|
41
|
+
type _OutgoingCallActionRequests<TBot extends types.BaseBot> = {
|
|
41
42
|
[K in keyof types.EnumerateActionInputs<TBot>]: utils.Merge<client.ClientInputs['callAction'], {
|
|
42
43
|
type: K;
|
|
43
44
|
input: types.EnumerateActionInputs<TBot>[K];
|
|
44
45
|
}>;
|
|
45
46
|
};
|
|
46
|
-
type
|
|
47
|
+
type _OutgoingCallActionResponses<TBot extends types.BaseBot> = {
|
|
47
48
|
[K in keyof types.EnumerateActionOutputs<TBot>]: utils.Merge<client.ClientOutputs['callAction'], {
|
|
48
49
|
output: types.EnumerateActionOutputs<TBot>[K];
|
|
49
50
|
}>;
|
|
50
51
|
};
|
|
51
|
-
export type
|
|
52
|
-
export type
|
|
53
|
-
export type
|
|
54
|
-
export type
|
|
55
|
-
export type
|
|
56
|
-
export type
|
|
52
|
+
export type AnyIncomingEvent<TBot extends types.BaseBot> = TBot['unknownDefinitions'] extends true ? client.Event : utils.ValueOf<_IncomingEvents<TBot>>;
|
|
53
|
+
export type AnyIncomingMessage<TBot extends types.BaseBot> = TBot['unknownDefinitions'] extends true ? client.Message : utils.ValueOf<_IncomingMessages<TBot>>;
|
|
54
|
+
export type AnyOutgoingMessageRequest<TBot extends types.BaseBot> = TBot['unknownDefinitions'] extends true ? client.ClientInputs['createMessage'] : utils.ValueOf<_OutgoingMessageRequests<TBot>>;
|
|
55
|
+
export type AnyOutgoingMessageResponse<TBot extends types.BaseBot> = TBot['unknownDefinitions'] extends true ? client.ClientOutputs['createMessage'] : utils.ValueOf<_OutgoingMessageResponses<TBot>>;
|
|
56
|
+
export type AnyOutgoingCallActionRequest<TBot extends types.BaseBot> = TBot['unknownDefinitions'] extends true ? client.ClientInputs['callAction'] : utils.ValueOf<_OutgoingCallActionRequests<TBot>>;
|
|
57
|
+
export type AnyOutgoingCallActionResponse<TBot extends types.BaseBot> = TBot['unknownDefinitions'] extends true ? client.ClientOutputs['callAction'] : utils.ValueOf<_OutgoingCallActionResponses<TBot>>;
|
|
58
|
+
export type IncomingEvents<TBot extends types.BaseBot> = _IncomingEvents<TBot> & {
|
|
59
|
+
'*': AnyIncomingEvent<TBot>;
|
|
60
|
+
};
|
|
61
|
+
export type IncomingMessages<TBot extends types.BaseBot> = _IncomingMessages<TBot> & {
|
|
62
|
+
'*': AnyIncomingMessage<TBot>;
|
|
63
|
+
};
|
|
64
|
+
export type IncomingStates<_TBot extends types.BaseBot> = {
|
|
65
|
+
'*': client.State;
|
|
66
|
+
};
|
|
67
|
+
export type OutgoingMessageRequests<TBot extends types.BaseBot> = _OutgoingMessageRequests<TBot> & {
|
|
68
|
+
'*': AnyOutgoingMessageRequest<TBot>;
|
|
69
|
+
};
|
|
70
|
+
export type OutgoingMessageResponses<TBot extends types.BaseBot> = _OutgoingMessageResponses<TBot> & {
|
|
71
|
+
'*': AnyOutgoingMessageResponse<TBot>;
|
|
72
|
+
};
|
|
73
|
+
export type OutgoingCallActionRequests<TBot extends types.BaseBot> = _OutgoingCallActionRequests<TBot> & {
|
|
74
|
+
'*': AnyOutgoingCallActionRequest<TBot>;
|
|
75
|
+
};
|
|
76
|
+
export type OutgoingCallActionResponses<TBot extends types.BaseBot> = _OutgoingCallActionResponses<TBot> & {
|
|
77
|
+
'*': AnyOutgoingCallActionResponse<TBot>;
|
|
78
|
+
};
|
|
79
|
+
export type BotClient<TBot extends types.BaseBot> = TBot['unknownDefinitions'] extends true ? BotSpecificClient<types.BaseBot> : BotSpecificClient<TBot>;
|
|
57
80
|
export type CommonHandlerProps<TBot extends types.BaseBot> = {
|
|
58
81
|
ctx: BotContext;
|
|
59
|
-
client:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
client: BotClient<TBot>;
|
|
83
|
+
};
|
|
84
|
+
export type MessagePayloads<TBot extends types.BaseBot> = {
|
|
85
|
+
[K in keyof IncomingMessages<TBot>]: {
|
|
86
|
+
message: IncomingMessages<TBot>[K];
|
|
87
|
+
user: client.User;
|
|
88
|
+
conversation: client.Conversation;
|
|
89
|
+
event: client.Event;
|
|
90
|
+
states: {
|
|
91
|
+
[TState in keyof TBot['states']]: {
|
|
92
|
+
type: 'user' | 'conversation' | 'bot';
|
|
93
|
+
payload: TBot['states'][TState];
|
|
94
|
+
};
|
|
71
95
|
};
|
|
72
96
|
};
|
|
73
97
|
};
|
|
74
|
-
export type
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
export type MessageHandlers<TBot extends types.BaseBot> = {
|
|
99
|
+
[K in keyof IncomingMessages<TBot>]: (args: CommonHandlerProps<TBot> & MessagePayloads<TBot>[K]) => Promise<void>;
|
|
100
|
+
};
|
|
101
|
+
export type EventPayloads<TBot extends types.BaseBot> = {
|
|
102
|
+
[K in keyof IncomingEvents<TBot>]: {
|
|
103
|
+
event: IncomingEvents<TBot>[K];
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
export type EventHandlers<TBot extends types.BaseBot> = {
|
|
107
|
+
[K in keyof IncomingEvents<TBot>]: (args: CommonHandlerProps<TBot> & EventPayloads<TBot>[K]) => Promise<void>;
|
|
108
|
+
};
|
|
109
|
+
export type StateExpiredPayloads<TBot extends types.BaseBot> = {
|
|
110
|
+
[K in keyof IncomingStates<TBot>]: {
|
|
111
|
+
state: IncomingStates<TBot>[K];
|
|
112
|
+
};
|
|
78
113
|
};
|
|
79
|
-
export type
|
|
80
|
-
|
|
81
|
-
export type StateExpiredPayload<_TBot extends types.BaseBot> = {
|
|
82
|
-
state: client.State;
|
|
114
|
+
export type StateExpiredHandlers<TBot extends types.BaseBot> = {
|
|
115
|
+
[K in keyof IncomingStates<TBot>]: (args: CommonHandlerProps<TBot> & StateExpiredPayloads<TBot>[K]) => Promise<void>;
|
|
83
116
|
};
|
|
84
|
-
export type StateExpiredHandlerProps<TBot extends types.BaseBot> = CommonHandlerProps<TBot> & StateExpiredPayload<TBot>;
|
|
85
|
-
export type StateExpiredHandler<TBot extends types.BaseBot> = (args: StateExpiredHandlerProps<TBot>) => Promise<void>;
|
|
86
117
|
export type ActionHandlerPayloads<TBot extends types.BaseBot> = {
|
|
87
118
|
[K in keyof TBot['actions']]: {
|
|
88
119
|
type?: K;
|
|
89
120
|
input: TBot['actions'][K]['input'];
|
|
90
121
|
};
|
|
91
122
|
};
|
|
92
|
-
export type ActionHandlerProps<TBot extends types.BaseBot> = {
|
|
93
|
-
[K in keyof TBot['actions']]: CommonHandlerProps<TBot> & ActionHandlerPayloads<TBot>[K];
|
|
94
|
-
};
|
|
95
123
|
export type ActionHandlers<TBot extends types.BaseBot> = {
|
|
96
|
-
[K in keyof TBot['actions']]: (props:
|
|
124
|
+
[K in keyof TBot['actions']]: (props: CommonHandlerProps<TBot> & ActionHandlerPayloads<TBot>[K]) => Promise<TBot['actions'][K]['output']>;
|
|
125
|
+
};
|
|
126
|
+
type BaseHookDefinition = {
|
|
127
|
+
stoppable?: boolean;
|
|
128
|
+
data: any;
|
|
97
129
|
};
|
|
130
|
+
type HookDefinition<THookDef extends BaseHookDefinition = BaseHookDefinition> = THookDef;
|
|
98
131
|
/**
|
|
99
|
-
* TODO:
|
|
100
|
-
*
|
|
101
|
-
*
|
|
132
|
+
* TODO: add hooks for:
|
|
133
|
+
* - before_register
|
|
134
|
+
* - after_register
|
|
135
|
+
* - before_state_expired
|
|
136
|
+
* - after_state_expired
|
|
137
|
+
* - before_incoming_call_action
|
|
138
|
+
* - after_incoming_call_action
|
|
102
139
|
*/
|
|
103
140
|
export type HookDefinitions<TBot extends types.BaseBot> = {
|
|
104
|
-
before_incoming_event:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
141
|
+
before_incoming_event: HookDefinition<{
|
|
142
|
+
stoppable: true;
|
|
143
|
+
data: _IncomingEvents<TBot> & {
|
|
144
|
+
'*': AnyIncomingEvent<TBot>;
|
|
145
|
+
};
|
|
146
|
+
}>;
|
|
147
|
+
before_incoming_message: HookDefinition<{
|
|
148
|
+
stoppable: true;
|
|
149
|
+
data: _IncomingMessages<TBot> & {
|
|
150
|
+
'*': AnyIncomingMessage<TBot>;
|
|
151
|
+
};
|
|
152
|
+
}>;
|
|
153
|
+
before_outgoing_message: HookDefinition<{
|
|
154
|
+
stoppable: false;
|
|
155
|
+
data: _OutgoingMessageRequests<TBot> & {
|
|
156
|
+
'*': AnyOutgoingMessageRequest<TBot>;
|
|
157
|
+
};
|
|
158
|
+
}>;
|
|
159
|
+
before_outgoing_call_action: HookDefinition<{
|
|
160
|
+
stoppable: false;
|
|
161
|
+
data: _OutgoingCallActionRequests<TBot> & {
|
|
162
|
+
'*': AnyOutgoingCallActionRequest<TBot>;
|
|
163
|
+
};
|
|
164
|
+
}>;
|
|
165
|
+
after_incoming_event: HookDefinition<{
|
|
166
|
+
stoppable: true;
|
|
167
|
+
data: _IncomingEvents<TBot> & {
|
|
168
|
+
'*': AnyIncomingEvent<TBot>;
|
|
169
|
+
};
|
|
170
|
+
}>;
|
|
171
|
+
after_incoming_message: HookDefinition<{
|
|
172
|
+
stoppable: true;
|
|
173
|
+
data: _IncomingMessages<TBot> & {
|
|
174
|
+
'*': AnyIncomingMessage<TBot>;
|
|
175
|
+
};
|
|
176
|
+
}>;
|
|
177
|
+
after_outgoing_message: HookDefinition<{
|
|
178
|
+
stoppable: false;
|
|
179
|
+
data: _OutgoingMessageResponses<TBot> & {
|
|
180
|
+
'*': AnyOutgoingMessageResponse<TBot>;
|
|
181
|
+
};
|
|
182
|
+
}>;
|
|
183
|
+
after_outgoing_call_action: HookDefinition<{
|
|
184
|
+
stoppable: false;
|
|
185
|
+
data: _OutgoingCallActionResponses<TBot> & {
|
|
186
|
+
'*': AnyOutgoingCallActionResponse<TBot>;
|
|
187
|
+
};
|
|
188
|
+
}>;
|
|
189
|
+
};
|
|
190
|
+
export type HookData<TBot extends types.BaseBot> = {
|
|
191
|
+
[H in keyof HookDefinitions<TBot>]: {
|
|
192
|
+
[T in keyof HookDefinitions<TBot>[H]['data']]: HookDefinitions<TBot>[H]['data'][T];
|
|
127
193
|
};
|
|
128
194
|
};
|
|
129
195
|
export type HookInputs<TBot extends types.BaseBot> = {
|
|
130
|
-
[H in keyof
|
|
131
|
-
[T in keyof
|
|
132
|
-
|
|
133
|
-
ctx: BotContext;
|
|
134
|
-
data: HookDefinitions<TBot>[H][T];
|
|
196
|
+
[H in keyof HookData<TBot>]: {
|
|
197
|
+
[T in keyof HookData<TBot>[H]]: CommonHandlerProps<TBot> & {
|
|
198
|
+
data: HookData<TBot>[H][T];
|
|
135
199
|
};
|
|
136
200
|
};
|
|
137
201
|
};
|
|
138
202
|
export type HookOutputs<TBot extends types.BaseBot> = {
|
|
139
|
-
[H in keyof
|
|
140
|
-
[T in keyof
|
|
141
|
-
data
|
|
142
|
-
}
|
|
203
|
+
[H in keyof HookData<TBot>]: {
|
|
204
|
+
[T in keyof HookData<TBot>[H]]: {
|
|
205
|
+
data?: HookData<TBot>[H][T];
|
|
206
|
+
} & (HookDefinitions<TBot>[H]['stoppable'] extends true ? {
|
|
207
|
+
stop?: boolean;
|
|
208
|
+
} : {});
|
|
143
209
|
};
|
|
144
210
|
};
|
|
145
|
-
export type
|
|
146
|
-
[H in keyof
|
|
147
|
-
[T in keyof
|
|
211
|
+
export type HookHandlers<TBot extends types.BaseBot> = {
|
|
212
|
+
[H in keyof HookData<TBot>]: {
|
|
213
|
+
[T in keyof HookData<TBot>[H]]: (input: HookInputs<TBot>[H][T]) => Promise<HookOutputs<TBot>[H][T] | undefined>;
|
|
148
214
|
};
|
|
149
215
|
};
|
|
150
|
-
export type
|
|
151
|
-
[
|
|
152
|
-
|
|
216
|
+
export type MessageHandlersMap<TBot extends types.BaseBot> = {
|
|
217
|
+
[T in keyof IncomingMessages<TBot>]?: MessageHandlers<TBot>[T][];
|
|
218
|
+
};
|
|
219
|
+
export type EventHandlersMap<TBot extends types.BaseBot> = {
|
|
220
|
+
[T in keyof IncomingEvents<TBot>]?: EventHandlers<TBot>[T][];
|
|
221
|
+
};
|
|
222
|
+
export type StateExpiredHandlersMap<TBot extends types.BaseBot> = {
|
|
223
|
+
[T in keyof IncomingStates<TBot>]?: StateExpiredHandlers<TBot>[T][];
|
|
224
|
+
};
|
|
225
|
+
export type HookHandlersMap<TBot extends types.BaseBot> = {
|
|
226
|
+
[H in keyof HookData<TBot>]: {
|
|
227
|
+
[T in keyof HookData<TBot>[H]]?: HookHandlers<TBot>[H][T][];
|
|
153
228
|
};
|
|
154
229
|
};
|
|
230
|
+
export type BotActionHandlers<TBot extends types.BaseBot> = ActionHandlers<TBot>;
|
|
231
|
+
export type BotMessageHandlers<TBot extends types.BaseBot> = MessageHandlersMap<TBot>;
|
|
232
|
+
export type BotEventHandlers<TBot extends types.BaseBot> = EventHandlersMap<TBot>;
|
|
233
|
+
export type BotStateExpiredHandlers<TBot extends types.BaseBot> = StateExpiredHandlersMap<TBot>;
|
|
234
|
+
export type BotHookHandlers<TBot extends types.BaseBot> = HookHandlersMap<TBot>;
|
|
155
235
|
export type BotHandlers<TBot extends types.BaseBot> = {
|
|
156
|
-
actionHandlers:
|
|
157
|
-
messageHandlers:
|
|
158
|
-
eventHandlers:
|
|
159
|
-
stateExpiredHandlers:
|
|
160
|
-
|
|
236
|
+
actionHandlers: BotActionHandlers<TBot>;
|
|
237
|
+
messageHandlers: BotMessageHandlers<TBot>;
|
|
238
|
+
eventHandlers: BotEventHandlers<TBot>;
|
|
239
|
+
stateExpiredHandlers: BotStateExpiredHandlers<TBot>;
|
|
240
|
+
hookHandlers: BotHookHandlers<TBot>;
|
|
241
|
+
};
|
|
242
|
+
type ImplementedActions<_TBot extends types.BaseBot, TPlugins extends Record<string, plugin.BasePlugin>> = utils.UnionToIntersection<utils.ValueOf<{
|
|
243
|
+
[K in keyof TPlugins]: TPlugins[K]['actions'];
|
|
244
|
+
}>>;
|
|
245
|
+
type UnimplementedActions<TBot extends types.BaseBot, TPlugins extends Record<string, plugin.BasePlugin>> = Omit<TBot['actions'], keyof ImplementedActions<TBot, TPlugins>>;
|
|
246
|
+
export type ImplementedActionHandlers<TBot extends types.BaseBot, TPlugins extends Record<string, plugin.BasePlugin>> = {
|
|
247
|
+
[K in keyof ImplementedActions<TBot, TPlugins>]: ActionHandlers<TBot>[utils.Cast<K, keyof ActionHandlers<TBot>>];
|
|
248
|
+
};
|
|
249
|
+
export type UnimplementedActionHandlers<TBot extends types.BaseBot, TPlugins extends Record<string, plugin.BasePlugin>> = {
|
|
250
|
+
[K in keyof UnimplementedActions<TBot, TPlugins>]: ActionHandlers<TBot>[utils.Cast<K, keyof ActionHandlers<TBot>>];
|
|
161
251
|
};
|
|
162
252
|
export {};
|
|
@@ -10,11 +10,21 @@ export type BaseBot = {
|
|
|
10
10
|
events: Record<string, any>;
|
|
11
11
|
states: Record<string, any>;
|
|
12
12
|
actions: Record<string, BaseAction>;
|
|
13
|
+
/**
|
|
14
|
+
* In a bot, all events, actions, states, and integrations definitions are known.
|
|
15
|
+
* This mean the Bot typings should not allow for unknown types.
|
|
16
|
+
*
|
|
17
|
+
* In a plugin, we don't known about extra definitions of the bot that installed the plugin.
|
|
18
|
+
* This mean the Plugin typings should allow for unknown types.
|
|
19
|
+
*/
|
|
20
|
+
unknownDefinitions: boolean;
|
|
13
21
|
};
|
|
14
|
-
export type
|
|
22
|
+
export type InputBaseBot = utils.DeepPartial<BaseBot>;
|
|
23
|
+
export type DefaultBot<B extends InputBaseBot> = {
|
|
15
24
|
events: utils.Default<B['events'], BaseBot['events']>;
|
|
16
25
|
states: utils.Default<B['states'], BaseBot['states']>;
|
|
17
26
|
actions: utils.Default<B['actions'], BaseBot['actions']>;
|
|
27
|
+
unknownDefinitions: utils.Default<B['unknownDefinitions'], BaseBot['unknownDefinitions']>;
|
|
18
28
|
integrations: undefined extends B['integrations'] ? BaseBot['integrations'] : {
|
|
19
29
|
[K in keyof B['integrations']]: DefaultIntegration<utils.Cast<B['integrations'][K], InputBaseIntegration>>;
|
|
20
30
|
};
|
package/dist/fixtures.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DefaultBot } from './bot/types/generic';
|
|
2
2
|
import { DefaultChannel, DefaultIntegration } from './integration/types/generic';
|
|
3
|
+
import { DefaultPlugin } from './plugin/types/generic';
|
|
3
4
|
type _FooBarBazIntegration = {
|
|
4
5
|
actions: {
|
|
5
6
|
doFoo: {
|
|
@@ -67,6 +68,31 @@ export type FooBarBazBot = DefaultBot<{
|
|
|
67
68
|
integrations: {
|
|
68
69
|
fooBarBaz: _FooBarBazIntegration;
|
|
69
70
|
};
|
|
71
|
+
actions: {
|
|
72
|
+
act: {
|
|
73
|
+
input: {
|
|
74
|
+
arguments: Record<string, unknown>;
|
|
75
|
+
};
|
|
76
|
+
output: {
|
|
77
|
+
result: unknown;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
}>;
|
|
82
|
+
export type FooBarBazPlugin = DefaultPlugin<{
|
|
83
|
+
integrations: {
|
|
84
|
+
fooBarBaz: _FooBarBazIntegration;
|
|
85
|
+
};
|
|
86
|
+
actions: {
|
|
87
|
+
act: {
|
|
88
|
+
input: {
|
|
89
|
+
arguments: Record<string, unknown>;
|
|
90
|
+
};
|
|
91
|
+
output: {
|
|
92
|
+
result: unknown;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
};
|
|
70
96
|
}>;
|
|
71
97
|
export type EmptyBot = DefaultBot<{
|
|
72
98
|
integrations: {};
|
|
@@ -74,4 +100,9 @@ export type EmptyBot = DefaultBot<{
|
|
|
74
100
|
states: {};
|
|
75
101
|
actions: {};
|
|
76
102
|
}>;
|
|
103
|
+
export type EmptyPlugin = DefaultPlugin<{
|
|
104
|
+
integrations: {};
|
|
105
|
+
actions: {};
|
|
106
|
+
events: {};
|
|
107
|
+
}>;
|
|
77
108
|
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export {
|
|
|
9
9
|
* @deprecated use Context exported from '.botpress' instead
|
|
10
10
|
*/
|
|
11
11
|
IntegrationContext, } from './integration/server';
|
|
12
|
-
export { DefaultBot, BotDefinition, BotDefinitionProps, BotImplementation as Bot, BotImplementationProps as BotProps, BotSpecificClient, TagDefinition as BotTagDefinition, StateType as BotStateType, StateDefinition as BotStateDefinition, RecurringEventDefinition as BotRecurringEventDefinition, EventDefinition as BotEventDefinition, ConfigurationDefinition as BotConfigurationDefinition, UserDefinition as BotUserDefinition, ConversationDefinition as BotConversationDefinition, MessageDefinition as BotMessageDefinition, ActionDefinition as BotActionDefinition, } from './bot';
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
12
|
+
export { DefaultBot, BotDefinition, BotDefinitionProps, BotImplementation as Bot, BotImplementationProps as BotProps, BotSpecificClient, BotHandlers, TagDefinition as BotTagDefinition, StateType as BotStateType, StateDefinition as BotStateDefinition, RecurringEventDefinition as BotRecurringEventDefinition, EventDefinition as BotEventDefinition, ConfigurationDefinition as BotConfigurationDefinition, UserDefinition as BotUserDefinition, ConversationDefinition as BotConversationDefinition, MessageDefinition as BotMessageDefinition, ActionDefinition as BotActionDefinition, } from './bot';
|
|
13
|
+
export { InterfaceDefinition, InterfaceDefinitionProps, } from './interface';
|
|
14
|
+
export { DefaultPlugin, PluginDefinition, PluginImplementation as Plugin, } from './plugin';
|
|
15
|
+
export { IntegrationPackage, InterfacePackage, PluginPackage, } from './package';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var Ie=Object.create;var D=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Ee=Object.getPrototypeOf,Se=Object.prototype.hasOwnProperty;var C=(t,e)=>{for(var n in e)D(t,n,{get:e[n],enumerable:!0})},P=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of _e(e))!Se.call(t,a)&&a!==n&&D(t,a,{get:()=>e[a],enumerable:!(i=Ce(e,a))||i.enumerable});return t},l=(t,e,n)=>(P(t,e,"default"),n&&P(n,e,"default")),Q=(t,e,n)=>(n=t!=null?Ie(Ee(t)):{},P(e||!t||!t.__esModule?D(n,"default",{value:t,enumerable:!0}):n,t)),xe=t=>P(D({},"__esModule",{value:!0}),t);var h={};C(h,{Bot:()=>G,BotDefinition:()=>F,BotSpecificClient:()=>T,Integration:()=>K,IntegrationDefinition:()=>U,IntegrationSpecificClient:()=>v,InterfaceDeclaration:()=>j,RuntimeError:()=>N.RuntimeError,botIdHeader:()=>_,botUserIdHeader:()=>z,configurationHeader:()=>E,configurationTypeHeader:()=>J,integrationIdHeader:()=>$,isApiError:()=>N.isApiError,messages:()=>Z,operationHeader:()=>S,parseBody:()=>f,serve:()=>x,typeHeader:()=>q,webhookIdHeader:()=>V});module.exports=xe(h);var Z={};C(Z,{defaults:()=>Ae,markdown:()=>we});var r={};C(r,{default:()=>L});var X=require("@bpinternal/zui");l(r,require("@bpinternal/zui"));var L=X.z;var g=r.z.string().min(1),ee=r.z.object({text:g}),te=r.z.object({markdown:g}),ne=r.z.object({imageUrl:g}),se=r.z.object({audioUrl:g}),ie=r.z.object({videoUrl:g}),oe=r.z.object({fileUrl:g,title:g.optional()}),ae=r.z.object({latitude:r.z.number(),longitude:r.z.number(),address:r.z.string().optional(),title:r.z.string().optional()}),re=r.z.object({title:g,subtitle:g.optional(),imageUrl:g.optional(),actions:r.z.array(r.z.object({action:r.z.enum(["postback","url","say"]),label:g,value:g}))}),Y=r.z.object({text:g,options:r.z.array(r.z.object({label:g,value:g}))}),ke=r.z.object({items:r.z.array(re)}),Pe=r.z.union([r.z.object({type:r.z.literal("text"),payload:ee}),r.z.object({type:r.z.literal("markdown"),payload:te}),r.z.object({type:r.z.literal("image"),payload:ne}),r.z.object({type:r.z.literal("audio"),payload:se}),r.z.object({type:r.z.literal("video"),payload:ie}),r.z.object({type:r.z.literal("file"),payload:oe}),r.z.object({type:r.z.literal("location"),payload:ae})]),De=r.z.object({items:r.z.array(Pe)}),we={schema:te},Ae={text:{schema:ee},image:{schema:ne},audio:{schema:se},video:{schema:ie},file:{schema:oe},location:{schema:ae},carousel:{schema:ke},card:{schema:re},dropdown:{schema:Y},choice:{schema:Y},bloc:{schema:De}};var _="x-bot-id",z="x-bot-user-id",$="x-integration-id",V="x-webhook-id",J="x-bp-configuration-type",E="x-bp-configuration",S="x-bp-operation",q="x-bp-type";var ce=require("node:http");var B=console;function f(t){if(!t.body)throw new Error("Missing body");return JSON.parse(t.body)}async function x(t,e=8072,n=Oe){let i=(0,ce.createServer)(async(a,o)=>{try{let s=await Ue(a);if(s.path==="/health"){o.writeHead(200).end("ok");return}let c=await t(s);o.writeHead(c?.status??200,c?.headers??{}).end(c?.body??"{}")}catch(s){B.error("Error while handling request",{error:s?.message??"Internal error occured"}),o.writeHead(500).end(JSON.stringify({error:s?.message??"Internal error occured"}))}});return i.listen(e,()=>n(e)),i}async function Ue(t){let e=await Re(t),n={};for(let a=0;a<t.rawHeaders.length;a+=2){let o=t.rawHeaders[a].toLowerCase(),s=t.rawHeaders[a+1];n[o]=s}let i=new URL(t.url??"",t.headers.host?`http://${t.headers.host}`:"http://botpress.cloud");return{body:e,path:i.pathname,query:Me(i.search,"?"),headers:n,method:t.method?.toUpperCase()??"GET"}}function Me(t,e){return t.indexOf(e)===0?t.slice(e.length):t}async function Re(t){return new Promise((e,n)=>{if(t.method!=="POST"&&t.method!=="PUT"&&t.method!=="PATCH")return e(void 0);let i="";t.on("data",a=>i+=a.toString()),t.on("error",a=>n(a)),t.on("end",()=>e(i))})}function Oe(t){B.info(`Listening on port ${t}`)}l(h,r,module.exports);var N=require("@botpress/client");var m={};C(m,{mapValues:()=>He,pairs:()=>pe});var pe=t=>Object.entries(t),He=(t,e)=>Object.fromEntries(pe(t).map(([n,i])=>[n,e(i,n)]));var y={};C(y,{safePush:()=>Ke});var Ke=(t,e)=>t?[...t,e]:[e];var A=Symbol("schemaName"),le=t=>t?m.mapValues(t,(n,i)=>({...n,[A]:i})):{},ge=t=>A in t&&t[A]!==void 0,de=t=>t[A];var U=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.icon=e.icon,this.readme=e.readme,this.title=e.title,this.identifier=e.identifier,this.description=e.description,this.configuration=e.configuration,this.configurations=e.configurations,this.events=e.events,this.actions=e.actions,this.channels=e.channels,this.states=e.states,this.user=e.user,this.secrets=e.secrets,this.entities=e.entities,this.interfaces=e.interfaces}name;version;title;description;icon;readme;configuration;configurations;events;actions;channels;states;user;secrets;identifier;entities;interfaces;extend(e,n){let i=n(le(this.entities)),a=m.pairs(i).find(([d,u])=>!ge(u));if(a)throw new Error(`Cannot extend interface "${e.definition.name}" with entity "${a[0]}"; the provided schema is not part of the integration's entities.`);let o=this;o.interfaces??={};let s=m.mapValues(i,d=>({name:de(d),schema:d.schema})),c=Object.values(s).map(d=>d.name),p=c.length===0?e.definition.name:`${e.definition.name}<${c.join(",")}>`;return o.interfaces[p]={...e,entities:s},this}};var b=require("@botpress/client");var ue=require("@botpress/client"),M={retries:3,retryCondition:t=>ue.axiosRetry.isNetworkOrIdempotentRequestError(t)||[429,502].includes(t.response?.status??0),retryDelay:t=>t*1e3};var v=class{constructor(e){this._client=e}createConversation=e=>this._client.createConversation(e);getConversation=e=>this._client.getConversation(e);listConversations=e=>this._client.listConversations(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);updateConversation=e=>this._client.updateConversation(e);deleteConversation=e=>this._client.deleteConversation(e);listParticipants=e=>this._client.listParticipants(e);addParticipant=e=>this._client.addParticipant(e);getParticipant=e=>this._client.getParticipant(e);removeParticipant=e=>this._client.removeParticipant(e);createEvent=e=>this._client.createEvent(e);getEvent=e=>this._client.getEvent(e);listEvents=e=>this._client.listEvents(e);createMessage=e=>this._client.createMessage(e);getOrCreateMessage=e=>this._client.getOrCreateMessage(e);getMessage=e=>this._client.getMessage(e);updateMessage=e=>this._client.updateMessage(e);listMessages=e=>this._client.listMessages(e);deleteMessage=e=>this._client.deleteMessage(e);createUser=e=>this._client.createUser(e);getUser=e=>this._client.getUser(e);listUsers=e=>this._client.listUsers(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);updateUser=e=>this._client.updateUser(e);deleteUser=e=>this._client.deleteUser(e);getState=e=>this._client.getState(e);setState=e=>this._client.setState(e);getOrSetState=e=>this._client.getOrSetState(e);patchState=e=>this._client.patchState(e);configureIntegration=e=>this._client.configureIntegration(e);uploadFile=e=>this._client.uploadFile(e);upsertFile=e=>this._client.upsertFile(e);deleteFile=e=>this._client.deleteFile(e);listFiles=e=>this._client.listFiles(e);getFile=e=>this._client.getFile(e);updateFileMetadata=e=>this._client.updateFileMetadata(e)};var R=class{_cost=0;get cost(){return this._cost}setCost(e){this._cost=e}toJSON(){return{cost:this.cost}}};var fe=require("@bpinternal/zui");var Fe=fe.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),me=t=>{let e=t[_],n=t[z],i=t[$],a=t[V],o=t[J],s=t[E],c=Fe.parse(t[S]);if(!e)throw new Error("Missing bot headers");if(!n)throw new Error("Missing bot user headers");if(!i)throw new Error("Missing integration headers");if(!a)throw new Error("Missing webhook headers");if(!s)throw new Error("Missing configuration headers");if(!c)throw new Error("Missing operation headers");return{botId:e,botUserId:n,integrationId:i,webhookId:a,operation:c,configurationType:o??null,configuration:s?JSON.parse(Buffer.from(s,"base64").toString("utf-8")):{}}};var W=Q(require("util")),O=t=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:W.default.format(...t),visible_to_bot_owner:!0});{let[e,...n]=t;return W.default.format(`[For Bot Owner] ${e}`,...n)}},H={forBot:()=>({info:(...t)=>{console.info(O(t))},warn:(...t)=>{console.warn(O(t))},error:(...t)=>{console.error(O(t))},debug:(...t)=>{console.debug(O(t))}})};var he=t=>async e=>{let n=me(e.headers),i=new b.Client({botId:n.botId,integrationId:n.integrationId,retry:M}),a=new v(i),o={ctx:n,req:e,client:a,logger:H,instance:t};try{let s;switch(n.operation){case"webhook_received":s=await je(o);break;case"register":s=await Ne(o);break;case"unregister":s=await Le(o);break;case"message_created":s=await $e(o);break;case"action_triggered":s=await Ve(o);break;case"ping":s=await Ge(o);break;case"create_user":s=await Ze(o);break;case"create_conversation":s=await ze(o);break;default:throw new Error(`Unknown operation ${n.operation}`)}return s?{...s,status:s.status??200}:{status:200}}catch(s){if((0,b.isApiError)(s)){let p=new b.RuntimeError(s.message,s);return H.forBot().error(p.message),{status:p.code,body:JSON.stringify(p.toJSON())}}console.error(s);let c=new b.RuntimeError("An unexpected error occurred in the integration. Bot owners: Check logs for more informations. Integration owners: throw a RuntimeError to return a custom error message instead.");return H.forBot().error(c.message),{status:c.code,body:JSON.stringify(c.toJSON())}}},Ge=async t=>{},je=async({client:t,ctx:e,req:n,logger:i,instance:a})=>{let{req:o}=f(n);return a.webhook({client:t,ctx:e,req:o,logger:i})},Ne=async({client:t,ctx:e,req:n,logger:i,instance:a})=>{if(!a.register)return;let{webhookUrl:o}=f(n);await a.register({client:t,ctx:e,webhookUrl:o,logger:i})},Le=async({client:t,ctx:e,req:n,logger:i,instance:a})=>{if(!a.unregister)return;let{webhookUrl:o}=f(n);await a.unregister({ctx:e,webhookUrl:o,client:t,logger:i})},Ze=async({client:t,ctx:e,req:n,logger:i,instance:a})=>{if(!a.createUser)return;let{tags:o}=f(n);return await a.createUser({ctx:e,client:t,tags:o,logger:i})},ze=async({client:t,ctx:e,req:n,logger:i,instance:a})=>{if(!a.createConversation)return;let{channel:o,tags:s}=f(n);return await a.createConversation({ctx:e,client:t,channel:o,tags:s,logger:i})},$e=async({ctx:t,req:e,client:n,logger:i,instance:a})=>{let{conversation:o,user:s,type:c,payload:p,message:d}=f(e),u=a.channels[o.channel];if(!u)throw new Error(`Channel ${o.channel} not found`);let k=u.messages[c];if(!k)throw new Error(`Message of type ${c} not found in channel ${o.channel}`);await k({ctx:t,conversation:o,message:d,user:s,type:c,client:n,payload:p,ack:async({tags:ve})=>{await n.updateMessage({id:d.id,tags:ve})},logger:i})},Ve=async({req:t,ctx:e,client:n,logger:i,instance:a})=>{let{input:o,type:s}=f(t);if(!s)throw new Error("Missing action type");let c=a.actions[s];if(!c)throw new Error(`Action ${s} not found`);let p=new R,u={output:await c({ctx:e,input:o,client:n,type:s,logger:i,metadata:p}),meta:p.toJSON()};return{body:JSON.stringify(u)}};var K=class{constructor(e){this.props=e;this.actions=e.actions,this.channels=e.channels,this.register=e.register,this.unregister=e.unregister,this.createUser=e.createUser,this.createConversation=e.createConversation,this.webhook=e.handler}actions;channels;register;unregister;createUser;createConversation;webhook;handler=he(this);start=e=>x(this.handler,e)};var F=class{constructor(e){this.props=e;this.integrations=e.integrations,this.user=e.user,this.conversation=e.conversation,this.message=e.message,this.states=e.states,this.configuration=e.configuration,this.events=e.events,this.recurringEvents=e.recurringEvents,this.actions=e.actions}integrations;user;conversation;message;states;configuration;events;recurringEvents;actions;add(e,n){let i=this;return i.integrations||(i.integrations={}),i.integrations[e.definition.name]={enabled:n.enabled,...e,configurationType:n.configurationType,configuration:n.configuration},this}};var be=Q(require("@botpress/client"));var T=class{constructor(e,n={before:{},after:{}}){this._client=e;this._hooks=n}getConversation=e=>this._run("getConversation",e);listConversations=e=>this._run("listConversations",e);updateConversation=e=>this._run("updateConversation",e);deleteConversation=e=>this._run("deleteConversation",e);listParticipants=e=>this._run("listParticipants",e);addParticipant=e=>this._run("addParticipant",e);getParticipant=e=>this._run("getParticipant",e);removeParticipant=e=>this._run("removeParticipant",e);getEvent=e=>this._run("getEvent",e);listEvents=e=>this._run("listEvents",e);createMessage=e=>this._run("createMessage",e);getOrCreateMessage=e=>this._run("getOrCreateMessage",e);getMessage=e=>this._run("getMessage",e);updateMessage=e=>this._run("updateMessage",e);listMessages=e=>this._run("listMessages",e);deleteMessage=e=>this._run("deleteMessage",e);getUser=e=>this._run("getUser",e);listUsers=e=>this._run("listUsers",e);updateUser=e=>this._run("updateUser",e);deleteUser=e=>this._run("deleteUser",e);getState=e=>this._run("getState",e);setState=e=>this._run("setState",e);getOrSetState=e=>this._run("getOrSetState",e);patchState=e=>this._run("patchState",e);callAction=e=>this._run("callAction",e);uploadFile=e=>this._run("uploadFile",e);upsertFile=e=>this._run("upsertFile",e);deleteFile=e=>this._run("deleteFile",e);listFiles=e=>this._run("listFiles",e);getFile=e=>this._run("getFile",e);updateFileMetadata=e=>this._run("updateFileMetadata",e);searchFiles=e=>this._run("searchFiles",e);createConversation=e=>this._client.createConversation(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);createUser=e=>this._client.createUser(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);_run=async(e,n)=>{let i=this._hooks.before[e];i&&(n=await i(n));let a=await this._client[e](n),o=this._hooks.after[e];return o&&(a=await o(a)),a}};var ye=require("@bpinternal/zui");var Je=ye.z.enum(["event_received","register","unregister","ping","action_triggered"]),Te=t=>{let e=t[_],n=t[E],i=t[q],a=Je.parse(t[S]);if(!e)throw new Error("Missing bot headers");if(!i)throw new Error("Missing type headers");if(!n)throw new Error("Missing configuration headers");if(!a)throw new Error("Missing operation headers");return{botId:e,operation:a,type:i,configuration:n?JSON.parse(Buffer.from(n,"base64").toString("utf-8")):{}}};var I={status:200},Be=t=>async e=>{let n=Te(e.headers),i=new be.Client({botId:n.botId,retry:M}),a=new T(i,{before:{createMessage:async s=>{for(let c of t.hooks.before_outgoing_message[s.type]??[])s=(await c({client:new T(i),ctx:n,data:s}))?.data??s;return s},callAction:async s=>{for(let c of t.hooks.before_call_action[s.type]??[])s=(await c({client:new T(i),ctx:n,data:s}))?.data??s;return s}},after:{createMessage:async s=>{for(let c of t.hooks.after_outgoing_message[s.message.type]??[])s=(await c({client:new T(i),ctx:n,data:s}))?.data??s;return s},callAction:async s=>{for(let c of t.hooks.after_call_action[s.output.type]??[])s=(await c({client:new T(i),ctx:n,data:s}))?.data??s;return s}}}),o={req:e,ctx:n,client:a,self:t};switch(n.operation){case"action_triggered":return await Ye(o);case"event_received":return await Xe(o);case"register":return await We(o);case"unregister":return await Qe(o);case"ping":return await qe(o);default:throw new Error(`Unknown operation ${n.operation}`)}},qe=async({ctx:t})=>(B.info(`Received ${t.operation} operation for bot ${t.botId} of type ${t.type}`),I),We=async t=>I,Qe=async t=>I,Xe=async({ctx:t,req:e,client:n,self:i})=>{B.debug(`Received event ${t.type}`);let a=f(e);if(t.type==="message_created"){let c=a.event,p=c.payload.message;for(let u of i.hooks.before_incoming_message[p.type]??[])p=(await u({client:n,ctx:t,data:p}))?.data??p;let d={user:c.payload.user,conversation:c.payload.conversation,states:c.payload.states,message:p,event:c};for(let u of i.messageHandlers)await u({...d,client:n,ctx:t,self:i});for(let u of i.hooks.after_incoming_message[p.type]??[])p=(await u({client:n,ctx:t,data:p}))?.data??p;return I}if(t.type==="state_expired"){let p={state:a.event.payload.state};for(let d of i.stateExpiredHandlers)await d({...p,client:n,ctx:t,self:i});return I}let o=a.event;for(let c of i.hooks.before_incoming_event[o.type]??[])o=(await c({client:n,ctx:t,data:o}))?.data??o;let s={event:o};for(let c of i.eventHandlers)await c({...s,client:n,ctx:t,self:i});for(let c of i.hooks.after_incoming_event[o.type]??[])o=(await c({client:n,ctx:t,data:o}))?.data??o;return I},Ye=async({ctx:t,req:e,client:n,self:i})=>{let{input:a,type:o}=f(e);if(!o)throw new Error("Missing action type");let s=i.actionHandlers[o];if(!s)throw new Error(`Action ${o} not found`);let p={output:await s({ctx:t,input:a,client:n,type:o,self:i})};return{status:200,body:JSON.stringify(p)}};var G=class{constructor(e){this.props=e;this.actionHandlers=e.actions}actionHandlers;messageHandlers=[];eventHandlers=[];stateExpiredHandlers=[];hooks={before_incoming_event:{},before_incoming_message:{},before_outgoing_message:{},before_call_action:{},after_incoming_event:{},after_incoming_message:{},after_outgoing_message:{},after_call_action:{}};message=e=>{this.messageHandlers.push(e)};event=e=>{this.eventHandlers.push(e)};stateExpired=e=>{this.stateExpiredHandlers.push(e)};hook={before_incoming_event:(e,n)=>{this.hooks.before_incoming_event[e]=y.safePush(this.hooks.before_incoming_event[e],n)},before_incoming_message:(e,n)=>{this.hooks.before_incoming_message[e]=y.safePush(this.hooks.before_incoming_message[e],n)},before_outgoing_message:(e,n)=>{this.hooks.before_outgoing_message[e]=y.safePush(this.hooks.before_outgoing_message[e],n)},before_call_action:(e,n)=>{this.hooks.before_call_action[e]=y.safePush(this.hooks.before_call_action[e],n)},after_incoming_event:(e,n)=>{this.hooks.after_incoming_event[e]=y.safePush(this.hooks.after_incoming_event[e],n)},after_incoming_message:(e,n)=>{this.hooks.after_incoming_message[e]=y.safePush(this.hooks.after_incoming_message[e],n)},after_outgoing_message:(e,n)=>{this.hooks.after_outgoing_message[e]=y.safePush(this.hooks.after_outgoing_message[e],n)},after_call_action:(e,n)=>{this.hooks.after_call_action[e]=y.safePush(this.hooks.after_call_action[e],n)}};handler=Be(this);start=e=>x(this.handler,e)};var j=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.entities=e.entities??{},this.templateName=e.templateName;let n=this._getEntityReference(this.entities),i=e.events===void 0?{}:m.mapValues(e.events,s=>({...s,schema:s.schema(n)})),a=e.actions===void 0?{}:m.mapValues(e.actions,s=>({...s,input:{...s.input,schema:s.input.schema(n)},output:{...s.output,schema:s.output.schema(n)}})),o=e.channels===void 0?{}:m.mapValues(e.channels,s=>({...s,messages:m.mapValues(s.messages,c=>({...c,schema:c.schema(n)}))}));this.events=i,this.actions=a,this.channels=o}name;version;entities;events;actions;channels;templateName;_getEntityReference=e=>{let n={};for(let i of Object.keys(e))n[i]=L.ref(i);return n}};0&&(module.exports={Bot,BotDefinition,BotSpecificClient,Integration,IntegrationDefinition,IntegrationSpecificClient,InterfaceDeclaration,RuntimeError,botIdHeader,botUserIdHeader,configurationHeader,configurationTypeHeader,integrationIdHeader,isApiError,messages,operationHeader,parseBody,serve,typeHeader,webhookIdHeader});
|
|
1
|
+
"use strict";var Ne=Object.create;var O=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,ze=Object.prototype.hasOwnProperty;var k=(n,e)=>{for(var t in e)O(n,t,{get:e[t],enumerable:!0})},w=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Ve(e))!ze.call(n,a)&&a!==t&&O(n,a,{get:()=>e[a],enumerable:!(s=Ze(e,a))||s.enumerable});return n},f=(n,e,t)=>(w(n,e,"default"),t&&w(t,e,"default")),ce=(n,e,t)=>(t=n!=null?Ne(Le(n)):{},w(e||!n||!n.__esModule?O(t,"default",{value:n,enumerable:!0}):t,n)),$e=n=>w(O({},"__esModule",{value:!0}),n);var y={};k(y,{Bot:()=>V,BotDefinition:()=>Z,BotSpecificClient:()=>v,Integration:()=>N,IntegrationDefinition:()=>U,IntegrationSpecificClient:()=>E,InterfaceDefinition:()=>L,Plugin:()=>$,PluginDefinition:()=>z,RuntimeError:()=>J.RuntimeError,botIdHeader:()=>S,botUserIdHeader:()=>te,configurationHeader:()=>D,configurationTypeHeader:()=>ie,integrationIdHeader:()=>ne,isApiError:()=>J.isApiError,messages:()=>ee,operationHeader:()=>M,parseBody:()=>B,serve:()=>A,typeHeader:()=>oe,webhookIdHeader:()=>se});module.exports=$e(y);var ee={};k(ee,{defaults:()=>Xe,markdown:()=>Qe});var r={};k(r,{default:()=>Y});var le=require("@bpinternal/zui");f(r,require("@bpinternal/zui"));var Y=le.z;var m=r.z.string().min(1),pe=r.z.object({text:m}),ue=r.z.object({markdown:m}),de=r.z.object({imageUrl:m}),fe=r.z.object({audioUrl:m}),me=r.z.object({videoUrl:m}),he=r.z.object({fileUrl:m,title:m.optional()}),ye=r.z.object({latitude:r.z.number(),longitude:r.z.number(),address:r.z.string().optional(),title:r.z.string().optional()}),Te=r.z.object({title:m,subtitle:m.optional(),imageUrl:m.optional(),actions:r.z.array(r.z.object({action:r.z.enum(["postback","url","say"]),label:m,value:m}))}),ge=r.z.object({text:m,options:r.z.array(r.z.object({label:m,value:m}))}),Je=r.z.object({items:r.z.array(Te)}),We=r.z.union([r.z.object({type:r.z.literal("text"),payload:pe}),r.z.object({type:r.z.literal("markdown"),payload:ue}),r.z.object({type:r.z.literal("image"),payload:de}),r.z.object({type:r.z.literal("audio"),payload:fe}),r.z.object({type:r.z.literal("video"),payload:me}),r.z.object({type:r.z.literal("file"),payload:he}),r.z.object({type:r.z.literal("location"),payload:ye})]),qe=r.z.object({items:r.z.array(We)}),Qe={schema:ue},Xe={text:{schema:pe},image:{schema:de},audio:{schema:fe},video:{schema:me},file:{schema:he},location:{schema:ye},carousel:{schema:Je},card:{schema:Te},dropdown:{schema:ge},choice:{schema:ge},bloc:{schema:qe}};var S="x-bot-id",te="x-bot-user-id",ne="x-integration-id",se="x-webhook-id",ie="x-bp-configuration-type",D="x-bp-configuration",M="x-bp-operation",oe="x-bp-type";var Be=require("node:http");var x=console;function B(n){if(!n.body)throw new Error("Missing body");return JSON.parse(n.body)}async function A(n,e=8072,t=nt){let s=(0,Be.createServer)(async(a,o)=>{try{let i=await Ye(a);if(i.path==="/health"){o.writeHead(200).end("ok");return}let c=await n(i);o.writeHead(c?.status??200,c?.headers??{}).end(c?.body??"{}")}catch(i){x.error("Error while handling request",{error:i?.message??"Internal error occured"}),o.writeHead(500).end(JSON.stringify({error:i?.message??"Internal error occured"}))}});return s.listen(e,()=>t(e)),s}async function Ye(n){let e=await tt(n),t={};for(let a=0;a<n.rawHeaders.length;a+=2){let o=n.rawHeaders[a].toLowerCase(),i=n.rawHeaders[a+1];t[o]=i}let s=new URL(n.url??"",n.headers.host?`http://${n.headers.host}`:"http://botpress.cloud");return{body:e,path:s.pathname,query:et(s.search,"?"),headers:t,method:n.method?.toUpperCase()??"GET"}}function et(n,e){return n.indexOf(e)===0?n.slice(e.length):n}async function tt(n){return new Promise((e,t)=>{if(n.method!=="POST"&&n.method!=="PUT"&&n.method!=="PATCH")return e(void 0);let s="";n.on("data",a=>s+=a.toString()),n.on("error",a=>t(a)),n.on("end",()=>e(s))})}function nt(n){x.info(`Listening on port ${n}`)}f(y,r,module.exports);var J=require("@botpress/client");var h={};k(h,{mapValues:()=>it,pairs:()=>ve,values:()=>st});var ve=n=>Object.entries(n),st=n=>Object.values(n),it=(n,e)=>Object.fromEntries(ve(n).map(([t,s])=>[t,e(s,t)]));var l={};k(l,{safePush:()=>ot});var ot=(n,...e)=>n?[...n,...e]:[...e];var R=Symbol("schemaName"),be=n=>n?h.mapValues(n,(t,s)=>({...t,[R]:s})):{},_e=n=>R in n&&n[R]!==void 0,Pe=n=>n[R];var U=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.icon=e.icon,this.readme=e.readme,this.title=e.title,this.identifier=e.identifier,this.description=e.description,this.configuration=e.configuration,this.configurations=e.configurations,this.events=e.events,this.actions=e.actions,this.channels=e.channels,this.states=e.states,this.user=e.user,this.secrets=e.secrets,this.entities=e.entities,this.interfaces=e.interfaces}name;version;title;description;icon;readme;configuration;configurations;events;actions;channels;states;user;secrets;identifier;entities;interfaces;extend(e,t){let s=t(be(this.entities)),a=h.pairs(s).find(([p,d])=>!_e(d));if(a)throw new Error(`Cannot extend interface "${e.name}" with entity "${a[0]}"; the provided schema is not part of the integration's entities.`);let o=this;o.interfaces??={};let i=h.mapValues(s,p=>({name:Pe(p),schema:p.schema})),c=Object.values(i).map(p=>p.name),g=c.length===0?e.name:`${e.name}<${c.join(",")}>`;return o.interfaces[g]={...e,entities:i},this}};var P=require("@botpress/client");var xe=require("@botpress/client"),K={retries:3,retryCondition:n=>xe.axiosRetry.isNetworkOrIdempotentRequestError(n)||[429,502].includes(n.response?.status??0),retryDelay:n=>n*1e3};var E=class{constructor(e){this._client=e}createConversation=e=>this._client.createConversation(e);getConversation=e=>this._client.getConversation(e);listConversations=e=>this._client.listConversations(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);updateConversation=e=>this._client.updateConversation(e);deleteConversation=e=>this._client.deleteConversation(e);listParticipants=e=>this._client.listParticipants(e);addParticipant=e=>this._client.addParticipant(e);getParticipant=e=>this._client.getParticipant(e);removeParticipant=e=>this._client.removeParticipant(e);createEvent=e=>this._client.createEvent(e);getEvent=e=>this._client.getEvent(e);listEvents=e=>this._client.listEvents(e);createMessage=e=>this._client.createMessage(e);getOrCreateMessage=e=>this._client.getOrCreateMessage(e);getMessage=e=>this._client.getMessage(e);updateMessage=e=>this._client.updateMessage(e);listMessages=e=>this._client.listMessages(e);deleteMessage=e=>this._client.deleteMessage(e);createUser=e=>this._client.createUser(e);getUser=e=>this._client.getUser(e);listUsers=e=>this._client.listUsers(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);updateUser=e=>this._client.updateUser(e);deleteUser=e=>this._client.deleteUser(e);getState=e=>this._client.getState(e);setState=e=>this._client.setState(e);getOrSetState=e=>this._client.getOrSetState(e);patchState=e=>this._client.patchState(e);configureIntegration=e=>this._client.configureIntegration(e);uploadFile=e=>this._client.uploadFile(e);upsertFile=e=>this._client.upsertFile(e);deleteFile=e=>this._client.deleteFile(e);listFiles=e=>this._client.listFiles(e);getFile=e=>this._client.getFile(e);updateFileMetadata=e=>this._client.updateFileMetadata(e)};var F=class{_cost=0;get cost(){return this._cost}setCost(e){this._cost=e}toJSON(){return{cost:this.cost}}};var He=require("@bpinternal/zui");var at=He.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),Ee=n=>{let e=n[S],t=n[te],s=n[ne],a=n[se],o=n[ie],i=n[D],c=at.parse(n[M]);if(!e)throw new Error("Missing bot headers");if(!t)throw new Error("Missing bot user headers");if(!s)throw new Error("Missing integration headers");if(!a)throw new Error("Missing webhook headers");if(!i)throw new Error("Missing configuration headers");if(!c)throw new Error("Missing operation headers");return{botId:e,botUserId:t,integrationId:s,webhookId:a,operation:c,configurationType:o??null,configuration:i?JSON.parse(Buffer.from(i,"base64").toString("utf-8")):{}}};var ae=ce(require("util")),G=n=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:ae.default.format(...n),visible_to_bot_owner:!0});{let[e,...t]=n;return ae.default.format(`[For Bot Owner] ${e}`,...t)}},j={forBot:()=>({info:(...n)=>{console.info(G(n))},warn:(...n)=>{console.warn(G(n))},error:(...n)=>{console.error(G(n))},debug:(...n)=>{console.debug(G(n))}})};var Ie=n=>async e=>{let t=Ee(e.headers),s=new P.Client({botId:t.botId,integrationId:t.integrationId,retry:K}),a=new E(s),o={ctx:t,req:e,client:a,logger:j,instance:n};try{let i;switch(t.operation){case"webhook_received":i=await ct(o);break;case"register":i=await lt(o);break;case"unregister":i=await gt(o);break;case"message_created":i=await dt(o);break;case"action_triggered":i=await ft(o);break;case"ping":i=await rt(o);break;case"create_user":i=await pt(o);break;case"create_conversation":i=await ut(o);break;default:throw new Error(`Unknown operation ${t.operation}`)}return i?{...i,status:i.status??200}:{status:200}}catch(i){if((0,P.isApiError)(i)){let g=new P.RuntimeError(i.message,i);return j.forBot().error(g.message),{status:g.code,body:JSON.stringify(g.toJSON())}}console.error(i);let c=new P.RuntimeError("An unexpected error occurred in the integration. Bot owners: Check logs for more informations. Integration owners: throw a RuntimeError to return a custom error message instead.");return j.forBot().error(c.message),{status:c.code,body:JSON.stringify(c.toJSON())}}},rt=async n=>{},ct=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{let{req:o}=B(t);return a.webhook({client:n,ctx:e,req:o,logger:s})},lt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.register)return;let{webhookUrl:o}=B(t);await a.register({client:n,ctx:e,webhookUrl:o,logger:s})},gt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.unregister)return;let{webhookUrl:o}=B(t);await a.unregister({ctx:e,webhookUrl:o,client:n,logger:s})},pt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.createUser)return;let{tags:o}=B(t);return await a.createUser({ctx:e,client:n,tags:o,logger:s})},ut=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.createConversation)return;let{channel:o,tags:i}=B(t);return await a.createConversation({ctx:e,client:n,channel:o,tags:i,logger:s})},dt=async({ctx:n,req:e,client:t,logger:s,instance:a})=>{let{conversation:o,user:i,type:c,payload:g,message:p}=B(e),d=a.channels[o.channel];if(!d)throw new Error(`Channel ${o.channel} not found`);let _=d.messages[c];if(!_)throw new Error(`Message of type ${c} not found in channel ${o.channel}`);await _({ctx:n,conversation:o,message:p,user:i,type:c,client:t,payload:g,ack:async({tags:W})=>{await t.updateMessage({id:p.id,tags:W})},logger:s})},ft=async({req:n,ctx:e,client:t,logger:s,instance:a})=>{let{input:o,type:i}=B(n);if(!i)throw new Error("Missing action type");let c=a.actions[i];if(!c)throw new Error(`Action ${i} not found`);let g=new F,d={output:await c({ctx:e,input:o,client:t,type:i,logger:s,metadata:g}),meta:g.toJSON()};return{body:JSON.stringify(d)}};var N=class{constructor(e){this.props=e;this.actions=e.actions,this.channels=e.channels,this.register=e.register,this.unregister=e.unregister,this.createUser=e.createUser,this.createConversation=e.createConversation,this.webhook=e.handler}actions;channels;register;unregister;createUser;createConversation;webhook;handler=Ie(this);start=e=>A(this.handler,e)};var Z=class{constructor(e){this.props=e;this.integrations=e.integrations,this.plugins=e.plugins,this.user=e.user,this.conversation=e.conversation,this.message=e.message,this.states=e.states,this.configuration=e.configuration,this.events=e.events,this.recurringEvents=e.recurringEvents,this.actions=e.actions}integrations;plugins;user;conversation;message;states;configuration;events;recurringEvents;actions;addIntegration(e,t){let s=this;return s.integrations||(s.integrations={}),s.integrations[e.name]={enabled:t.enabled,...e,configurationType:t.configurationType,configuration:t.configuration},this}addPlugin(e,t){let s=this;return s.plugins||(s.plugins={}),s.plugins[e.name]={...e,configuration:t.configuration,interfaces:t.interfaces},s.user=this._mergeUser(s.user,e.definition.user),s.conversation=this._mergeConversation(s.conversation,e.definition.conversation),s.message=this._mergeMessage(s.message,e.definition.message),s.states=this._mergeStates(s.states,e.definition.states),s.events=this._mergeEvents(s.events,e.definition.events),s.recurringEvents=this._mergeRecurringEvents(s.recurringEvents,e.definition.recurringEvents),s.actions=this._mergeActions(s.actions,e.definition.actions),this}_mergeUser=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeConversation=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeMessage=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeStates=(e,t)=>({...e,...t});_mergeEvents=(e,t)=>({...e,...t});_mergeRecurringEvents=(e,t)=>({...e,...t});_mergeActions=(e,t)=>({...e,...t})};var Ce=(n,e)=>{for(let[t,s]of Object.entries(e.actionHandlers))n.actionHandlers[t]=s;for(let[t,s]of Object.entries(e.eventHandlers))s&&(n.eventHandlers[t]=l.safePush(n.eventHandlers[t],...s));for(let[t,s]of Object.entries(e.messageHandlers))s&&(n.messageHandlers[t]=l.safePush(n.messageHandlers[t],...s));for(let[t,s]of Object.entries(e.stateExpiredHandlers))s&&(n.stateExpiredHandlers[t]=l.safePush(n.stateExpiredHandlers[t],...s));for(let[t,s]of Object.entries(e.hookHandlers))for(let[a,o]of Object.entries(s))o&&(n.hookHandlers[t][a]=l.safePush(n.hookHandlers[t][a],...o))};var De=ce(require("@botpress/client"));var v=class{constructor(e,t={before:{},after:{}}){this._client=e;this._hooks=t}getConversation=e=>this._run("getConversation",e);listConversations=e=>this._run("listConversations",e);updateConversation=e=>this._run("updateConversation",e);deleteConversation=e=>this._run("deleteConversation",e);listParticipants=e=>this._run("listParticipants",e);addParticipant=e=>this._run("addParticipant",e);getParticipant=e=>this._run("getParticipant",e);removeParticipant=e=>this._run("removeParticipant",e);getEvent=e=>this._run("getEvent",e);listEvents=e=>this._run("listEvents",e);createMessage=e=>this._run("createMessage",e);getOrCreateMessage=e=>this._run("getOrCreateMessage",e);getMessage=e=>this._run("getMessage",e);updateMessage=e=>this._run("updateMessage",e);listMessages=e=>this._run("listMessages",e);deleteMessage=e=>this._run("deleteMessage",e);getUser=e=>this._run("getUser",e);listUsers=e=>this._run("listUsers",e);updateUser=e=>this._run("updateUser",e);deleteUser=e=>this._run("deleteUser",e);getState=e=>this._run("getState",e);setState=e=>this._run("setState",e);getOrSetState=e=>this._run("getOrSetState",e);patchState=e=>this._run("patchState",e);callAction=e=>this._run("callAction",e);uploadFile=e=>this._run("uploadFile",e);upsertFile=e=>this._run("upsertFile",e);deleteFile=e=>this._run("deleteFile",e);listFiles=e=>this._run("listFiles",e);getFile=e=>this._run("getFile",e);updateFileMetadata=e=>this._run("updateFileMetadata",e);searchFiles=e=>this._run("searchFiles",e);trackAnalytics=e=>this._run("trackAnalytics",e);createConversation=e=>this._client.createConversation(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);createUser=e=>this._client.createUser(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);_run=async(e,t)=>{let s=this._hooks.before[e];s&&(t=await s(t));let a=await this._client[e](t),o=this._hooks.after[e];return o&&(a=await o(a)),a}};var ke=require("@bpinternal/zui");var mt=ke.z.enum(["event_received","register","unregister","ping","action_triggered"]),Se=n=>{let e=n[S],t=n[D],s=n[oe],a=mt.parse(n[M]);if(!e)throw new Error("Missing bot headers");if(!s)throw new Error("Missing type headers");if(!t)throw new Error("Missing configuration headers");if(!a)throw new Error("Missing operation headers");return{botId:e,operation:a,type:s,configuration:t?JSON.parse(Buffer.from(t,"base64").toString("utf-8")):{}}};var b={status:200},Me=n=>async e=>{let t=Se(e.headers),s=new De.Client({botId:t.botId,retry:K}),a=new v(s,{before:{createMessage:async i=>{let c=n.hookHandlers.before_outgoing_message[i.type]??[],g=n.hookHandlers.before_outgoing_message["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i},callAction:async i=>{let c=n.hookHandlers.before_outgoing_call_action[i.type]??[],g=n.hookHandlers.before_outgoing_call_action["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i}},after:{createMessage:async i=>{let c=n.hookHandlers.after_outgoing_message[i.message.type]??[],g=n.hookHandlers.after_outgoing_message["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i},callAction:async i=>{let c=n.hookHandlers.after_outgoing_call_action[i.output.type]??[],g=n.hookHandlers.after_outgoing_call_action["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i}}}),o={req:e,ctx:t,client:a,self:n};switch(t.operation){case"action_triggered":return await vt(o);case"event_received":return await Bt(o);case"register":return await yt(o);case"unregister":return await Tt(o);case"ping":return await ht(o);default:throw new Error(`Unknown operation ${t.operation}`)}},ht=async({ctx:n})=>(x.info(`Received ${n.operation} operation for bot ${n.botId} of type ${n.type}`),b),yt=async n=>b,Tt=async n=>b,Bt=async({ctx:n,req:e,client:t,self:s})=>{x.debug(`Received event ${n.type}`);let a=B(e);if(n.type==="message_created"){let T=a.event,u=T.payload.message,q=s.hookHandlers.before_incoming_message[u.type]??[],Q=s.hookHandlers.before_incoming_message["*"]??[],X=[...q,...Q];for(let I of X){let C=await I({client:t,ctx:n,data:u});if(u=C?.data??u,C?.stop)return b}let Oe={user:T.payload.user,conversation:T.payload.conversation,states:T.payload.states,message:u,event:T},Re=s.messageHandlers[u.type]??[],Ue=s.messageHandlers["*"]??[],Ke=[...Re,...Ue];for(let I of Ke)await I({...Oe,client:t,ctx:n});let Fe=s.hookHandlers.after_incoming_message[u.type]??[],Ge=s.hookHandlers.after_incoming_message["*"]??[],je=[...Fe,...Ge];for(let I of je){let C=await I({client:t,ctx:n,data:u});if(u=C?.data??u,C?.stop)return b}return b}if(n.type==="state_expired"){let q={state:a.event.payload.state},Q=s.stateExpiredHandlers["*"]??[];for(let X of Q)await X({...q,client:t,ctx:n});return b}let o=a.event,i=s.hookHandlers.before_incoming_event[o.type]??[],c=s.hookHandlers.before_incoming_event["*"]??[],g=[...i,...c];for(let T of g){let u=await T({client:t,ctx:n,data:o});if(o=u?.data??o,u?.stop)return b}let p={event:o},d=s.eventHandlers[o.type]??[],_=s.eventHandlers["*"]??[],re=[...d,..._];for(let T of re)await T({...p,client:t,ctx:n});let W=s.hookHandlers.after_incoming_event[o.type]??[],Ae=s.hookHandlers.after_incoming_event["*"]??[],we=[...W,...Ae];for(let T of we){let u=await T({client:t,ctx:n,data:o});if(o=u?.data??o,u?.stop)return b}return b},vt=async({ctx:n,req:e,client:t,self:s})=>{let{input:a,type:o}=B(e);if(!o)throw new Error("Missing action type");let i=s.actionHandlers[o];if(!i)throw new Error(`Action ${o} not found`);let g={output:await i({ctx:n,input:a,client:t,type:o})};return{status:200,body:JSON.stringify(g)}};var V=class{constructor(e){this.props=e;this.actionHandlers=e.actions;let t=h.values(e.plugins);for(let s of t)this._use(s)}actionHandlers;messageHandlers={};eventHandlers={};stateExpiredHandlers={};hookHandlers={before_incoming_event:{},before_incoming_message:{},before_outgoing_message:{},before_outgoing_call_action:{},after_incoming_event:{},after_incoming_message:{},after_outgoing_message:{},after_outgoing_call_action:{}};get actions(){return this.actionHandlers}on={message:(e,t)=>{this.messageHandlers[e]=l.safePush(this.messageHandlers[e],t)},event:(e,t)=>{this.eventHandlers[e]=l.safePush(this.eventHandlers[e],t)},stateExpired:(e,t)=>{this.stateExpiredHandlers[e]=l.safePush(this.stateExpiredHandlers[e],t)},beforeIncomingEvent:(e,t)=>{this.hookHandlers.before_incoming_event[e]=l.safePush(this.hookHandlers.before_incoming_event[e],t)},beforeIncomingMessage:(e,t)=>{this.hookHandlers.before_incoming_message[e]=l.safePush(this.hookHandlers.before_incoming_message[e],t)},beforeOutgoingMessage:(e,t)=>{this.hookHandlers.before_outgoing_message[e]=l.safePush(this.hookHandlers.before_outgoing_message[e],t)},beforeOutgoingCallAction:(e,t)=>{this.hookHandlers.before_outgoing_call_action[e]=l.safePush(this.hookHandlers.before_outgoing_call_action[e],t)},afterIncomingEvent:(e,t)=>{this.hookHandlers.after_incoming_event[e]=l.safePush(this.hookHandlers.after_incoming_event[e],t)},afterIncomingMessage:(e,t)=>{this.hookHandlers.after_incoming_message[e]=l.safePush(this.hookHandlers.after_incoming_message[e],t)},afterOutgoingMessage:(e,t)=>{this.hookHandlers.after_outgoing_message[e]=l.safePush(this.hookHandlers.after_outgoing_message[e],t)},afterOutgoingCallAction:(e,t)=>{this.hookHandlers.after_outgoing_call_action[e]=l.safePush(this.hookHandlers.after_outgoing_call_action[e],t)}};_use=e=>{Ce(this,e)};handler=Me(this);start=e=>A(this.handler,e)};var L=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.entities=e.entities??{},this.templateName=e.templateName;let t=this._getEntityReference(this.entities),s=e.events===void 0?{}:h.mapValues(e.events,i=>({...i,schema:i.schema(t)})),a=e.actions===void 0?{}:h.mapValues(e.actions,i=>({...i,input:{...i.input,schema:i.input.schema(t)},output:{...i.output,schema:i.output.schema(t)}})),o=e.channels===void 0?{}:h.mapValues(e.channels,i=>({...i,messages:h.mapValues(i.messages,c=>({...c,schema:c.schema(t)}))}));this.events=s,this.actions=a,this.channels=o}name;version;entities;events;actions;channels;templateName;_getEntityReference=e=>{let t={};for(let s of Object.keys(e))t[s]=Y.ref(s);return t}};var z=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.integrations=e.integrations,this.interfaces=e.interfaces,this.user=e.user,this.conversation=e.conversation,this.message=e.message,this.states=e.states,this.configuration=e.configuration,this.events=e.events,this.recurringEvents=e.recurringEvents,this.actions=e.actions}name;version;integrations;interfaces;user;conversation;message;states;configuration;events;recurringEvents;actions};var $=class{constructor(e){this.props=e;this.actionHandlers=e.actions}_runtimeProps;actionHandlers;messageHandlers={};eventHandlers={};stateExpiredHandlers={};hookHandlers={before_incoming_event:{},before_incoming_message:{},before_outgoing_message:{},before_outgoing_call_action:{},after_incoming_event:{},after_incoming_message:{},after_outgoing_message:{},after_outgoing_call_action:{}};initialize(e){return this._runtimeProps=e,this}get config(){if(!this._runtimeProps)throw new Error("Plugin not correctly initialized. This is likely because you access your plugin config outside of an handler.");return this._runtimeProps}on={message:(e,t)=>{this.messageHandlers[e]=l.safePush(this.messageHandlers[e],t)},event:(e,t)=>{this.eventHandlers[e]=l.safePush(this.eventHandlers[e],t)},stateExpired:(e,t)=>{this.stateExpiredHandlers[e]=l.safePush(this.stateExpiredHandlers[e],t)},beforeIncomingEvent:(e,t)=>{this.hookHandlers.before_incoming_event[e]=l.safePush(this.hookHandlers.before_incoming_event[e],t)},beforeIncomingMessage:(e,t)=>{this.hookHandlers.before_incoming_message[e]=l.safePush(this.hookHandlers.before_incoming_message[e],t)},beforeOutgoingMessage:(e,t)=>{this.hookHandlers.before_outgoing_message[e]=l.safePush(this.hookHandlers.before_outgoing_message[e],t)},beforeOutgoingCallAction:(e,t)=>{this.hookHandlers.before_outgoing_call_action[e]=l.safePush(this.hookHandlers.before_outgoing_call_action[e],t)},afterIncomingEvent:(e,t)=>{this.hookHandlers.after_incoming_event[e]=l.safePush(this.hookHandlers.after_incoming_event[e],t)},afterIncomingMessage:(e,t)=>{this.hookHandlers.after_incoming_message[e]=l.safePush(this.hookHandlers.after_incoming_message[e],t)},afterOutgoingMessage:(e,t)=>{this.hookHandlers.after_outgoing_message[e]=l.safePush(this.hookHandlers.after_outgoing_message[e],t)},afterOutgoingCallAction:(e,t)=>{this.hookHandlers.after_outgoing_call_action[e]=l.safePush(this.hookHandlers.after_outgoing_call_action[e],t)}}};0&&(module.exports={Bot,BotDefinition,BotSpecificClient,Integration,IntegrationDefinition,IntegrationSpecificClient,InterfaceDefinition,Plugin,PluginDefinition,RuntimeError,botIdHeader,botUserIdHeader,configurationHeader,configurationTypeHeader,integrationIdHeader,isApiError,messages,operationHeader,parseBody,serve,typeHeader,webhookIdHeader});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|