@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.
@@ -0,0 +1,2 @@
1
+ import { BotHandlers } from './server';
2
+ export declare const mergeBots: (dest: BotHandlers<any>, src: BotHandlers<any>) => void;
@@ -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 IncomingEvents<TBot extends types.BaseBot> = {
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 IncomingMessages<TBot extends types.BaseBot> = {
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 OutgoingMessageRequests<TBot extends types.BaseBot> = {
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 OutgoingMessageResponses<TBot extends types.BaseBot> = {
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 OutgoingCallActionRequests<TBot extends types.BaseBot> = {
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 OutgoingCallActionResponses<TBot extends types.BaseBot> = {
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 IncomingEvent<TBot extends types.BaseBot> = utils.ValueOf<IncomingEvents<TBot>>;
52
- export type IncomingMessage<TBot extends types.BaseBot> = utils.ValueOf<IncomingMessages<TBot>>;
53
- export type OutgoingMessageRequest<TBot extends types.BaseBot> = utils.ValueOf<OutgoingMessageRequests<TBot>>;
54
- export type OutgoingMessageResponse<TBot extends types.BaseBot> = utils.ValueOf<OutgoingMessageResponses<TBot>>;
55
- export type OutgoingCallActionRequest<TBot extends types.BaseBot> = utils.ValueOf<OutgoingCallActionRequests<TBot>>;
56
- export type OutgoingCallActionResponse<TBot extends types.BaseBot> = utils.ValueOf<OutgoingCallActionResponses<TBot>>;
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: BotSpecificClient<TBot>;
60
- self: BotHandlers<TBot>;
61
- };
62
- export type MessagePayload<TBot extends types.BaseBot> = {
63
- message: IncomingMessage<TBot>;
64
- user: client.User;
65
- conversation: client.Conversation;
66
- event: client.Event;
67
- states: {
68
- [TState in keyof TBot['states']]: {
69
- type: 'user' | 'conversation' | 'bot';
70
- payload: TBot['states'][TState];
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 MessageHandlerProps<TBot extends types.BaseBot> = CommonHandlerProps<TBot> & MessagePayload<TBot>;
75
- export type MessageHandler<TBot extends types.BaseBot> = (args: MessageHandlerProps<TBot>) => Promise<void>;
76
- export type EventPayload<TBot extends types.BaseBot> = {
77
- event: IncomingEvent<TBot>;
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 EventHandlerProps<TBot extends types.BaseBot> = CommonHandlerProps<TBot> & EventPayload<TBot>;
80
- export type EventHandler<TBot extends types.BaseBot> = (args: EventHandlerProps<TBot>) => Promise<void>;
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: ActionHandlerProps<TBot>[K]) => Promise<TBot['actions'][K]['output']>;
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
- * - add concept of stoppable / un-stoppable hooks (e.g. before_incoming_message Vs before_outgoing_message)
101
- * - add "before_register", "after_register", "before_state_expired", "after_state_expired" hooks
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: IncomingEvents<TBot> & {
105
- '*': IncomingEvent<TBot>;
106
- };
107
- before_incoming_message: IncomingMessages<TBot> & {
108
- '*': IncomingMessage<TBot>;
109
- };
110
- before_outgoing_message: OutgoingMessageRequests<TBot> & {
111
- '*': OutgoingMessageRequest<TBot>;
112
- };
113
- before_call_action: OutgoingCallActionRequests<TBot> & {
114
- '*': OutgoingCallActionRequest<TBot>;
115
- };
116
- after_incoming_event: IncomingEvents<TBot> & {
117
- '*': IncomingEvent<TBot>;
118
- };
119
- after_incoming_message: IncomingMessages<TBot> & {
120
- '*': IncomingMessage<TBot>;
121
- };
122
- after_outgoing_message: OutgoingMessageResponses<TBot> & {
123
- '*': OutgoingMessageResponse<TBot>;
124
- };
125
- after_call_action: OutgoingCallActionResponses<TBot> & {
126
- '*': OutgoingCallActionResponse<TBot>;
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 HookDefinitions<TBot>]: {
131
- [T in keyof HookDefinitions<TBot>[H]]: {
132
- client: BotSpecificClient<TBot>;
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 HookDefinitions<TBot>]: {
140
- [T in keyof HookDefinitions<TBot>[H]]: {
141
- data: HookDefinitions<TBot>[H][T];
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 HookImplementations<TBot extends types.BaseBot> = {
146
- [H in keyof HookDefinitions<TBot>]: {
147
- [T in keyof HookDefinitions<TBot>[H]]: (input: HookInputs<TBot>[H][T]) => Promise<HookOutputs<TBot>[H][T] | undefined | void>;
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 HookImplementationsMap<TBot extends types.BaseBot> = {
151
- [H in keyof HookDefinitions<TBot>]: {
152
- [T in keyof HookDefinitions<TBot>[H]]?: HookImplementations<TBot>[H][T][];
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: ActionHandlers<TBot>;
157
- messageHandlers: MessageHandler<TBot>[];
158
- eventHandlers: EventHandler<TBot>[];
159
- stateExpiredHandlers: StateExpiredHandler<TBot>[];
160
- hooks: HookImplementationsMap<TBot>;
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 DefaultBot<B extends utils.DeepPartial<BaseBot>> = {
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
  };
@@ -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 { InterfaceDeclaration, InterfaceDeclarationProps, } from './interface';
14
- export { IntegrationPackage, InterfacePackage, } from './package';
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