@botpress/sdk 2.0.1 → 2.0.2
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 +13 -874
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/integration/definition/branded-schema.d.ts +2 -2
- package/dist/integration/implementation.d.ts +1 -1
- package/dist/interface/definition.d.ts +2 -0
- package/dist/package.d.ts +0 -1
- package/dist/plugin/implementation.d.ts +12 -873
- package/dist/serve.d.ts +0 -1
- package/dist/utils/type-utils.d.ts +0 -1
- package/package.json +4 -7
package/dist/index.d.ts
CHANGED
|
@@ -12,4 +12,4 @@ IntegrationContext, } from './integration/server';
|
|
|
12
12
|
export { DefaultBot, BotDefinition, BotDefinitionProps, BotImplementation as Bot, BotImplementationProps as BotProps, BotSpecificClient, BotHandlers, TagDefinition as BotTagDefinition, StateType as BotStateType, StateDefinition as BotStateDefinition, RecurringEventDefinition as BotRecurringEventDefinition, EventDefinition as BotEventDefinition, ConfigurationDefinition as BotConfigurationDefinition, UserDefinition as BotUserDefinition, ConversationDefinition as BotConversationDefinition, MessageDefinition as BotMessageDefinition, ActionDefinition as BotActionDefinition, } from './bot';
|
|
13
13
|
export { InterfaceDefinition, InterfaceDefinitionProps, } from './interface';
|
|
14
14
|
export { DefaultPlugin, PluginDefinition, PluginImplementation as Plugin, } from './plugin';
|
|
15
|
-
export { IntegrationPackage, InterfacePackage, PluginPackage, } from './package';
|
|
15
|
+
export { IntegrationPackage, InterfacePackage, PluginPackage, Package, } from './package';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var Ne=Object.create;var O=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,ze=Object.prototype.hasOwnProperty;var k=(n,e)=>{for(var t in e)O(n,t,{get:e[t],enumerable:!0})},w=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Ve(e))!ze.call(n,a)&&a!==t&&O(n,a,{get:()=>e[a],enumerable:!(s=Ze(e,a))||s.enumerable});return n},f=(n,e,t)=>(w(n,e,"default"),t&&w(t,e,"default")),ce=(n,e,t)=>(t=n!=null?Ne(Le(n)):{},w(e||!n||!n.__esModule?O(t,"default",{value:n,enumerable:!0}):t,n)),$e=n=>w(O({},"__esModule",{value:!0}),n);var y={};k(y,{Bot:()=>V,BotDefinition:()=>Z,BotSpecificClient:()=>v,Integration:()=>N,IntegrationDefinition:()=>U,IntegrationSpecificClient:()=>E,InterfaceDefinition:()=>L,Plugin:()=>$,PluginDefinition:()=>z,RuntimeError:()=>J.RuntimeError,botIdHeader:()=>S,botUserIdHeader:()=>te,configurationHeader:()=>D,configurationTypeHeader:()=>ie,integrationIdHeader:()=>ne,isApiError:()=>J.isApiError,messages:()=>ee,operationHeader:()=>M,parseBody:()=>B,serve:()=>A,typeHeader:()=>oe,webhookIdHeader:()=>se});module.exports=$e(y);var ee={};k(ee,{defaults:()=>Xe,markdown:()=>Qe});var r={};k(r,{default:()=>Y});var le=require("@bpinternal/zui");f(r,require("@bpinternal/zui"));var Y=le.z;var m=r.z.string().min(1),pe=r.z.object({text:m}),ue=r.z.object({markdown:m}),de=r.z.object({imageUrl:m}),fe=r.z.object({audioUrl:m}),me=r.z.object({videoUrl:m}),he=r.z.object({fileUrl:m,title:m.optional()}),ye=r.z.object({latitude:r.z.number(),longitude:r.z.number(),address:r.z.string().optional(),title:r.z.string().optional()}),Te=r.z.object({title:m,subtitle:m.optional(),imageUrl:m.optional(),actions:r.z.array(r.z.object({action:r.z.enum(["postback","url","say"]),label:m,value:m}))}),ge=r.z.object({text:m,options:r.z.array(r.z.object({label:m,value:m}))}),Je=r.z.object({items:r.z.array(Te)}),We=r.z.union([r.z.object({type:r.z.literal("text"),payload:pe}),r.z.object({type:r.z.literal("markdown"),payload:ue}),r.z.object({type:r.z.literal("image"),payload:de}),r.z.object({type:r.z.literal("audio"),payload:fe}),r.z.object({type:r.z.literal("video"),payload:me}),r.z.object({type:r.z.literal("file"),payload:he}),r.z.object({type:r.z.literal("location"),payload:ye})]),qe=r.z.object({items:r.z.array(We)}),Qe={schema:ue},Xe={text:{schema:pe},image:{schema:de},audio:{schema:fe},video:{schema:me},file:{schema:he},location:{schema:ye},carousel:{schema:Je},card:{schema:Te},dropdown:{schema:ge},choice:{schema:ge},bloc:{schema:qe}};var S="x-bot-id",te="x-bot-user-id",ne="x-integration-id",se="x-webhook-id",ie="x-bp-configuration-type",D="x-bp-configuration",M="x-bp-operation",oe="x-bp-type";var Be=require("node:http");var x=console;function B(n){if(!n.body)throw new Error("Missing body");return JSON.parse(n.body)}async function A(n,e=8072,t=nt){let s=(0,Be.createServer)(async(a,o)=>{try{let i=await Ye(a);if(i.path==="/health"){o.writeHead(200).end("ok");return}let c=await n(i);o.writeHead(c?.status??200,c?.headers??{}).end(c?.body??"{}")}catch(i){x.error("Error while handling request",{error:i?.message??"Internal error occured"}),o.writeHead(500).end(JSON.stringify({error:i?.message??"Internal error occured"}))}});return s.listen(e,()=>t(e)),s}async function Ye(n){let e=await tt(n),t={};for(let a=0;a<n.rawHeaders.length;a+=2){let o=n.rawHeaders[a].toLowerCase(),i=n.rawHeaders[a+1];t[o]=i}let s=new URL(n.url??"",n.headers.host?`http://${n.headers.host}`:"http://botpress.cloud");return{body:e,path:s.pathname,query:et(s.search,"?"),headers:t,method:n.method?.toUpperCase()??"GET"}}function et(n,e){return n.indexOf(e)===0?n.slice(e.length):n}async function tt(n){return new Promise((e,t)=>{if(n.method!=="POST"&&n.method!=="PUT"&&n.method!=="PATCH")return e(void 0);let s="";n.on("data",a=>s+=a.toString()),n.on("error",a=>t(a)),n.on("end",()=>e(s))})}function nt(n){x.info(`Listening on port ${n}`)}f(y,r,module.exports);var J=require("@botpress/client");var h={};k(h,{mapValues:()=>it,pairs:()=>ve,values:()=>st});var ve=n=>Object.entries(n),st=n=>Object.values(n),it=(n,e)=>Object.fromEntries(ve(n).map(([t,s])=>[t,e(s,t)]));var l={};k(l,{safePush:()=>ot});var ot=(n,...e)=>n?[...n,...e]:[...e];var R=Symbol("schemaName"),be=n=>n?h.mapValues(n,(t,s)=>({...t,[R]:s})):{},_e=n=>R in n&&n[R]!==void 0,Pe=n=>n[R];var U=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.icon=e.icon,this.readme=e.readme,this.title=e.title,this.identifier=e.identifier,this.description=e.description,this.configuration=e.configuration,this.configurations=e.configurations,this.events=e.events,this.actions=e.actions,this.channels=e.channels,this.states=e.states,this.user=e.user,this.secrets=e.secrets,this.entities=e.entities,this.interfaces=e.interfaces}name;version;title;description;icon;readme;configuration;configurations;events;actions;channels;states;user;secrets;identifier;entities;interfaces;extend(e,t){let s=t(be(this.entities)),a=h.pairs(s).find(([p,d])=>!_e(d));if(a)throw new Error(`Cannot extend interface "${e.name}" with entity "${a[0]}"; the provided schema is not part of the integration's entities.`);let o=this;o.interfaces??={};let i=h.mapValues(s,p=>({name:Pe(p),schema:p.schema})),c=Object.values(i).map(p=>p.name),g=c.length===0?e.name:`${e.name}<${c.join(",")}>`;return o.interfaces[g]={...e,entities:i},this}};var P=require("@botpress/client");var xe=require("@botpress/client"),K={retries:3,retryCondition:n=>xe.axiosRetry.isNetworkOrIdempotentRequestError(n)||[429,502].includes(n.response?.status??0),retryDelay:n=>n*1e3};var E=class{constructor(e){this._client=e}createConversation=e=>this._client.createConversation(e);getConversation=e=>this._client.getConversation(e);listConversations=e=>this._client.listConversations(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);updateConversation=e=>this._client.updateConversation(e);deleteConversation=e=>this._client.deleteConversation(e);listParticipants=e=>this._client.listParticipants(e);addParticipant=e=>this._client.addParticipant(e);getParticipant=e=>this._client.getParticipant(e);removeParticipant=e=>this._client.removeParticipant(e);createEvent=e=>this._client.createEvent(e);getEvent=e=>this._client.getEvent(e);listEvents=e=>this._client.listEvents(e);createMessage=e=>this._client.createMessage(e);getOrCreateMessage=e=>this._client.getOrCreateMessage(e);getMessage=e=>this._client.getMessage(e);updateMessage=e=>this._client.updateMessage(e);listMessages=e=>this._client.listMessages(e);deleteMessage=e=>this._client.deleteMessage(e);createUser=e=>this._client.createUser(e);getUser=e=>this._client.getUser(e);listUsers=e=>this._client.listUsers(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);updateUser=e=>this._client.updateUser(e);deleteUser=e=>this._client.deleteUser(e);getState=e=>this._client.getState(e);setState=e=>this._client.setState(e);getOrSetState=e=>this._client.getOrSetState(e);patchState=e=>this._client.patchState(e);configureIntegration=e=>this._client.configureIntegration(e);uploadFile=e=>this._client.uploadFile(e);upsertFile=e=>this._client.upsertFile(e);deleteFile=e=>this._client.deleteFile(e);listFiles=e=>this._client.listFiles(e);getFile=e=>this._client.getFile(e);updateFileMetadata=e=>this._client.updateFileMetadata(e)};var F=class{_cost=0;get cost(){return this._cost}setCost(e){this._cost=e}toJSON(){return{cost:this.cost}}};var He=require("@bpinternal/zui");var at=He.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),Ee=n=>{let e=n[S],t=n[te],s=n[ne],a=n[se],o=n[ie],i=n[D],c=at.parse(n[M]);if(!e)throw new Error("Missing bot headers");if(!t)throw new Error("Missing bot user headers");if(!s)throw new Error("Missing integration headers");if(!a)throw new Error("Missing webhook headers");if(!i)throw new Error("Missing configuration headers");if(!c)throw new Error("Missing operation headers");return{botId:e,botUserId:t,integrationId:s,webhookId:a,operation:c,configurationType:o??null,configuration:i?JSON.parse(Buffer.from(i,"base64").toString("utf-8")):{}}};var ae=ce(require("util")),G=n=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:ae.default.format(...n),visible_to_bot_owner:!0});{let[e,...t]=n;return ae.default.format(`[For Bot Owner] ${e}`,...t)}},j={forBot:()=>({info:(...n)=>{console.info(G(n))},warn:(...n)=>{console.warn(G(n))},error:(...n)=>{console.error(G(n))},debug:(...n)=>{console.debug(G(n))}})};var Ie=n=>async e=>{let t=Ee(e.headers),s=new P.Client({botId:t.botId,integrationId:t.integrationId,retry:K}),a=new E(s),o={ctx:t,req:e,client:a,logger:j,instance:n};try{let i;switch(t.operation){case"webhook_received":i=await ct(o);break;case"register":i=await lt(o);break;case"unregister":i=await gt(o);break;case"message_created":i=await dt(o);break;case"action_triggered":i=await ft(o);break;case"ping":i=await rt(o);break;case"create_user":i=await pt(o);break;case"create_conversation":i=await ut(o);break;default:throw new Error(`Unknown operation ${t.operation}`)}return i?{...i,status:i.status??200}:{status:200}}catch(i){if((0,P.isApiError)(i)){let g=new P.RuntimeError(i.message,i);return j.forBot().error(g.message),{status:g.code,body:JSON.stringify(g.toJSON())}}console.error(i);let c=new P.RuntimeError("An unexpected error occurred in the integration. Bot owners: Check logs for more informations. Integration owners: throw a RuntimeError to return a custom error message instead.");return j.forBot().error(c.message),{status:c.code,body:JSON.stringify(c.toJSON())}}},rt=async n=>{},ct=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{let{req:o}=B(t);return a.webhook({client:n,ctx:e,req:o,logger:s})},lt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.register)return;let{webhookUrl:o}=B(t);await a.register({client:n,ctx:e,webhookUrl:o,logger:s})},gt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.unregister)return;let{webhookUrl:o}=B(t);await a.unregister({ctx:e,webhookUrl:o,client:n,logger:s})},pt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.createUser)return;let{tags:o}=B(t);return await a.createUser({ctx:e,client:n,tags:o,logger:s})},ut=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.createConversation)return;let{channel:o,tags:i}=B(t);return await a.createConversation({ctx:e,client:n,channel:o,tags:i,logger:s})},dt=async({ctx:n,req:e,client:t,logger:s,instance:a})=>{let{conversation:o,user:i,type:c,payload:g,message:p}=B(e),d=a.channels[o.channel];if(!d)throw new Error(`Channel ${o.channel} not found`);let _=d.messages[c];if(!_)throw new Error(`Message of type ${c} not found in channel ${o.channel}`);await _({ctx:n,conversation:o,message:p,user:i,type:c,client:t,payload:g,ack:async({tags:W})=>{await t.updateMessage({id:p.id,tags:W})},logger:s})},ft=async({req:n,ctx:e,client:t,logger:s,instance:a})=>{let{input:o,type:i}=B(n);if(!i)throw new Error("Missing action type");let c=a.actions[i];if(!c)throw new Error(`Action ${i} not found`);let g=new F,d={output:await c({ctx:e,input:o,client:t,type:i,logger:s,metadata:g}),meta:g.toJSON()};return{body:JSON.stringify(d)}};var N=class{constructor(e){this.props=e;this.actions=e.actions,this.channels=e.channels,this.register=e.register,this.unregister=e.unregister,this.createUser=e.createUser,this.createConversation=e.createConversation,this.webhook=e.handler}actions;channels;register;unregister;createUser;createConversation;webhook;handler=Ie(this);start=e=>A(this.handler,e)};var Z=class{constructor(e){this.props=e;this.integrations=e.integrations,this.plugins=e.plugins,this.user=e.user,this.conversation=e.conversation,this.message=e.message,this.states=e.states,this.configuration=e.configuration,this.events=e.events,this.recurringEvents=e.recurringEvents,this.actions=e.actions}integrations;plugins;user;conversation;message;states;configuration;events;recurringEvents;actions;addIntegration(e,t){let s=this;return s.integrations||(s.integrations={}),s.integrations[e.name]={enabled:t.enabled,...e,configurationType:t.configurationType,configuration:t.configuration},this}addPlugin(e,t){let s=this;return s.plugins||(s.plugins={}),s.plugins[e.name]={...e,configuration:t.configuration,interfaces:t.interfaces},s.user=this._mergeUser(s.user,e.definition.user),s.conversation=this._mergeConversation(s.conversation,e.definition.conversation),s.message=this._mergeMessage(s.message,e.definition.message),s.states=this._mergeStates(s.states,e.definition.states),s.events=this._mergeEvents(s.events,e.definition.events),s.recurringEvents=this._mergeRecurringEvents(s.recurringEvents,e.definition.recurringEvents),s.actions=this._mergeActions(s.actions,e.definition.actions),this}_mergeUser=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeConversation=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeMessage=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeStates=(e,t)=>({...e,...t});_mergeEvents=(e,t)=>({...e,...t});_mergeRecurringEvents=(e,t)=>({...e,...t});_mergeActions=(e,t)=>({...e,...t})};var Ce=(n,e)=>{for(let[t,s]of Object.entries(e.actionHandlers))n.actionHandlers[t]=s;for(let[t,s]of Object.entries(e.eventHandlers))s&&(n.eventHandlers[t]=l.safePush(n.eventHandlers[t],...s));for(let[t,s]of Object.entries(e.messageHandlers))s&&(n.messageHandlers[t]=l.safePush(n.messageHandlers[t],...s));for(let[t,s]of Object.entries(e.stateExpiredHandlers))s&&(n.stateExpiredHandlers[t]=l.safePush(n.stateExpiredHandlers[t],...s));for(let[t,s]of Object.entries(e.hookHandlers))for(let[a,o]of Object.entries(s))o&&(n.hookHandlers[t][a]=l.safePush(n.hookHandlers[t][a],...o))};var De=ce(require("@botpress/client"));var v=class{constructor(e,t={before:{},after:{}}){this._client=e;this._hooks=t}getConversation=e=>this._run("getConversation",e);listConversations=e=>this._run("listConversations",e);updateConversation=e=>this._run("updateConversation",e);deleteConversation=e=>this._run("deleteConversation",e);listParticipants=e=>this._run("listParticipants",e);addParticipant=e=>this._run("addParticipant",e);getParticipant=e=>this._run("getParticipant",e);removeParticipant=e=>this._run("removeParticipant",e);getEvent=e=>this._run("getEvent",e);listEvents=e=>this._run("listEvents",e);createMessage=e=>this._run("createMessage",e);getOrCreateMessage=e=>this._run("getOrCreateMessage",e);getMessage=e=>this._run("getMessage",e);updateMessage=e=>this._run("updateMessage",e);listMessages=e=>this._run("listMessages",e);deleteMessage=e=>this._run("deleteMessage",e);getUser=e=>this._run("getUser",e);listUsers=e=>this._run("listUsers",e);updateUser=e=>this._run("updateUser",e);deleteUser=e=>this._run("deleteUser",e);getState=e=>this._run("getState",e);setState=e=>this._run("setState",e);getOrSetState=e=>this._run("getOrSetState",e);patchState=e=>this._run("patchState",e);callAction=e=>this._run("callAction",e);uploadFile=e=>this._run("uploadFile",e);upsertFile=e=>this._run("upsertFile",e);deleteFile=e=>this._run("deleteFile",e);listFiles=e=>this._run("listFiles",e);getFile=e=>this._run("getFile",e);updateFileMetadata=e=>this._run("updateFileMetadata",e);searchFiles=e=>this._run("searchFiles",e);trackAnalytics=e=>this._run("trackAnalytics",e);createConversation=e=>this._client.createConversation(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);createUser=e=>this._client.createUser(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);_run=async(e,t)=>{let s=this._hooks.before[e];s&&(t=await s(t));let a=await this._client[e](t),o=this._hooks.after[e];return o&&(a=await o(a)),a}};var ke=require("@bpinternal/zui");var mt=ke.z.enum(["event_received","register","unregister","ping","action_triggered"]),Se=n=>{let e=n[S],t=n[D],s=n[oe],a=mt.parse(n[M]);if(!e)throw new Error("Missing bot headers");if(!s)throw new Error("Missing type headers");if(!t)throw new Error("Missing configuration headers");if(!a)throw new Error("Missing operation headers");return{botId:e,operation:a,type:s,configuration:t?JSON.parse(Buffer.from(t,"base64").toString("utf-8")):{}}};var b={status:200},Me=n=>async e=>{let t=Se(e.headers),s=new De.Client({botId:t.botId,retry:K}),a=new v(s,{before:{createMessage:async i=>{let c=n.hookHandlers.before_outgoing_message[i.type]??[],g=n.hookHandlers.before_outgoing_message["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i},callAction:async i=>{let c=n.hookHandlers.before_outgoing_call_action[i.type]??[],g=n.hookHandlers.before_outgoing_call_action["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i}},after:{createMessage:async i=>{let c=n.hookHandlers.after_outgoing_message[i.message.type]??[],g=n.hookHandlers.after_outgoing_message["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i},callAction:async i=>{let c=n.hookHandlers.after_outgoing_call_action[i.output.type]??[],g=n.hookHandlers.after_outgoing_call_action["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i}}}),o={req:e,ctx:t,client:a,self:n};switch(t.operation){case"action_triggered":return await vt(o);case"event_received":return await Bt(o);case"register":return await yt(o);case"unregister":return await Tt(o);case"ping":return await ht(o);default:throw new Error(`Unknown operation ${t.operation}`)}},ht=async({ctx:n})=>(x.info(`Received ${n.operation} operation for bot ${n.botId} of type ${n.type}`),b),yt=async n=>b,Tt=async n=>b,Bt=async({ctx:n,req:e,client:t,self:s})=>{x.debug(`Received event ${n.type}`);let a=B(e);if(n.type==="message_created"){let T=a.event,u=T.payload.message,q=s.hookHandlers.before_incoming_message[u.type]??[],Q=s.hookHandlers.before_incoming_message["*"]??[],X=[...q,...Q];for(let I of X){let C=await I({client:t,ctx:n,data:u});if(u=C?.data??u,C?.stop)return b}let Oe={user:T.payload.user,conversation:T.payload.conversation,states:T.payload.states,message:u,event:T},Re=s.messageHandlers[u.type]??[],Ue=s.messageHandlers["*"]??[],Ke=[...Re,...Ue];for(let I of Ke)await I({...Oe,client:t,ctx:n});let Fe=s.hookHandlers.after_incoming_message[u.type]??[],Ge=s.hookHandlers.after_incoming_message["*"]??[],je=[...Fe,...Ge];for(let I of je){let C=await I({client:t,ctx:n,data:u});if(u=C?.data??u,C?.stop)return b}return b}if(n.type==="state_expired"){let q={state:a.event.payload.state},Q=s.stateExpiredHandlers["*"]??[];for(let X of Q)await X({...q,client:t,ctx:n});return b}let o=a.event,i=s.hookHandlers.before_incoming_event[o.type]??[],c=s.hookHandlers.before_incoming_event["*"]??[],g=[...i,...c];for(let T of g){let u=await T({client:t,ctx:n,data:o});if(o=u?.data??o,u?.stop)return b}let p={event:o},d=s.eventHandlers[o.type]??[],_=s.eventHandlers["*"]??[],re=[...d,..._];for(let T of re)await T({...p,client:t,ctx:n});let W=s.hookHandlers.after_incoming_event[o.type]??[],Ae=s.hookHandlers.after_incoming_event["*"]??[],we=[...W,...Ae];for(let T of we){let u=await T({client:t,ctx:n,data:o});if(o=u?.data??o,u?.stop)return b}return b},vt=async({ctx:n,req:e,client:t,self:s})=>{let{input:a,type:o}=B(e);if(!o)throw new Error("Missing action type");let i=s.actionHandlers[o];if(!i)throw new Error(`Action ${o} not found`);let g={output:await i({ctx:n,input:a,client:t,type:o})};return{status:200,body:JSON.stringify(g)}};var V=class{constructor(e){this.props=e;this.actionHandlers=e.actions;let t=h.values(e.plugins);for(let s of t)this._use(s)}actionHandlers;messageHandlers={};eventHandlers={};stateExpiredHandlers={};hookHandlers={before_incoming_event:{},before_incoming_message:{},before_outgoing_message:{},before_outgoing_call_action:{},after_incoming_event:{},after_incoming_message:{},after_outgoing_message:{},after_outgoing_call_action:{}};get actions(){return this.actionHandlers}on={message:(e,t)=>{this.messageHandlers[e]=l.safePush(this.messageHandlers[e],t)},event:(e,t)=>{this.eventHandlers[e]=l.safePush(this.eventHandlers[e],t)},stateExpired:(e,t)=>{this.stateExpiredHandlers[e]=l.safePush(this.stateExpiredHandlers[e],t)},beforeIncomingEvent:(e,t)=>{this.hookHandlers.before_incoming_event[e]=l.safePush(this.hookHandlers.before_incoming_event[e],t)},beforeIncomingMessage:(e,t)=>{this.hookHandlers.before_incoming_message[e]=l.safePush(this.hookHandlers.before_incoming_message[e],t)},beforeOutgoingMessage:(e,t)=>{this.hookHandlers.before_outgoing_message[e]=l.safePush(this.hookHandlers.before_outgoing_message[e],t)},beforeOutgoingCallAction:(e,t)=>{this.hookHandlers.before_outgoing_call_action[e]=l.safePush(this.hookHandlers.before_outgoing_call_action[e],t)},afterIncomingEvent:(e,t)=>{this.hookHandlers.after_incoming_event[e]=l.safePush(this.hookHandlers.after_incoming_event[e],t)},afterIncomingMessage:(e,t)=>{this.hookHandlers.after_incoming_message[e]=l.safePush(this.hookHandlers.after_incoming_message[e],t)},afterOutgoingMessage:(e,t)=>{this.hookHandlers.after_outgoing_message[e]=l.safePush(this.hookHandlers.after_outgoing_message[e],t)},afterOutgoingCallAction:(e,t)=>{this.hookHandlers.after_outgoing_call_action[e]=l.safePush(this.hookHandlers.after_outgoing_call_action[e],t)}};_use=e=>{Ce(this,e)};handler=Me(this);start=e=>A(this.handler,e)};var L=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.entities=e.entities??{},this.templateName=e.templateName;let t=this._getEntityReference(this.entities),s=e.events===void 0?{}:h.mapValues(e.events,i=>({...i,schema:i.schema(t)})),a=e.actions===void 0?{}:h.mapValues(e.actions,i=>({...i,input:{...i.input,schema:i.input.schema(t)},output:{...i.output,schema:i.output.schema(t)}})),o=e.channels===void 0?{}:h.mapValues(e.channels,i=>({...i,messages:h.mapValues(i.messages,c=>({...c,schema:c.schema(t)}))}));this.events=s,this.actions=a,this.channels=o}name;version;entities;events;actions;channels;templateName;_getEntityReference=e=>{let t={};for(let s of Object.keys(e))t[s]=Y.ref(s);return t}};var z=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.integrations=e.integrations,this.interfaces=e.interfaces,this.user=e.user,this.conversation=e.conversation,this.message=e.message,this.states=e.states,this.configuration=e.configuration,this.events=e.events,this.recurringEvents=e.recurringEvents,this.actions=e.actions}name;version;integrations;interfaces;user;conversation;message;states;configuration;events;recurringEvents;actions};var $=class{constructor(e){this.props=e;this.actionHandlers=e.actions}_runtimeProps;actionHandlers;messageHandlers={};eventHandlers={};stateExpiredHandlers={};hookHandlers={before_incoming_event:{},before_incoming_message:{},before_outgoing_message:{},before_outgoing_call_action:{},after_incoming_event:{},after_incoming_message:{},after_outgoing_message:{},after_outgoing_call_action:{}};initialize(e){return this._runtimeProps=e,this}get config(){if(!this._runtimeProps)throw new Error("Plugin not correctly initialized. This is likely because you access your plugin config outside of an handler.");return this._runtimeProps}on={message:(e,t)=>{this.messageHandlers[e]=l.safePush(this.messageHandlers[e],t)},event:(e,t)=>{this.eventHandlers[e]=l.safePush(this.eventHandlers[e],t)},stateExpired:(e,t)=>{this.stateExpiredHandlers[e]=l.safePush(this.stateExpiredHandlers[e],t)},beforeIncomingEvent:(e,t)=>{this.hookHandlers.before_incoming_event[e]=l.safePush(this.hookHandlers.before_incoming_event[e],t)},beforeIncomingMessage:(e,t)=>{this.hookHandlers.before_incoming_message[e]=l.safePush(this.hookHandlers.before_incoming_message[e],t)},beforeOutgoingMessage:(e,t)=>{this.hookHandlers.before_outgoing_message[e]=l.safePush(this.hookHandlers.before_outgoing_message[e],t)},beforeOutgoingCallAction:(e,t)=>{this.hookHandlers.before_outgoing_call_action[e]=l.safePush(this.hookHandlers.before_outgoing_call_action[e],t)},afterIncomingEvent:(e,t)=>{this.hookHandlers.after_incoming_event[e]=l.safePush(this.hookHandlers.after_incoming_event[e],t)},afterIncomingMessage:(e,t)=>{this.hookHandlers.after_incoming_message[e]=l.safePush(this.hookHandlers.after_incoming_message[e],t)},afterOutgoingMessage:(e,t)=>{this.hookHandlers.after_outgoing_message[e]=l.safePush(this.hookHandlers.after_outgoing_message[e],t)},afterOutgoingCallAction:(e,t)=>{this.hookHandlers.after_outgoing_call_action[e]=l.safePush(this.hookHandlers.after_outgoing_call_action[e],t)}}};0&&(module.exports={Bot,BotDefinition,BotSpecificClient,Integration,IntegrationDefinition,IntegrationSpecificClient,InterfaceDefinition,Plugin,PluginDefinition,RuntimeError,botIdHeader,botUserIdHeader,configurationHeader,configurationTypeHeader,integrationIdHeader,isApiError,messages,operationHeader,parseBody,serve,typeHeader,webhookIdHeader});
|
|
1
|
+
"use strict";var Ne=Object.create;var O=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,ze=Object.prototype.hasOwnProperty;var k=(n,e)=>{for(var t in e)O(n,t,{get:e[t],enumerable:!0})},w=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Ve(e))!ze.call(n,a)&&a!==t&&O(n,a,{get:()=>e[a],enumerable:!(s=Ze(e,a))||s.enumerable});return n},f=(n,e,t)=>(w(n,e,"default"),t&&w(t,e,"default")),ce=(n,e,t)=>(t=n!=null?Ne(Le(n)):{},w(e||!n||!n.__esModule?O(t,"default",{value:n,enumerable:!0}):t,n)),$e=n=>w(O({},"__esModule",{value:!0}),n);var y={};k(y,{Bot:()=>V,BotDefinition:()=>Z,BotSpecificClient:()=>v,Integration:()=>N,IntegrationDefinition:()=>U,IntegrationSpecificClient:()=>H,InterfaceDefinition:()=>L,Plugin:()=>$,PluginDefinition:()=>z,RuntimeError:()=>J.RuntimeError,botIdHeader:()=>S,botUserIdHeader:()=>te,configurationHeader:()=>D,configurationTypeHeader:()=>ie,integrationIdHeader:()=>ne,isApiError:()=>J.isApiError,messages:()=>ee,operationHeader:()=>M,parseBody:()=>B,serve:()=>A,typeHeader:()=>oe,webhookIdHeader:()=>se});module.exports=$e(y);var ee={};k(ee,{defaults:()=>Xe,markdown:()=>Qe});var r={};k(r,{default:()=>Y});var le=require("@bpinternal/zui");f(r,require("@bpinternal/zui"));var Y=le.z;var m=r.z.string().min(1),pe=r.z.object({text:m}),ue=r.z.object({markdown:m}),de=r.z.object({imageUrl:m}),fe=r.z.object({audioUrl:m}),me=r.z.object({videoUrl:m}),he=r.z.object({fileUrl:m,title:m.optional()}),ye=r.z.object({latitude:r.z.number(),longitude:r.z.number(),address:r.z.string().optional(),title:r.z.string().optional()}),Te=r.z.object({title:m,subtitle:m.optional(),imageUrl:m.optional(),actions:r.z.array(r.z.object({action:r.z.enum(["postback","url","say"]),label:m,value:m}))}),ge=r.z.object({text:m,options:r.z.array(r.z.object({label:m,value:m}))}),Je=r.z.object({items:r.z.array(Te)}),We=r.z.union([r.z.object({type:r.z.literal("text"),payload:pe}),r.z.object({type:r.z.literal("markdown"),payload:ue}),r.z.object({type:r.z.literal("image"),payload:de}),r.z.object({type:r.z.literal("audio"),payload:fe}),r.z.object({type:r.z.literal("video"),payload:me}),r.z.object({type:r.z.literal("file"),payload:he}),r.z.object({type:r.z.literal("location"),payload:ye})]),qe=r.z.object({items:r.z.array(We)}),Qe={schema:ue},Xe={text:{schema:pe},image:{schema:de},audio:{schema:fe},video:{schema:me},file:{schema:he},location:{schema:ye},carousel:{schema:Je},card:{schema:Te},dropdown:{schema:ge},choice:{schema:ge},bloc:{schema:qe}};var S="x-bot-id",te="x-bot-user-id",ne="x-integration-id",se="x-webhook-id",ie="x-bp-configuration-type",D="x-bp-configuration",M="x-bp-operation",oe="x-bp-type";var Be=require("node:http");var x=console;function B(n){if(!n.body)throw new Error("Missing body");return JSON.parse(n.body)}async function A(n,e=8072,t=nt){let s=(0,Be.createServer)(async(a,o)=>{try{let i=await Ye(a);if(i.path==="/health"){o.writeHead(200).end("ok");return}let c=await n(i);o.writeHead(c?.status??200,c?.headers??{}).end(c?.body??"{}")}catch(i){x.error("Error while handling request",{error:i?.message??"Internal error occured"}),o.writeHead(500).end(JSON.stringify({error:i?.message??"Internal error occured"}))}});return s.listen(e,()=>t(e)),s}async function Ye(n){let e=await tt(n),t={};for(let a=0;a<n.rawHeaders.length;a+=2){let o=n.rawHeaders[a].toLowerCase(),i=n.rawHeaders[a+1];t[o]=i}let s=new URL(n.url??"",n.headers.host?`http://${n.headers.host}`:"http://botpress.cloud");return{body:e,path:s.pathname,query:et(s.search,"?"),headers:t,method:n.method?.toUpperCase()??"GET"}}function et(n,e){return n.indexOf(e)===0?n.slice(e.length):n}async function tt(n){return new Promise((e,t)=>{if(n.method!=="POST"&&n.method!=="PUT"&&n.method!=="PATCH")return e(void 0);let s="";n.on("data",a=>s+=a.toString()),n.on("error",a=>t(a)),n.on("end",()=>e(s))})}function nt(n){x.info(`Listening on port ${n}`)}f(y,r,module.exports);var J=require("@botpress/client");var h={};k(h,{mapValues:()=>it,pairs:()=>ve,values:()=>st});var ve=n=>Object.entries(n),st=n=>Object.values(n),it=(n,e)=>Object.fromEntries(ve(n).map(([t,s])=>[t,e(s,t)]));var l={};k(l,{safePush:()=>ot});var ot=(n,...e)=>n?[...n,...e]:[...e];var R=Symbol("schemaName"),be=n=>n?h.mapValues(n,(t,s)=>({...t,[R]:s})):{},_e=n=>R in n&&n[R]!==void 0,Pe=n=>n[R];var U=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.icon=e.icon,this.readme=e.readme,this.title=e.title,this.identifier=e.identifier,this.description=e.description,this.configuration=e.configuration,this.configurations=e.configurations,this.events=e.events,this.actions=e.actions,this.channels=e.channels,this.states=e.states,this.user=e.user,this.secrets=e.secrets,this.entities=e.entities,this.interfaces=e.interfaces}name;version;title;description;icon;readme;configuration;configurations;events;actions;channels;states;user;secrets;identifier;entities;interfaces;extend(e,t){let s=t(be(this.entities)),a=h.pairs(s).find(([p,d])=>!_e(d));if(a)throw new Error(`Cannot extend interface "${e.name}" with entity "${a[0]}"; the provided schema is not part of the integration's entities.`);let o=this;o.interfaces??={};let i=h.mapValues(s,p=>({name:Pe(p),schema:p.schema})),c=Object.values(i).map(p=>p.name),g=c.length===0?e.name:`${e.name}<${c.join(",")}>`;return o.interfaces[g]={...e,entities:i},this}};var P=require("@botpress/client");var xe=require("@botpress/client"),K={retries:3,retryCondition:n=>xe.axiosRetry.isNetworkOrIdempotentRequestError(n)||[429,502].includes(n.response?.status??0),retryDelay:n=>n*1e3};var H=class{constructor(e){this._client=e}createConversation=e=>this._client.createConversation(e);getConversation=e=>this._client.getConversation(e);listConversations=e=>this._client.listConversations(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);updateConversation=e=>this._client.updateConversation(e);deleteConversation=e=>this._client.deleteConversation(e);listParticipants=e=>this._client.listParticipants(e);addParticipant=e=>this._client.addParticipant(e);getParticipant=e=>this._client.getParticipant(e);removeParticipant=e=>this._client.removeParticipant(e);createEvent=e=>this._client.createEvent(e);getEvent=e=>this._client.getEvent(e);listEvents=e=>this._client.listEvents(e);createMessage=e=>this._client.createMessage(e);getOrCreateMessage=e=>this._client.getOrCreateMessage(e);getMessage=e=>this._client.getMessage(e);updateMessage=e=>this._client.updateMessage(e);listMessages=e=>this._client.listMessages(e);deleteMessage=e=>this._client.deleteMessage(e);createUser=e=>this._client.createUser(e);getUser=e=>this._client.getUser(e);listUsers=e=>this._client.listUsers(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);updateUser=e=>this._client.updateUser(e);deleteUser=e=>this._client.deleteUser(e);getState=e=>this._client.getState(e);setState=e=>this._client.setState(e);getOrSetState=e=>this._client.getOrSetState(e);patchState=e=>this._client.patchState(e);configureIntegration=e=>this._client.configureIntegration(e);uploadFile=e=>this._client.uploadFile(e);upsertFile=e=>this._client.upsertFile(e);deleteFile=e=>this._client.deleteFile(e);listFiles=e=>this._client.listFiles(e);getFile=e=>this._client.getFile(e);updateFileMetadata=e=>this._client.updateFileMetadata(e)};var F=class{_cost=0;get cost(){return this._cost}setCost(e){this._cost=e}toJSON(){return{cost:this.cost}}};var Ee=require("@bpinternal/zui");var at=Ee.z.enum(["webhook_received","message_created","action_triggered","register","unregister","ping","create_user","create_conversation"]),He=n=>{let e=n[S],t=n[te],s=n[ne],a=n[se],o=n[ie],i=n[D],c=at.parse(n[M]);if(!e)throw new Error("Missing bot headers");if(!t)throw new Error("Missing bot user headers");if(!s)throw new Error("Missing integration headers");if(!a)throw new Error("Missing webhook headers");if(!i)throw new Error("Missing configuration headers");if(!c)throw new Error("Missing operation headers");return{botId:e,botUserId:t,integrationId:s,webhookId:a,operation:c,configurationType:o??null,configuration:i?JSON.parse(Buffer.from(i,"base64").toString("utf-8")):{}}};var ae=ce(require("util")),G=n=>{if(process.env.BP_LOG_FORMAT==="json")return JSON.stringify({msg:ae.default.format(...n),visible_to_bot_owner:!0});{let[e,...t]=n;return ae.default.format(`[For Bot Owner] ${e}`,...t)}},j={forBot:()=>({info:(...n)=>{console.info(G(n))},warn:(...n)=>{console.warn(G(n))},error:(...n)=>{console.error(G(n))},debug:(...n)=>{console.debug(G(n))}})};var Ie=n=>async e=>{let t=He(e.headers),s=new P.Client({botId:t.botId,integrationId:t.integrationId,retry:K}),a=new H(s),o={ctx:t,req:e,client:a,logger:j,instance:n};try{let i;switch(t.operation){case"webhook_received":i=await ct(o);break;case"register":i=await lt(o);break;case"unregister":i=await gt(o);break;case"message_created":i=await dt(o);break;case"action_triggered":i=await ft(o);break;case"ping":i=await rt(o);break;case"create_user":i=await pt(o);break;case"create_conversation":i=await ut(o);break;default:throw new Error(`Unknown operation ${t.operation}`)}return i?{...i,status:i.status??200}:{status:200}}catch(i){if((0,P.isApiError)(i)){let g=new P.RuntimeError(i.message,i);return j.forBot().error(g.message),{status:g.code,body:JSON.stringify(g.toJSON())}}console.error(i);let c=new P.RuntimeError("An unexpected error occurred in the integration. Bot owners: Check logs for more informations. Integration owners: throw a RuntimeError to return a custom error message instead.");return j.forBot().error(c.message),{status:c.code,body:JSON.stringify(c.toJSON())}}},rt=async n=>{},ct=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{let{req:o}=B(t);return a.webhook({client:n,ctx:e,req:o,logger:s})},lt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.register)return;let{webhookUrl:o}=B(t);await a.register({client:n,ctx:e,webhookUrl:o,logger:s})},gt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.unregister)return;let{webhookUrl:o}=B(t);await a.unregister({ctx:e,webhookUrl:o,client:n,logger:s})},pt=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.createUser)return;let{tags:o}=B(t);return await a.createUser({ctx:e,client:n,tags:o,logger:s})},ut=async({client:n,ctx:e,req:t,logger:s,instance:a})=>{if(!a.createConversation)return;let{channel:o,tags:i}=B(t);return await a.createConversation({ctx:e,client:n,channel:o,tags:i,logger:s})},dt=async({ctx:n,req:e,client:t,logger:s,instance:a})=>{let{conversation:o,user:i,type:c,payload:g,message:p}=B(e),d=a.channels[o.channel];if(!d)throw new Error(`Channel ${o.channel} not found`);let _=d.messages[c];if(!_)throw new Error(`Message of type ${c} not found in channel ${o.channel}`);await _({ctx:n,conversation:o,message:p,user:i,type:c,client:t,payload:g,ack:async({tags:W})=>{await t.updateMessage({id:p.id,tags:W})},logger:s})},ft=async({req:n,ctx:e,client:t,logger:s,instance:a})=>{let{input:o,type:i}=B(n);if(!i)throw new Error("Missing action type");let c=a.actions[i];if(!c)throw new Error(`Action ${i} not found`);let g=new F,d={output:await c({ctx:e,input:o,client:t,type:i,logger:s,metadata:g}),meta:g.toJSON()};return{body:JSON.stringify(d)}};var N=class{constructor(e){this.props=e;this.actions=e.actions,this.channels=e.channels,this.register=e.register,this.unregister=e.unregister,this.createUser=e.createUser,this.createConversation=e.createConversation,this.webhook=e.handler}actions;channels;register;unregister;createUser;createConversation;webhook;handler=Ie(this);start=e=>A(this.handler,e)};var Z=class{constructor(e){this.props=e;this.integrations=e.integrations,this.plugins=e.plugins,this.user=e.user,this.conversation=e.conversation,this.message=e.message,this.states=e.states,this.configuration=e.configuration,this.events=e.events,this.recurringEvents=e.recurringEvents,this.actions=e.actions}integrations;plugins;user;conversation;message;states;configuration;events;recurringEvents;actions;addIntegration(e,t){let s=this;return s.integrations||(s.integrations={}),s.integrations[e.name]={enabled:t.enabled,...e,configurationType:t.configurationType,configuration:t.configuration},this}addPlugin(e,t){let s=this;return s.plugins||(s.plugins={}),s.plugins[e.name]={...e,configuration:t.configuration,interfaces:t.interfaces},s.user=this._mergeUser(s.user,e.definition.user),s.conversation=this._mergeConversation(s.conversation,e.definition.conversation),s.message=this._mergeMessage(s.message,e.definition.message),s.states=this._mergeStates(s.states,e.definition.states),s.events=this._mergeEvents(s.events,e.definition.events),s.recurringEvents=this._mergeRecurringEvents(s.recurringEvents,e.definition.recurringEvents),s.actions=this._mergeActions(s.actions,e.definition.actions),this}_mergeUser=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeConversation=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeMessage=(e,t)=>({tags:{...e?.tags,...t?.tags}});_mergeStates=(e,t)=>({...e,...t});_mergeEvents=(e,t)=>({...e,...t});_mergeRecurringEvents=(e,t)=>({...e,...t});_mergeActions=(e,t)=>({...e,...t})};var Ce=(n,e)=>{for(let[t,s]of Object.entries(e.actionHandlers))n.actionHandlers[t]=s;for(let[t,s]of Object.entries(e.eventHandlers))s&&(n.eventHandlers[t]=l.safePush(n.eventHandlers[t],...s));for(let[t,s]of Object.entries(e.messageHandlers))s&&(n.messageHandlers[t]=l.safePush(n.messageHandlers[t],...s));for(let[t,s]of Object.entries(e.stateExpiredHandlers))s&&(n.stateExpiredHandlers[t]=l.safePush(n.stateExpiredHandlers[t],...s));for(let[t,s]of Object.entries(e.hookHandlers))for(let[a,o]of Object.entries(s))o&&(n.hookHandlers[t][a]=l.safePush(n.hookHandlers[t][a],...o))};var De=ce(require("@botpress/client"));var v=class{constructor(e,t={before:{},after:{}}){this._client=e;this._hooks=t}getConversation=e=>this._run("getConversation",e);listConversations=e=>this._run("listConversations",e);updateConversation=e=>this._run("updateConversation",e);deleteConversation=e=>this._run("deleteConversation",e);listParticipants=e=>this._run("listParticipants",e);addParticipant=e=>this._run("addParticipant",e);getParticipant=e=>this._run("getParticipant",e);removeParticipant=e=>this._run("removeParticipant",e);getEvent=e=>this._run("getEvent",e);listEvents=e=>this._run("listEvents",e);createMessage=e=>this._run("createMessage",e);getOrCreateMessage=e=>this._run("getOrCreateMessage",e);getMessage=e=>this._run("getMessage",e);updateMessage=e=>this._run("updateMessage",e);listMessages=e=>this._run("listMessages",e);deleteMessage=e=>this._run("deleteMessage",e);getUser=e=>this._run("getUser",e);listUsers=e=>this._run("listUsers",e);updateUser=e=>this._run("updateUser",e);deleteUser=e=>this._run("deleteUser",e);getState=e=>this._run("getState",e);setState=e=>this._run("setState",e);getOrSetState=e=>this._run("getOrSetState",e);patchState=e=>this._run("patchState",e);callAction=e=>this._run("callAction",e);uploadFile=e=>this._run("uploadFile",e);upsertFile=e=>this._run("upsertFile",e);deleteFile=e=>this._run("deleteFile",e);listFiles=e=>this._run("listFiles",e);getFile=e=>this._run("getFile",e);updateFileMetadata=e=>this._run("updateFileMetadata",e);searchFiles=e=>this._run("searchFiles",e);trackAnalytics=e=>this._run("trackAnalytics",e);createConversation=e=>this._client.createConversation(e);getOrCreateConversation=e=>this._client.getOrCreateConversation(e);createUser=e=>this._client.createUser(e);getOrCreateUser=e=>this._client.getOrCreateUser(e);_run=async(e,t)=>{let s=this._hooks.before[e];s&&(t=await s(t));let a=await this._client[e](t),o=this._hooks.after[e];return o&&(a=await o(a)),a}};var ke=require("@bpinternal/zui");var mt=ke.z.enum(["event_received","register","unregister","ping","action_triggered"]),Se=n=>{let e=n[S],t=n[D],s=n[oe],a=mt.parse(n[M]);if(!e)throw new Error("Missing bot headers");if(!s)throw new Error("Missing type headers");if(!t)throw new Error("Missing configuration headers");if(!a)throw new Error("Missing operation headers");return{botId:e,operation:a,type:s,configuration:t?JSON.parse(Buffer.from(t,"base64").toString("utf-8")):{}}};var b={status:200},Me=n=>async e=>{let t=Se(e.headers),s=new De.Client({botId:t.botId,retry:K}),a=new v(s,{before:{createMessage:async i=>{let c=n.hookHandlers.before_outgoing_message[i.type]??[],g=n.hookHandlers.before_outgoing_message["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i},callAction:async i=>{let c=n.hookHandlers.before_outgoing_call_action[i.type]??[],g=n.hookHandlers.before_outgoing_call_action["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i}},after:{createMessage:async i=>{let c=n.hookHandlers.after_outgoing_message[i.message.type]??[],g=n.hookHandlers.after_outgoing_message["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i},callAction:async i=>{let c=n.hookHandlers.after_outgoing_call_action[i.output.type]??[],g=n.hookHandlers.after_outgoing_call_action["*"]??[],p=[...c,...g];for(let d of p)i=(await d({client:new v(s),ctx:t,data:i}))?.data??i;return i}}}),o={req:e,ctx:t,client:a,self:n};switch(t.operation){case"action_triggered":return await vt(o);case"event_received":return await Bt(o);case"register":return await yt(o);case"unregister":return await Tt(o);case"ping":return await ht(o);default:throw new Error(`Unknown operation ${t.operation}`)}},ht=async({ctx:n})=>(x.info(`Received ${n.operation} operation for bot ${n.botId} of type ${n.type}`),b),yt=async n=>b,Tt=async n=>b,Bt=async({ctx:n,req:e,client:t,self:s})=>{x.debug(`Received event ${n.type}`);let a=B(e);if(n.type==="message_created"){let T=a.event,u=T.payload.message,q=s.hookHandlers.before_incoming_message[u.type]??[],Q=s.hookHandlers.before_incoming_message["*"]??[],X=[...q,...Q];for(let I of X){let C=await I({client:t,ctx:n,data:u});if(u=C?.data??u,C?.stop)return b}let Oe={user:T.payload.user,conversation:T.payload.conversation,states:T.payload.states,message:u,event:T},Re=s.messageHandlers[u.type]??[],Ue=s.messageHandlers["*"]??[],Ke=[...Re,...Ue];for(let I of Ke)await I({...Oe,client:t,ctx:n});let Fe=s.hookHandlers.after_incoming_message[u.type]??[],Ge=s.hookHandlers.after_incoming_message["*"]??[],je=[...Fe,...Ge];for(let I of je){let C=await I({client:t,ctx:n,data:u});if(u=C?.data??u,C?.stop)return b}return b}if(n.type==="state_expired"){let q={state:a.event.payload.state},Q=s.stateExpiredHandlers["*"]??[];for(let X of Q)await X({...q,client:t,ctx:n});return b}let o=a.event,i=s.hookHandlers.before_incoming_event[o.type]??[],c=s.hookHandlers.before_incoming_event["*"]??[],g=[...i,...c];for(let T of g){let u=await T({client:t,ctx:n,data:o});if(o=u?.data??o,u?.stop)return b}let p={event:o},d=s.eventHandlers[o.type]??[],_=s.eventHandlers["*"]??[],re=[...d,..._];for(let T of re)await T({...p,client:t,ctx:n});let W=s.hookHandlers.after_incoming_event[o.type]??[],Ae=s.hookHandlers.after_incoming_event["*"]??[],we=[...W,...Ae];for(let T of we){let u=await T({client:t,ctx:n,data:o});if(o=u?.data??o,u?.stop)return b}return b},vt=async({ctx:n,req:e,client:t,self:s})=>{let{input:a,type:o}=B(e);if(!o)throw new Error("Missing action type");let i=s.actionHandlers[o];if(!i)throw new Error(`Action ${o} not found`);let g={output:await i({ctx:n,input:a,client:t,type:o})};return{status:200,body:JSON.stringify(g)}};var V=class{constructor(e){this.props=e;this.actionHandlers=e.actions;let t=h.values(e.plugins);for(let s of t)this._use(s)}actionHandlers;messageHandlers={};eventHandlers={};stateExpiredHandlers={};hookHandlers={before_incoming_event:{},before_incoming_message:{},before_outgoing_message:{},before_outgoing_call_action:{},after_incoming_event:{},after_incoming_message:{},after_outgoing_message:{},after_outgoing_call_action:{}};get actions(){return this.actionHandlers}on={message:(e,t)=>{this.messageHandlers[e]=l.safePush(this.messageHandlers[e],t)},event:(e,t)=>{this.eventHandlers[e]=l.safePush(this.eventHandlers[e],t)},stateExpired:(e,t)=>{this.stateExpiredHandlers[e]=l.safePush(this.stateExpiredHandlers[e],t)},beforeIncomingEvent:(e,t)=>{this.hookHandlers.before_incoming_event[e]=l.safePush(this.hookHandlers.before_incoming_event[e],t)},beforeIncomingMessage:(e,t)=>{this.hookHandlers.before_incoming_message[e]=l.safePush(this.hookHandlers.before_incoming_message[e],t)},beforeOutgoingMessage:(e,t)=>{this.hookHandlers.before_outgoing_message[e]=l.safePush(this.hookHandlers.before_outgoing_message[e],t)},beforeOutgoingCallAction:(e,t)=>{this.hookHandlers.before_outgoing_call_action[e]=l.safePush(this.hookHandlers.before_outgoing_call_action[e],t)},afterIncomingEvent:(e,t)=>{this.hookHandlers.after_incoming_event[e]=l.safePush(this.hookHandlers.after_incoming_event[e],t)},afterIncomingMessage:(e,t)=>{this.hookHandlers.after_incoming_message[e]=l.safePush(this.hookHandlers.after_incoming_message[e],t)},afterOutgoingMessage:(e,t)=>{this.hookHandlers.after_outgoing_message[e]=l.safePush(this.hookHandlers.after_outgoing_message[e],t)},afterOutgoingCallAction:(e,t)=>{this.hookHandlers.after_outgoing_call_action[e]=l.safePush(this.hookHandlers.after_outgoing_call_action[e],t)}};_use=e=>{Ce(this,e)};handler=Me(this);start=e=>A(this.handler,e)};var L=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.entities=e.entities??{},this.templateName=e.templateName;let t=this._getEntityReference(this.entities),s=e.events===void 0?{}:h.mapValues(e.events,i=>({...i,schema:i.schema(t)})),a=e.actions===void 0?{}:h.mapValues(e.actions,i=>({...i,input:{...i.input,schema:i.input.schema(t)},output:{...i.output,schema:i.output.schema(t)}})),o=e.channels===void 0?{}:h.mapValues(e.channels,i=>({...i,messages:h.mapValues(i.messages,c=>({...c,schema:c.schema(t)}))}));this.events=s,this.actions=a,this.channels=o}name;version;entities;events;actions;channels;templateName;_getEntityReference=e=>{let t={};for(let[s,a]of Object.entries(e)){let o=a.schema._def["x-zui"]?.title,i=a.schema._def.description,c=Y.ref(s);o&&c.title(o),i&&c.describe(i),t[s]=c}return t}};var z=class{constructor(e){this.props=e;this.name=e.name,this.version=e.version,this.integrations=e.integrations,this.interfaces=e.interfaces,this.user=e.user,this.conversation=e.conversation,this.message=e.message,this.states=e.states,this.configuration=e.configuration,this.events=e.events,this.recurringEvents=e.recurringEvents,this.actions=e.actions}name;version;integrations;interfaces;user;conversation;message;states;configuration;events;recurringEvents;actions};var $=class{constructor(e){this.props=e;this.actionHandlers=e.actions}_runtimeProps;actionHandlers;messageHandlers={};eventHandlers={};stateExpiredHandlers={};hookHandlers={before_incoming_event:{},before_incoming_message:{},before_outgoing_message:{},before_outgoing_call_action:{},after_incoming_event:{},after_incoming_message:{},after_outgoing_message:{},after_outgoing_call_action:{}};initialize(e){return this._runtimeProps=e,this}get config(){if(!this._runtimeProps)throw new Error("Plugin not correctly initialized. This is likely because you access your plugin config outside of an handler.");return this._runtimeProps}on={message:(e,t)=>{this.messageHandlers[e]=l.safePush(this.messageHandlers[e],t)},event:(e,t)=>{this.eventHandlers[e]=l.safePush(this.eventHandlers[e],t)},stateExpired:(e,t)=>{this.stateExpiredHandlers[e]=l.safePush(this.stateExpiredHandlers[e],t)},beforeIncomingEvent:(e,t)=>{this.hookHandlers.before_incoming_event[e]=l.safePush(this.hookHandlers.before_incoming_event[e],t)},beforeIncomingMessage:(e,t)=>{this.hookHandlers.before_incoming_message[e]=l.safePush(this.hookHandlers.before_incoming_message[e],t)},beforeOutgoingMessage:(e,t)=>{this.hookHandlers.before_outgoing_message[e]=l.safePush(this.hookHandlers.before_outgoing_message[e],t)},beforeOutgoingCallAction:(e,t)=>{this.hookHandlers.before_outgoing_call_action[e]=l.safePush(this.hookHandlers.before_outgoing_call_action[e],t)},afterIncomingEvent:(e,t)=>{this.hookHandlers.after_incoming_event[e]=l.safePush(this.hookHandlers.after_incoming_event[e],t)},afterIncomingMessage:(e,t)=>{this.hookHandlers.after_incoming_message[e]=l.safePush(this.hookHandlers.after_incoming_message[e],t)},afterOutgoingMessage:(e,t)=>{this.hookHandlers.after_outgoing_message[e]=l.safePush(this.hookHandlers.after_outgoing_message[e],t)},afterOutgoingCallAction:(e,t)=>{this.hookHandlers.after_outgoing_call_action[e]=l.safePush(this.hookHandlers.after_outgoing_call_action[e],t)}}};0&&(module.exports={Bot,BotDefinition,BotSpecificClient,Integration,IntegrationDefinition,IntegrationSpecificClient,InterfaceDefinition,Plugin,PluginDefinition,RuntimeError,botIdHeader,botUserIdHeader,configurationHeader,configurationTypeHeader,integrationIdHeader,isApiError,messages,operationHeader,parseBody,serve,typeHeader,webhookIdHeader});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|