@botpress/sdk 0.2.2 → 0.3.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,35 @@
1
+ import { Client } from '@botpress/client';
2
+ import { BaseBot } from '../generic';
3
+ import * as routes from './routes';
4
+ /**
5
+ * Just like the regular botpress client, but typed with the bot's properties.
6
+ */
7
+ export declare class BotSpecificClient<TBot extends BaseBot> {
8
+ private readonly client;
9
+ constructor(client: Client);
10
+ createConversation: routes.CreateConversation<TBot>;
11
+ getConversation: routes.GetConversation<TBot>;
12
+ listConversations: routes.ListConversations<TBot>;
13
+ getOrCreateConversation: routes.GetOrCreateConversation<TBot>;
14
+ updateConversation: routes.UpdateConversation<TBot>;
15
+ deleteConversation: routes.DeleteConversation<TBot>;
16
+ createEvent: routes.CreateEvent<TBot>;
17
+ getEvent: routes.GetEvent<TBot>;
18
+ listEvents: routes.ListEvents<TBot>;
19
+ createMessage: routes.CreateMessage<TBot>;
20
+ getOrCreateMessage: routes.GetOrCreateMessage<TBot>;
21
+ getMessage: routes.GetMessage<TBot>;
22
+ updateMessage: routes.UpdateMessage<TBot>;
23
+ listMessages: routes.ListMessages<TBot>;
24
+ deleteMessage: routes.DeleteMessage<TBot>;
25
+ createUser: routes.CreateUser<TBot>;
26
+ getUser: routes.GetUser<TBot>;
27
+ listUsers: routes.ListUsers<TBot>;
28
+ getOrCreateUser: routes.GetOrCreateUser<TBot>;
29
+ updateUser: routes.UpdateUser<TBot>;
30
+ deleteUser: routes.DeleteUser<TBot>;
31
+ getState: routes.GetState<TBot>;
32
+ setState: routes.SetState<TBot>;
33
+ patchState: routes.PatchState<TBot>;
34
+ callAction: routes.CallAction<TBot>;
35
+ }
@@ -0,0 +1,55 @@
1
+ import { Client } from '@botpress/client';
2
+ import { Cast, Join, Merge } from '../../type-utils';
3
+ import { BaseBot } from '../generic';
4
+ import { EnumerateActions, GetIntegrationByName, GetIntegrationChannelByName, IntegrationInstanceActionDefinition } from './types';
5
+ type Arg<F extends (...args: any[]) => any> = Parameters<F>[number];
6
+ type Res<F extends (...args: any[]) => any> = ReturnType<F>;
7
+ type AsTags<T extends Record<string, string | undefined>> = Cast<T, Record<string, string>>;
8
+ type ToTags<TTags extends string | number | symbol> = AsTags<Partial<Record<TTags, string>>>;
9
+ export type CreateConversation<TBot extends BaseBot> = <TIntegrationName extends keyof TBot['integrations'], TChannelName extends Cast<keyof GetIntegrationByName<TBot, TIntegrationName>['channels'], string>>(x: Merge<Arg<Client['createConversation']>, {
10
+ integrationName: Cast<TIntegrationName, string>;
11
+ channel: Cast<TChannelName, string>;
12
+ tags: ToTags<Join<[
13
+ TIntegrationName,
14
+ ':',
15
+ keyof GetIntegrationChannelByName<TBot, TIntegrationName, TChannelName>['conversation']['tags']
16
+ ]>>;
17
+ }>) => Res<Client['createConversation']>;
18
+ export type GetConversation<_TBot extends BaseBot> = Client['getConversation'];
19
+ export type ListConversations<_TBot extends BaseBot> = Client['listConversations'];
20
+ export type GetOrCreateConversation<TBot extends BaseBot> = <TIntegrationName extends keyof TBot['integrations'], TChannelName extends Cast<keyof GetIntegrationByName<TBot, TIntegrationName>['channels'], string>>(x: Merge<Arg<Client['getOrCreateConversation']>, {
21
+ integrationName: Cast<TIntegrationName, string>;
22
+ channel: Cast<TChannelName, string>;
23
+ tags: ToTags<Join<[
24
+ TIntegrationName,
25
+ ':',
26
+ keyof GetIntegrationChannelByName<TBot, TIntegrationName, TChannelName>['conversation']['tags']
27
+ ]>>;
28
+ }>) => Res<Client['getOrCreateConversation']>;
29
+ export type UpdateConversation<_TBot extends BaseBot> = Client['updateConversation'];
30
+ export type DeleteConversation<_TBot extends BaseBot> = Client['deleteConversation'];
31
+ export type CreateEvent<_TBot extends BaseBot> = Client['createEvent'];
32
+ export type GetEvent<_TBot extends BaseBot> = Client['getEvent'];
33
+ export type ListEvents<_TBot extends BaseBot> = Client['listEvents'];
34
+ export type CreateMessage<_TBot extends BaseBot> = Client['createMessage'];
35
+ export type GetOrCreateMessage<_TBot extends BaseBot> = Client['getOrCreateMessage'];
36
+ export type GetMessage<_TBot extends BaseBot> = Client['getMessage'];
37
+ export type UpdateMessage<_TBot extends BaseBot> = Client['updateMessage'];
38
+ export type ListMessages<_TBot extends BaseBot> = Client['listMessages'];
39
+ export type DeleteMessage<_TBot extends BaseBot> = Client['deleteMessage'];
40
+ export type CreateUser<_TBot extends BaseBot> = Client['createUser'];
41
+ export type GetUser<_TBot extends BaseBot> = Client['getUser'];
42
+ export type ListUsers<_TBot extends BaseBot> = Client['listUsers'];
43
+ export type GetOrCreateUser<_TBot extends BaseBot> = Client['getOrCreateUser'];
44
+ export type UpdateUser<_TBot extends BaseBot> = Client['updateUser'];
45
+ export type DeleteUser<_TBot extends BaseBot> = Client['deleteUser'];
46
+ export type GetState<_TBot extends BaseBot> = Client['getState'];
47
+ export type SetState<_TBot extends BaseBot> = Client['setState'];
48
+ export type PatchState<_TBot extends BaseBot> = Client['patchState'];
49
+ export type CallAction<TBot extends BaseBot> = <ActionType extends keyof EnumerateActions<TBot>>(x: Merge<Arg<Client['callAction']>, {
50
+ type: Cast<ActionType, string>;
51
+ input: Cast<EnumerateActions<TBot>[ActionType], IntegrationInstanceActionDefinition>['input'];
52
+ }>) => Promise<{
53
+ output: Cast<EnumerateActions<TBot>[ActionType], IntegrationInstanceActionDefinition>['output'];
54
+ }>;
55
+ export {};
@@ -0,0 +1,33 @@
1
+ import { Cast, Join, UnionToIntersection } from '../../type-utils';
2
+ import { BaseBot } from '../generic';
3
+ export type EventDefinition = BaseBot['events'][string];
4
+ export type StateDefinition = BaseBot['states'][string];
5
+ export type IntegrationInstanceDefinition = BaseBot['integrations'][string];
6
+ export type IntegrationInstanceConfigurationDefinition = IntegrationInstanceDefinition['configuration'];
7
+ export type IntegrationInstanceActionDefinition = IntegrationInstanceDefinition['actions'][string];
8
+ export type IntegrationInstanceChannelDefinition = IntegrationInstanceDefinition['channels'][string];
9
+ export type IntegrationInstanceEventDefinition = IntegrationInstanceDefinition['events'][string];
10
+ export type IntegrationInstanceStateDefinition = IntegrationInstanceDefinition['states'][string];
11
+ export type IntegrationInstanceUserDefinition = IntegrationInstanceDefinition['user'];
12
+ export type EnumerateActions<TBot extends BaseBot> = UnionToIntersection<{
13
+ [TIntegrationName in keyof TBot['integrations']]: {
14
+ [TActionName in keyof TBot['integrations'][TIntegrationName]['actions'] as Join<[
15
+ TIntegrationName,
16
+ ':',
17
+ TActionName
18
+ ]>]: TBot['integrations'][TIntegrationName]['actions'][TActionName];
19
+ };
20
+ }[keyof TBot['integrations']]>;
21
+ export type GetIntegrationByName<TBot extends BaseBot, TIntegrationName extends keyof TBot['integrations']> = Cast<TBot['integrations'][TIntegrationName], IntegrationInstanceDefinition>;
22
+ export type GetIntegrationChannelByName<TBot extends BaseBot, TIntegrationName extends keyof TBot['integrations'], TChannelName extends keyof GetIntegrationByName<TBot, TIntegrationName>['channels']> = Cast<GetIntegrationByName<TBot, TIntegrationName>['channels'][TChannelName], IntegrationInstanceChannelDefinition>;
23
+ export type EnumerateEvents<TBot extends BaseBot> = UnionToIntersection<{
24
+ [TIntegrationName in keyof TBot['integrations']]: {
25
+ [TEventName in keyof TBot['integrations'][TIntegrationName]['events'] as Join<[
26
+ TIntegrationName,
27
+ ':',
28
+ TEventName
29
+ ]>]: TBot['integrations'][TIntegrationName]['events'][TEventName];
30
+ };
31
+ }[keyof TBot['integrations']]> & (string extends keyof TBot['events'] ? {} : {
32
+ [TEventName in keyof TBot['events']]: TBot['events'][TEventName];
33
+ });
@@ -7,3 +7,4 @@ export type BotContext<Configuration = any, Type extends string = string> = {
7
7
  operation: BotOperation;
8
8
  configuration: Configuration;
9
9
  };
