@novu/framework 2.14.0-rc.5ea799b171 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/servers/express.cjs +2 -2
- package/dist/cjs/servers/h3.cjs +2 -2
- package/dist/cjs/servers/hono.cjs +2 -2
- package/dist/cjs/servers/lambda.cjs +2 -2
- package/dist/cjs/servers/nest.cjs +2 -2
- package/dist/cjs/servers/next.cjs +2 -2
- package/dist/cjs/servers/nuxt.cjs +2 -2
- package/dist/cjs/servers/remix.cjs +2 -2
- package/dist/cjs/servers/sveltekit.cjs +2 -2
- package/dist/esm/{chunk-JWRKOFAS.js → chunk-CZKRMHOI.js} +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/servers/express.js +1 -1
- package/dist/esm/servers/h3.js +1 -1
- package/dist/esm/servers/hono.js +1 -1
- package/dist/esm/servers/lambda.js +1 -1
- package/dist/esm/servers/nest.js +1 -1
- package/dist/esm/servers/next.js +1 -1
- package/dist/esm/servers/nuxt.js +1 -1
- package/dist/esm/servers/remix.js +1 -1
- package/dist/esm/servers/sveltekit.js +1 -1
- package/package.json +1 -1
|
@@ -89,10 +89,10 @@ et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco
|
|
|
89
89
|
commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
90
90
|
pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est
|
|
91
91
|
laborum`.split(/\W/),Tt=Xi,kt={type:Ye.ALLOWED_TYPES},gr=Zi,an=es,mr=ts,_t=ns,yr=rs,wr=is,ln="[a-zA-Z][a-zA-Z0-9+-.]*",Ct=`https?://{hostname}(?:${ln})+`,Sr="(?:\\?([a-z]{1,7}(=\\w{1,5})?&){0,3})?",He={email:"[a-zA-Z\\d][a-zA-Z\\d-]{1,13}[a-zA-Z\\d]@{hostname}",hostname:"[a-zA-Z]{1,33}\\.[a-z]{2,4}",ipv6:"[a-f\\d]{4}(:[a-f\\d]{4}){7}",uri:Ct,slug:"[a-zA-Z\\d_-]+","uri-reference":`${Ct}${Sr}`,"uri-template":Ct.replace("(?:","(?:/\\{[a-z][:a-zA-Z0-9-]*\\}|"),"json-pointer":`(/(?:${ln.replace("]*","/]*")}|~[01]))+`,uuid:"^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$",duration:"^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$"},He.iri=He["uri-reference"],He["iri-reference"]=He["uri-reference"],He["idn-email"]=He.email,He["idn-hostname"]=He.hostname,Ar=new RegExp(`\\{(${Object.keys(He).join("|")})\\}`),Or=ss,Er=as,vr={boolean:lr,null:fr,array:pr,integer:dr,number:on,object:gr,string:Er},ft=vr,br=nt,Rr=({refs:e,schema:t,container:r,synchronous:l,refDepthMax:c,refDepthMin:p})=>{let f={},O={},$=0,A,D;return f.resolveSchema=(R,V,B)=>{if(R==null)return null;if(typeof R.generate=="function")return R;if(typeof(R.$id||R.id)=="string"&&(delete R.id,delete R.$id,delete R.$schema),typeof R.$ref=="string"){let Q=Math.max(p,c)-1;if(R.$ref==="#"||O[R.$ref]<0||A===R.$ref&&++$>Q)return R.$ref!=="#"&&D&&D.length===B.length?ue.getLocalRef(t,R.$ref,l&&e):(delete R.$ref,R);typeof O[R.$ref]=="undefined"&&(O[R.$ref]=X.number(p,c)-1),D=B,A=R.$ref;let te;R.$ref.indexOf("#/")===-1?te=e[R.$ref]||null:te=ue.getLocalRef(t,R.$ref,l&&e)||null;let de;if(typeof te!="undefined"){if(!te&&ee("ignoreMissingRefs")!==!0)throw new Error(`Reference not found: ${R.$ref}`);O[R.$ref]-=1,ue.merge(R,te||{}),de=l&&te&&te.$ref}return de||delete R.$ref,R}if(Array.isArray(R.allOf)){let Q=R.allOf;delete R.allOf,Q.forEach(te=>{let de=f.resolveSchema(te,null,B);ue.merge(R,typeof de.thunk=="function"?de.thunk(R):de),Array.isArray(R.allOf)&&f.resolveSchema(R,V,B)})}if(Array.isArray(R.oneOf||R.anyOf)&&B[B.length-2]!=="dependencies"){let Q=R.oneOf||R.anyOf;return R.enum&&R.oneOf&&(R.enum=R.enum.filter(te=>ue.validate(te,Q))),{thunk(te){let de=ue.omitProps(R,["anyOf","oneOf"]),ge=X.pick(Q);return ue.merge(de,ge),Q.forEach(F=>{F.required&&F!==ge&&F.required.forEach(w=>{if(ge.required&&ge.required.includes(w))return;let S=de.required&&de.required.includes(w);de.properties&&!S&&delete de.properties[w],te&&te.properties&&delete te.properties[w]})}),de}}}if(Object.keys(R).forEach(Q=>{(Array.isArray(R[Q])||typeof R[Q]=="object")&&!ue.isKey(Q)&&(R[Q]=f.resolveSchema(R[Q],Q,B.concat(Q)))}),B){let Q=B[B.length-1];if(Q==="properties"||Q==="items")return R}return r.wrap(R)},f},Tr=Rr,cn=fs,un=ps,Ie=Gt(jn(),1),gs=Ie.default.binaryOptions,ms=Ie.default.boolOptions,ys=Ie.default.intOptions,ws=Ie.default.nullOptions,Ss=Ie.default.strOptions,As=Ie.default.Schema,Os=Ie.default.Alias,Es=Ie.default.Collection,vs=Ie.default.Merge,bs=Ie.default.Node,Rs=Ie.default.Pair,Ts=Ie.default.Scalar,kr=Ie.default.YAMLMap,_r=Ie.default.YAMLSeq,pt=hs,qe=new nr,Ae=(e,t,r)=>(console.debug("[json-schema-faker] calling JSONSchemaFaker() is deprecated, call either .generate() or .resolve()"),r&&console.debug("[json-schema-faker] local references are only supported by calling .resolve()"),Ae.generate(e,t)),Ae.generateWithContext=(e,t)=>{let r=Nn(t,e);return cn(r,e,qe,!0)},Ae.generate=(e,t)=>un(Ae.generateWithContext(e,t)),Ae.generateYAML=(e,t)=>pt(Ae.generateWithContext(e,t)),Ae.resolveWithContext=(e,t,r)=>{typeof t=="string"&&(r=t,t={}),r=r||(typeof process!="undefined"&&typeof process.cwd=="function"?process.cwd():""),r=`${r.replace(/\/+$/,"")}/`;let l=Nn(t,e),c={order:1,canRead(f){let O=f.url.replace("/:",":");return l[O]||l[O.split("/").pop()]},read(f,O){try{O(null,this.canRead(f))}catch($){O($)}}},{$RefParser:p}=Zt();return p.bundle(r,e,{resolve:{file:{order:100},http:{order:200},fixedRefs:c},dereference:{circular:"ignore"}}).then(f=>cn(l,f,qe)).catch(f=>{throw new Error(`Error while resolving schema (${f.message})`)})},Ae.resolve=(e,t,r)=>Ae.resolveWithContext(e,t,r).then(un),Ae.resolveYAML=(e,t,r)=>Ae.resolveWithContext(e,t,r).then(pt),Mn(),Ae.format=sn,Ae.option=ee,Ae.random=X,Ae.extend=(e,t)=>(qe.extend(e,t),Ae),Ae.define=(e,t)=>(qe.define(e,t),Ae),Ae.reset=e=>(qe.reset(e),Mn(),Ae),Ae.locate=e=>qe.get(e),Ae.VERSION="0.5.5",Cr={...Ae},Mr=Ae}}),_s=W({"src/src/main.iife.js"(e,t){var r=(ks(),z(pe));typeof $RefParser!="undefined"&&typeof JSONPath!="undefined"&&r.setDependencies({...JSONPath,$RefParser}),typeof window!="undefined"&&(window.JSONSchemaFaker=r.default),t.exports=r.default,t.exports.JSONSchemaFaker=r.JSONSchemaFaker}});return _s()})();((m,n)=>{m.JSONSchemaFaker=n()})(typeof self!="undefined"?self:typeof window!="undefined"?window:globalThis,()=>Lt);Lt.random.shuffle=function(){return["[placeholder]"]};Lt.option({useDefaultValue:!0,alwaysFakeOptionals:!0,fillProperties:!1});function di(m){return Lt.generate(m)}var hi=async(m,n)=>{let o=new TextEncoder,h=o.encode(m),b=o.encode(n),W=await crypto.subtle.importKey("raw",h,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),I=await crypto.subtle.sign("HMAC",W,b);return Array.from(new Uint8Array(I)).map(U=>U.toString(16).padStart(2,"0")).join("")},gi=(m,n)=>{if(typeof m!="string"||typeof n!="string"||m.length!==n.length)return!1;let o=0;for(let h=0;h<m.length;h+=1)o|=m.charCodeAt(h)^n.charCodeAt(h);return o===0};import{Response as Bs}from"cross-fetch";var Mo=()=>typeof Response!="undefined"?Response:Bs,mi=async()=>{if(process.env.NOVU_BRIDGE_ORIGIN)return`${process.env.NOVU_BRIDGE_ORIGIN}/api/novu`;if(process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"&&process.env.NEXT_PUBLIC_VERCEL_URL)return`https://${process.env.NEXT_PUBLIC_VERCEL_URL}/api/novu`;try{if(process.env.NODE_ENV==="development"||process.env.NODE_ENV==="dev"){let n=await(await fetch("http://localhost:2022/.well-known/novu")).json();return`${n.tunnelOrigin}${n.route}`}}catch(m){console.error(m)}return""};function yi(m){return!!m&&typeof m=="object"&&"error"in m&&"message"in m&&"statusCode"in m}var $t=(m,n)=>{if(!m)throw new Ur;return{post:async(o,h)=>{let b=await fetch(`${n}/v1${o}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${m}`},body:JSON.stringify(h)}),W=await b.json();if(b.ok)return W;throw yi(W)?new Br(W.statusCode,W.error,W.message):new Pt(W)},delete:async o=>(await fetch(`${n}/v1${o}`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${m}`}})).json()}};import st from"chalk";var ye={info:m=>st.blue(m),warning:m=>st.yellow(m),error:m=>st.red(m),success:m=>st.green(m),underline:m=>st.underline(m),bold:m=>st.bold(m)},Te={SUCCESS:ye.success("\u2714"),ERROR:ye.error("\u2717"),WARNING:ye.warning("\u26A0"),INFO:ye.info("\u2139"),ARROW:ye.bold("\u2192"),MOCK:ye.info("\u25CB"),HYDRATED:ye.bold(ye.info("\u2192")),STEP:ye.info("\u03C3"),ACTION:ye.info("\u03B1"),DURATION:ye.info("\u0394"),PROVIDER:ye.info("\u2699"),OUTPUT:ye.info("\u21E2"),INPUT:ye.info("\u21E0"),WORKFLOW:ye.info("\u03C9"),STATE:ye.info("\u03C3"),EXECUTE:ye.info("\u03B5"),PREVIEW:ye.info("\u03C1")};function Dt(m){return m||process.env.NOVU_API_URL||"https://api.novu.co"}function Wt(m){return m||process.env.NOVU_SECRET_KEY||process.env.NOVU_API_KEY||""}import Si from"sanitize-html";var js=["src","alt","width","height","loading","srcset","sizes","crossorigin","usemap","ismap","class","id","style","title","dir","lang"];function Ys(m){return m.toLowerCase().startsWith("on")}function Vs(m){return m.replace(/<\/([a-zA-Z][a-zA-Z0-9]*)\s*\/[^>]*>/g,"</$1>")}var qs={allowedTags:Si.defaults.allowedTags.concat(["style","img","html","head","body","link","meta","title"]),allowedAttributes:!1,transformTags:{"*":(m,n)=>{let o={};for(let[h,b]of Object.entries(n))Ys(h)||(o[h]=b);return{tagName:m,attribs:o}},img:(m,n)=>{let o={};for(let[h,b]of Object.entries(n))js.includes(h.toLowerCase())&&(o[h]=b);return{tagName:m,attribs:o}}},allowVulnerableTags:!0,parseStyleAttributes:!1,parser:{lowerCaseAttributeNames:!0}},wi=m=>{if(!m)return m;let n=Vs(m),o=/^<!DOCTYPE .*?>/,h=n.match(o),b=Si(n,qs);return h?h[0]+b:b},Ft=m=>Object.keys(m).reduce((n,o)=>{let h=m[o];return typeof h=="string"?n[o]=wi(h):Array.isArray(h)?n[o]=h.map(b=>typeof b=="string"?wi(b):typeof b=="object"?Ft(b):b):typeof h=="object"&&h!==null?n[o]=Ft(h):n[o]=h,n},{});function Ai(m,n=!0,o=console){n&&(o.info(`
|
|
92
|
-
${ye.bold(ye.underline("Discovered workflowId:"))} '${m.workflowId}'`),m.steps.forEach((h,b)=>{let W=b===m.steps.length-1,I=W?"\u2514":"\u251C";o.info(`${I} ${Te.STEP} Discovered stepId: '${h.stepId}' Type: '${h.type}'`),h.providers.forEach((U,z)=>{let pe=z===h.providers.length-1,ke=W?" ":"\u2502",Se=pe?"\u2514":"\u251C";o.info(`${ke} ${Se} ${Te.PROVIDER} Discovered provider: '${U.type}'`)})}))}import{jsonrepair as Ks}from"jsonrepair";function Oi(m){let n=m.trim();return(n.startsWith("{")&&n.endsWith("}")||n.startsWith("[")&&n.endsWith("]"))&&n.length>2}var Ei="__novuJsonString";function Js(m){return typeof m=="object"&&m!==null&&!Array.isArray(m)&&m[Ei]===!0}function wt(m){if(typeof m=="string"){if(!Oi(m))return m;try{let n=JSON.parse(m);return{[Ei]:!0,value:wt(n)}}catch{return m}}if(Array.isArray(m))return m.map(n=>wt(n));if(m&&typeof m=="object"){let n={};for(let[o,h]of Object.entries(m))n[o]=wt(h);return n}return m}function St(m){if(Js(m))return JSON.stringify(St(m.value));if(Array.isArray(m))return m.map(n=>St(n));if(m&&typeof m=="object"){let n={};for(let[o,h]of Object.entries(m))n[o]=St(h);return n}return m}function Gs(m){try{return JSON.parse(m),m}catch{try{return Ks(m)}catch{return m}}}function vi(m){return Object.fromEntries(Object.entries(m).map(([n,o])=>typeof o=="string"?[n,Oi(o)?Gs(o):o]:typeof o=="object"&&o!==null&&!Array.isArray(o)?[n,vi(o)]:[n,o]))}function bi(m){return!(m!=null&&m.data)||typeof m.data!="object"||Array.isArray(m.data)?m:{...m,data:vi(m.data)}}function Ri(){return["development",void 0,"dev"].includes(process.env.NODE_ENV)}var At=class{constructor(n){this.discoveredWorkflows=new Map;this.discoverWorkflowPromises=new Map;this.registeredAgents=new Map;this.version="2.14.0
|
|
92
|
+
${ye.bold(ye.underline("Discovered workflowId:"))} '${m.workflowId}'`),m.steps.forEach((h,b)=>{let W=b===m.steps.length-1,I=W?"\u2514":"\u251C";o.info(`${I} ${Te.STEP} Discovered stepId: '${h.stepId}' Type: '${h.type}'`),h.providers.forEach((U,z)=>{let pe=z===h.providers.length-1,ke=W?" ":"\u2502",Se=pe?"\u2514":"\u251C";o.info(`${ke} ${Se} ${Te.PROVIDER} Discovered provider: '${U.type}'`)})}))}import{jsonrepair as Ks}from"jsonrepair";function Oi(m){let n=m.trim();return(n.startsWith("{")&&n.endsWith("}")||n.startsWith("[")&&n.endsWith("]"))&&n.length>2}var Ei="__novuJsonString";function Js(m){return typeof m=="object"&&m!==null&&!Array.isArray(m)&&m[Ei]===!0}function wt(m){if(typeof m=="string"){if(!Oi(m))return m;try{let n=JSON.parse(m);return{[Ei]:!0,value:wt(n)}}catch{return m}}if(Array.isArray(m))return m.map(n=>wt(n));if(m&&typeof m=="object"){let n={};for(let[o,h]of Object.entries(m))n[o]=wt(h);return n}return m}function St(m){if(Js(m))return JSON.stringify(St(m.value));if(Array.isArray(m))return m.map(n=>St(n));if(m&&typeof m=="object"){let n={};for(let[o,h]of Object.entries(m))n[o]=St(h);return n}return m}function Gs(m){try{return JSON.parse(m),m}catch{try{return Ks(m)}catch{return m}}}function vi(m){return Object.fromEntries(Object.entries(m).map(([n,o])=>typeof o=="string"?[n,Oi(o)?Gs(o):o]:typeof o=="object"&&o!==null&&!Array.isArray(o)?[n,vi(o)]:[n,o]))}function bi(m){return!(m!=null&&m.data)||typeof m.data!="object"||Array.isArray(m.data)?m:{...m,data:vi(m.data)}}function Ri(){return["development",void 0,"dev"].includes(process.env.NODE_ENV)}var At=class{constructor(n){this.discoveredWorkflows=new Map;this.discoverWorkflowPromises=new Map;this.registeredAgents=new Map;this.version="2.14.0";let o=this.buildOptions(n);this.apiUrl=o.apiUrl,this.secretKey=o.secretKey,this.strictAuthentication=o.strictAuthentication,this.verbose=o.verbose,this.logger=o.logger,this.templateEngine=ti()}buildOptions(n){let o={apiUrl:Dt(n==null?void 0:n.apiUrl),secretKey:Wt(n==null?void 0:n.secretKey),strictAuthentication:!Ri(),verbose:Ri(),logger:console};return(n==null?void 0:n.strictAuthentication)!==void 0?o.strictAuthentication=n.strictAuthentication:process.env.NOVU_STRICT_AUTHENTICATION_ENABLED!==void 0&&(o.strictAuthentication=process.env.NOVU_STRICT_AUTHENTICATION_ENABLED==="true"),(n==null?void 0:n.verbose)!==void 0&&(o.verbose=n.verbose),(n==null?void 0:n.logger)!==void 0&&(o.logger=n.logger),o}log(...n){this.verbose&&this.logger.info(...n)}async addWorkflows(n){for(let o of n){if(this.discoveredWorkflows.has(o.id))continue;let h=this.discoverWorkflowPromises.get(o.id);if(h){await h;continue}let b=this.addWorkflow(o);this.discoverWorkflowPromises.set(o.id,b),await b}}addAgents(n){for(let o of n)this.registeredAgents.set(o.id,o)}getAgent(n){return this.registeredAgents.get(n)}async addWorkflow(n){try{let o=await n.discover();Ai(o,this.verbose,this.logger),this.discoveredWorkflows.set(n.id,o)}finally{this.discoverWorkflowPromises.delete(n.id)}}healthCheck(){let n=this.getRegisteredWorkflows(),o=n.length,h=n.reduce((b,W)=>b+W.steps.length,0);return{status:"ok",sdkVersion:"2.14.0",frameworkVersion:"2024-06-26",discovered:{workflows:o,steps:h}}}getWorkflow(n){let o=this.discoveredWorkflows.get(n);if(o)return o;throw new gn(n)}getStep(n,o){let b=this.getWorkflow(n).steps.find(W=>W.stepId===o);if(b)return b;throw new Qr(o)}getRegisteredWorkflows(){return Array.from(this.discoveredWorkflows.values())}discover(){return{workflows:this.getRegisteredWorkflows(),agents:Array.from(this.registeredAgents.keys()).map(n=>({agentId:n}))}}mock(n){try{return di(n)}catch(o){return this.logger.warn("Failed to mock schema, returning empty object:",o),{}}}async validate(n,o,h,b,W,I,U){let z=await It(o,n);if(z.success)return z.data;switch(h){case"event":this.throwInvalidEvent(b,W,z.errors);case"step":this.throwInvalidStep(I,b,W,z.errors);case"provider":this.throwInvalidProvider(I,U,b,W,z.errors);default:throw new Error(`Invalid component: '${h}'`)}}throwInvalidProvider(n,o,h,b,W){throw n?o?h==="output"?new Dr(b,n,o,W):new Error(`Invalid payload type: '${h}'`):new Error("providerId is required"):new Error("stepId is required")}throwInvalidStep(n,o,h,b){if(!n)throw new Error("stepId is required");switch(o){case"output":throw new xr(h,n,b);case"result":throw new Lr(h,n,b);case"controls":throw new Ir(h,n,b);default:throw new Error(`Invalid payload type: '${o}'`)}}throwInvalidEvent(n,o,h){switch(n){case"controls":throw new Pr(o,h);case"payload":throw new dn(o,h);default:throw new Error(`Invalid payload type: '${n}'`)}}executeStepFactory(n,o,h){return async(b,W,I)=>{if(h())return;let U=this.getStep(n.workflowId,b),z=n.action==="preview";if(!z&&b===n.stepId){let be=await this.createStepControls(U,n),Pe=await this.compileControls(be,n);if(await this.shouldSkip(I==null?void 0:I.skip,Pe))return o({options:{skip:!0},outputs:{},providers:{}}),{}}let pe=this.previewStep.bind(this),ke=this.executeStep.bind(this),le=await(z?pe:ke)(n,{...U,providers:U.providers.map(be=>{var Be;let Pe=(Be=I==null?void 0:I.providers)==null?void 0:Be[be.type];if(!Pe)throw new jr(be.type);return{...be,resolve:Pe}}),resolve:W});return this.shouldSanitize({stepType:U.type,options:I})&&(le={...le,outputs:Ft(le.outputs)}),b===n.stepId&&o({...le,options:{skip:!1}}),le.outputs}}shouldSanitize({stepType:n,options:o}){return(o==null?void 0:o.disableOutputSanitization)===!0?!1:["email","in_app"].includes(n)}async shouldSkip(n,o){return n?n(o):!1}async executeWorkflow(n){let b=`${{execute:"Executing",preview:"Previewing"}[n.action]||n.action} workflowId:`;this.log(`
|
|
93
93
|
${ye.bold(ye.underline(b))} '${n.workflowId}'`);let W=this.getWorkflow(n.workflowId),I=process.hrtime(),U={outputs:{},providers:{},options:{skip:!1}},z,pe=!1,ke=new Promise(je=>{z=je}),Se=je=>{if(pe)throw new Error("setResult can only be called once per workflow execution");z(),pe=!0,U=je},le=()=>pe,be;try{if(n.action==="execute"&&!n.payload)throw new dn(n.workflowId,{message:"Event `payload` is required"});let je=await this.createExecutionPayload(n,W),Fe={...n,payload:je};await Promise.race([ke,W.execute({payload:je,env:n.env,controls:{},subscriber:n.subscriber,context:n.context,step:{email:this.executeStepFactory(Fe,Se,le),sms:this.executeStepFactory(Fe,Se,le),inApp:this.executeStepFactory(Fe,Se,le),digest:this.executeStepFactory(Fe,Se,le),delay:this.executeStepFactory(Fe,Se,le),push:this.executeStepFactory(Fe,Se,le),chat:this.executeStepFactory(Fe,Se,le),custom:this.executeStepFactory(Fe,Se,le),throttle:this.executeStepFactory(Fe,Se,le),tool:this.executeStepFactory(Fe,Se,le)}})])}catch(je){be=je}let Pe=process.hrtime(I),Be=Pe[0],We=Pe[1],et=Be*1e3+We/1e6,Ut=be?Te.ERROR:Te.SUCCESS,Ot={execute:"Executed",preview:"Previewed"}[n.action]||n.action;if(this.log(`${Ut} ${Ot} workflowId: \`${n.workflowId}\``),this.prettyPrintExecute(n,et,be),be)throw be;return{outputs:U.outputs,providers:U.providers,options:U.options,metadata:{status:"success",error:!1,duration:et}}}async createExecutionPayload(n,o){let{payload:h}=n;if(n.action==="preview"){let W=this.mock(o.payload.schema);h=Object.assign(W,h)}return await this.validate(h,o.payload.unknownSchema,"event","payload",n.workflowId)}prettyPrintExecute(n,o,h){if(!this.verbose)return;let b=h?Te.ERROR:Te.SUCCESS,I={execute:"Executed",preview:"Previewed"}[n.action]||n.action,U=h?"Failed to execute":I,z=h?ye.error:ye.success,pe=`${b} ${U} workflowId: '${n.workflowId}`;this.logger.info(`
|
|
94
94
|
${ye.bold(z(pe))}'
|
|
95
95
|
\u251C ${Te.STEP} stepId: '${n.stepId}'
|
|
96
96
|
\u251C ${Te.ACTION} action: '${n.action}'
|
|
97
97
|
\u2514 ${Te.DURATION} duration: '${o.toFixed(2)}ms'
|
|
98
|
-
`)}async executeProviders(n,o,h,b){return o.providers.reduce(async(W,I)=>{let U=await W,z=await this.runProvider(n,o,I,h,b);return{...U,[I.type]:z}},Promise.resolve({}))}async runProvider(n,o,h,b,W){let I=n.action==="preview";if(n.stepId!==o.stepId)return I?(this.log(` ${Te.MOCK} Mocked provider: \`${h.type}\``),this.mock(h.outputs.schema)):(this.log(` ${Te.HYDRATED} Hydrated provider: \`${h.type}\``),{});try{return await this.resolveProviderOutput(n,o,h,W,b)}catch(U){if(this.log(` ${Te.ERROR} Failed to execute provider: \`${h.type}\``),I)return this.log(` ${Te.MOCK} Mocked provider: \`${h.type}\``),this.mock(h.outputs.schema);throw new Yr(h.type,n.action,U)}}async resolveProviderOutput(n,o,h,b,W){let I=await h.resolve({controls:b,outputs:W}),U=await this.validate(I,h.outputs.unknownSchema,"step","output",n.workflowId,o.stepId,h.type);return this.log(` ${Te.SUCCESS} Executed provider: \`${h.type}\``),{...U,_passthrough:I._passthrough}}async executeStep(n,o){if(n.stepId===o.stepId)try{let h=await this.createStepControls(o,n),b=await this.compileControls(h,n),W=await o.resolve(b),I=await this.normalizeChatCardOutput(o,W),U=await this.validate(I,o.outputs.unknownSchema,"step","output",n.workflowId,o.stepId),z=await this.executeProviders(n,o,U,b);return this.log(` ${Te.SUCCESS} Executed stepId: \`${o.stepId}\``),{outputs:U,providers:z}}catch(h){throw this.log(` ${Te.ERROR} Failed to execute stepId: \`${o.stepId}\``),ht(h)?h:new hn(o.stepId,n.action,h)}else try{let h=this.getStepState(n,o.stepId);if(h){let b=await this.validate(h.outputs,o.results.unknownSchema,"step","result",n.workflowId,o.stepId);return this.log(` ${Te.HYDRATED} Hydrated stepId: \`${o.stepId}\``),{outputs:b,providers:await this.executeProviders(n,o,b,{})}}else throw new Nr(n.workflowId,o.stepId)}catch(h){throw this.log(` ${Te.ERROR} Failed to hydrate stepId: \`${o.stepId}\``),h}}async normalizeChatCardOutput(n,o){if(n.type!=="chat"||(o==null?void 0:o.card)==null)return o;let h=await Zr(o.card);return h?{...o,card:h}:o}async compileControls(n,o){var h;try{let b=wt(n),W=this.preprocessTranslationPatterns(JSON.stringify(b));W=this.preprocessFilterTranslationArgs(W);let I=this.templateEngine.parse(W),U=this.getWorkflow(o.workflowId),z={workflow:{workflowId:U.workflowId,name:U.name,description:U.description,tags:U.tags,severity:U.severity},payload:o.payload,subscriber:o.subscriber,...o.actor&&{actor:o.actor},context:o.context,steps:Xs(o.state),env:(h=o.env)!=null?h:{}},pe=await this.templateEngine.render(I,z),ke=this.postprocessTranslationMarkers(pe),Se=zs(ke),le=JSON.parse(Se),be=St(le);return bi(be)}catch(b){throw new $r(o.workflowId,o.stepId,b)}}preprocessTranslationPatterns(n){return n.replace(/\{\{\s*t\.([\p{L}\p{N}_.-]+)\s*\}\}/gu,"[T:$1]")}preprocessFilterTranslationArgs(n){return n.replace(/'t\.([\p{L}\p{N}_.-]+)'/gu,"'[T:$1]'")}postprocessTranslationMarkers(n){return n.replace(/\[T:([\p{L}\p{N}_.-]+)\]/gu,"{{t.$1}}")}async createStepControls(n,o){return await this.validate(o.controls,n.controls.unknownSchema,"step","controls",o.workflowId,n.stepId)}async previewStep(n,o){try{return await this.constructStepForPreview(n,o)}catch(h){throw this.log(` ${Te.ERROR} Failed to preview stepId: \`${o.stepId}\``),ht(h)?h:new hn(o.stepId,n.action,h)}}async constructStepForPreview(n,o){return n.stepId===o.stepId?await this.previewRequiredStep(o,n):await this.extractMockDataForPreviousSteps(n,o)}async extractMockDataForPreviousSteps(n,o){let h={},b=this.getStepState(n,o.stepId),W=this.mock(o.results.schema);return{outputs:ei(W,(b==null?void 0:b.outputs)||{}),providers:await this.executeProviders(n,o,h,{})}}async previewRequiredStep(n,o){let h=await this.createStepControls(n,o),b=await this.compileControls(h,o),W=await n.resolve(b),I=await this.normalizeChatCardOutput(n,W),U=await this.validate(I,n.outputs.unknownSchema,"step","output",o.workflowId,n.stepId);return this.log(` ${Te.MOCK} Mocked stepId: \`${n.stepId}\``),{outputs:U,providers:await this.executeProviders(o,n,U,b)}}getStepState(n,o){return n.state.find(h=>h.stepId===o)}getStepCode(n,o){return{code:this.getStep(n,o).resolve.toString()}}getWorkflowCode(n){return{code:this.getWorkflow(n).execute.toString()}}getCode(n,o){let h;if(n)o?h=this.getStepCode(n,o):h=this.getWorkflowCode(n);else throw new gn(n);return h}};function Xs(m){let n={};for(let o of m)n[o.stepId]=o.outputs;return n}function Zs(m){return!!(typeof m=="string"||typeof m=="object"&&m!==null&&Xr(m)||typeof m=="object"&&m!==null&&("markdown"in m||"card"in m||"files"in m))}function eo(m,n){return m}var Ti="tool_approval:";function to(m){if(!(m!=null&&m.startsWith(Ti)))return null;let n=m.slice(Ti.length);return n.length>0?n:null}async function ki(m,n){await m.reply(n.content,{files:n.files,quoteReply:n.quoteReply})}async function Xe(m,n){if(!(n instanceof ri||n===void 0)){if(mn(n)){await ki(m,n);return}await m.reply(n)}}async function no(m,n){return ii(n)?!0:mn(n)?(await ki(m,n),!0):Zs(n)?(await m.reply(n),!0):!1}function ro(m,n){var o;for(let h of m){let b=h.toolData;if(h.type==="tool_approval_request"&&(b==null?void 0:b.approvalId)===n&&b.toolCallId)return{approvalId:b.approvalId,toolCallId:b.toolCallId,name:(o=b.toolName)!=null?o:"tool",input:b.input}}}async function _i(m){var W;let n=new oi(m.bridge,m.secretKey,m.agent.handlers.toolApproval),{agent:o,event:h,logger:b}=m;try{n.queueRunStart(),await so(o,h,n),await n.flush(),await n.emitRunFinish({outcome:"completed"})}catch(I){let U=xt(I);b==null||b.error(`[agent:${o.id}] Turn failed (${h}): ${U.message}`,(W=U.cause)!=null?W:U);let z=!1;if(o.handlers.onError)try{let pe=await o.handlers.onError(U,eo(n,h));z=await no(n,pe)}catch(pe){b==null||b.error(`[agent:${o.id}] onError failed:`,pe)}z?await n.emitRunFinish({outcome:"completed"}):await n.reportTurnError(U.message)}finally{try{await n.typing.stop(),await n.flush()}catch{}}}async function io(m,n){var U,z,pe,ke,Se,le;let o=to((U=n.humanResponse)==null?void 0:U.requestId),h=si((z=n.action)==null?void 0:z.id),b=o!=null?o:h==null?void 0:h.approvalId,W=o?((pe=n.humanResponse)==null?void 0:pe.status)==="approved"&&!n.humanResponse.expired:h==null?void 0:h.approved;if(b&&W!==void 0&&m.handlers.onToolApproval){let be=ro(n.history,b),Pe=be?{id:be.toolCallId,name:be.name,input:be.input}:{id:b,name:""},Be=n.createReplyHandle((Se=(ke=n.action)==null?void 0:ke.sourceMessageId)!=null?Se:""),We={toolCall:Pe,approved:W,approvalMessage:Be};m.userOnToolApproval===!1&&(await n.typing(),(le=n.action)!=null&&le.sourceMessageId&&await Be.delete());let et=await m.handlers.onToolApproval(We,n);await Xe(n,et);return}let I=n.action;I&&m.handlers.onAction&&await Xe(n,await m.handlers.onAction(I,n))}async function so(m,n,o){switch(n){case"onMessage":{let h=o.message;h&&await Xe(o,await m.handlers.onMessage(h,o));break}case"onMessageUpdated":{let h=o.message;h&&m.handlers.onMessageUpdated&&await Xe(o,await m.handlers.onMessageUpdated(h,o));break}case"onMessageDeleted":{let h=o.message;h&&m.handlers.onMessageDeleted&&await Xe(o,await m.handlers.onMessageDeleted(h,o));break}case"onAction":{await io(m,o);break}case"onReaction":{let h=o.reaction;h&&m.handlers.onReaction&&await Xe(o,await m.handlers.onReaction(h,o));break}case"onResolve":m.handlers.onResolve&&await Xe(o,await m.handlers.onResolve(o));break;default:throw new gt(n,ni)}}function Ci(m){let n={};for(let b of m.split(",")){let W=b.trim();if(!W)continue;let I=W.indexOf("=");if(I<=0)continue;let U=W.slice(0,I),z=W.slice(I+1);U&&z&&!(U in n)&&(n[U]=z)}let o=n.t,h=o!==void 0?Number(o):Number.NaN;return{t:Number.isFinite(h)?h:void 0,v1:n.v1}}var En=class{constructor(n){this.handler=n.handler,this.client=n.client?n.client:new At,this.workflows=n.workflows||[],this.agents=n.agents||[],this.http=$t(this.client.secretKey,this.client.apiUrl),this.frameworkName=n.frameworkName,this.hmacEnabled=this.client.strictAuthentication,this.waitUntil=n.waitUntil,this.client.addAgents(this.agents)}createHandler(){return async(...n)=>{await this.client.addWorkflows(this.workflows);let o=await this.handler(...n),h=await this.handleAction({actions:o});return o.transformResponse(h)}}getStaticHeaders(){let n=`novu-framework:v${this.client.version}`;return{"content-type":"application/json","access-control-allow-origin":"*","access-control-allow-private-network":"true","access-control-allow-methods":"GET, POST","access-control-allow-headers":"*","access-control-max-age":"604800","novu-framework-version":"2024-06-26","novu-framework-sdk":"2.14.0-rc.5ea799b171","novu-framework-server":this.frameworkName,"user-agent":n}}createResponse(n,o){return{status:n,body:JSON.stringify(o),headers:{...this.getStaticHeaders()}}}createError(n){return{status:n.statusCode,body:JSON.stringify({message:n.message,data:n.data,code:n.code}),headers:this.getStaticHeaders()}}async handleAction({actions:n}){var Se;let o=await n.url(),h=await n.method(),b=o.searchParams.get("action")||"health-check",W=o.searchParams.get("workflowId")||"",I=o.searchParams.get("stepId")||"",U=o.searchParams.get("agentId")||"",z=o.searchParams.get("event")||"",pe=await n.headers("novu-signature")||"",ke={};try{h==="POST"&&(ke=await n.body())}catch{}try{b!=="health-check"&&await this.validateHmac(ke,pe);let le=this.getPostActionMap(ke,W,I,b,U,z,(Se=this.waitUntil)!=null?Se:n.waitUntil),be=this.getGetActionMap(W,I);if(h==="POST")return await this.handlePostAction(b,le);if(h==="GET")return await this.handleGetAction(b,be);if(h==="OPTIONS")return this.createResponse(200,{})}catch(le){return this.handleError(le)}return this.createError(new Hr(h))}getPostActionMap(n,o,h,b,W,I,U){return{trigger:this.triggerAction({workflowId:o,...n}),execute:async()=>{let z=await this.client.executeWorkflow({...n,workflowId:o,stepId:h,action:b});return this.createResponse(200,z)},preview:async()=>{let z=await this.client.executeWorkflow({...n,workflowId:o,stepId:h,action:b});return this.createResponse(200,z)},"agent-event":async()=>{let z=this.client.getAgent(W);if(!z)return this.createResponse(404,{error:`Agent '${W}' not registered`});let pe=_i({agent:z,event:I,bridge:n,secretKey:this.client.secretKey,logger:this.client.logger});return U?U(pe):this.warnOnUnprotectedServerlessRuntime(W),this.createResponse(200,{status:"ack"})}}}warnOnUnprotectedServerlessRuntime(n){let o;try{process.env.AWS_LAMBDA_FUNCTION_NAME?o="AWS Lambda":process.env.VERCEL&&(o="Vercel")}catch{}o&&this.client.logger.warn(`[agent:${n}] Agent event acknowledged without a \`waitUntil\` primitive while running on ${o}. The runtime may freeze once the response is sent, silently dropping the rest of the agent turn. Pass \`waitUntil\` to \`serve()\` (e.g. \`serve({ agents, waitUntil })\`) to extend the invocation lifetime.`)}triggerAction(n){return async()=>{let o={name:n.workflowId,to:n.to,payload:(n==null?void 0:n.payload)||{},transactionId:n.transactionId,overrides:n.overrides||{},...n.actor&&{actor:n.actor},...n.bridgeUrl&&{bridgeUrl:n.bridgeUrl},...n.controls&&{controls:n.controls},...n.context&&{context:n.context},...n.agentId!==void 0&&{agentId:n.agentId}},h=await this.http.post("/events/trigger",o);return this.createResponse(200,h)}}getGetActionMap(n,o){return{discover:async()=>{let h=await this.client.discover();return this.createResponse(200,h)},"health-check":async()=>{let h=await this.client.healthCheck();return this.createResponse(200,h)},code:async()=>{let h=await this.client.getCode(n,o);return this.createResponse(200,h)}}}async handlePostAction(n,o){if(Object.values(Nt).includes(n)){let h=o[n];return h()}else throw new gt(n,Nt)}async handleGetAction(n,o){if(Object.values(fn).includes(n)){let h=o[n];return h()}else throw new gt(n,fn)}handleError(n){if(ht(n))return n.statusCode>=500&&this.client.logger.error(n),this.createError(n);if(Fr(n))return this.createError(n);{let o=new Pt(n);return this.client.logger.error(o),this.createError(o)}}async validateHmac(n,o){if(!this.hmacEnabled)return;if(!o)throw new qr;if(!this.client.secretKey)throw new Gr;let h=Ci(o);if(!h.v1||h.t===void 0)throw new Kr;let b=Date.now();if(h.t<b-3e5||h.t>b+3e5)throw new Jr;let W=await hi(this.client.secretKey,`${h.t}.${JSON.stringify(n)}`);if(!gi(W,h.v1))throw new Vr}};function Mi(m,n){if(!m)throw new Error("agent() requires a non-empty agentId");if(!(n!=null&&n.onMessage))throw new Error(`agent('${m}') requires an onMessage handler`);return{id:m,handlers:n,userOnToolApproval:typeof n.onToolApproval=="function"}}async function ot(m,n,o){if(m.steps.some(h=>h.stepId===n))throw new zr(n);m.steps.push(o)}async function Ht(m,n,o,h){return async(b,W,I={})=>{let U=(I==null?void 0:I.controlSchema)||Le;return await ot(m,b,{stepId:b,type:n,controls:{schema:await Me(U),unknownSchema:U},outputs:{schema:await Me(o),unknownSchema:o},results:{schema:await Me(h),unknownSchema:h},resolve:W,code:W.toString(),options:I,providers:[]}),{_ctx:{timestamp:Date.now(),state:{status:"pending",error:!1}}}}}async function Ni(m,n,o){let h=yn[n],b=Object.entries(o).map(async([W,I])=>{let U=h[W];return{type:W,code:I.toString(),resolve:I,outputs:{schema:await Me(U.output),unknownSchema:U.output}}});m.providers.push(...await Promise.all(b))}async function Ze(m,n,o,h){return async(b,W,I={})=>{let U=(I==null?void 0:I.controlSchema)||Le,z={stepId:b,type:n,controls:{schema:await Me(U),unknownSchema:U},outputs:{schema:await Me(o),unknownSchema:o},results:{schema:await Me(h),unknownSchema:h},resolve:W,code:W.toString(),options:I,providers:[]};return await ot(m,b,z),Object.keys(I.providers||{}).length>0&&await Ni(z,n,I.providers||{}),{_ctx:{timestamp:Date.now(),state:{status:"pending",error:!1}}}}}async function vn(m,n){return async(o,h,b={})=>{let W=(b==null?void 0:b.controlSchema)||Le,I=(b==null?void 0:b.outputSchema)||Le,[U,z]=await Promise.all([Me(W),Me(I)]);return await ot(m,o,{stepId:o,type:n,controls:{schema:U,unknownSchema:W},outputs:{schema:z,unknownSchema:I},results:{schema:z,unknownSchema:I},resolve:h,code:h.toString(),options:b,providers:[]}),{_ctx:{timestamp:Date.now(),state:{status:"pending",error:!1}}}}}var co={email:"email",sms:"sms",push:"push",inApp:"in_app",chat:"chat",tool:"tool"};function Pi(m){if(!m)return{};let n={};return m.all&&(n.all=m.all),Object.entries(m.channels||{}).forEach(([o,h])=>{let b=co[o];b&&(n.channels||(n.channels={}),n.channels[b]=h)}),n}function fo(m,n,o){let h=o||{};return{id:m,trigger:async I=>{let U=$t(Wt(I.secretKey),Dt(I.apiUrl)),z=I.payload||{},pe;if(h.payloadSchema){let Pe=await It(h.payloadSchema,z);if(Pe.success===!1)throw new Wr(m,Pe.errors);pe=Pe.data}else pe=I.payload;let ke=await mi(),Se={name:m,to:I.to,payload:{...pe},...I.transactionId&&{transactionId:I.transactionId},...I.overrides&&{overrides:I.overrides},...I.actor&&{actor:I.actor},...I.context&&{context:I.context},...I.agentId!==void 0&&{agentId:I.agentId},...ke&&{bridgeUrl:ke}},le=await U.post("/events/trigger",Se);return{cancel:async()=>U.delete(`/events/trigger/${le.transactionId}`),data:le}},discover:async()=>{var U;let I={workflowId:m,severity:(U=h.severity)!=null?U:"none",steps:[],code:n.toString(),payload:{schema:await Me(h.payloadSchema||Le),unknownSchema:h.payloadSchema||Le},controls:{schema:await Me(h.controlSchema||Le),unknownSchema:h.controlSchema||Le},env:{schema:await Me(h.envSchema||Le),unknownSchema:h.envSchema||Le},tags:h.tags||[],preferences:Pi(h.preferences),name:h.name,description:h.description,execute:n};return await n({payload:{},subscriber:{},env:{},controls:{},context:{},step:{push:await Ze(I,"push",De.push.output,De.push.result),chat:await Ze(I,"chat",De.chat.output,De.chat.result),email:await Ze(I,"email",De.email.output,De.email.result),sms:await Ze(I,"sms",De.sms.output,De.sms.result),inApp:await Ze(I,"in_app",De.in_app.output,De.in_app.result),tool:await Ze(I,"tool",De.tool.output,De.tool.result),digest:await Ht(I,"digest",Sn.output,Sn.result),delay:await Ht(I,"delay",wn.output,wn.result),throttle:await Ht(I,"throttle",An.output,An.result),custom:await vn(I,"custom"),httpRequest:await vn(I,"http_request")}}),I}}}export{Mo as a,At as b,En as c,Mi as d,fo as e};
|
|
98
|
+
`)}async executeProviders(n,o,h,b){return o.providers.reduce(async(W,I)=>{let U=await W,z=await this.runProvider(n,o,I,h,b);return{...U,[I.type]:z}},Promise.resolve({}))}async runProvider(n,o,h,b,W){let I=n.action==="preview";if(n.stepId!==o.stepId)return I?(this.log(` ${Te.MOCK} Mocked provider: \`${h.type}\``),this.mock(h.outputs.schema)):(this.log(` ${Te.HYDRATED} Hydrated provider: \`${h.type}\``),{});try{return await this.resolveProviderOutput(n,o,h,W,b)}catch(U){if(this.log(` ${Te.ERROR} Failed to execute provider: \`${h.type}\``),I)return this.log(` ${Te.MOCK} Mocked provider: \`${h.type}\``),this.mock(h.outputs.schema);throw new Yr(h.type,n.action,U)}}async resolveProviderOutput(n,o,h,b,W){let I=await h.resolve({controls:b,outputs:W}),U=await this.validate(I,h.outputs.unknownSchema,"step","output",n.workflowId,o.stepId,h.type);return this.log(` ${Te.SUCCESS} Executed provider: \`${h.type}\``),{...U,_passthrough:I._passthrough}}async executeStep(n,o){if(n.stepId===o.stepId)try{let h=await this.createStepControls(o,n),b=await this.compileControls(h,n),W=await o.resolve(b),I=await this.normalizeChatCardOutput(o,W),U=await this.validate(I,o.outputs.unknownSchema,"step","output",n.workflowId,o.stepId),z=await this.executeProviders(n,o,U,b);return this.log(` ${Te.SUCCESS} Executed stepId: \`${o.stepId}\``),{outputs:U,providers:z}}catch(h){throw this.log(` ${Te.ERROR} Failed to execute stepId: \`${o.stepId}\``),ht(h)?h:new hn(o.stepId,n.action,h)}else try{let h=this.getStepState(n,o.stepId);if(h){let b=await this.validate(h.outputs,o.results.unknownSchema,"step","result",n.workflowId,o.stepId);return this.log(` ${Te.HYDRATED} Hydrated stepId: \`${o.stepId}\``),{outputs:b,providers:await this.executeProviders(n,o,b,{})}}else throw new Nr(n.workflowId,o.stepId)}catch(h){throw this.log(` ${Te.ERROR} Failed to hydrate stepId: \`${o.stepId}\``),h}}async normalizeChatCardOutput(n,o){if(n.type!=="chat"||(o==null?void 0:o.card)==null)return o;let h=await Zr(o.card);return h?{...o,card:h}:o}async compileControls(n,o){var h;try{let b=wt(n),W=this.preprocessTranslationPatterns(JSON.stringify(b));W=this.preprocessFilterTranslationArgs(W);let I=this.templateEngine.parse(W),U=this.getWorkflow(o.workflowId),z={workflow:{workflowId:U.workflowId,name:U.name,description:U.description,tags:U.tags,severity:U.severity},payload:o.payload,subscriber:o.subscriber,...o.actor&&{actor:o.actor},context:o.context,steps:Xs(o.state),env:(h=o.env)!=null?h:{}},pe=await this.templateEngine.render(I,z),ke=this.postprocessTranslationMarkers(pe),Se=zs(ke),le=JSON.parse(Se),be=St(le);return bi(be)}catch(b){throw new $r(o.workflowId,o.stepId,b)}}preprocessTranslationPatterns(n){return n.replace(/\{\{\s*t\.([\p{L}\p{N}_.-]+)\s*\}\}/gu,"[T:$1]")}preprocessFilterTranslationArgs(n){return n.replace(/'t\.([\p{L}\p{N}_.-]+)'/gu,"'[T:$1]'")}postprocessTranslationMarkers(n){return n.replace(/\[T:([\p{L}\p{N}_.-]+)\]/gu,"{{t.$1}}")}async createStepControls(n,o){return await this.validate(o.controls,n.controls.unknownSchema,"step","controls",o.workflowId,n.stepId)}async previewStep(n,o){try{return await this.constructStepForPreview(n,o)}catch(h){throw this.log(` ${Te.ERROR} Failed to preview stepId: \`${o.stepId}\``),ht(h)?h:new hn(o.stepId,n.action,h)}}async constructStepForPreview(n,o){return n.stepId===o.stepId?await this.previewRequiredStep(o,n):await this.extractMockDataForPreviousSteps(n,o)}async extractMockDataForPreviousSteps(n,o){let h={},b=this.getStepState(n,o.stepId),W=this.mock(o.results.schema);return{outputs:ei(W,(b==null?void 0:b.outputs)||{}),providers:await this.executeProviders(n,o,h,{})}}async previewRequiredStep(n,o){let h=await this.createStepControls(n,o),b=await this.compileControls(h,o),W=await n.resolve(b),I=await this.normalizeChatCardOutput(n,W),U=await this.validate(I,n.outputs.unknownSchema,"step","output",o.workflowId,n.stepId);return this.log(` ${Te.MOCK} Mocked stepId: \`${n.stepId}\``),{outputs:U,providers:await this.executeProviders(o,n,U,b)}}getStepState(n,o){return n.state.find(h=>h.stepId===o)}getStepCode(n,o){return{code:this.getStep(n,o).resolve.toString()}}getWorkflowCode(n){return{code:this.getWorkflow(n).execute.toString()}}getCode(n,o){let h;if(n)o?h=this.getStepCode(n,o):h=this.getWorkflowCode(n);else throw new gn(n);return h}};function Xs(m){let n={};for(let o of m)n[o.stepId]=o.outputs;return n}function Zs(m){return!!(typeof m=="string"||typeof m=="object"&&m!==null&&Xr(m)||typeof m=="object"&&m!==null&&("markdown"in m||"card"in m||"files"in m))}function eo(m,n){return m}var Ti="tool_approval:";function to(m){if(!(m!=null&&m.startsWith(Ti)))return null;let n=m.slice(Ti.length);return n.length>0?n:null}async function ki(m,n){await m.reply(n.content,{files:n.files,quoteReply:n.quoteReply})}async function Xe(m,n){if(!(n instanceof ri||n===void 0)){if(mn(n)){await ki(m,n);return}await m.reply(n)}}async function no(m,n){return ii(n)?!0:mn(n)?(await ki(m,n),!0):Zs(n)?(await m.reply(n),!0):!1}function ro(m,n){var o;for(let h of m){let b=h.toolData;if(h.type==="tool_approval_request"&&(b==null?void 0:b.approvalId)===n&&b.toolCallId)return{approvalId:b.approvalId,toolCallId:b.toolCallId,name:(o=b.toolName)!=null?o:"tool",input:b.input}}}async function _i(m){var W;let n=new oi(m.bridge,m.secretKey,m.agent.handlers.toolApproval),{agent:o,event:h,logger:b}=m;try{n.queueRunStart(),await so(o,h,n),await n.flush(),await n.emitRunFinish({outcome:"completed"})}catch(I){let U=xt(I);b==null||b.error(`[agent:${o.id}] Turn failed (${h}): ${U.message}`,(W=U.cause)!=null?W:U);let z=!1;if(o.handlers.onError)try{let pe=await o.handlers.onError(U,eo(n,h));z=await no(n,pe)}catch(pe){b==null||b.error(`[agent:${o.id}] onError failed:`,pe)}z?await n.emitRunFinish({outcome:"completed"}):await n.reportTurnError(U.message)}finally{try{await n.typing.stop(),await n.flush()}catch{}}}async function io(m,n){var U,z,pe,ke,Se,le;let o=to((U=n.humanResponse)==null?void 0:U.requestId),h=si((z=n.action)==null?void 0:z.id),b=o!=null?o:h==null?void 0:h.approvalId,W=o?((pe=n.humanResponse)==null?void 0:pe.status)==="approved"&&!n.humanResponse.expired:h==null?void 0:h.approved;if(b&&W!==void 0&&m.handlers.onToolApproval){let be=ro(n.history,b),Pe=be?{id:be.toolCallId,name:be.name,input:be.input}:{id:b,name:""},Be=n.createReplyHandle((Se=(ke=n.action)==null?void 0:ke.sourceMessageId)!=null?Se:""),We={toolCall:Pe,approved:W,approvalMessage:Be};m.userOnToolApproval===!1&&(await n.typing(),(le=n.action)!=null&&le.sourceMessageId&&await Be.delete());let et=await m.handlers.onToolApproval(We,n);await Xe(n,et);return}let I=n.action;I&&m.handlers.onAction&&await Xe(n,await m.handlers.onAction(I,n))}async function so(m,n,o){switch(n){case"onMessage":{let h=o.message;h&&await Xe(o,await m.handlers.onMessage(h,o));break}case"onMessageUpdated":{let h=o.message;h&&m.handlers.onMessageUpdated&&await Xe(o,await m.handlers.onMessageUpdated(h,o));break}case"onMessageDeleted":{let h=o.message;h&&m.handlers.onMessageDeleted&&await Xe(o,await m.handlers.onMessageDeleted(h,o));break}case"onAction":{await io(m,o);break}case"onReaction":{let h=o.reaction;h&&m.handlers.onReaction&&await Xe(o,await m.handlers.onReaction(h,o));break}case"onResolve":m.handlers.onResolve&&await Xe(o,await m.handlers.onResolve(o));break;default:throw new gt(n,ni)}}function Ci(m){let n={};for(let b of m.split(",")){let W=b.trim();if(!W)continue;let I=W.indexOf("=");if(I<=0)continue;let U=W.slice(0,I),z=W.slice(I+1);U&&z&&!(U in n)&&(n[U]=z)}let o=n.t,h=o!==void 0?Number(o):Number.NaN;return{t:Number.isFinite(h)?h:void 0,v1:n.v1}}var En=class{constructor(n){this.handler=n.handler,this.client=n.client?n.client:new At,this.workflows=n.workflows||[],this.agents=n.agents||[],this.http=$t(this.client.secretKey,this.client.apiUrl),this.frameworkName=n.frameworkName,this.hmacEnabled=this.client.strictAuthentication,this.waitUntil=n.waitUntil,this.client.addAgents(this.agents)}createHandler(){return async(...n)=>{await this.client.addWorkflows(this.workflows);let o=await this.handler(...n),h=await this.handleAction({actions:o});return o.transformResponse(h)}}getStaticHeaders(){let n=`novu-framework:v${this.client.version}`;return{"content-type":"application/json","access-control-allow-origin":"*","access-control-allow-private-network":"true","access-control-allow-methods":"GET, POST","access-control-allow-headers":"*","access-control-max-age":"604800","novu-framework-version":"2024-06-26","novu-framework-sdk":"2.14.0","novu-framework-server":this.frameworkName,"user-agent":n}}createResponse(n,o){return{status:n,body:JSON.stringify(o),headers:{...this.getStaticHeaders()}}}createError(n){return{status:n.statusCode,body:JSON.stringify({message:n.message,data:n.data,code:n.code}),headers:this.getStaticHeaders()}}async handleAction({actions:n}){var Se;let o=await n.url(),h=await n.method(),b=o.searchParams.get("action")||"health-check",W=o.searchParams.get("workflowId")||"",I=o.searchParams.get("stepId")||"",U=o.searchParams.get("agentId")||"",z=o.searchParams.get("event")||"",pe=await n.headers("novu-signature")||"",ke={};try{h==="POST"&&(ke=await n.body())}catch{}try{b!=="health-check"&&await this.validateHmac(ke,pe);let le=this.getPostActionMap(ke,W,I,b,U,z,(Se=this.waitUntil)!=null?Se:n.waitUntil),be=this.getGetActionMap(W,I);if(h==="POST")return await this.handlePostAction(b,le);if(h==="GET")return await this.handleGetAction(b,be);if(h==="OPTIONS")return this.createResponse(200,{})}catch(le){return this.handleError(le)}return this.createError(new Hr(h))}getPostActionMap(n,o,h,b,W,I,U){return{trigger:this.triggerAction({workflowId:o,...n}),execute:async()=>{let z=await this.client.executeWorkflow({...n,workflowId:o,stepId:h,action:b});return this.createResponse(200,z)},preview:async()=>{let z=await this.client.executeWorkflow({...n,workflowId:o,stepId:h,action:b});return this.createResponse(200,z)},"agent-event":async()=>{let z=this.client.getAgent(W);if(!z)return this.createResponse(404,{error:`Agent '${W}' not registered`});let pe=_i({agent:z,event:I,bridge:n,secretKey:this.client.secretKey,logger:this.client.logger});return U?U(pe):this.warnOnUnprotectedServerlessRuntime(W),this.createResponse(200,{status:"ack"})}}}warnOnUnprotectedServerlessRuntime(n){let o;try{process.env.AWS_LAMBDA_FUNCTION_NAME?o="AWS Lambda":process.env.VERCEL&&(o="Vercel")}catch{}o&&this.client.logger.warn(`[agent:${n}] Agent event acknowledged without a \`waitUntil\` primitive while running on ${o}. The runtime may freeze once the response is sent, silently dropping the rest of the agent turn. Pass \`waitUntil\` to \`serve()\` (e.g. \`serve({ agents, waitUntil })\`) to extend the invocation lifetime.`)}triggerAction(n){return async()=>{let o={name:n.workflowId,to:n.to,payload:(n==null?void 0:n.payload)||{},transactionId:n.transactionId,overrides:n.overrides||{},...n.actor&&{actor:n.actor},...n.bridgeUrl&&{bridgeUrl:n.bridgeUrl},...n.controls&&{controls:n.controls},...n.context&&{context:n.context},...n.agentId!==void 0&&{agentId:n.agentId}},h=await this.http.post("/events/trigger",o);return this.createResponse(200,h)}}getGetActionMap(n,o){return{discover:async()=>{let h=await this.client.discover();return this.createResponse(200,h)},"health-check":async()=>{let h=await this.client.healthCheck();return this.createResponse(200,h)},code:async()=>{let h=await this.client.getCode(n,o);return this.createResponse(200,h)}}}async handlePostAction(n,o){if(Object.values(Nt).includes(n)){let h=o[n];return h()}else throw new gt(n,Nt)}async handleGetAction(n,o){if(Object.values(fn).includes(n)){let h=o[n];return h()}else throw new gt(n,fn)}handleError(n){if(ht(n))return n.statusCode>=500&&this.client.logger.error(n),this.createError(n);if(Fr(n))return this.createError(n);{let o=new Pt(n);return this.client.logger.error(o),this.createError(o)}}async validateHmac(n,o){if(!this.hmacEnabled)return;if(!o)throw new qr;if(!this.client.secretKey)throw new Gr;let h=Ci(o);if(!h.v1||h.t===void 0)throw new Kr;let b=Date.now();if(h.t<b-3e5||h.t>b+3e5)throw new Jr;let W=await hi(this.client.secretKey,`${h.t}.${JSON.stringify(n)}`);if(!gi(W,h.v1))throw new Vr}};function Mi(m,n){if(!m)throw new Error("agent() requires a non-empty agentId");if(!(n!=null&&n.onMessage))throw new Error(`agent('${m}') requires an onMessage handler`);return{id:m,handlers:n,userOnToolApproval:typeof n.onToolApproval=="function"}}async function ot(m,n,o){if(m.steps.some(h=>h.stepId===n))throw new zr(n);m.steps.push(o)}async function Ht(m,n,o,h){return async(b,W,I={})=>{let U=(I==null?void 0:I.controlSchema)||Le;return await ot(m,b,{stepId:b,type:n,controls:{schema:await Me(U),unknownSchema:U},outputs:{schema:await Me(o),unknownSchema:o},results:{schema:await Me(h),unknownSchema:h},resolve:W,code:W.toString(),options:I,providers:[]}),{_ctx:{timestamp:Date.now(),state:{status:"pending",error:!1}}}}}async function Ni(m,n,o){let h=yn[n],b=Object.entries(o).map(async([W,I])=>{let U=h[W];return{type:W,code:I.toString(),resolve:I,outputs:{schema:await Me(U.output),unknownSchema:U.output}}});m.providers.push(...await Promise.all(b))}async function Ze(m,n,o,h){return async(b,W,I={})=>{let U=(I==null?void 0:I.controlSchema)||Le,z={stepId:b,type:n,controls:{schema:await Me(U),unknownSchema:U},outputs:{schema:await Me(o),unknownSchema:o},results:{schema:await Me(h),unknownSchema:h},resolve:W,code:W.toString(),options:I,providers:[]};return await ot(m,b,z),Object.keys(I.providers||{}).length>0&&await Ni(z,n,I.providers||{}),{_ctx:{timestamp:Date.now(),state:{status:"pending",error:!1}}}}}async function vn(m,n){return async(o,h,b={})=>{let W=(b==null?void 0:b.controlSchema)||Le,I=(b==null?void 0:b.outputSchema)||Le,[U,z]=await Promise.all([Me(W),Me(I)]);return await ot(m,o,{stepId:o,type:n,controls:{schema:U,unknownSchema:W},outputs:{schema:z,unknownSchema:I},results:{schema:z,unknownSchema:I},resolve:h,code:h.toString(),options:b,providers:[]}),{_ctx:{timestamp:Date.now(),state:{status:"pending",error:!1}}}}}var co={email:"email",sms:"sms",push:"push",inApp:"in_app",chat:"chat",tool:"tool"};function Pi(m){if(!m)return{};let n={};return m.all&&(n.all=m.all),Object.entries(m.channels||{}).forEach(([o,h])=>{let b=co[o];b&&(n.channels||(n.channels={}),n.channels[b]=h)}),n}function fo(m,n,o){let h=o||{};return{id:m,trigger:async I=>{let U=$t(Wt(I.secretKey),Dt(I.apiUrl)),z=I.payload||{},pe;if(h.payloadSchema){let Pe=await It(h.payloadSchema,z);if(Pe.success===!1)throw new Wr(m,Pe.errors);pe=Pe.data}else pe=I.payload;let ke=await mi(),Se={name:m,to:I.to,payload:{...pe},...I.transactionId&&{transactionId:I.transactionId},...I.overrides&&{overrides:I.overrides},...I.actor&&{actor:I.actor},...I.context&&{context:I.context},...I.agentId!==void 0&&{agentId:I.agentId},...ke&&{bridgeUrl:ke}},le=await U.post("/events/trigger",Se);return{cancel:async()=>U.delete(`/events/trigger/${le.transactionId}`),data:le}},discover:async()=>{var U;let I={workflowId:m,severity:(U=h.severity)!=null?U:"none",steps:[],code:n.toString(),payload:{schema:await Me(h.payloadSchema||Le),unknownSchema:h.payloadSchema||Le},controls:{schema:await Me(h.controlSchema||Le),unknownSchema:h.controlSchema||Le},env:{schema:await Me(h.envSchema||Le),unknownSchema:h.envSchema||Le},tags:h.tags||[],preferences:Pi(h.preferences),name:h.name,description:h.description,execute:n};return await n({payload:{},subscriber:{},env:{},controls:{},context:{},step:{push:await Ze(I,"push",De.push.output,De.push.result),chat:await Ze(I,"chat",De.chat.output,De.chat.result),email:await Ze(I,"email",De.email.output,De.email.result),sms:await Ze(I,"sms",De.sms.output,De.sms.result),inApp:await Ze(I,"in_app",De.in_app.output,De.in_app.result),tool:await Ze(I,"tool",De.tool.output,De.tool.result),digest:await Ht(I,"digest",Sn.output,Sn.result),delay:await Ht(I,"delay",wn.output,wn.result),throttle:await Ht(I,"throttle",An.output,An.result),custom:await vn(I,"custom"),httpRequest:await vn(I,"http_request")}}),I}}}export{Mo as a,At as b,En as c,Mi as d,fo as e};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as p,c as t,d as u,e as x}from"./chunk-
|
|
1
|
+
import{b as p,c as t,d as u,e as x}from"./chunk-CZKRMHOI.js";import"./chunk-H3BQFYPR.js";import{a as y}from"./chunk-YLCLZVYS.js";import"./chunk-XIVU4VDS.js";import{R as q,S as r,T as s,X as w}from"./chunk-2ANSU3EI.js";import{a,b,c,d,e,f,g,j as h,k as i,m as j,q as k,r as l,s as m}from"./chunk-IHERFGZC.js";import"./chunk-ICOHH7TO.js";import{a as v}from"./chunk-E54LXWY3.js";import{f as n}from"./chunk-VY27ZAO7.js";import{c as o}from"./chunk-5DVHK5DS.js";import"./chunk-FHYMHX3T.js";export{a as Actions,r as AgentDeliveryError,q as AgentError,b as Button,c as Card,d as CardLink,e as CardText,f as Chart,p as Client,n as CronExpression,g as Divider,h as Image,i as LinkButton,t as NovuRequestHandler,k as Select,l as SelectOption,w as SeverityLevelEnum,j as Table,m as TextInput,u as agent,o as isFromWorkflow,v as providerSchemas,y as step,s as toAgentError,x as workflow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b,c as a,d as i,e as j}from"../chunk-
|
|
1
|
+
import{b,c as a,d as i,e as j}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as q}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as k,S as O,T as $,X as U}from"../chunk-2ANSU3EI.js";import{a as y,b as h,c,d as m,e as f,f as H,g as v,j as w,k as E,m as S,q as x,r as A,s as N}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as F}from"../chunk-E54LXWY3.js";import{f as R}from"../chunk-VY27ZAO7.js";import{c as V}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";var l="express",T=p=>new a({frameworkName:l,...p,handler:(t,o)=>({body:()=>t.body,headers:e=>{let r=t.headers[e];return Array.isArray(r)?r[0]:r},method:()=>t.method||"GET",url:()=>{let e=t.headers.host||"",r=e!=null&&e.includes("://")?"":`${t.protocol||"https"}://`;return new URL(t.originalUrl||t.url||"",`${r}${e||""}`)},queryString:e=>{let r=t.query[e];return Array.isArray(r)?r[0]:r},transformResponse:({body:e,headers:r,status:s})=>(Object.entries(r).forEach(([n,d])=>{o.setHeader(n,d)}),o.status(s).send(e))})}).createHandler();export{y as Actions,O as AgentDeliveryError,k as AgentError,h as Button,c as Card,m as CardLink,f as CardText,H as Chart,b as Client,R as CronExpression,v as Divider,w as Image,E as LinkButton,a as NovuRequestHandler,x as Select,A as SelectOption,U as SeverityLevelEnum,S as Table,N as TextInput,i as agent,l as frameworkName,V as isFromWorkflow,F as providerSchemas,T as serve,q as step,$ as toAgentError,j as workflow};
|
package/dist/esm/servers/h3.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as q,c as t,d as C,e as Q}from"../chunk-
|
|
1
|
+
import{b as q,c as t,d as C,e as Q}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as R}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as F,S as $,T as B,X as L}from"../chunk-2ANSU3EI.js";import{a as l,b as y,c as H,d as S,e as i,f,g,j as N,k as w,m as c,q as E,r as k,s as x}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as D}from"../chunk-E54LXWY3.js";import{f as O}from"../chunk-VY27ZAO7.js";import{c as b}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";import{getHeader as o,getQuery as a,readBody as p,send as n,setHeaders as m}from"h3";var h="h3",_=d=>new t({frameworkName:h,...d,handler:r=>({body:()=>p(r),headers:e=>o(r,e),method:()=>r.method,url:()=>new URL(String(r.path),`${process.env.NODE_ENV==="development"?"http":"https"}://${String(o(r,"host"))}`),queryString:e=>String(a(r)[e]),transformResponse:e=>{let{res:s}=r.node;return s.statusCode=e.status,m(r,e.headers),n(r,e.body)}})}).createHandler();export{l as Actions,$ as AgentDeliveryError,F as AgentError,y as Button,H as Card,S as CardLink,i as CardText,f as Chart,q as Client,O as CronExpression,g as Divider,N as Image,w as LinkButton,t as NovuRequestHandler,E as Select,k as SelectOption,L as SeverityLevelEnum,c as Table,x as TextInput,C as agent,h as frameworkName,b as isFromWorkflow,D as providerSchemas,_ as serve,R as step,B as toAgentError,Q as workflow};
|
package/dist/esm/servers/hono.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as s,b as S,c as p,d as g,e as L}from"../chunk-
|
|
1
|
+
import{a as s,b as S,c as p,d as g,e as L}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as P}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as k,S as H,T as O,X as F}from"../chunk-2ANSU3EI.js";import{a as m,b as h,c as l,d as c,e as f,f as x,g as w,j as y,k as q,m as v,q as N,r as R,s as C}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as D}from"../chunk-E54LXWY3.js";import{f as U}from"../chunk-VY27ZAO7.js";import{c as E}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";var u="hono",d=o=>{try{let n=o.executionCtx;if(typeof n.waitUntil=="function")return e=>n.waitUntil(e)}catch{}},$=o=>new p({frameworkName:u,...o,handler:e=>({body:()=>e.req.json(),waitUntil:d(e),headers:t=>e.req.header(t),method:()=>e.req.method,queryString:t=>e.req.query(t),url:()=>{try{return new URL(e.req.url)}catch{}let t=e.req.header("host")||"localhost",r="https";try{(process.env.NODE_ENV==="development"||process.env.NODE_ENV==="dev")&&(r="http")}catch{}return new URL(e.req.url,`${r}://${t}`)},transformResponse:({body:t,status:r,headers:a})=>{let i=s();return new i(t,{status:r,headers:a})}})}).createHandler();export{m as Actions,H as AgentDeliveryError,k as AgentError,h as Button,l as Card,c as CardLink,f as CardText,x as Chart,S as Client,U as CronExpression,w as Divider,y as Image,q as LinkButton,p as NovuRequestHandler,N as Select,R as SelectOption,F as SeverityLevelEnum,v as Table,C as TextInput,g as agent,u as frameworkName,E as isFromWorkflow,D as providerSchemas,$ as serve,P as step,O as toAgentError,L as workflow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b,c as n,d as H,e as k}from"../chunk-
|
|
1
|
+
import{b,c as n,d as H,e as k}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as C}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as q,S as g,T as V,X as R}from"../chunk-2ANSU3EI.js";import{a as m,b as u,c as P,d as h,e as i,f as w,g as l,j as f,k as x,m as c,q as E,r as I,s as A}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as N}from"../chunk-E54LXWY3.js";import{f as G}from"../chunk-VY27ZAO7.js";import{c as S}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";var p="lambda",B=y=>new n({frameworkName:p,...y,handler:r=>{let s=(e=>e.version==="2.0")(r);return{url:()=>{let e=s?r.requestContext.http.path:r.path,t=r.headers["x-forwarded-proto"]||"https",a=new URL(e,`${t}://${r.headers.host||r.headers.Host||""}`);for(let o in r.queryStringParameters)o&&a.searchParams.set(o,r.queryStringParameters[o]);return a},body:()=>{let e="{}";return r.body&&(e=r.isBase64Encoded?Buffer.from(r.body,"base64").toString():r.body),JSON.parse(e)},headers:e=>r.headers[e],queryString:e=>{var t;return(t=r.queryStringParameters)==null?void 0:t[e]},transformResponse:({body:e,status:t,headers:a})=>Promise.resolve({body:e,statusCode:t,headers:a}),method:()=>s?r.requestContext.http.method:r.httpMethod}}}).createHandler();export{m as Actions,g as AgentDeliveryError,q as AgentError,u as Button,P as Card,h as CardLink,i as CardText,w as Chart,b as Client,G as CronExpression,l as Divider,f as Image,x as LinkButton,n as NovuRequestHandler,E as Select,I as SelectOption,R as SeverityLevelEnum,c as Table,A as TextInput,H as agent,p as frameworkName,S as isFromWorkflow,N as providerSchemas,B as serve,C as step,V as toAgentError,k as workflow};
|
package/dist/esm/servers/nest.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as ee,c as P,d as se,e as ne}from"../chunk-
|
|
1
|
+
import{b as ee,c as P,d as se,e as ne}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as ie}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as re,S as te,T as oe,X as ae}from"../chunk-2ANSU3EI.js";import{a as j,b as F,c as L,d as V,e as U,f as k,g as B,j as $,k as K,m as z,q as J,r as Q,s as W}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as pe}from"../chunk-E54LXWY3.js";import{f as X}from"../chunk-VY27ZAO7.js";import{c as Z}from"../chunk-5DVHK5DS.js";import{d as n,e as i}from"../chunk-FHYMHX3T.js";import{Inject as N,Injectable as H}from"@nestjs/common";import{ConfigurableModuleBuilder as x}from"@nestjs/common";var{ConfigurableModuleClass:u,MODULE_OPTIONS_TOKEN:m,OPTIONS_TYPE:le,ASYNC_OPTIONS_TYPE:me}=new x().setClassMethodName("register").setFactoryMethodName("createNovuModuleOptions").setExtras(o=>({...o,isGlobal:!0})).build();var h="REGISTER_API_PATH",E="REGISTER_CONTROLLER_DECORATORS";import{Injectable as A}from"@nestjs/common";var c=class{handler(e,r){return{body:()=>e.body,headers:t=>{let a=e.headers[t.toLowerCase()];return Array.isArray(a)?a[0]:a},method:()=>e.method||"GET",queryString:t=>{let a=e.query[t];return Array.isArray(a)?a[0]:a},url:()=>{let t=e.headers.host||"",a=t!=null&&t.includes("://")?"":`${e.protocol||"https"}://`;return new URL(e.originalUrl||e.url||"",`${a}${t||""}`)},transformResponse:({body:t,headers:a,status:y})=>(Object.entries(a).forEach(([I,_])=>{r.setHeader(I,_)}),r.status(y).send(t))}}};c=n([A()],c);var q="nest",l=class{constructor(e,r){this.options=e;this.novuHandler=r;this.novuRequestHandler=new P({frameworkName:q,...this.options,handler:this.novuHandler.handler})}async handleRequest(e,r){await this.novuRequestHandler.createHandler()(e,r)}};l=n([H(),i(0,N(m)),i(1,N(c))],l);import{Controller as M,Get as D,Inject as C,Options as b,Post as w,Req as f,Res as O}from"@nestjs/common";var p=class{constructor(e){this.novuService=e}async handleGet(e,r){await this.novuService.handleRequest(e,r)}async handlePost(e,r){await this.novuService.handleRequest(e,r)}async handleOptions(e,r){await this.novuService.handleRequest(e,r)}};n([D(),i(0,f()),i(1,O())],p.prototype,"handleGet",1),n([w(),i(0,f()),i(1,O())],p.prototype,"handlePost",1),n([b(),i(0,f()),i(1,O())],p.prototype,"handleOptions",1),p=n([M(),i(0,C(l))],p);import{Module as G}from"@nestjs/common";import{PATH_METADATA as Y}from"@nestjs/common/constants";var R={provide:h,useFactory:o=>{if(!o.apiPath)throw new Error("`apiPath` must be provided to set the controller path");Reflect.defineMetadata(Y,o.apiPath,p)},inject:[m]};function T(o,e=[]){return e.reduce((r,s)=>{let t=s(r);return t!=null?t:r},o)}function g(o,e){var r;for(let s of(r=Reflect.getMetadataKeys(o))!=null?r:[])Reflect.defineMetadata(s,Reflect.getMetadata(s,o),e)}function S(o,e=[]){let r=T(o,e);r!==o&&g(r,o)}var v={provide:E,useFactory:o=>{var e;S(p,(e=o.controllerDecorators)!=null?e:[])},inject:[m]};var d=class extends u{static register(e,r){var t;let s=u.register(e);return s.controllers=[T(p,e.controllerDecorators||[])],(t=s.providers)==null||t.push(R,l,c,...r||[]),s.exports=[l,c],s}static registerAsync(e,r){var t;let s=u.registerAsync(e);return s.controllers=[p],(t=s.providers)==null||t.push(R,v,l,c,...r||[]),s.exports=[l,c],s}};d=n([G({})],d);export{j as Actions,te as AgentDeliveryError,re as AgentError,F as Button,L as Card,V as CardLink,U as CardText,k as Chart,ee as Client,X as CronExpression,B as Divider,$ as Image,K as LinkButton,m as NOVU_OPTIONS,l as NovuClient,p as NovuController,c as NovuHandler,d as NovuModule,P as NovuRequestHandler,h as REGISTER_API_PATH,E as REGISTER_CONTROLLER_DECORATORS,J as Select,Q as SelectOption,ae as SeverityLevelEnum,z as Table,W as TextInput,se as agent,q as frameworkName,Z as isFromWorkflow,pe as providerSchemas,R as registerApiPath,v as registerControllerDecorators,ie as step,oe as toAgentError,ne as workflow};
|
package/dist/esm/servers/next.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as c,b as I,c as f,d as V,e as z}from"../chunk-
|
|
1
|
+
import{a as c,b as I,c as f,d as V,e as z}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as B}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as L,S as $,T as D,X as _}from"../chunk-2ANSU3EI.js";import{a as S,b as q,c as w,d as P,e as T,f as v,g as A,j as E,k as b,m as g,q as F,r as U,s as k}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as W}from"../chunk-E54LXWY3.js";import{f as j}from"../chunk-VY27ZAO7.js";import{c as G}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";import*as l from"next/server.js";var N="next",y=()=>{if(typeof l.after=="function")return r=>{try{l.after(r)}catch{}}},H=r=>typeof r=="object"&&r!==null&&typeof r.setHeader=="function"&&typeof r.status=="function"&&typeof r.send=="function",K=r=>{let i=new f({frameworkName:N,...r,handler:(h,R,d)=>{let n=R,p=e=>{let t=typeof n.headers.get=="function"?n.headers.get(e):n.headers[e];return Array.isArray(t)?t[0]:t};return{body:()=>typeof n.json=="function"?n.json():n.body,waitUntil:y(),headers:p,method:()=>h||n.method||"",queryString:(e,t)=>{var a;let o=((a=n.query)==null?void 0:a[e])||t.searchParams.get(e);return Array.isArray(o)?o[0]:o},url:()=>{let e;try{e=new URL(n.url)}catch{}if(e){let s=p("host");if(s){let u=new URL(s.includes("://")?s:`${e.protocol}//${s}`);e.protocol=u.protocol,e.host=u.host,e.port=u.port,e.username=u.username,e.password=u.password}return e}let t="https",o=p("host")||"";try{(process.env.NODE_ENV==="development"||process.env.NODE_ENV==="dev")&&(t="http")}catch{}return new URL(n.url,`${t}://${o}`)},transformResponse:({body:e,headers:t,status:o})=>{if(H(d)){Object.entries(t).forEach(([s,u])=>{d.setHeader(s,u)}),d.status(o).send(e);return}let a=c();return new a(e,{status:o,headers:t})}}}}).createHandler(),m=i.bind(null,void 0);return Object.defineProperties(m,{GET:{value:i.bind(null,"GET")},POST:{value:i.bind(null,"POST")},OPTIONS:{value:i.bind(null,"OPTIONS")}})};export{S as Actions,$ as AgentDeliveryError,L as AgentError,q as Button,w as Card,P as CardLink,T as CardText,v as Chart,I as Client,j as CronExpression,A as Divider,E as Image,b as LinkButton,f as NovuRequestHandler,F as Select,U as SelectOption,_ as SeverityLevelEnum,g as Table,k as TextInput,V as agent,N as frameworkName,G as isFromWorkflow,W as providerSchemas,K as serve,B as step,D as toAgentError,z as workflow};
|
package/dist/esm/servers/nuxt.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as q,c as t,d as C,e as Q}from"../chunk-
|
|
1
|
+
import{b as q,c as t,d as C,e as Q}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as R}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as F,S as $,T as B,X as L}from"../chunk-2ANSU3EI.js";import{a as l,b as H,c as S,d as i,e as y,f,g,j as N,k as w,m as c,q as x,r as E,s as k}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as D}from"../chunk-E54LXWY3.js";import{f as O}from"../chunk-VY27ZAO7.js";import{c as b}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";import{getHeader as o,getQuery as a,readBody as n,send as p,setHeaders as m}from"h3";var u="nuxt",j=d=>new t({frameworkName:u,...d,handler:r=>({queryString:e=>String(a(r)[e]),body:()=>n(r),headers:e=>o(r,e),url:()=>new URL(String(r.path),`${process.env.NODE_ENV==="development"?"http":"https"}://${String(o(r,"host"))}`),method:()=>r.method,transformResponse:e=>{let{res:s}=r.node;return s.statusCode=e.status,m(r,e.headers),p(r,e.body)}})}).createHandler();export{l as Actions,$ as AgentDeliveryError,F as AgentError,H as Button,S as Card,i as CardLink,y as CardText,f as Chart,q as Client,O as CronExpression,g as Divider,N as Image,w as LinkButton,t as NovuRequestHandler,x as Select,E as SelectOption,L as SeverityLevelEnum,c as Table,k as TextInput,C as agent,u as frameworkName,b as isFromWorkflow,D as providerSchemas,j as serve,R as step,B as toAgentError,Q as workflow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t,b as y,c as o,d as b,e as P}from"../chunk-
|
|
1
|
+
import{a as t,b as y,c as o,d as b,e as P}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as U}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as q,S as F,T as O,X as L}from"../chunk-2ANSU3EI.js";import{a as u,b as h,c as l,d as R,e as c,f as i,g as w,j as f,k as x,m as k,q as v,r as H,s as N}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as j}from"../chunk-E54LXWY3.js";import{f as S}from"../chunk-VY27ZAO7.js";import{c as g}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";var m="remix",A=s=>new o({frameworkName:m,...s,handler:({request:e})=>({body:()=>e.json(),headers:r=>e.headers.get(r),method:()=>e.method,url:()=>new URL(e.url,`https://${e.headers.get("host")||""}`),transformResponse:({body:r,status:n,headers:p})=>{let a=t();return new a(r,{status:n,headers:p})}})}).createHandler();export{u as Actions,F as AgentDeliveryError,q as AgentError,h as Button,l as Card,R as CardLink,c as CardText,i as Chart,y as Client,S as CronExpression,w as Divider,f as Image,x as LinkButton,o as NovuRequestHandler,v as Select,H as SelectOption,L as SeverityLevelEnum,k as Table,N as TextInput,b as agent,m as frameworkName,g as isFromWorkflow,j as providerSchemas,A as serve,U as step,O as toAgentError,P as workflow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as r,b as G,c as s,d as g,e as D}from"../chunk-
|
|
1
|
+
import{a as r,b as G,c as s,d as g,e as D}from"../chunk-CZKRMHOI.js";import"../chunk-H3BQFYPR.js";import{a as V}from"../chunk-YLCLZVYS.js";import"../chunk-XIVU4VDS.js";import{R as I,S as k,T as H,X as j}from"../chunk-2ANSU3EI.js";import{a as v,b as E,c as P,d as R,e as T,f as S,g as c,j as f,k as h,m as N,q,r as F,s as b}from"../chunk-IHERFGZC.js";import"../chunk-ICOHH7TO.js";import{a as x}from"../chunk-E54LXWY3.js";import{f as w}from"../chunk-VY27ZAO7.js";import{c as y}from"../chunk-5DVHK5DS.js";import"../chunk-FHYMHX3T.js";var m="sveltekit",L=o=>{let t=new s({frameworkName:m,...o,handler:(u,e)=>({method:()=>u||e.request.method||"",body:()=>e.request.json(),headers:n=>e.request.headers.get(n),url:()=>{let n=process.env.NODE_ENV==="development"||process.env.NODE_ENV==="dev"?"http":"https";return new URL(e.request.url,`${n}://${e.request.headers.get("host")||""}`)},transformResponse:({body:n,headers:d,status:a})=>{let l=r();return new l(n,{status:a,headers:d})}})}).createHandler(),p=t.bind(null,void 0);return Object.defineProperties(p,{GET:{value:t.bind(null,"GET")},POST:{value:t.bind(null,"POST")},OPTIONS:{value:t.bind(null,"OPTIONS")}})};export{v as Actions,k as AgentDeliveryError,I as AgentError,E as Button,P as Card,R as CardLink,T as CardText,S as Chart,G as Client,w as CronExpression,c as Divider,f as Image,h as LinkButton,s as NovuRequestHandler,q as Select,F as SelectOption,j as SeverityLevelEnum,N as Table,b as TextInput,g as agent,m as frameworkName,y as isFromWorkflow,x as providerSchemas,L as serve,V as step,H as toAgentError,D as workflow};
|