@botpress/sdk 0.8.29 → 0.8.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +3 -3
- package/dist/bot/implementation.d.ts +2 -2
- package/dist/bot/integration-instance.d.ts +4 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/integration/definition/entity-store.d.ts +19 -0
- package/dist/integration/definition/generic.d.ts +8 -0
- package/dist/integration/definition/index.d.ts +3 -0
- package/dist/integration/{definition.d.ts → definition/integration-definition.d.ts} +11 -72
- package/dist/integration/definition/interface-declaration.d.ts +60 -0
- package/dist/integration/definition/types.d.ts +86 -0
- package/dist/integration/generic.d.ts +1 -0
- package/dist/interfaces/hitl.d.ts +10 -0
- package/dist/interfaces/index.d.ts +3 -0
- package/dist/interfaces/llm.d.ts +728 -0
- package/dist/interfaces/sync.d.ts +131 -0
- package/dist/type-utils.d.ts +3 -0
- package/dist/utils.d.ts +3 -0
- package/dist/zui.d.ts +1 -0
- package/package.json +2 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
|
|
2
|
-
> @botpress/sdk@0.8.
|
|
2
|
+
> @botpress/sdk@0.8.31 build /home/runner/work/botpress/botpress/packages/sdk
|
|
3
3
|
> pnpm build:type && pnpm build:node
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @botpress/sdk@0.8.
|
|
6
|
+
> @botpress/sdk@0.8.31 build:type /home/runner/work/botpress/botpress/packages/sdk
|
|
7
7
|
> tsc --emitDeclarationOnly --declaration
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
> @botpress/sdk@0.8.
|
|
10
|
+
> @botpress/sdk@0.8.31 build:node /home/runner/work/botpress/botpress/packages/sdk
|
|
11
11
|
> ts-node -T build.ts
|
|
12
12
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from '@bpinternal/zui';
|
|
2
2
|
import type { Server } from 'node:http';
|
|
3
3
|
import { SchemaDefinition } from '../schema';
|
|
4
|
-
import { AnyZodObject
|
|
4
|
+
import { AnyZodObject } from '../type-utils';
|
|
5
5
|
import { BaseIntegrations } from './generic';
|
|
6
6
|
import { IntegrationInstance } from './integration-instance';
|
|
7
7
|
import { MessageHandler, EventHandler, StateExpiredHandler, StateType } from './server';
|
|
@@ -37,7 +37,7 @@ type MessageDefinition = {
|
|
|
37
37
|
};
|
|
38
38
|
export type BotProps<TIntegrations extends BaseIntegrations = BaseIntegrations, TStates extends BaseStates = BaseStates, TEvents extends BaseEvents = BaseEvents> = {
|
|
39
39
|
integrations?: {
|
|
40
|
-
[K in keyof TIntegrations]?: IntegrationInstance<
|
|
40
|
+
[K in keyof TIntegrations]?: IntegrationInstance<TIntegrations[K]>;
|
|
41
41
|
};
|
|
42
42
|
user?: UserDefinition;
|
|
43
43
|
conversation?: ConversationDefinition;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { BaseIntegration } from '../integration/generic';
|
|
2
|
+
export type IntegrationInstance<TIntegration extends BaseIntegration> = {
|
|
2
3
|
id: string | null;
|
|
3
4
|
enabled?: boolean;
|
|
4
5
|
configuration?: Record<string, any>;
|
|
5
|
-
name:
|
|
6
|
-
version:
|
|
6
|
+
name: TIntegration['name'];
|
|
7
|
+
version: TIntegration['version'];
|
|
7
8
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * as messages from './message';
|
|
2
|
+
export * as interfaces from './interfaces';
|
|
2
3
|
export * from './const';
|
|
3
4
|
export * from './serve';
|
|
4
5
|
export * from './zui';
|
|
5
6
|
export { isApiError, RuntimeError } from '@botpress/client';
|
|
6
|
-
export { IntegrationDefinition, IntegrationDefinitionProps, IntegrationImplementation as Integration, IntegrationImplementationProps as IntegrationProps, IntegrationContext, IntegrationSpecificClient, TagDefinition, ConfigurationDefinition, EventDefinition, ChannelDefinition, MessageDefinition, ActionDefinition, StateDefinition, UserDefinition, SecretDefinition, EntityDefinition, } from './integration';
|
|
7
|
+
export { IntegrationDefinition, IntegrationDefinitionProps, IntegrationImplementation as Integration, IntegrationImplementationProps as IntegrationProps, IntegrationContext, IntegrationSpecificClient, InterfaceDeclaration, InterfaceDeclarationProps, TagDefinition, ConfigurationDefinition, EventDefinition, ChannelDefinition, MessageDefinition, ActionDefinition, StateDefinition, UserDefinition, SecretDefinition, EntityDefinition, } from './integration';
|
|
7
8
|
export { Bot, BotProps, BotContext, BotSpecificClient, IntegrationInstance } from './bot';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var ge=Object.create;var P=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var pe=Object.getPrototypeOf,de=Object.prototype.hasOwnProperty;var A=(t,e)=>{for(var n in e)P(t,n,{get:e[n],enumerable:!0})},E=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ce(e))!de.call(t,s)&&s!==n&&P(t,s,{get:()=>e[s],enumerable:!(r=le(e,s))||r.enumerable});return t},l=(t,e,n)=>(E(t,e,"default"),n&&E(n,e,"default")),_=(t,e,n)=>(n=t!=null?ge(pe(t)):{},E(e||!t||!t.__esModule?P(n,"default",{value:t,enumerable:!0}):n,t)),ue=t=>E(P({},"__esModule",{value:!0}),t);var T={};A(T,{Bot:()=>U,BotSpecificClient:()=>b,Integration:()=>M,IntegrationDefinition:()=>y,IntegrationSpecificClient:()=>I,RuntimeError:()=>D.RuntimeError,botIdHeader:()=>v,botUserIdHeader:()=>F,configurationHeader:()=>C,integrationIdHeader:()=>O,isApiError:()=>D.isApiError,messages:()=>k,operationHeader:()=>x,parseBody:()=>u,serve:()=>S,studioComponentDefinitions:()=>K,typeHeader:()=>R,webhookIdHeader:()=>H});module.exports=ue(T);var k={};A(k,{defaults:()=>Ie});var a={};A(a,{default:()=>Te,studioComponentDefinitions:()=>K});var o=require("@bpinternal/zui");l(a,require("@bpinternal/zui"));var d=o.z.object({allowDynamicVariable:o.z.boolean().optional(),horizontal:o.z.boolean().optional()}),K={string:{text:{id:"text",params:d.extend({multiLine:o.z.boolean().optional(),growVertically:o.z.boolean().optional(),suggestions:o.z.array(o.z.string()).optional()})},dropdown:{id:"dropdown",params:d.extend({filterable:o.z.boolean().optional()})},radiogroup:{id:"radiogroup",params:d.extend({})},date:{id:"date",params:d.extend({dateFormat:o.z.string().optional(),minDate:o.z.string().optional(),maxDate:o.z.string().optional(),defaultTimezone:o.z.string().optional(),disableTimezoneSelection:o.z.boolean().optional(),highlightCurrentDay:o.z.boolean().optional(),showShortcutButtons:o.z.boolean().optional(),showOutsideDaysOfMonth:o.z.boolean().optional(),firstDayOfWeek:o.z.number().optional(),canChangeMonth:o.z.boolean().optional(),showWeekNumbers:o.z.boolean().optional()})},time:{id:"time",params:d.extend({useAMPM:o.z.boolean().optional(),timeFormat:o.z.string().optional(),minTime:o.z.string().optional(),maxTime:o.z.string().optional(),showArrowButtons:o.z.boolean().optional(),precision:o.z.enum(["minute","second","millisecond"]).optional()})},richtext:{id:"richtext",params:o.z.object({allowDynamicVariable:o.z.boolean().optional(),resizable:o.z.boolean().optional()})},json:{id:"json",params:d.extend({showPreview:o.z.boolean().optional(),showValidationError:o.z.boolean().optional()})},file:{id:"file",params:d.extend({fileTypes:o.z.array(o.z.enum(["image","audio","video"])).optional(),showUploadedFiles:o.z.boolean().optional()})}},number:{number:{id:"number",params:d.extend({allowNumericCharactersOnly:o.z.boolean().optional(),stepSize:o.z.number().optional()})},slider:{id:"slider",params:o.z.object({horizontal:o.z.boolean().optional(),stepSize:o.z.number().optional()})}},boolean:{switch:{id:"switch",params:d}},array:{options:{id:"options",params:d},strings:{id:"strings",params:d},daterange:{id:"daterange",params:o.z.object({dateFormat:o.z.string().optional(),minDate:o.z.string().optional(),maxDate:o.z.string().optional(),defaultTimezone:o.z.string().optional(),allowSingleDayRange:o.z.boolean().optional(),highlightCurrentDay:o.z.boolean().optional(),showOutsideDaysOfMonth:o.z.boolean().optional(),firstDayOfWeek:o.z.number().optional(),canChangeMonth:o.z.boolean().optional(),showWeekNumbers:o.z.boolean().optional()})}},object:{collapsible:{id:"collapsible",params:o.z.object({defaultOpen:o.z.boolean().optional()})},modal:{id:"modal",params:o.z.object({title:o.z.string().optional(),buttonLabel:o.z.string().optional(),closeButtonLabel:o.z.string().optional()})},popover:{id:"popover",params:o.z.object({buttonLabel:o.z.string().optional()})}},discriminatedUnion:{}},Te=o.z;var c=a.z.string().min(1),z=a.z.object({text:c}),N=a.z.object({markdown:c}),W=a.z.object({imageUrl:c}),$=a.z.object({audioUrl:c}),Z=a.z.object({videoUrl:c}),J=a.z.object({fileUrl:c,title:c.optional()}),V=a.z.object({latitude:a.z.number(),longitude:a.z.number(),address:a.z.string().optional(),title:a.z.string().optional()}),Q=a.z.object({title:c,subtitle:c.optional(),imageUrl:c.optional(),actions:a.z.array(a.z.object({action:a.z.enum(["postback","url","say"]),label:c,value:c}))}),q=a.z.object({text:c,options:a.z.array(a.z.object({label:c,value:c}))}),me=a.z.object({items:a.z.array(Q)}),he=a.z.discriminatedUnion("type",[a.z.object({type:a.z.literal("text"),payload:z}),a.z.object({type:a.z.literal("markdown"),payload:N}),a.z.object({type:a.z.literal("image"),payload:W}),a.z.object({type:a.z.literal("audio"),payload:$}),a.z.object({type:a.z.literal("video"),payload:Z}),a.z.object({type:a.z.literal("file"),payload:J}),a.z.object({type:a.z.literal("location"),payload:V})]),ye=a.z.object({items:a.z.array(he)}),Ie={text:{schema:z},markdown:{schema:N},image:{schema:W},audio:{schema:$},video:{schema:Z},file:{schema:J},location:{schema:V},carousel:{schema:me},card:{schema:Q},dropdown:{schema:q},choice:{schema:q},bloc:{schema:ye}};var v="x-bot-id",F="x-bot-user-id",O="x-integration-id",H="x-webhook-id",C="x-bp-configuration",x="x-bp-operation",R="x-bp-type";var X=require("node:http");var h=console;function u(t){if(!t.body)throw new Error("Missing body");return JSON.parse(t.body)}async function S(t,e=8072,n=ve){let r=(0,X.createServer)(async(s,i)=>{try{let g=await fe(s);if(g.path==="/health"){i.writeHead(200).end("ok");return}let p=await t(g);i.writeHead(p?.status??200,p?.headers??{}).end(p?.body??"{}")}catch(g){h.error("Error while handling request",{error:g?.message??"Internal error occured"}),i.writeHead(500).end(JSON.stringify({error:g?.message??"Internal error occured"}))}});return r.listen(e,()=>n(e)),r}async function fe(t){let e=await Be(t),n={};for(let s=0;s<t.rawHeaders.length;s+=2){let i=t.rawHeaders[s].toLowerCase(),g=t.rawHeaders[s+1];n[i]=g}let r=new URL(t.url??"",t.headers.host?`http://${t.headers.host}`:"http://botpress.cloud");return{body:e,path:r.pathname,query:be(r.search,"?"),headers:n,method:t.method?.toUpperCase()??"GET"}}function be(t,e){return t.indexOf(e)===0?t.slice(e.length):t}async function Be(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",s=>r+=s.toString()),t.on("error",s=>n(s)),t.on("end",()=>e(r))})}function ve(t){h.info(`Listening on port ${t}`)}l(T,a,module.exports);var D=require("@botpress/client");var Y=require("@bpinternal/zui");var Ce=Y.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),ee=t=>{let e=t[v],n=t[F],r=t[O],s=t[H],i=t[C],g=Ce.parse(t[x]);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(!s)throw new Error("Missing webhook headers");if(!i)throw new Error("Missing configuration headers");if(!g)throw new Error("Missing operation headers");return{botId:e,botUserId:n,integrationId:r,webhookId:s,operation:g,configuration:i?JSON.parse(Buffer.from(i,"base64").toString("utf-8")):{}}};var y=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.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}name;version;title;description;icon;readme;configuration;events;actions;channels;states;user;secrets;identifier;entities;clone(e){return new y({...this,...e})}};var f=require("@botpress/client");var I=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 j=_(require("util")),w=t=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:j.default.format(...t),visible_to_bot_owner:!0});{let[e,...n]=t;return j.default.format(`[For Bot Owner] ${e}`,...n)}},te={forBot:()=>({info:(...t)=>{console.info(w(t))},warn:(...t)=>{console.warn(w(t))},error:(...t)=>{console.error(w(t))},debug:(...t)=>{console.debug(w(t))}})};var ne=t=>async e=>{let n=ee(e.headers),r=new I(new f.Client({botId:n.botId,integrationId:n.integrationId})),s={ctx:n,req:e,client:r,logger:te,instance:t};try{let i;switch(n.operation){case"webhook_received":i=await Se(s);break;case"register":i=await Ee(s);break;case"unregister":i=await Pe(s);break;case"message_created":i=await Ue(s);break;case"action_triggered":i=await De(s);break;case"ping":i=await xe(s);break;case"create_user":i=await we(s);break;case"create_conversation":i=await Me(s);break;default:throw new Error(`Unknown operation ${n.operation}`)}return i?{...i,status:i.status??200}:{status:200}}catch(i){if((0,f.isApiError)(i)){let g=new f.RuntimeError(i.message,i);return{status:g.code,body:JSON.stringify(g.toJSON())}}throw i}},xe=async t=>{},Se=async({client:t,ctx:e,req:n,logger:r,instance:s})=>{let{req:i}=u(n);return s.webhook({client:t,ctx:e,req:i,logger:r})},Ee=async({client:t,ctx:e,req:n,logger:r,instance:s})=>{if(!s.register)return;let{webhookUrl:i}=u(n);await s.register({client:t,ctx:e,webhookUrl:i,logger:r})},Pe=async({client:t,ctx:e,req:n,logger:r,instance:s})=>{if(!s.unregister)return;let{webhookUrl:i}=u(n);await s.unregister({ctx:e,webhookUrl:i,client:t,logger:r})},we=async({client:t,ctx:e,req:n,logger:r,instance:s})=>{if(!s.createUser)return;let{tags:i}=u(n);return await s.createUser({ctx:e,client:t,tags:i,logger:r})},Me=async({client:t,ctx:e,req:n,logger:r,instance:s})=>{if(!s.createConversation)return;let{channel:i,tags:g}=u(n);return await s.createConversation({ctx:e,client:t,channel:i,tags:g,logger:r})},Ue=async({ctx:t,req:e,client:n,logger:r,instance:s})=>{let{conversation:i,user:g,type:p,payload:B,message:m}=u(e),G=s.channels[i.channel];if(!G)throw new Error(`Channel ${i.channel} not found`);let L=G.messages[p];if(!L)throw new Error(`Message of type ${p} not found in channel ${i.channel}`);await L({ctx:t,conversation:i,message:m,user:g,type:p,client:n,payload:B,ack:async({tags:re})=>{await n.updateMessage({id:m.id,tags:re})},logger:r})},De=async({req:t,ctx:e,client:n,logger:r,instance:s})=>{let{input:i,type:g}=u(t);if(!g)throw new Error("Missing action type");let p=s.actions[g];if(!p)throw new Error(`Action ${g} not found`);let B=await p({ctx:e,input:i,client:n,type:g,logger:r});return{body:JSON.stringify({output:B})}};var M=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=ne(this);start=e=>S(this.handler,e)};var ae=_(require("@botpress/client"));var b=class{constructor(e){this.client=e}getConversation=e=>this.client.getConversation(e);listConversations=e=>this.client.listConversations(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);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);getUser=e=>this.client.getUser(e);listUsers=e=>this.client.listUsers(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}}));getOrSetState=e=>this.client.getOrSetState(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}}));callAction=e=>this.client.callAction(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);searchFiles=e=>this.client.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)};var oe=require("@bpinternal/zui");var Ae=oe.z.enum(["event_received","register","unregister","ping","action_triggered"]),se=t=>{let e=t[v],n=t[C],r=t[R],s=Ae.parse(t[x]);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(!s)throw new Error("Missing operation headers");return{botId:e,operation:s,type:r,configuration:n?JSON.parse(Buffer.from(n,"base64").toString("utf-8")):{}}};var ie=t=>async e=>{let n=se(e.headers);n.operation!=="ping"&&h.info(`Received ${n.operation} operation for bot ${n.botId} of type ${n.type}`);let r=new b(new ae.Client({botId:n.botId})),s={req:e,ctx:n,client:r,instance:t};switch(n.operation){case"action_triggered":throw new Error(`Operation ${n.operation} not supported yet`);case"event_received":await He(s);break;case"register":await Fe(s);break;case"unregister":await Oe(s);break;case"ping":await ke(s);break;default:throw new Error(`Unknown operation ${n.operation}`)}return{status:200}},ke=async t=>{},Fe=async t=>{},Oe=async t=>{},He=async({ctx:t,req:e,client:n,instance:r})=>{h.debug(`Received event ${t.type}`);let s=u(e),i=s.event;switch(t.type){case"message_created":let g={user:i.payload.user,conversation:i.payload.conversation,message:i.payload.message,states:i.payload.states,event:i};await Promise.all(r.messageHandlers.map(m=>m({client:n,ctx:t,...g})));break;case"state_expired":let p={state:i.payload.state};await Promise.all(r.stateExpiredHandlers.map(m=>m({client:n,ctx:t,...p})));break;default:let B={event:s.event};await Promise.all(r.eventHandlers.map(m=>m({client:n,ctx:t,...B})))}};var U=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=ie(this._state);start=e=>S(this.handler,e)};0&&(module.exports={Bot,BotSpecificClient,Integration,IntegrationDefinition,IntegrationSpecificClient,RuntimeError,botIdHeader,botUserIdHeader,configurationHeader,integrationIdHeader,isApiError,messages,operationHeader,parseBody,serve,studioComponentDefinitions,typeHeader,webhookIdHeader});
|
|
1
|
+
"use strict";var Ce=Object.create;var j=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var H=(t,e)=>{for(var o in e)j(t,o,{get:e[o],enumerable:!0})},F=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Pe(e))!Me.call(t,s)&&s!==o&&j(t,s,{get:()=>e[s],enumerable:!(i=Se(e,s))||i.enumerable});return t},g=(t,e,o)=>(F(t,e,"default"),o&&F(o,e,"default")),Y=(t,e,o)=>(o=t!=null?Ce(we(t)):{},F(e||!t||!t.__esModule?j(o,"default",{value:t,enumerable:!0}):o,t)),Ae=t=>F(j({},"__esModule",{value:!0}),t);var y={};H(y,{Bot:()=>_,BotSpecificClient:()=>A,Integration:()=>K,IntegrationDefinition:()=>S,IntegrationSpecificClient:()=>w,InterfaceDeclaration:()=>T,RuntimeError:()=>N.RuntimeError,botIdHeader:()=>k,botUserIdHeader:()=>V,configurationHeader:()=>R,integrationIdHeader:()=>$,interfaces:()=>Z,isApiError:()=>N.isApiError,messages:()=>L,operationHeader:()=>D,parseBody:()=>f,serve:()=>O,studioComponentDefinitions:()=>ee,typeHeader:()=>J,webhookIdHeader:()=>W});module.exports=Ae(y);var L={};H(L,{defaults:()=>De});var n={};H(n,{default:()=>p,studioComponentDefinitions:()=>ee});var r=require("@bpinternal/zui");g(n,require("@bpinternal/zui"));var h=r.z.object({allowDynamicVariable:r.z.boolean().optional(),horizontal:r.z.boolean().optional()}),ee={string:{text:{id:"text",params:h.extend({multiLine:r.z.boolean().optional(),growVertically:r.z.boolean().optional(),suggestions:r.z.array(r.z.string()).optional()})},dropdown:{id:"dropdown",params:h.extend({filterable:r.z.boolean().optional()})},radiogroup:{id:"radiogroup",params:h.extend({})},date:{id:"date",params:h.extend({dateFormat:r.z.string().optional(),minDate:r.z.string().optional(),maxDate:r.z.string().optional(),defaultTimezone:r.z.string().optional(),disableTimezoneSelection:r.z.boolean().optional(),highlightCurrentDay:r.z.boolean().optional(),showShortcutButtons:r.z.boolean().optional(),showOutsideDaysOfMonth:r.z.boolean().optional(),firstDayOfWeek:r.z.number().optional(),canChangeMonth:r.z.boolean().optional(),showWeekNumbers:r.z.boolean().optional()})},time:{id:"time",params:h.extend({useAMPM:r.z.boolean().optional(),timeFormat:r.z.string().optional(),minTime:r.z.string().optional(),maxTime:r.z.string().optional(),showArrowButtons:r.z.boolean().optional(),precision:r.z.enum(["minute","second","millisecond"]).optional()})},richtext:{id:"richtext",params:r.z.object({allowDynamicVariable:r.z.boolean().optional(),resizable:r.z.boolean().optional()})},json:{id:"json",params:h.extend({showPreview:r.z.boolean().optional(),showValidationError:r.z.boolean().optional()})},file:{id:"file",params:h.extend({fileTypes:r.z.array(r.z.enum(["image","audio","video"])).optional(),showUploadedFiles:r.z.boolean().optional()})}},number:{number:{id:"number",params:h.extend({allowNumericCharactersOnly:r.z.boolean().optional(),stepSize:r.z.number().optional()})},slider:{id:"slider",params:r.z.object({horizontal:r.z.boolean().optional(),stepSize:r.z.number().optional()})}},boolean:{switch:{id:"switch",params:h}},array:{options:{id:"options",params:h},strings:{id:"strings",params:h},daterange:{id:"daterange",params:r.z.object({dateFormat:r.z.string().optional(),minDate:r.z.string().optional(),maxDate:r.z.string().optional(),defaultTimezone:r.z.string().optional(),allowSingleDayRange:r.z.boolean().optional(),highlightCurrentDay:r.z.boolean().optional(),showOutsideDaysOfMonth:r.z.boolean().optional(),firstDayOfWeek:r.z.number().optional(),canChangeMonth:r.z.boolean().optional(),showWeekNumbers:r.z.boolean().optional()})}},object:{collapsible:{id:"collapsible",params:r.z.object({defaultOpen:r.z.boolean().optional()})},modal:{id:"modal",params:r.z.object({title:r.z.string().optional(),buttonLabel:r.z.string().optional(),closeButtonLabel:r.z.string().optional()})},popover:{id:"popover",params:r.z.object({buttonLabel:r.z.string().optional()})}},discriminatedUnion:{}},p=r.z;var u=n.z.string().min(1),ne=n.z.object({text:u}),oe=n.z.object({markdown:u}),se=n.z.object({imageUrl:u}),ie=n.z.object({audioUrl:u}),ae=n.z.object({videoUrl:u}),re=n.z.object({fileUrl:u,title:u.optional()}),ce=n.z.object({latitude:n.z.number(),longitude:n.z.number(),address:n.z.string().optional(),title:n.z.string().optional()}),le=n.z.object({title:u,subtitle:u.optional(),imageUrl:u.optional(),actions:n.z.array(n.z.object({action:n.z.enum(["postback","url","say"]),label:u,value:u}))}),te=n.z.object({text:u,options:n.z.array(n.z.object({label:u,value:u}))}),Ue=n.z.object({items:n.z.array(le)}),ke=n.z.discriminatedUnion("type",[n.z.object({type:n.z.literal("text"),payload:ne}),n.z.object({type:n.z.literal("markdown"),payload:oe}),n.z.object({type:n.z.literal("image"),payload:se}),n.z.object({type:n.z.literal("audio"),payload:ie}),n.z.object({type:n.z.literal("video"),payload:ae}),n.z.object({type:n.z.literal("file"),payload:re}),n.z.object({type:n.z.literal("location"),payload:ce})]),Re=n.z.object({items:n.z.array(ke)}),De={text:{schema:ne},markdown:{schema:oe},image:{schema:se},audio:{schema:ie},video:{schema:ae},file:{schema:re},location:{schema:ce},carousel:{schema:Ue},card:{schema:le},dropdown:{schema:te},choice:{schema:te},bloc:{schema:Re}};var Z={};H(Z,{creatable:()=>Le,deletable:()=>Ze,hitl:()=>Ke,listable:()=>Ne,llm:()=>Ge,readable:()=>ze,updatable:()=>qe});var E=t=>Object.entries(t);var C=(t,e)=>Object.fromEntries(E(t).map(([o,i])=>[o,e(i,o)]));var q=Symbol("entityKey"),pe=t=>t?C(t,(o,i)=>({...o,[q]:i})):{},ge=t=>t[q]!==void 0,de=t=>t[q];var S=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.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}name;version;title;description;icon;readme;configuration;events;actions;channels;states;user;secrets;identifier;entities;interfaces={};clone(e){let o=new S({...this,...e});for(let[i,s]of Object.entries(this.interfaces))o.interfaces[i]=s;return o}extend(e,o){let i=o(pe(this.entities)),s=E(i).find(([x,Ee])=>!ge(Ee));if(s)throw new Error(`Cannot extend interface "${e.name}" with entity "${s[0]}"; the provided schema is not part of the integration's entities.`);let a=C(i,x=>({name:de(x),schema:x.schema})),{resolved:c,implementStatement:l}=e.resolve({entities:a}),d=this,{actions:m,events:b}=c;d.actions={...d.actions??{},...m},d.events={...d.events??{},...b};let B=Object.values(a).map(x=>x.name),X=`${e.name}<${B.join(",")}>`;return this.interfaces[X]=l,this}};var T=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.events=e.events,this.actions=e.actions,this.entities=e.entities,this.templateName=e.templateName}name;version;entities;events;actions;templateName;resolve(e){let{entities:o}=e,i={name:this.name,version:this.version,entities:C(o,l=>({name:l.name})),actions:{},events:{}},s={},a={};for(let[l,d]of E(this.actions)){let m=this._dereference(d.input.schema,o),b=this._dereference(d.output.schema,o),B=this._rename(o,l);s[B]={input:{schema:m},output:{schema:b}},i.actions[l]={name:B}}for(let[l,d]of E(this.events)){let m=this._dereference(d.schema,o),b=this._rename(o,l);a[b]={schema:m},i.events[l]={name:b}}return{resolved:{actions:s,events:a},implementStatement:i}}_dereference(e,o){let i={},s={};for(let[a,c]of E(o))i[a]=c.schema,s[a]=p.ref(a);return e(s).dereference(i)}_rename(e,o){if(!this.templateName)return o;let i=C(e,s=>s.name);return this.templateName(o,i)}};var Oe=n.z.object({id:n.z.string(),type:n.z.enum(["function"]),function:n.z.object({name:n.z.string(),arguments:n.z.string()})}),Fe=n.z.object({type:n.z.enum(["auto","specific","any","none",""]).optional(),functionName:n.z.string().optional().describe('Required if `type` is "specific"')}),ue=n.z.object({role:n.z.enum(["user","assistant"]),type:n.z.enum(["text","tool_calls","tool_result","multipart"]),toolCalls:n.z.array(Oe).optional().describe('Required if `type` is "tool_calls"'),toolResultCallId:n.z.string().optional().describe('Required if `type` is "tool_result"'),content:n.z.string().or(n.z.array(n.z.object({type:n.z.enum(["text","image"]),mimeType:n.z.string(),text:n.z.string().optional().describe('Required if part type is "text" '),url:n.z.string().optional().describe('Required if part type is "image"')}))).optional().describe('Required unless `type` is "tool_call". If `type` is "multipart", this field must be an array of content objects. If `type` is "tool_result" then this field should be the result of the tool call (a plain string or a JSON-encoded array or object). If `type` is "tool_call" then the `toolCalls` field should be used instead.')}),je=n.z.object({model:n.z.string().describe("Model to use for content generation"),systemPrompt:n.z.string().optional().describe("Optional system prompt to guide the model"),messages:n.z.array(ue).describe("Array of messages for the model to process").min(1),responseFormat:n.z.enum(["text","json_object"]).optional().describe('Response format expected from the model. If "json_object" is chosen, you must instruct the model to generate JSON either via the system prompt or a user message.'),maxTokens:n.z.number().optional().describe("Maximum number of tokens allowed in the generated response"),temperature:n.z.number().min(0).max(2).displayAs({id:"slider",params:{stepSize:.01,horizontal:!0}}).default(1).describe("Sampling temperature for the model. Higher values result in more random outputs."),topP:n.z.number().min(0).max(1).default(1).displayAs({id:"slider",params:{stepSize:.01,horizontal:!0}}).describe("Top-p sampling parameter. Limits sampling to the smallest set of tokens with a cumulative probability above the threshold."),stopSequences:n.z.array(n.z.string()).max(4).optional().describe("Sequences where the model should stop generating further tokens."),tools:n.z.array(n.z.object({type:n.z.literal("function"),function:n.z.object({name:n.z.string(),description:n.z.string().optional(),inputSchema:n.z.object({}).passthrough().optional()})})).optional(),toolChoice:Fe.optional(),userId:n.z.string().optional()}),He=n.z.object({id:n.z.string().describe("Response ID from LLM provider"),provider:n.z.string().describe("LLM provider name"),model:n.z.string().describe("Model name"),choices:n.z.array(ue.omit({role:!0}).extend({role:n.z.literal("assistant"),index:n.z.number().int(),stopReason:n.z.enum(["stop","max_tokens","tool_calls","content_filter","other"])})),usage:n.z.object({inputTokens:n.z.number().int().describe("Number of input tokens used by the model"),inputCost:n.z.number().describe("Cost of the input tokens received by the model, in U.S. dollars"),outputTokens:n.z.number().int().describe("Number of output tokens used by the model"),outputCost:n.z.number().describe("Cost of the output tokens generated by the model, in U.S. dollars")})}),Ge=new T({name:"llm",version:"0.0.1",entities:{},events:{},actions:{generateContent:{input:{schema:()=>je},output:{schema:()=>He}}}});var Ke=new T({name:"hitl",version:"0.0.1",entities:{},events:{},actions:{startHITL:{input:{schema:()=>n.z.object({upstreamConversationId:n.z.string()})},output:{schema:()=>n.z.object({downstreamConversationId:n.z.string()})}}}});var I=p.object({id:p.string()}),v=t=>p.intersection(t,I),_e=t=>t[0].toUpperCase()+t.slice(1),U=(...t)=>{let[e,...o]=t.filter(i=>i.length>0).map(i=>i.toLowerCase());return e?[e,...o.map(_e)].join(""):""},me=p.string().optional(),Ne=new T({name:"listable",version:"0.0.1",entities:{item:{schema:I}},events:{},actions:{list:{input:{schema:()=>p.object({nextToken:me})},output:{schema:t=>p.object({items:p.array(v(t.item)),meta:p.object({nextToken:me})})}}},templateName:(t,e)=>U(e.item,t)}),Le=new T({name:"creatable",version:"0.0.1",entities:{item:{schema:I}},events:{created:{schema:t=>p.object({item:v(t.item)})}},actions:{create:{input:{schema:t=>p.object({item:t.item})},output:{schema:t=>p.object({item:v(t.item)})}}},templateName:(t,e)=>U(e.item,t)}),ze=new T({name:"readable",version:"0.0.1",entities:{item:{schema:I}},events:{},actions:{read:{input:{schema:()=>I},output:{schema:t=>p.object({item:v(t.item)})}}},templateName:(t,e)=>U(e.item,t)}),qe=new T({name:"updatable",version:"0.0.1",entities:{item:{schema:I}},events:{updated:{schema:t=>p.object({item:v(t.item)})}},actions:{update:{input:{schema:t=>I.extend({item:t.item})},output:{schema:t=>p.object({item:v(t.item)})}}},templateName:(t,e)=>U(e.item,t)}),Ze=new T({name:"deletable",version:"0.0.1",entities:{item:{schema:I}},events:{deleted:{schema:t=>p.object({item:v(t.item)})}},actions:{delete:{input:{schema:()=>I},output:{schema:t=>p.object({item:v(t.item)})}}},templateName:(t,e)=>U(e.item,t)});var k="x-bot-id",V="x-bot-user-id",$="x-integration-id",W="x-webhook-id",R="x-bp-configuration",D="x-bp-operation",J="x-bp-type";var Te=require("node:http");var P=console;function f(t){if(!t.body)throw new Error("Missing body");return JSON.parse(t.body)}async function O(t,e=8072,o=Je){let i=(0,Te.createServer)(async(s,a)=>{try{let c=await Ve(s);if(c.path==="/health"){a.writeHead(200).end("ok");return}let l=await t(c);a.writeHead(l?.status??200,l?.headers??{}).end(l?.body??"{}")}catch(c){P.error("Error while handling request",{error:c?.message??"Internal error occured"}),a.writeHead(500).end(JSON.stringify({error:c?.message??"Internal error occured"}))}});return i.listen(e,()=>o(e)),i}async function Ve(t){let e=await We(t),o={};for(let s=0;s<t.rawHeaders.length;s+=2){let a=t.rawHeaders[s].toLowerCase(),c=t.rawHeaders[s+1];o[a]=c}let i=new URL(t.url??"",t.headers.host?`http://${t.headers.host}`:"http://botpress.cloud");return{body:e,path:i.pathname,query:$e(i.search,"?"),headers:o,method:t.method?.toUpperCase()??"GET"}}function $e(t,e){return t.indexOf(e)===0?t.slice(e.length):t}async function We(t){return new Promise((e,o)=>{if(t.method!=="POST"&&t.method!=="PUT"&&t.method!=="PATCH")return e(void 0);let i="";t.on("data",s=>i+=s.toString()),t.on("error",s=>o(s)),t.on("end",()=>e(i))})}function Je(t){P.info(`Listening on port ${t}`)}g(y,n,module.exports);var N=require("@botpress/client");var he=require("@bpinternal/zui");var Qe=he.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),fe=t=>{let e=t[k],o=t[V],i=t[$],s=t[W],a=t[R],c=Qe.parse(t[D]);if(!e)throw new Error("Missing bot headers");if(!o)throw new Error("Missing bot user headers");if(!i)throw new Error("Missing integration headers");if(!s)throw new Error("Missing webhook headers");if(!a)throw new Error("Missing configuration headers");if(!c)throw new Error("Missing operation headers");return{botId:e,botUserId:o,integrationId:i,webhookId:s,operation:c,configuration:a?JSON.parse(Buffer.from(a,"base64").toString("utf-8")):{}}};var M=require("@botpress/client");var w=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 Q=Y(require("util")),G=t=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:Q.default.format(...t),visible_to_bot_owner:!0});{let[e,...o]=t;return Q.default.format(`[For Bot Owner] ${e}`,...o)}},ye={forBot:()=>({info:(...t)=>{console.info(G(t))},warn:(...t)=>{console.warn(G(t))},error:(...t)=>{console.error(G(t))},debug:(...t)=>{console.debug(G(t))}})};var be=t=>async e=>{let o=fe(e.headers),i=new w(new M.Client({botId:o.botId,integrationId:o.integrationId})),s={ctx:o,req:e,client:i,logger:ye,instance:t};try{let a;switch(o.operation){case"webhook_received":a=await Ye(s);break;case"register":a=await et(s);break;case"unregister":a=await tt(s);break;case"message_created":a=await st(s);break;case"action_triggered":a=await it(s);break;case"ping":a=await Xe(s);break;case"create_user":a=await nt(s);break;case"create_conversation":a=await ot(s);break;default:throw new Error(`Unknown operation ${o.operation}`)}return a?{...a,status:a.status??200}:{status:200}}catch(a){if((0,M.isApiError)(a)){let c=new M.RuntimeError(a.message,a);return{status:c.code,body:JSON.stringify(c.toJSON())}}throw a}},Xe=async t=>{},Ye=async({client:t,ctx:e,req:o,logger:i,instance:s})=>{let{req:a}=f(o);return s.webhook({client:t,ctx:e,req:a,logger:i})},et=async({client:t,ctx:e,req:o,logger:i,instance:s})=>{if(!s.register)return;let{webhookUrl:a}=f(o);await s.register({client:t,ctx:e,webhookUrl:a,logger:i})},tt=async({client:t,ctx:e,req:o,logger:i,instance:s})=>{if(!s.unregister)return;let{webhookUrl:a}=f(o);await s.unregister({ctx:e,webhookUrl:a,client:t,logger:i})},nt=async({client:t,ctx:e,req:o,logger:i,instance:s})=>{if(!s.createUser)return;let{tags:a}=f(o);return await s.createUser({ctx:e,client:t,tags:a,logger:i})},ot=async({client:t,ctx:e,req:o,logger:i,instance:s})=>{if(!s.createConversation)return;let{channel:a,tags:c}=f(o);return await s.createConversation({ctx:e,client:t,channel:a,tags:c,logger:i})},st=async({ctx:t,req:e,client:o,logger:i,instance:s})=>{let{conversation:a,user:c,type:l,payload:d,message:m}=f(e),b=s.channels[a.channel];if(!b)throw new Error(`Channel ${a.channel} not found`);let B=b.messages[l];if(!B)throw new Error(`Message of type ${l} not found in channel ${a.channel}`);await B({ctx:t,conversation:a,message:m,user:c,type:l,client:o,payload:d,ack:async({tags:x})=>{await o.updateMessage({id:m.id,tags:x})},logger:i})},it=async({req:t,ctx:e,client:o,logger:i,instance:s})=>{let{input:a,type:c}=f(t);if(!c)throw new Error("Missing action type");let l=s.actions[c];if(!l)throw new Error(`Action ${c} not found`);let d=await l({ctx:e,input:a,client:o,type:c,logger:i});return{body:JSON.stringify({output:d})}};var K=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=be(this);start=e=>O(this.handler,e)};var Be=Y(require("@botpress/client"));var A=class{constructor(e){this.client=e}getConversation=e=>this.client.getConversation(e);listConversations=e=>this.client.listConversations(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);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);getUser=e=>this.client.getUser(e);listUsers=e=>this.client.listUsers(e);updateUser=e=>this.client.updateUser(e);deleteUser=e=>this.client.deleteUser(e);getState=e=>this.client.getState(e).then(o=>({state:{...o.state,payload:o.state.payload}}));setState=e=>this.client.setState(e).then(o=>({state:{...o.state,payload:o.state.payload}}));getOrSetState=e=>this.client.getOrSetState(e).then(o=>({state:{...o.state,payload:o.state.payload}}));patchState=e=>this.client.patchState(e).then(o=>({state:{...o.state,payload:o.state.payload}}));callAction=e=>this.client.callAction(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);searchFiles=e=>this.client.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)};var Ie=require("@bpinternal/zui");var at=Ie.z.enum(["event_received","register","unregister","ping","action_triggered"]),ve=t=>{let e=t[k],o=t[R],i=t[J],s=at.parse(t[D]);if(!e)throw new Error("Missing bot headers");if(!i)throw new Error("Missing type headers");if(!o)throw new Error("Missing configuration headers");if(!s)throw new Error("Missing operation headers");return{botId:e,operation:s,type:i,configuration:o?JSON.parse(Buffer.from(o,"base64").toString("utf-8")):{}}};var xe=t=>async e=>{let o=ve(e.headers);o.operation!=="ping"&&P.info(`Received ${o.operation} operation for bot ${o.botId} of type ${o.type}`);let i=new A(new Be.Client({botId:o.botId})),s={req:e,ctx:o,client:i,instance:t};switch(o.operation){case"action_triggered":throw new Error(`Operation ${o.operation} not supported yet`);case"event_received":await pt(s);break;case"register":await ct(s);break;case"unregister":await lt(s);break;case"ping":await rt(s);break;default:throw new Error(`Unknown operation ${o.operation}`)}return{status:200}},rt=async t=>{},ct=async t=>{},lt=async t=>{},pt=async({ctx:t,req:e,client:o,instance:i})=>{P.debug(`Received event ${t.type}`);let s=f(e),a=s.event;switch(t.type){case"message_created":let c={user:a.payload.user,conversation:a.payload.conversation,message:a.payload.message,states:a.payload.states,event:a};await Promise.all(i.messageHandlers.map(m=>m({client:o,ctx:t,...c})));break;case"state_expired":let l={state:a.payload.state};await Promise.all(i.stateExpiredHandlers.map(m=>m({client:o,ctx:t,...l})));break;default:let d={event:s.event};await Promise.all(i.eventHandlers.map(m=>m({client:o,ctx:t,...d})))}};var _=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=xe(this._state);start=e=>O(this.handler,e)};0&&(module.exports={Bot,BotSpecificClient,Integration,IntegrationDefinition,IntegrationSpecificClient,InterfaceDeclaration,RuntimeError,botIdHeader,botUserIdHeader,configurationHeader,integrationIdHeader,interfaces,isApiError,messages,operationHeader,parseBody,serve,studioComponentDefinitions,typeHeader,webhookIdHeader});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|