@botpress/sdk 0.8.31 → 0.8.32
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/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/integration/definition/branded-schema.d.ts +19 -0
- package/dist/integration/definition/integration-definition.d.ts +4 -3
- package/dist/integration/index.d.ts +1 -0
- package/dist/interfaces/llm.d.ts +104 -86
- package/dist/interfaces/sync.d.ts +3 -9
- package/package.json +2 -2
- package/dist/integration/definition/entity-store.d.ts +0 -19
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
|
|
2
|
-
> @botpress/sdk@0.8.
|
|
2
|
+
> @botpress/sdk@0.8.32 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.32 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.32 build:node /home/runner/work/botpress/botpress/packages/sdk
|
|
11
11
|
> ts-node -T build.ts
|
|
12
12
|
|
package/dist/index.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export * from './const';
|
|
|
4
4
|
export * from './serve';
|
|
5
5
|
export * from './zui';
|
|
6
6
|
export { isApiError, RuntimeError } from '@botpress/client';
|
|
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
|
+
export { IntegrationDefinition, IntegrationDefinitionProps, IntegrationImplementation as Integration, IntegrationImplementationProps as IntegrationProps, IntegrationContext, IntegrationLogger, IntegrationSpecificClient, InterfaceDeclaration, InterfaceDeclarationProps, TagDefinition, ConfigurationDefinition, EventDefinition, ChannelDefinition, MessageDefinition, ActionDefinition, StateDefinition, UserDefinition, SecretDefinition, EntityDefinition, } from './integration';
|
|
8
8
|
export { Bot, BotProps, BotContext, BotSpecificClient, IntegrationInstance } from './bot';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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});
|
|
1
|
+
"use strict";var Pe=Object.create;var j=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Ae=Object.getPrototypeOf,Ue=Object.prototype.hasOwnProperty;var H=(t,e)=>{for(var n in e)j(t,n,{get:e[n],enumerable:!0})},F=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Me(e))!Ue.call(t,s)&&s!==n&&j(t,s,{get:()=>e[s],enumerable:!(a=we(e,s))||a.enumerable});return t},g=(t,e,n)=>(F(t,e,"default"),n&&F(n,e,"default")),Y=(t,e,n)=>(n=t!=null?Pe(Ae(t)):{},F(e||!t||!t.__esModule?j(n,"default",{value:t,enumerable:!0}):n,t)),ke=t=>F(j({},"__esModule",{value:!0}),t);var y={};H(y,{Bot:()=>N,BotSpecificClient:()=>A,Integration:()=>K,IntegrationDefinition:()=>C,IntegrationSpecificClient:()=>w,InterfaceDeclaration:()=>h,RuntimeError:()=>_.RuntimeError,botIdHeader:()=>k,botUserIdHeader:()=>V,configurationHeader:()=>R,integrationIdHeader:()=>$,interfaces:()=>Z,isApiError:()=>_.isApiError,messages:()=>L,operationHeader:()=>D,parseBody:()=>f,serve:()=>O,studioComponentDefinitions:()=>ee,typeHeader:()=>J,webhookIdHeader:()=>W});module.exports=ke(y);var L={};H(L,{defaults:()=>Fe});var i={};H(i,{default:()=>o,studioComponentDefinitions:()=>ee});var c=require("@bpinternal/zui");g(i,require("@bpinternal/zui"));var T=c.z.object({allowDynamicVariable:c.z.boolean().optional(),horizontal:c.z.boolean().optional()}),ee={string:{text:{id:"text",params:T.extend({multiLine:c.z.boolean().optional(),growVertically:c.z.boolean().optional(),suggestions:c.z.array(c.z.string()).optional()})},dropdown:{id:"dropdown",params:T.extend({filterable:c.z.boolean().optional()})},radiogroup:{id:"radiogroup",params:T.extend({})},date:{id:"date",params:T.extend({dateFormat:c.z.string().optional(),minDate:c.z.string().optional(),maxDate:c.z.string().optional(),defaultTimezone:c.z.string().optional(),disableTimezoneSelection:c.z.boolean().optional(),highlightCurrentDay:c.z.boolean().optional(),showShortcutButtons:c.z.boolean().optional(),showOutsideDaysOfMonth:c.z.boolean().optional(),firstDayOfWeek:c.z.number().optional(),canChangeMonth:c.z.boolean().optional(),showWeekNumbers:c.z.boolean().optional()})},time:{id:"time",params:T.extend({useAMPM:c.z.boolean().optional(),timeFormat:c.z.string().optional(),minTime:c.z.string().optional(),maxTime:c.z.string().optional(),showArrowButtons:c.z.boolean().optional(),precision:c.z.enum(["minute","second","millisecond"]).optional()})},richtext:{id:"richtext",params:c.z.object({allowDynamicVariable:c.z.boolean().optional(),resizable:c.z.boolean().optional()})},json:{id:"json",params:T.extend({showPreview:c.z.boolean().optional(),showValidationError:c.z.boolean().optional()})},file:{id:"file",params:T.extend({fileTypes:c.z.array(c.z.enum(["image","audio","video"])).optional(),showUploadedFiles:c.z.boolean().optional()})}},number:{number:{id:"number",params:T.extend({allowNumericCharactersOnly:c.z.boolean().optional(),stepSize:c.z.number().optional()})},slider:{id:"slider",params:c.z.object({horizontal:c.z.boolean().optional(),stepSize:c.z.number().optional()})}},boolean:{switch:{id:"switch",params:T}},array:{options:{id:"options",params:T},strings:{id:"strings",params:T},daterange:{id:"daterange",params:c.z.object({dateFormat:c.z.string().optional(),minDate:c.z.string().optional(),maxDate:c.z.string().optional(),defaultTimezone:c.z.string().optional(),allowSingleDayRange:c.z.boolean().optional(),highlightCurrentDay:c.z.boolean().optional(),showOutsideDaysOfMonth:c.z.boolean().optional(),firstDayOfWeek:c.z.number().optional(),canChangeMonth:c.z.boolean().optional(),showWeekNumbers:c.z.boolean().optional()})}},object:{collapsible:{id:"collapsible",params:c.z.object({defaultOpen:c.z.boolean().optional()})},modal:{id:"modal",params:c.z.object({title:c.z.string().optional(),buttonLabel:c.z.string().optional(),closeButtonLabel:c.z.string().optional()})},popover:{id:"popover",params:c.z.object({buttonLabel:c.z.string().optional()})}},discriminatedUnion:{}},o=c.z;var m=i.z.string().min(1),ne=i.z.object({text:m}),oe=i.z.object({markdown:m}),se=i.z.object({imageUrl:m}),ie=i.z.object({audioUrl:m}),ae=i.z.object({videoUrl:m}),re=i.z.object({fileUrl:m,title:m.optional()}),ce=i.z.object({latitude:i.z.number(),longitude:i.z.number(),address:i.z.string().optional(),title:i.z.string().optional()}),le=i.z.object({title:m,subtitle:m.optional(),imageUrl:m.optional(),actions:i.z.array(i.z.object({action:i.z.enum(["postback","url","say"]),label:m,value:m}))}),te=i.z.object({text:m,options:i.z.array(i.z.object({label:m,value:m}))}),Re=i.z.object({items:i.z.array(le)}),De=i.z.discriminatedUnion("type",[i.z.object({type:i.z.literal("text"),payload:ne}),i.z.object({type:i.z.literal("markdown"),payload:oe}),i.z.object({type:i.z.literal("image"),payload:se}),i.z.object({type:i.z.literal("audio"),payload:ie}),i.z.object({type:i.z.literal("video"),payload:ae}),i.z.object({type:i.z.literal("file"),payload:re}),i.z.object({type:i.z.literal("location"),payload:ce})]),Oe=i.z.object({items:i.z.array(De)}),Fe={text:{schema:ne},markdown:{schema:oe},image:{schema:se},audio:{schema:ie},video:{schema:ae},file:{schema:re},location:{schema:ce},carousel:{schema:Re},card:{schema:le},dropdown:{schema:te},choice:{schema:te},bloc:{schema:Oe}};var Z={};H(Z,{creatable:()=>ze,deletable:()=>Ve,hitl:()=>Ne,listable:()=>Le,llm:()=>Ke,readable:()=>qe,updatable:()=>Ze});var x=t=>Object.entries(t);var S=(t,e)=>Object.fromEntries(x(t).map(([n,a])=>[n,e(a,n)]));var q=Symbol("schemaName"),pe=t=>t?S(t,(n,a)=>({...n,[q]:a})):{},ge=t=>t[q]!==void 0,de=t=>t[q];var C=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 n=new C({...this,...e});for(let[a,s]of Object.entries(this.interfaces))n.interfaces[a]=s;return n}extend(e,n){let a=n(pe(this.entities)),s=x(a).find(([B,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 r=S(a,B=>({name:de(B),schema:B.schema})),{resolved:l,implementStatement:p}=e.resolve({entities:r}),d=this,{actions:u,events:I}=l;d.actions={...d.actions??{},...u},d.events={...d.events??{},...I};let v=Object.values(r).map(B=>B.name),X=`${e.name}<${v.join(",")}>`;return this.interfaces[X]=p,this}};var h=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:n}=e,a={name:this.name,version:this.version,entities:S(n,p=>({name:p.name})),actions:{},events:{}},s={},r={};for(let[p,d]of x(this.actions)){let u=this._dereference(d.input.schema,n),I=this._dereference(d.output.schema,n),v=this._rename(n,p);s[v]={input:{schema:u},output:{schema:I}},a.actions[p]={name:v}}for(let[p,d]of x(this.events)){let u=this._dereference(d.schema,n),I=this._rename(n,p);r[I]={schema:u},a.events[p]={name:I}}return{resolved:{actions:s,events:r},implementStatement:a}}_dereference(e,n){let a={},s={};for(let[r,l]of x(n))a[r]=l.schema,s[r]=o.ref(r);return e(s).dereference(a)}_rename(e,n){if(!this.templateName)return n;let a=S(e,s=>s.name);return this.templateName(n,a)}};var je=o.object({id:o.string(),type:o.enum(["function"]),function:o.object({name:o.string(),arguments:o.record(o.any()).nullable().describe("Some LLMs may generate invalid JSON for a tool call, so this will be `null` when it happens.")})}),He=o.object({type:o.enum(["auto","specific","any","none",""]).optional(),functionName:o.string().optional().describe('Required if `type` is "specific"')}),me=o.object({role:o.enum(["user","assistant"]),type:o.enum(["text","tool_calls","tool_result","multipart"]).default("text"),toolCalls:o.array(je).optional().describe('Required if `type` is "tool_calls"'),toolResultCallId:o.string().optional().describe('Required if `type` is "tool_result"'),content:o.string().or(o.array(o.object({type:o.enum(["text","image"]),mimeType:o.string().optional().describe("Indicates the MIME type of the content. If not provided it will be detected from the content-type header of the provided URL."),text:o.string().optional().describe('Required if part type is "text" '),url:o.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.')}),ue=o.object({id:o.string()}),he=t=>o.object({model:t.describe("Model to use for content generation"),systemPrompt:o.string().optional().describe("Optional system prompt to guide the model"),messages:o.array(me).describe("Array of messages for the model to process").min(1),responseFormat:o.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:o.number().optional().describe("Maximum number of tokens allowed in the generated response"),temperature:o.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:o.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:o.array(o.string()).max(4).optional().describe("Sequences where the model should stop generating further tokens."),tools:o.array(o.object({type:o.literal("function"),function:o.object({name:o.string(),description:o.string().optional(),inputSchema:o.object({}).passthrough().optional()})})).optional(),toolChoice:He.optional(),userId:o.string().optional()}),Ut=he(ue),Ge=o.object({id:o.string().describe("Response ID from LLM provider"),provider:o.string().describe("LLM provider name"),model:o.string().describe("Model name"),choices:o.array(me.omit({role:!0}).extend({role:o.literal("assistant"),index:o.number().int(),stopReason:o.enum(["stop","max_tokens","tool_calls","content_filter","other"])})),usage:o.object({inputTokens:o.number().int().describe("Number of input tokens used by the model"),inputCost:o.number().describe("Cost of the input tokens received by the model, in U.S. dollars"),outputTokens:o.number().int().describe("Number of output tokens used by the model"),outputCost:o.number().describe("Cost of the output tokens generated by the model, in U.S. dollars")})}),Ke=new h({name:"llm",version:"0.2.0",entities:{model:{schema:ue}},events:{},actions:{generateContent:{input:{schema:({model:t})=>he(t)},output:{schema:()=>Ge}}}});var Ne=new h({name:"hitl",version:"0.0.1",entities:{},events:{},actions:{startHITL:{input:{schema:()=>i.z.object({upstreamConversationId:i.z.string()})},output:{schema:()=>i.z.object({downstreamConversationId:i.z.string()})}}}});var b=o.object({id:o.string()}),E=t=>o.intersection(t,b),_e=t=>t[0].toUpperCase()+t.slice(1),U=(...t)=>{let[e,...n]=t.filter(a=>a.length>0).map(a=>a.toLowerCase());return e?[e,...n.map(_e)].join(""):""},Te=o.string().optional(),Le=new h({name:"listable",version:"0.0.1",entities:{item:{schema:b}},events:{},actions:{list:{input:{schema:()=>o.object({nextToken:Te})},output:{schema:t=>o.object({items:o.array(E(t.item)),meta:o.object({nextToken:Te})})}}},templateName:(t,e)=>U(e.item,t)}),ze=new h({name:"creatable",version:"0.0.1",entities:{item:{schema:b}},events:{created:{schema:t=>o.object({item:E(t.item)})}},actions:{create:{input:{schema:t=>o.object({item:t.item})},output:{schema:t=>o.object({item:E(t.item)})}}},templateName:(t,e)=>U(e.item,t)}),qe=new h({name:"readable",version:"0.0.1",entities:{item:{schema:b}},events:{},actions:{read:{input:{schema:()=>b},output:{schema:t=>o.object({item:E(t.item)})}}},templateName:(t,e)=>U(e.item,t)}),Ze=new h({name:"updatable",version:"0.0.1",entities:{item:{schema:b}},events:{updated:{schema:t=>o.object({item:E(t.item)})}},actions:{update:{input:{schema:t=>b.extend({item:t.item})},output:{schema:t=>o.object({item:E(t.item)})}}},templateName:(t,e)=>U(e.item,t)}),Ve=new h({name:"deletable",version:"0.0.1",entities:{item:{schema:b}},events:{deleted:{schema:()=>b}},actions:{delete:{input:{schema:()=>b},output:{schema:()=>o.object({})}}},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 fe=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,n=Qe){let a=(0,fe.createServer)(async(s,r)=>{try{let l=await $e(s);if(l.path==="/health"){r.writeHead(200).end("ok");return}let p=await t(l);r.writeHead(p?.status??200,p?.headers??{}).end(p?.body??"{}")}catch(l){P.error("Error while handling request",{error:l?.message??"Internal error occured"}),r.writeHead(500).end(JSON.stringify({error:l?.message??"Internal error occured"}))}});return a.listen(e,()=>n(e)),a}async function $e(t){let e=await Je(t),n={};for(let s=0;s<t.rawHeaders.length;s+=2){let r=t.rawHeaders[s].toLowerCase(),l=t.rawHeaders[s+1];n[r]=l}let a=new URL(t.url??"",t.headers.host?`http://${t.headers.host}`:"http://botpress.cloud");return{body:e,path:a.pathname,query:We(a.search,"?"),headers:n,method:t.method?.toUpperCase()??"GET"}}function We(t,e){return t.indexOf(e)===0?t.slice(e.length):t}async function Je(t){return new Promise((e,n)=>{if(t.method!=="POST"&&t.method!=="PUT"&&t.method!=="PATCH")return e(void 0);let a="";t.on("data",s=>a+=s.toString()),t.on("error",s=>n(s)),t.on("end",()=>e(a))})}function Qe(t){P.info(`Listening on port ${t}`)}g(y,i,module.exports);var _=require("@botpress/client");var ye=require("@bpinternal/zui");var Xe=ye.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),be=t=>{let e=t[k],n=t[V],a=t[$],s=t[W],r=t[R],l=Xe.parse(t[D]);if(!e)throw new Error("Missing bot headers");if(!n)throw new Error("Missing bot user headers");if(!a)throw new Error("Missing integration headers");if(!s)throw new Error("Missing webhook headers");if(!r)throw new Error("Missing configuration headers");if(!l)throw new Error("Missing operation headers");return{botId:e,botUserId:n,integrationId:a,webhookId:s,operation:l,configuration:r?JSON.parse(Buffer.from(r,"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,...n]=t;return Q.default.format(`[For Bot Owner] ${e}`,...n)}},Ie={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 ve=t=>async e=>{let n=be(e.headers),a=new w(new M.Client({botId:n.botId,integrationId:n.integrationId})),s={ctx:n,req:e,client:a,logger:Ie,instance:t};try{let r;switch(n.operation){case"webhook_received":r=await et(s);break;case"register":r=await tt(s);break;case"unregister":r=await nt(s);break;case"message_created":r=await it(s);break;case"action_triggered":r=await at(s);break;case"ping":r=await Ye(s);break;case"create_user":r=await ot(s);break;case"create_conversation":r=await st(s);break;default:throw new Error(`Unknown operation ${n.operation}`)}return r?{...r,status:r.status??200}:{status:200}}catch(r){if((0,M.isApiError)(r)){let l=new M.RuntimeError(r.message,r);return{status:l.code,body:JSON.stringify(l.toJSON())}}throw r}},Ye=async t=>{},et=async({client:t,ctx:e,req:n,logger:a,instance:s})=>{let{req:r}=f(n);return s.webhook({client:t,ctx:e,req:r,logger:a})},tt=async({client:t,ctx:e,req:n,logger:a,instance:s})=>{if(!s.register)return;let{webhookUrl:r}=f(n);await s.register({client:t,ctx:e,webhookUrl:r,logger:a})},nt=async({client:t,ctx:e,req:n,logger:a,instance:s})=>{if(!s.unregister)return;let{webhookUrl:r}=f(n);await s.unregister({ctx:e,webhookUrl:r,client:t,logger:a})},ot=async({client:t,ctx:e,req:n,logger:a,instance:s})=>{if(!s.createUser)return;let{tags:r}=f(n);return await s.createUser({ctx:e,client:t,tags:r,logger:a})},st=async({client:t,ctx:e,req:n,logger:a,instance:s})=>{if(!s.createConversation)return;let{channel:r,tags:l}=f(n);return await s.createConversation({ctx:e,client:t,channel:r,tags:l,logger:a})},it=async({ctx:t,req:e,client:n,logger:a,instance:s})=>{let{conversation:r,user:l,type:p,payload:d,message:u}=f(e),I=s.channels[r.channel];if(!I)throw new Error(`Channel ${r.channel} not found`);let v=I.messages[p];if(!v)throw new Error(`Message of type ${p} not found in channel ${r.channel}`);await v({ctx:t,conversation:r,message:u,user:l,type:p,client:n,payload:d,ack:async({tags:B})=>{await n.updateMessage({id:u.id,tags:B})},logger:a})},at=async({req:t,ctx:e,client:n,logger:a,instance:s})=>{let{input:r,type:l}=f(t);if(!l)throw new Error("Missing action type");let p=s.actions[l];if(!p)throw new Error(`Action ${l} not found`);let d=await p({ctx:e,input:r,client:n,type:l,logger:a});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=ve(this);start=e=>O(this.handler,e)};var Se=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(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 Be=require("@bpinternal/zui");var rt=Be.z.enum(["event_received","register","unregister","ping","action_triggered"]),xe=t=>{let e=t[k],n=t[R],a=t[J],s=rt.parse(t[D]);if(!e)throw new Error("Missing bot headers");if(!a)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:a,configuration:n?JSON.parse(Buffer.from(n,"base64").toString("utf-8")):{}}};var Ce=t=>async e=>{let n=xe(e.headers);n.operation!=="ping"&&P.info(`Received ${n.operation} operation for bot ${n.botId} of type ${n.type}`);let a=new A(new Se.Client({botId:n.botId})),s={req:e,ctx:n,client:a,instance:t};switch(n.operation){case"action_triggered":throw new Error(`Operation ${n.operation} not supported yet`);case"event_received":await gt(s);break;case"register":await lt(s);break;case"unregister":await pt(s);break;case"ping":await ct(s);break;default:throw new Error(`Unknown operation ${n.operation}`)}return{status:200}},ct=async t=>{},lt=async t=>{},pt=async t=>{},gt=async({ctx:t,req:e,client:n,instance:a})=>{P.debug(`Received event ${t.type}`);let s=f(e),r=s.event;switch(t.type){case"message_created":let l={user:r.payload.user,conversation:r.payload.conversation,message:r.payload.message,states:r.payload.states,event:r};await Promise.all(a.messageHandlers.map(u=>u({client:n,ctx:t,...l})));break;case"state_expired":let p={state:r.payload.state};await Promise.all(a.stateExpiredHandlers.map(u=>u({client:n,ctx:t,...p})));break;default:let d={event:s.event};await Promise.all(a.eventHandlers.map(u=>u({client:n,ctx:t,...d})))}};var N=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=Ce(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
|