10
+ export declare const extractContext: (headers: Record<string, string | undefined>) => BotContext;
@@ -0,0 +1,7 @@
1
+ import { BaseIntegration } from '../integration/generic';
2
+ export type BaseIntegrations = Record<string, BaseIntegration>;
3
+ export type BaseBot = {
4
+ integrations: BaseIntegrations;
5
+ events: Record<string, any>;
6
+ states: Record<string, any>;
7
+ };
@@ -1,71 +1,71 @@
1
- import type { Bot as BotType, Event } from '@botpress/client';
2
1
  import type { Server } from 'node:http';
3
- import type { EventHandler, MessageHandler, StateExpiredHandler } from './state';
4
- export type RegisterBotPayload = {
5
- bot: BotType;
6
- };
7
- export type UnregisterBotPayload = {
8
- bot: BotType;
9
- };
10
- export type EventReceivedBotPayload = {
11
- event: Event;
12
- };
13
- export type BotDefinitionTag = {
2
+ import { z } from 'zod';
3
+ import { SchemaDefinition } from '../schema';
4
+ import { AnyZodObject, Cast } from '../type-utils';
5
+ import { BaseIntegrations } from './generic';
6
+ import { IntegrationInstance } from './integration-instance';
7
+ import { MessageHandler, EventHandler, StateExpiredHandler } from './server';
8
+ type BaseStates = Record<string, AnyZodObject>;
9
+ type BaseEvents = Record<string, AnyZodObject>;
10
+ type TagDefinition = {
14
11
  title?: string;
15
12
  description?: string;
16
13
  };
17
- export type BotDefinitionStateType = 'conversation' | 'user' | 'bot';
18
- export type BotDefinitionState = {
19
- type: BotDefinitionStateType;
20
- schema: Record<string, any>;
14
+ type StateDefinition<TState extends BaseStates[string]> = SchemaDefinition<TState> & {
15
+ type: 'conversation' | 'user' | 'bot';
21
16
  expiry?: number;
22
17
  };
23
- export type IntegrationInstance = {
24
- id: string;
25
- enabled?: boolean;
26
- configuration?: {
27
- [key: string]: any;
28
- };
29
- };
30
- export type BotDefinitionRecurringEvent = {
18
+ type RecurringEventDefinition = {
31
19
  type: string;
32
20
  payload: Record<string, any>;
33
21
  schedule: {
34
22
  cron: string;
35
23
  };
36
24
  };
37
- export type BotDefinitionEvent = {
38
- schema: Record<string, any>;
39
- };
40
- export type BotDefinitionConfiguration = {
41
- schema: Record<string, any>;
25
+ type EventDefinition<TEvent extends BaseEvents[string]> = SchemaDefinition<TEvent>;
26
+ type ConfigurationDefinition = SchemaDefinition;
27
+ type UserDefinition = {
28
+ tags?: Record<string, TagDefinition>;
42
29
  };
43
- export type BotDefinitionUser = {
44
- tags?: Record<string, BotDefinitionTag>;
30
+ type ConversationDefinition = {
31
+ tags?: Record<string, TagDefinition>;
45
32
  };
46
- export type BotDefinitionConversation = {
47
- tags?: Record<string, BotDefinitionTag>;
33
+ type MessageDefinition = {
34
+ tags?: Record<string, TagDefinition>;
48
35
  };
49
- export type BotDefinitionMessage = {
50
- tags?: Record<string, BotDefinitionTag>;
36
+ export type BotProps<TIntegrations extends BaseIntegrations = BaseIntegrations, TStates extends BaseStates = BaseStates, TEvents extends BaseEvents = BaseEvents> = {
37
+ integrations?: {
38
+ [K in keyof TIntegrations]?: IntegrationInstance<Cast<K, string>>;
39
+ };
40
+ user?: UserDefinition;
41
+ conversation?: ConversationDefinition;
42
+ message?: MessageDefinition;
43
+ states?: {
44
+ [K in keyof TStates]: StateDefinition<TStates[K]>;
45
+ };
46
+ configuration?: ConfigurationDefinition;
47
+ events?: {
48
+ [K in keyof TEvents]: EventDefinition<TEvents[K]>;
49
+ };
50
+ recurringEvents?: Record<string, RecurringEventDefinition>;
51
51
  };
52
- export type BotDefinition = {
53
- user?: BotDefinitionUser;
54
- conversation?: BotDefinitionConversation;
55
- message?: BotDefinitionMessage;
56
- states?: Record<string, BotDefinitionState>;
57
- integrations?: IntegrationInstance[];
58
- configuration?: BotDefinitionConfiguration;
59
- events?: Record<string, BotDefinitionEvent>;
60
- recurringEvents?: Record<string, BotDefinitionRecurringEvent>;
52
+ type BotFrom<TIntegrations extends BaseIntegrations, TStates extends BaseStates, TEvents extends BaseEvents> = {
53
+ integrations: TIntegrations;
54
+ states: {
55
+ [K in keyof TStates]: z.infer<TStates[K]>;
56
+ };
57
+ events: {
58
+ [K in keyof TEvents]: z.infer<TEvents[K]>;
59
+ };
61
60
  };
62
- export declare class Bot {
61
+ export declare class Bot<TIntegrations extends BaseIntegrations = BaseIntegrations, TStates extends BaseStates = BaseStates, TEvents extends BaseEvents = BaseEvents> {
63
62
  private _state;
64
- readonly definition: BotDefinition;
65
- constructor(def?: BotDefinition);
66
- message: (handler: MessageHandler) => void;
67
- event: (handler: EventHandler) => void;
68
- stateExpired: (handler: StateExpiredHandler) => void;
69
- handler: import("../serve").Handler;
70
- start: (port?: number) => Promise<Server>;
63
+ readonly props: BotProps<TIntegrations, TStates, TEvents>;
64
+ constructor(props: BotProps<TIntegrations, TStates, TEvents>);
65
+ readonly message: (handler: MessageHandler<BotFrom<TIntegrations, TStates, TEvents>>) => void;
66
+ readonly event: (handler: EventHandler<BotFrom<TIntegrations, TStates, TEvents>>) => void;
67
+ readonly stateExpired: (handler: StateExpiredHandler<BotFrom<TIntegrations, TStates, TEvents>>) => void;
68
+ readonly handler: (req: import("../serve").Request) => Promise<void | import("../serve").Response>;
69
+ readonly start: (port?: number) => Promise<Server>;
71
70
  }
71
+ export {};
@@ -1,3 +1,4 @@
1
- export * from './client';
2
1
  export * from './implementation';
3
2
  export * from './context';
3
+ export * from './integration-instance';
4
+ export * from './client';
@@ -0,0 +1,7 @@
1
+ export type IntegrationInstance<TName extends string> = {
2
+ id: string;
3
+ enabled?: boolean;
4
+ configuration?: Record<string, any>;
5
+ name: TName;
6
+ version: string;
7
+ };
@@ -1,3 +1,41 @@
1
- import type { Handler } from '../serve';
2
- import type { BotState } from './state';
3
- export declare const createBotHandler: (botState: BotState) => Handler;
1
+ import * as bpclient from '@botpress/client';
2
+ import { Request, Response } from '../serve';
3
+ import { Merge } from '../type-utils';
4
+ import { BotSpecificClient } from './client';
5
+ import { EnumerateEvents } from './client/types';
6
+ import { BotContext } from './context';
7
+ import { BaseBot } from './generic';
8
+ type CommonArgs<TBot extends BaseBot> = {
9
+ ctx: BotContext;
10
+ client: BotSpecificClient<TBot>;
11
+ };
12
+ type MessagePayload = {
13
+ user: bpclient.User;
14
+ conversation: bpclient.Conversation;
15
+ message: bpclient.Message;
16
+ event: bpclient.Event;
17
+ };
18
+ type MessageArgs<TBot extends BaseBot> = CommonArgs<TBot> & MessagePayload;
19
+ type EventPayload<TBot extends BaseBot> = {
20
+ event: {
21
+ [K in keyof EnumerateEvents<TBot>]: Merge<bpclient.Event, {
22
+ type: K;
23
+ payload: EnumerateEvents<TBot>[K];
24
+ }>;
25
+ }[keyof EnumerateEvents<TBot>];
26
+ };
27
+ type EventArgs<TBot extends BaseBot> = CommonArgs<TBot> & EventPayload<TBot>;
28
+ type StateExpiredPayload = {
29
+ state: bpclient.State;
30
+ };
31
+ type StateExpiredArgs<TBot extends BaseBot> = CommonArgs<TBot> & StateExpiredPayload;
32
+ export type MessageHandler<TBot extends BaseBot> = (args: MessageArgs<TBot>) => Promise<void>;
33
+ export type EventHandler<TBot extends BaseBot> = (args: EventArgs<TBot>) => Promise<void>;
34
+ export type StateExpiredHandler<TBot extends BaseBot> = (args: StateExpiredArgs<TBot>) => Promise<void>;
35
+ export type BotHandlers<TBot extends BaseBot> = {
36
+ messageHandlers: MessageHandler<TBot>[];
37
+ eventHandlers: EventHandler<TBot>[];
38
+ stateExpiredHandlers: StateExpiredHandler<TBot>[];
39
+ };
40
+ export declare const botHandler: <TBot extends BaseBot>(instance: BotHandlers<TBot>) => (req: Request) => Promise<Response | void>;
41
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { BotClient } from './bot';
2
- import { IntegrationClient } from './integration';
3
1
  export * as messages from './message';
4
- export declare const clients: {
5
- IntegrationClient: typeof IntegrationClient;
6
- BotClient: typeof BotClient;
7
- };
8
2
  export * from './const';
9
3
  export * from './serve';
10
- export { IntegrationDefinition, IntegrationDefinitionProps, IntegrationImplementation as Integration, IntegrationImplementationProps as IntegrationProps, IntegrationContext, IntegrationOperation, ActionDefinitions, ChannelDefinitions, EventDefinitions, AckFunction, } from './integration';
11
- export { Bot, BotContext, BotOperation, IntegrationInstance } from './bot';
4
+ export { IntegrationDefinition, IntegrationDefinitionProps, IntegrationImplementation as Integration, IntegrationImplementationProps as IntegrationProps, IntegrationContext, IntegrationSpecificClient, } from './integration';
5
+ export { Bot, BotProps, BotContext, BotSpecificClient, IntegrationInstance } from './bot';
6
+ /**
7
+ * @deprecated Infer type of integration message handlers instead
8
+ */
9
+ export type AckFunction = (props: {
10
+ tags: Record<string, string>;
11
+ }) => Promise<void>;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var me=Object.create;var E=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var be=Object.getPrototypeOf,xe=Object.prototype.hasOwnProperty;var F=(e,t)=>{for(var n in t)E(e,n,{get:t[n],enumerable:!0})},W=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of he(t))!xe.call(e,o)&&o!==n&&E(e,o,{get:()=>t[o],enumerable:!(i=ye(t,o))||i.enumerable});return e};var R=(e,t,n)=>(n=e!=null?me(be(e)):{},W(t||!e||!e.__esModule?E(n,"default",{value:e,enumerable:!0}):n,e)),ve=e=>W(E({},"__esModule",{value:!0}),e);var gt={};F(gt,{Bot:()=>A,Integration:()=>z,IntegrationDefinition:()=>M,botIdHeader:()=>d,botUserIdHeader:()=>I,clients:()=>ct,configurationHeader:()=>l,integrationIdHeader:()=>P,messages:()=>K,operationHeader:()=>u,serve:()=>h,typeHeader:()=>B,webhookIdHeader:()=>w});module.exports=ve(gt);var G=R(require("axios"));var d="x-bot-id",I="x-bot-user-id",P="x-integration-id",w="x-webhook-id",l="x-bp-configuration",u="x-bp-operation",B="x-bp-type";var H=class{axios;constructor(t){this.axios=t??G.default.create({timeout:5e3})}register=t=>J("register",t,this.axios);unregister=t=>J("unregister",t,this.axios);eventReceived=t=>J("event_received",t,this.axios)};function Ce(e){return{[B]:e.type,[d]:e.botId,[u]:e.operation,[l]:Buffer.from(typeof e.configuration=="string"?e.configuration:JSON.stringify(e.configuration),"utf-8").toString("base64")}}async function J(e,{url:t,data:n,...i},o){return(await o.post(t,n,{headers:Ce({...i,operation:e})})).data}var Q=require("node:http");var y=console;async function h(e,t=8072,n=Be){let i=(0,Q.createServer)(async(o,r)=>{try{let s=await Ie(o),c=await e(s);r.writeHead(c?.status??200,c?.headers??{}).end(c?.body??"{}")}catch(s){y.error("Error while handling request",{error:s?.message??"Internal error occured"}),r.writeHead(500).end(JSON.stringify({error:s?.message??"Internal error occured"}))}});return i.listen(t,()=>n(t)),i}async function Ie(e){let t=await we(e),n={};for(let o=0;o<e.rawHeaders.length;o+=2){let r=e.rawHeaders[o].toLowerCase(),s=e.rawHeaders[o+1];n[r]=s}let i=new URL(e.url??"",e.headers.host?`http://${e.headers.host}`:"http://botpress.cloud");return{body:t,path:i.pathname,query:Pe(i.search,"?"),headers:n,method:e.method?.toUpperCase()??"GET"}}function Pe(e,t){return e.indexOf(t)===0?e.slice(t.length):e}async function we(e){return new Promise((t,n)=>{if(e.method!=="POST"&&e.method!=="PUT"&&e.method!=="PATCH")return t(void 0);let i="";e.on("data",o=>i+=o.toString()),e.on("error",o=>n(o)),e.on("end",()=>t(i))})}function Be(e){y.info(`Listening on port ${e}`)}var N=require("@botpress/client");var X=require("zod"),Y=X.z.enum(["event_received","register","unregister","ping"]);var ee=e=>async t=>{let n=Se(t.headers);n.operation!=="ping"&&y.info(`Received ${n.operation} operation for bot ${n.botId} of type ${n.type}`);let i=new N.Client({botId:n.botId}),o={req:t,botState:e,ctx:n,client:i};switch(n.operation){case"event_received":await De(o);break;case"register":await Oe(o);break;case"unregister":await Ee(o);break;case"ping":await Te(o);break;default:throw new Error(`Unknown operation ${n.operation}`)}return{status:200}};function Se(e){let t=e[d],n=e[l],i=e[B],o=Y.parse(e[u]);if(!t)throw new Error("Missing bot headers");if(!i)throw new Error("Missing type headers");if(!n)throw new Error("Missing configuration headers");if(!o)throw new Error("Missing operation headers");return{botId:t,operation:o,type:i,configuration:n?JSON.parse(Buffer.from(n,"base64").toString("utf-8")):{}}}async function De({botState:e,ctx:t,req:n}){y.debug(`Received event ${t.type}`);let i=new N.Client({botId:t.botId}),o=Re(n);switch(t.type){case"message_created":await Promise.all(e.messageHandlers.map(r=>r({client:i,user:o.event.payload.user,conversation:o.event.payload.conversation,message:o.event.payload.message,event:o.event,ctx:t})));break;case"state_expired":await Promise.all(e.stateExpiredHandlers.map(r=>r({client:i,state:o.event.payload.state,ctx:t})));break;default:await Promise.all(e.eventHandlers.map(r=>r({client:i,event:o.event,ctx:t})))}}async function Te(e){}async function Oe(e){}async function Ee(e){}function Re(e){if(!e.body)throw new Error("Missing body");return JSON.parse(e.body)}var A=class{_state={registerHandlers:[],unregisterHandlers:[],messageHandlers:[],eventHandlers:[],stateExpiredHandlers:[]};definition;constructor(t={}){this.definition=t}message=t=>{this._state.messageHandlers.push(t)};event=t=>{this._state.eventHandlers.push(t)};stateExpired=t=>{this._state.stateExpiredHandlers.push(t)};handler=ee(this._state);start=t=>h(this.handler,t)};var L=require("@botpress/client"),U=R(require("axios"));var ne=require("@botpress/client"),S=require("zod"),te=new ne.RuntimeError(""),oe=S.z.object({code:S.z.literal(te.code),type:S.z.literal(te.type),message:S.z.string()});var k=class{axios;constructor(t){this.axios=t??U.default.create({timeout:5e3})}actionTriggered=t=>b("action_triggered",t,this.axios);messageCreated=t=>b("message_created",t,this.axios);register=t=>b("register",t,this.axios);unregister=t=>b("unregister",t,this.axios);webhookReceived=t=>He("webhook_received",t,this.axios);createUser=t=>b("create_user",t,this.axios);createConversation=t=>b("create_conversation",t,this.axios)};function re(e){return{[d]:e.botId,[u]:e.operation,[I]:e.botUserId,[P]:e.integrationId,[w]:e.webhookId,[l]:Buffer.from(typeof e.configuration=="string"?e.configuration:JSON.stringify(e.configuration),"utf-8").toString("base64")}}async function He(e,{url:t,data:n,...i},o){return await o.post(t,n,{headers:re({...i,operation:e})}).catch(s=>{if(U.default.isAxiosError(s)&&s.response?.status&&s.response.status<500)return s.response;throw s})}async function b(e,{url:t,data:n,...i},o){try{return await o.post(t,n,{headers:re({...i,operation:e})})}catch(r){let s=new L.RuntimeError("").code;if(U.default.isAxiosError(r)&&r.response?.status===s){let c=oe.safeParse(r.response.data);if(c.success)throw new L.RuntimeError(c.data.message)}throw r}}var ie=require("zod"),ae=ie.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]);var x=require("radash"),a=require("zod");var se=R(require("zod-to-json-schema")),Ae=e=>e?.type==="object";function f(e){let t=(0,se.default)(e.schema,{errorMessages:!0});if(!Ae(t)||!e.ui)return t;for(let[n,i]of Object.entries(e.ui??{})){let o=t.properties?.[n];o&&(i?.title&&(o.title=i.title),i?.examples&&(o.examples=i.examples))}return t}var ke=e=>{let t=a.z.record(e);return{min:n=>t.refine(i=>Object.keys(i).length>=n,{message:`At least ${n} item(s) must be defined`})}},v=a.z.object({}).passthrough(),Ue=a.z.object({schema:v}),Me=a.z.object({title:a.z.string().optional(),description:a.z.string().optional(),schema:v}),je=a.z.object({title:a.z.string().optional(),description:a.z.string().optional(),input:a.z.object({schema:v}),output:a.z.object({schema:v})}),_e=a.z.object({schema:v}),$=a.z.object({title:a.z.string().optional(),description:a.z.string().optional()}),ze=a.z.object({title:a.z.string().optional(),description:a.z.string().optional(),messages:ke(_e).min(1),message:a.z.object({tags:a.z.record($)}).partial().optional(),conversation:a.z.object({tags:a.z.record($),creation:a.z.object({enabled:a.z.boolean(),requiredTags:a.z.array(a.z.string())})}).partial().optional()}),qe=a.z.object({type:a.z.union([a.z.literal("integration"),a.z.literal("conversation"),a.z.literal("user")]),schema:v}),Je="0.2.0",Ne="0.0.1",Le=a.z.object({name:a.z.string(),version:a.z.enum([Ne,Je]),title:a.z.string().optional(),description:a.z.string().optional(),icon:a.z.string().optional(),readme:a.z.string().optional(),configuration:Ue.optional(),events:a.z.record(Me).optional(),actions:a.z.record(je).optional(),channels:a.z.record(ze).optional(),states:a.z.record(qe).optional(),user:a.z.object({tags:a.z.record($),creation:a.z.object({enabled:a.z.boolean(),requiredTags:a.z.array(a.z.string())})}).partial().optional(),secrets:a.z.array(a.z.string()).optional()});function $e(e){return{...e,configuration:e.configuration?{...e.configuration,schema:f(e.configuration)}:void 0,events:e.events?(0,x.mapValues)(e.events,t=>({...t,schema:f(t)})):void 0,actions:e.actions?(0,x.mapValues)(e.actions,t=>({...t,input:{...t.input,schema:f(t.input)},output:{...t.output,schema:f(t.output)}})):void 0,channels:e.channels?(0,x.mapValues)(e.channels,t=>({...t,messages:(0,x.mapValues)(t.messages,n=>({...n,schema:f(n)}))})):void 0,states:e.states?(0,x.mapValues)(e.states,t=>({...t,schema:f(t)})):void 0,user:e.user}}var M=class{name;version;icon;readme;title;description;configuration;events;actions;channels;states;user;secrets;constructor(t){let n=$e(t),i=Le.parse(n),{name:o,version:r,icon:s,readme:c,title:C,description:D,configuration:T,events:O,actions:V,channels:q,states:le,user:ue,secrets:fe}=i;this.name=o,this.version=r,this.icon=s,this.readme=c,this.title=C,this.description=D,this.configuration=T,this.events=O,this.actions=V,this.channels=q,this.states=le,this.user=ue,this.secrets=fe}};var _=require("@botpress/client");var Z=R(require("util")),j=e=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:Z.default.format(...e),visible_to_bot_owner:!0});{let[t,...n]=e;return Z.default.format(`[For Bot Owner] ${t}`,...n)}},pe={forBot:()=>({info:(...e)=>{console.info(j(e))},warn:(...e)=>{console.warn(j(e))},error:(...e)=>{console.error(j(e))},debug:(...e)=>{console.debug(j(e))}})};var ce=e=>async t=>{let n=Ze(t.headers),i=new _.Client({botId:n.botId,integrationId:n.integrationId}),o={integration:e,ctx:n,req:t,client:i,logger:pe};try{let r;switch(n.operation){case"webhook_received":r=await Ve(o);break;case"register":r=await Fe(o);break;case"unregister":r=await We(o);break;case"message_created":r=await Xe(o);break;case"action_triggered":r=await Ye(o);break;case"ping":r=await Ke(o);break;case"create_user":r=await Ge(o);break;case"create_conversation":r=await Qe(o);break;default:throw new Error(`Unknown operation ${n.operation}`)}return r?{...r,status:r.status??200}:{status:200}}catch(r){if(r instanceof _.RuntimeError)return{status:r.code,body:JSON.stringify(r.toJSON())};throw r}};function Ze(e){let t=e[d],n=e[I],i=e[P],o=e[w],r=e[l],s=ae.parse(e[u]);if(!t)throw new Error("Missing bot headers");if(!n)throw new Error("Missing bot user headers");if(!i)throw new Error("Missing integration headers");if(!o)throw new Error("Missing webhook headers");if(!r)throw new Error("Missing configuration headers");if(!s)throw new Error("Missing operation headers");return{botId:t,botUserId:n,integrationId:i,webhookId:o,operation:s,configuration:r?JSON.parse(Buffer.from(r,"base64").toString("utf-8")):{}}}function m(e){if(!e.body)throw new Error("Missing body");return JSON.parse(e.body)}async function Ke(e){}async function Ve({client:e,ctx:t,integration:n,req:i,logger:o}){let{req:r}=m(i);return n.handler({client:e,ctx:t,req:r,logger:o})}async function Fe({client:e,ctx:t,integration:n,req:i,logger:o}){if(!n.register)return;let{webhookUrl:r}=m(i);await n.register({client:e,ctx:t,webhookUrl:r,logger:o})}async function We({client:e,ctx:t,integration:n,req:i,logger:o}){if(!n.unregister)return;let{webhookUrl:r}=m(i);await n.unregister({ctx:t,webhookUrl:r,client:e,logger:o})}async function Ge({client:e,ctx:t,integration:n,req:i,logger:o}){if(!n.createUser)return;let{tags:r}=m(i);return await n.createUser({ctx:t,client:e,tags:r,logger:o})}async function Qe({client:e,ctx:t,integration:n,req:i,logger:o}){if(!n.createConversation)return;let{channel:r,tags:s}=m(i);return await n.createConversation({ctx:t,client:e,channel:r,tags:s,logger:o})}async function Xe({ctx:e,integration:t,req:n,client:i,logger:o}){let{conversation:r,user:s,type:c,payload:C,message:D}=m(n),T=t.channels[r.channel];if(!T)throw new Error(`Channel ${r.channel} not found`);let O=T.messages[c];if(!O)throw new Error(`Message of type ${c} not found in channel ${r.channel}`);await O({ctx:e,conversation:r,message:D,user:s,type:c,client:i,payload:C,ack:async({tags:q})=>{await i.updateMessage({id:D.id,tags:q})},logger:o})}async function Ye({req:e,integration:t,ctx:n,client:i,logger:o}){let{input:r,type:s}=m(e);if(!s)throw new Error("Missing action type");let c=t.actions[s];if(!c)throw new Error(`Action ${s} not found`);let C=await c({ctx:n,input:r,client:i,type:s,logger:o});return{body:JSON.stringify({output:C})}}var z=class{props;actions;channels;register;unregister;createUser;createConversation;handler;start;constructor(t){this.props=t,this.actions=t.actions,this.channels=t.channels,this.register=t.register,this.unregister=t.unregister,this.createUser=t.createUser,this.createConversation=t.createConversation,this.handler=ce(t),this.start=n=>h(this.handler,n)}};var K={};F(K,{defaults:()=>pt});var p=require("zod"),g=p.z.string().min(1),et=p.z.object({text:g}),tt=p.z.object({markdown:g}),nt=p.z.object({imageUrl:g}),ot=p.z.object({audioUrl:g}),rt=p.z.object({videoUrl:g}),it=p.z.object({fileUrl:g,title:g.optional()}),at=p.z.object({latitude:p.z.number(),longitude:p.z.number(),address:p.z.string().optional(),title:p.z.string().optional()}),de=p.z.object({title:g,subtitle:g.optional(),imageUrl:g.optional(),actions:p.z.array(p.z.object({action:p.z.enum(["postback","url","say"]),label:g,value:g}))}),ge=p.z.object({text:g,options:p.z.array(p.z.object({label:g,value:g}))}),st=p.z.object({items:p.z.array(de)}),pt={text:{schema:et},markdown:{schema:tt},image:{schema:nt},audio:{schema:ot},video:{schema:rt},file:{schema:it},location:{schema:at},carousel:{schema:st},card:{schema:de},dropdown:{schema:ge},choice:{schema:ge}};var ct={IntegrationClient:k,BotClient:H};0&&(module.exports={Bot,Integration,IntegrationDefinition,botIdHeader,botUserIdHeader,clients,configurationHeader,integrationIdHeader,messages,operationHeader,serve,typeHeader,webhookIdHeader});
1
+ "use strict";var V=Object.create;var B=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var ee=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty;var O=(t,e)=>{for(var n in e)B(t,n,{get:e[n],enumerable:!0})},F=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Y(e))!te.call(t,o)&&o!==n&&B(t,o,{get:()=>e[o],enumerable:!(r=X(e,o))||r.enumerable});return t};var _=(t,e,n)=>(n=t!=null?V(ee(t)):{},F(e||!t||!t.__esModule?B(n,"default",{value:t,enumerable:!0}):n,t)),ne=t=>F(B({},"__esModule",{value:!0}),t);var Ue={};O(Ue,{Bot:()=>P,BotSpecificClient:()=>m,Integration:()=>E,IntegrationDefinition:()=>b,IntegrationSpecificClient:()=>u,botIdHeader:()=>I,botUserIdHeader:()=>U,configurationHeader:()=>f,integrationIdHeader:()=>A,messages:()=>M,operationHeader:()=>h,parseBody:()=>p,serve:()=>y,typeHeader:()=>D,webhookIdHeader:()=>k});module.exports=ne(Ue);var M={};O(M,{defaults:()=>le});var i=require("zod"),g=i.z.string().min(1),oe=i.z.object({text:g}),se=i.z.object({markdown:g}),re=i.z.object({imageUrl:g}),ae=i.z.object({audioUrl:g}),ie=i.z.object({videoUrl:g}),ge=i.z.object({fileUrl:g,title:g.optional()}),ce=i.z.object({latitude:i.z.number(),longitude:i.z.number(),address:i.z.string().optional(),title:i.z.string().optional()}),j=i.z.object({title:g,subtitle:g.optional(),imageUrl:g.optional(),actions:i.z.array(i.z.object({action:i.z.enum(["postback","url","say"]),label:g,value:g}))}),K=i.z.object({text:g,options:i.z.array(i.z.object({label:g,value:g}))}),pe=i.z.object({items:i.z.array(j)}),le={text:{schema:oe},markdown:{schema:se},image:{schema:re},audio:{schema:ae},video:{schema:ie},file:{schema:ge},location:{schema:ce},carousel:{schema:pe},card:{schema:j},dropdown:{schema:K},choice:{schema:K}};var I="x-bot-id",U="x-bot-user-id",A="x-integration-id",k="x-webhook-id",f="x-bp-configuration",h="x-bp-operation",D="x-bp-type";var q=require("node:http");var T=console;function p(t){if(!t.body)throw new Error("Missing body");return JSON.parse(t.body)}async function y(t,e=8072,n=me){let r=(0,q.createServer)(async(o,s)=>{try{let a=await de(o),c=await t(a);s.writeHead(c?.status??200,c?.headers??{}).end(c?.body??"{}")}catch(a){T.error("Error while handling request",{error:a?.message??"Internal error occured"}),s.writeHead(500).end(JSON.stringify({error:a?.message??"Internal error occured"}))}});return r.listen(e,()=>n(e)),r}async function de(t){let e=await ue(t),n={};for(let o=0;o<t.rawHeaders.length;o+=2){let s=t.rawHeaders[o].toLowerCase(),a=t.rawHeaders[o+1];n[s]=a}let r=new URL(t.url??"",t.headers.host?`http://${t.headers.host}`:"http://botpress.cloud");return{body:e,path:r.pathname,query:Te(r.search,"?"),headers:n,method:t.method?.toUpperCase()??"GET"}}function Te(t,e){return t.indexOf(e)===0?t.slice(e.length):t}async function ue(t){return new Promise((e,n)=>{if(t.method!=="POST"&&t.method!=="PUT"&&t.method!=="PATCH")return e(void 0);let r="";t.on("data",o=>r+=o.toString()),t.on("error",o=>n(o)),t.on("end",()=>e(r))})}function me(t){T.info(`Listening on port ${t}`)}var L=require("zod");var Ie=L.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),G=t=>{let e=t[I],n=t[U],r=t[A],o=t[k],s=t[f],a=Ie.parse(t[h]);if(!e)throw new Error("Missing bot headers");if(!n)throw new Error("Missing bot user headers");if(!r)throw new Error("Missing integration headers");if(!o)throw new Error("Missing webhook headers");if(!s)throw new Error("Missing configuration headers");if(!a)throw new Error("Missing operation headers");return{botId:e,botUserId:n,integrationId:r,webhookId:o,operation:a,configuration:s?JSON.parse(Buffer.from(s,"base64").toString("utf-8")):{}}};var b=class{name;version;title;description;icon;readme;configuration;events;actions;channels;states;user;secrets;constructor(e){let{name:n,version:r,icon:o,readme:s,title:a,description:c,configuration:d,events:l,actions:v,channels:C,states:R,user:w,secrets:Q}=e;this.name=n,this.version=r,this.icon=o,this.readme=s,this.title=a,this.description=c,this.configuration=d,this.events=l,this.actions=v,this.channels=C,this.states=R,this.user=w,this.secrets=Q}};var S=require("@botpress/client");var u=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);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).then(n=>({state:{...n.state,payload:n.state.payload}}));setState=e=>this.client.setState(e).then(n=>({state:{...n.state,payload:n.state.payload}}));patchState=e=>this.client.patchState(e).then(n=>({state:{...n.state,payload:n.state.payload}}));configureIntegration=e=>this.client.configureIntegration(e)};var H=_(require("util")),x=t=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:H.default.format(...t),visible_to_bot_owner:!0});{let[e,...n]=t;return H.default.format(`[For Bot Owner] ${e}`,...n)}},$={forBot:()=>({info:(...t)=>{console.info(x(t))},warn:(...t)=>{console.warn(x(t))},error:(...t)=>{console.error(x(t))},debug:(...t)=>{console.debug(x(t))}})};var N=t=>async e=>{let n=G(e.headers),r=new u(new S.Client({botId:n.botId,integrationId:n.integrationId})),o={ctx:n,req:e,client:r,logger:$,instance:t};try{let s;switch(n.operation){case"webhook_received":s=await he(o);break;case"register":s=await ye(o);break;case"unregister":s=await ve(o);break;case"message_created":s=await be(o);break;case"action_triggered":s=await xe(o);break;case"ping":s=await fe(o);break;case"create_user":s=await Ce(o);break;case"create_conversation":s=await Be(o);break;default:throw new Error(`Unknown operation ${n.operation}`)}return s?{...s,status:s.status??200}:{status:200}}catch(s){if(s instanceof S.RuntimeError)return{status:s.code,body:JSON.stringify(s.toJSON())};throw s}},fe=async t=>{},he=async({client:t,ctx:e,req:n,logger:r,instance:o})=>{let{req:s}=p(n);return o.webhook({client:t,ctx:e,req:s,logger:r})},ye=async({client:t,ctx:e,req:n,logger:r,instance:o})=>{if(!o.register)return;let{webhookUrl:s}=p(n);await o.register({client:t,ctx:e,webhookUrl:s,logger:r})},ve=async({client:t,ctx:e,req:n,logger:r,instance:o})=>{if(!o.unregister)return;let{webhookUrl:s}=p(n);await o.unregister({ctx:e,webhookUrl:s,client:t,logger:r})},Ce=async({client:t,ctx:e,req:n,logger:r,instance:o})=>{if(!o.createUser)return;let{tags:s}=p(n);return await o.createUser({ctx:e,client:t,tags:s,logger:r})},Be=async({client:t,ctx:e,req:n,logger:r,instance:o})=>{if(!o.createConversation)return;let{channel:s,tags:a}=p(n);return await o.createConversation({ctx:e,client:t,channel:s,tags:a,logger:r})},be=async({ctx:t,req:e,client:n,logger:r,instance:o})=>{let{conversation:s,user:a,type:c,payload:d,message:l}=p(e),v=o.channels[s.channel];if(!v)throw new Error(`Channel ${s.channel} not found`);let C=v.messages[c];if(!C)throw new Error(`Message of type ${c} not found in channel ${s.channel}`);await C({ctx:t,conversation:s,message:l,user:a,type:c,client:n,payload:d,ack:async({tags:w})=>{await n.updateMessage({id:l.id,tags:w})},logger:r})},xe=async({req:t,ctx:e,client:n,logger:r,instance:o})=>{let{input:s,type:a}=p(t);if(!a)throw new Error("Missing action type");let c=o.actions[a];if(!c)throw new Error(`Action ${a} not found`);let d=await c({ctx:e,input:s,client:n,type:a,logger:r});return{body:JSON.stringify({output:d})}};var E=class{props;actions;channels;register;unregister;createUser;createConversation;webhook;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}handler=N(this);start=e=>y(this.handler,e)};var Z=_(require("@botpress/client"));var m=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);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);patchState=e=>this.client.patchState(e);callAction=e=>this.client.callAction(e)};var W=require("zod");var Se=W.z.enum(["event_received","register","unregister","ping"]),z=t=>{let e=t[I],n=t[f],r=t[D],o=Se.parse(t[h]);if(!e)throw new Error("Missing bot headers");if(!r)throw new Error("Missing type headers");if(!n)throw new Error("Missing configuration headers");if(!o)throw new Error("Missing operation headers");return{botId:e,operation:o,type:r,configuration:n?JSON.parse(Buffer.from(n,"base64").toString("utf-8")):{}}};var J=t=>async e=>{let n=z(e.headers);n.operation!=="ping"&&T.info(`Received ${n.operation} operation for bot ${n.botId} of type ${n.type}`);let r=new m(new Z.Client({botId:n.botId})),o={req:e,ctx:n,client:r,instance:t};switch(n.operation){case"event_received":await Me(o);break;case"register":await Pe(o);break;case"unregister":await we(o);break;case"ping":await Ee(o);break;default:throw new Error(`Unknown operation ${n.operation}`)}return{status:200}},Ee=async t=>{},Pe=async t=>{},we=async t=>{},Me=async({ctx:t,req:e,client:n,instance:r})=>{T.debug(`Received event ${t.type}`);let o=p(e),s=o.event;switch(t.type){case"message_created":let a={user:s.payload.user,conversation:s.payload.conversation,message:s.payload.message,event:s};await Promise.all(r.messageHandlers.map(l=>l({client:n,ctx:t,...a})));break;case"state_expired":let c={state:s.payload.state};await Promise.all(r.stateExpiredHandlers.map(l=>l({client:n,ctx:t,...c})));break;default:let d={event:o.event};await Promise.all(r.eventHandlers.map(l=>l({client:n,ctx:t,...d})))}};var P=class{_state={messageHandlers:[],eventHandlers:[],stateExpiredHandlers:[]};props;constructor(e){this.props=e}message=e=>{this._state.messageHandlers.push(e)};event=e=>{this._state.eventHandlers.push(e)};stateExpired=e=>{this._state.stateExpiredHandlers.push(e)};handler=J(this._state);start=e=>y(this.handler,e)};0&&(module.exports={Bot,BotSpecificClient,Integration,IntegrationDefinition,IntegrationSpecificClient,botIdHeader,botUserIdHeader,configurationHeader,integrationIdHeader,messages,operationHeader,parseBody,serve,typeHeader,webhookIdHeader});
2
2
  //# sourceMappingURL=index.js.map