@novu/framework 2.11.2 → 2.12.1

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.
Files changed (50) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/index.cjs +3 -3
  3. package/dist/cjs/internal/index.cjs +1 -1
  4. package/dist/cjs/internal/index.d.cts +10 -10
  5. package/dist/cjs/{server.types-BRWsA1CA.d.cts → server.types-Cc6o5eYH.d.cts} +1 -1
  6. package/dist/cjs/servers/express.cjs +3 -3
  7. package/dist/cjs/servers/express.d.cts +1 -1
  8. package/dist/cjs/servers/h3.cjs +3 -3
  9. package/dist/cjs/servers/h3.d.cts +1 -1
  10. package/dist/cjs/servers/hono.cjs +564 -0
  11. package/dist/cjs/servers/hono.d.cts +41 -0
  12. package/dist/cjs/servers/lambda.cjs +3 -3
  13. package/dist/cjs/servers/lambda.d.cts +1 -1
  14. package/dist/cjs/servers/nest.cjs +3 -3
  15. package/dist/cjs/servers/nest.d.cts +1 -1
  16. package/dist/cjs/servers/next.cjs +3 -3
  17. package/dist/cjs/servers/next.d.cts +1 -1
  18. package/dist/cjs/servers/nuxt.cjs +3 -3
  19. package/dist/cjs/servers/nuxt.d.cts +1 -1
  20. package/dist/cjs/servers/remix.cjs +3 -3
  21. package/dist/cjs/servers/remix.d.cts +1 -1
  22. package/dist/cjs/servers/sveltekit.cjs +3 -3
  23. package/dist/cjs/servers/sveltekit.d.cts +1 -1
  24. package/dist/esm/chunk-T4QVGWWK.js +1 -0
  25. package/dist/esm/{chunk-EZ22F362.js → chunk-XC7ATSSO.js} +3 -3
  26. package/dist/esm/index.js +1 -1
  27. package/dist/esm/internal/index.d.ts +1 -1
  28. package/dist/esm/internal/index.js +1 -1
  29. package/dist/esm/{server.types-BRWsA1CA.d.ts → server.types-Cc6o5eYH.d.ts} +1 -1
  30. package/dist/esm/servers/express.d.ts +1 -1
  31. package/dist/esm/servers/express.js +1 -1
  32. package/dist/esm/servers/h3.d.ts +1 -1
  33. package/dist/esm/servers/h3.js +1 -1
  34. package/dist/esm/servers/hono.d.ts +41 -0
  35. package/dist/esm/servers/hono.js +1 -0
  36. package/dist/esm/servers/lambda.d.ts +1 -1
  37. package/dist/esm/servers/lambda.js +1 -1
  38. package/dist/esm/servers/nest.d.ts +1 -1
  39. package/dist/esm/servers/nest.js +1 -1
  40. package/dist/esm/servers/next.d.ts +1 -1
  41. package/dist/esm/servers/next.js +1 -1
  42. package/dist/esm/servers/nuxt.d.ts +1 -1
  43. package/dist/esm/servers/nuxt.js +1 -1
  44. package/dist/esm/servers/remix.d.ts +1 -1
  45. package/dist/esm/servers/remix.js +1 -1
  46. package/dist/esm/servers/sveltekit.d.ts +1 -1
  47. package/dist/esm/servers/sveltekit.js +1 -1
  48. package/hono/package.json +3 -0
  49. package/package.json +18 -1
  50. package/dist/esm/chunk-E2MET7IR.js +0 -1
@@ -109,14 +109,14 @@ ${Ee.comment}`:fe.comment),fe=Ee}G.items[pe]=fe instanceof f.Pair?fe:new f.Pair(
109
109
  et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
110
110
  commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
111
111
  pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est
112
- laborum`.split(/\W/),oi=Qr,ai={type:Gt.ALLOWED_TYPES},xc=Zr,ha=Go,Tc=ei,si=ti,kc=Ko,Ac=Xo,fa="[a-zA-Z][a-zA-Z0-9+-.]*",li=`https?://{hostname}(?:${fa})+`,vc="(?:\\?([a-z]{1,7}(=\\w{1,5})?&){0,3})?",Ut={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:li,slug:"[a-zA-Z\\d_-]+","uri-reference":`${li}${vc}`,"uri-template":li.replace("(?:","(?:/\\{[a-z][:a-zA-Z0-9-]*\\}|"),"json-pointer":`(/(?:${fa.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)?)$"},Ut.iri=Ut["uri-reference"],Ut["iri-reference"]=Ut["uri-reference"],Ut["idn-email"]=Ut.email,Ut["idn-hostname"]=Ut.hostname,Ec=new RegExp(`\\{(${Object.keys(Ut).join("|")})\\}`),_c=Qo,Rc=ea,Oc={boolean:fc,null:yc,array:bc,integer:wc,number:da,object:xc,string:Rc},wr=Oc,Ic=re,Cc=({refs:l,schema:c,container:f,synchronous:S,refDepthMax:x,refDepthMin:A})=>{let k={},L={},Q=0,N,ie;return k.resolveSchema=(j,he,ce)=>{if(j==null)return null;if(typeof j.generate=="function")return j;if(typeof(j.$id||j.id)=="string"&&(delete j.id,delete j.$id,delete j.$schema),typeof j.$ref=="string"){let Te=Math.max(A,x)-1;if(j.$ref==="#"||L[j.$ref]<0||N===j.$ref&&++Q>Te)return j.$ref!=="#"&&ie&&ie.length===ce.length?Ye.getLocalRef(c,j.$ref,S&&l):(delete j.$ref,j);typeof L[j.$ref]=="undefined"&&(L[j.$ref]=ve.number(A,x)-1),ie=ce,N=j.$ref;let Re;j.$ref.indexOf("#/")===-1?Re=l[j.$ref]||null:Re=Ye.getLocalRef(c,j.$ref,S&&l)||null;let Ge;if(typeof Re!="undefined"){if(!Re&&_e("ignoreMissingRefs")!==!0)throw new Error(`Reference not found: ${j.$ref}`);L[j.$ref]-=1,Ye.merge(j,Re||{}),Ge=S&&Re&&Re.$ref}return Ge||delete j.$ref,j}if(Array.isArray(j.allOf)){let Te=j.allOf;delete j.allOf,Te.forEach(Re=>{let Ge=k.resolveSchema(Re,null,ce);Ye.merge(j,typeof Ge.thunk=="function"?Ge.thunk(j):Ge),Array.isArray(j.allOf)&&k.resolveSchema(j,he,ce)})}if(Array.isArray(j.oneOf||j.anyOf)&&ce[ce.length-2]!=="dependencies"){let Te=j.oneOf||j.anyOf;return j.enum&&j.oneOf&&(j.enum=j.enum.filter(Re=>Ye.validate(Re,Te))),{thunk(Re){let Ge=Ye.omitProps(j,["anyOf","oneOf"]),Qe=ve.pick(Te);return Ye.merge(Ge,Qe),Te.forEach(oe=>{oe.required&&oe!==Qe&&oe.required.forEach(I=>{if(Qe.required&&Qe.required.includes(I))return;let C=Ge.required&&Ge.required.includes(I);Ge.properties&&!C&&delete Ge.properties[I],Re&&Re.properties&&delete Re.properties[I]})}),Ge}}}if(Object.keys(j).forEach(Te=>{(Array.isArray(j[Te])||typeof j[Te]=="object")&&!Ye.isKey(Te)&&(j[Te]=k.resolveSchema(j[Te],Te,ce.concat(Te)))}),ce){let Te=ce[ce.length-1];if(Te==="properties"||Te==="items")return j}return f.wrap(j)},k},Pc=Cc,ma=Nt,ga=nn,vt=ra(Gl(),1),Dm=vt.default.binaryOptions,Fm=vt.default.boolOptions,Um=vt.default.intOptions,$m=vt.default.nullOptions,qm=vt.default.strOptions,jm=vt.default.Schema,Bm=vt.default.Alias,zm=vt.default.Collection,Vm=vt.default.Merge,Wm=vt.default.Node,Hm=vt.default.Pair,Ym=vt.default.Scalar,Mc=vt.default.YAMLMap,Nc=vt.default.YAMLSeq,Sr=Cn,an=new lc,rt=(l,c,f)=>(console.debug("[json-schema-faker] calling JSONSchemaFaker() is deprecated, call either .generate() or .resolve()"),f&&console.debug("[json-schema-faker] local references are only supported by calling .resolve()"),rt.generate(l,c)),rt.generateWithContext=(l,c)=>{let f=on(c,l);return ma(f,l,an,!0)},rt.generate=(l,c)=>ga(rt.generateWithContext(l,c)),rt.generateYAML=(l,c)=>Sr(rt.generateWithContext(l,c)),rt.resolveWithContext=(l,c,f)=>{typeof c=="string"&&(f=c,c={}),f=f||(typeof process!="undefined"&&typeof process.cwd=="function"?process.cwd():""),f=`${f.replace(/\/+$/,"")}/`;let S=on(c,l),x={order:1,canRead(k){let L=k.url.replace("/:",":");return S[L]||S[L.split("/").pop()]},read(k,L){try{L(null,this.canRead(k))}catch(Q){L(Q)}}},{$RefParser:A}=aa();return A.bundle(f,l,{resolve:{file:{order:100},http:{order:200},fixedRefs:x},dereference:{circular:"ignore"}}).then(k=>ma(S,k,an)).catch(k=>{throw new Error(`Error while resolving schema (${k.message})`)})},rt.resolve=(l,c,f)=>rt.resolveWithContext(l,c,f).then(ga),rt.resolveYAML=(l,c,f)=>rt.resolveWithContext(l,c,f).then(Sr),St(),rt.format=pa,rt.option=_e,rt.random=ve,rt.extend=(l,c)=>(an.extend(l,c),rt),rt.define=(l,c)=>(an.define(l,c),rt),rt.reset=l=>(an.reset(l),St(),rt),rt.locate=l=>an.get(l),rt.VERSION="0.5.5",Lc={...rt},Dc=rt}}),Gm=o({"src/src/main.iife.js"(l,c){var f=(Jm(),u(p));typeof $RefParser!="undefined"&&typeof JSONPath!="undefined"&&f.setDependencies({...JSONPath,$RefParser}),typeof window!="undefined"&&(window.JSONSchemaFaker=f.default),c.exports=f.default,c.exports.JSONSchemaFaker=f.JSONSchemaFaker}});return Gm()})();((e,n)=>{e.JSONSchemaFaker=n()})(typeof self!="undefined"?self:typeof window!="undefined"?window:globalThis,()=>Li);Li.random.shuffle=function(){return["[placeholder]"]};Li.option({useDefaultValue:!0,alwaysFakeOptionals:!0});function Hc(e){return Li.generate(e)}var Yc=async(e,n)=>{let t=new TextEncoder,r=t.encode(e),i=t.encode(n),o=await crypto.subtle.importKey("raw",r,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),a=await crypto.subtle.sign("HMAC",o,i);return Array.from(new Uint8Array(a)).map(s=>s.toString(16).padStart(2,"0")).join("")},Jc=(e,n)=>{if(typeof e!="string"||typeof n!="string"||e.length!==n.length)return!1;let t=0;for(let r=0;r<e.length;r+=1)t|=e.charCodeAt(r)^n.charCodeAt(r);return t===0};var Gc=require("cross-fetch"),Kc=()=>typeof Response!="undefined"?Response:Gc.Response,Xc=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(e){console.error(e)}return""};function Qc(e){return!!e&&typeof e=="object"&&"error"in e&&"message"in e&&"statusCode"in e}var Di=(e,n)=>{if(!e)throw new Ai;return{post:async(t,r)=>{let i=await fetch(`${n}/v1${t}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`},body:JSON.stringify(r)}),o=await i.json();if(i.ok)return o;throw Qc(o)?new vi(o.statusCode,o.error,o.message):new Gn(o)},delete:async t=>(await fetch(`${n}/v1${t}`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`}})).json()}};var iu=require("liquidjs");function xa(e,n){let t={...e};for(let r of Object.keys(n)){let i=n[r];i&&typeof i=="object"&&!Array.isArray(i)?t[r]=xa(t[r]||{},i):(Array.isArray(i),t[r]=i)}return t}function Fi(e,n){let t=n.split(".").reduce((r,i)=>{if(r&&typeof r=="object")return r[i]},e);if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(typeof t=="object"){let r=JSON.stringify(t);return r==="{}"?"":r}return""}function Zc(e,n=2,t,r=", "){if(!Array.isArray(e)||e.length===0)return"";let i=t?e.map(s=>typeof s!="object"||!s?"":Fi(s,t)):e;if(i.length===1)return i[0];if(i.length===2)return`${i[0]} and ${i[1]}`;if(i.length===3&&n>=3)return`${i[0]}, ${r}${i[1]} and ${i[2]}`;let o=i.slice(0,n),a=i.length-n;return`${o.join(r)} and ${a} ${a===1?"other":"others"}`}var eu=qt(require("pluralize"),1);function tu(e,n="",t="",r="true"){if(e==null)return"";let i=0;if(Array.isArray(e)?i=e.length:typeof e=="object"?i=Object.keys(e).length:typeof e=="string"?i=+e:typeof e=="number"?i=e:i=Number(e),Number.isNaN(i)&&(i=0),i<=0)return"";let o;return t?o=i===1?n:t:o=(0,eu.default)(n,i),r==="true"?`${i} ${o}`:o}var Sg=require("liquidjs"),nu=qt(require("pluralize"),1),xg=require("zod");var Tg="",kg=2,Ag="other",vg=", ",Eg=" and ",_g=", and ";function ru(e,n=Tg,t=kg,r=Ag,i=vg,o=Eg,a=_g){if(!Array.isArray(e)||e.length===0)return"";let s=n?e.map(y=>typeof y!="object"||!y?"":Fi(y,n)):e,u=s.length;if(u===1)return s[0];if(u===2)return`${s[0]}${o}${s[1]}`;if(t>=u){let y=s.slice(0,u-1),g=s[u-1];return`${y.join(i)}${a}${g}`}let p=s.slice(0,t),d=u-t,h=t===1?o:a;return`${p.join(i)}${h}${d} ${(0,nu.default)(r,d)}`}function Rg(e){return Array.isArray(e)||typeof e=="object"&&e!==null?ou(e):typeof e=="string"?e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):e==null?"":String(e)}var ou=(e,n=0)=>Array.isArray(e)||typeof e=="object"&&e!==null?JSON.stringify(e,null,n).replace(/"/g,"'").replace(/\n/g,"\\n"):e==null?"":String(e);function au(e){let n=new iu.Liquid({outputEscape:Rg,...e});return n.registerFilter("json",(t,r)=>ou(t,r)),n.registerFilter("digest",Zc),n.registerFilter("toSentence",ru),n.registerFilter("pluralize",tu),n}var Ln=qt(require("chalk"),1),et={info:e=>Ln.default.blue(e),warning:e=>Ln.default.yellow(e),error:e=>Ln.default.red(e),success:e=>Ln.default.green(e),underline:e=>Ln.default.underline(e),bold:e=>Ln.default.bold(e)},ct={SUCCESS:et.success("\u2714"),ERROR:et.error("\u2717"),WARNING:et.warning("\u26A0"),INFO:et.info("\u2139"),ARROW:et.bold("\u2192"),MOCK:et.info("\u25CB"),HYDRATED:et.bold(et.info("\u2192")),STEP:et.info("\u03C3"),ACTION:et.info("\u03B1"),DURATION:et.info("\u0394"),PROVIDER:et.info("\u2699"),OUTPUT:et.info("\u21E2"),INPUT:et.info("\u21E0"),WORKFLOW:et.info("\u03C9"),STATE:et.info("\u03C3"),EXECUTE:et.info("\u03B5"),PREVIEW:et.info("\u03C1")};function Ui(e){return e||process.env.NOVU_API_URL||"https://api.novu.co"}function $i(e){return e||process.env.NOVU_SECRET_KEY||process.env.NOVU_API_KEY||""}var Ta=qt(require("sanitize-html"),1),Og=["src","alt","width","height","loading","srcset","sizes","crossorigin","usemap","ismap","class","id","style","title","dir","lang"];function Ig(e){return e.toLowerCase().startsWith("on")}function Cg(e){return e.replace(/<\/([a-zA-Z][a-zA-Z0-9]*)\s*\/[^>]*>/g,"</$1>")}var Pg={allowedTags:Ta.default.defaults.allowedTags.concat(["style","img","html","head","body","link","meta","title"]),allowedAttributes:!1,transformTags:{"*":(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Ig(r)||(t[r]=i);return{tagName:e,attribs:t}},img:(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Og.includes(r.toLowerCase())&&(t[r]=i);return{tagName:e,attribs:t}}},allowVulnerableTags:!0,parseStyleAttributes:!1,parser:{lowerCaseAttributeNames:!0}},su=e=>{if(!e)return e;let n=Cg(e),t=/^<!DOCTYPE .*?>/,r=n.match(t),i=(0,Ta.default)(n,Pg);return r?r[0]+i:i},qi=e=>Object.keys(e).reduce((n,t)=>{let r=e[t];return typeof r=="string"?n[t]=su(r):Array.isArray(r)?n[t]=r.map(i=>typeof i=="string"?su(i):typeof i=="object"?qi(i):i):typeof r=="object"&&r!==null?n[t]=qi(r):n[t]=r,n},{});function lu(e,n=!0,t=console){n&&(t.info(`
113
- ${et.bold(et.underline("Discovered workflowId:"))} '${e.workflowId}'`),e.steps.forEach((r,i)=>{let o=i===e.steps.length-1,a=o?"\u2514":"\u251C";t.info(`${a} ${ct.STEP} Discovered stepId: '${r.stepId}' Type: '${r.type}'`),r.providers.forEach((s,u)=>{let p=u===r.providers.length-1,d=o?" ":"\u2502",h=p?"\u2514":"\u251C";t.info(`${d} ${h} ${ct.PROVIDER} Discovered provider: '${s.type}'`)})}))}var cu=require("jsonrepair");function uu(e){let n=e.trim();return(n.startsWith("{")&&n.endsWith("}")||n.startsWith("[")&&n.endsWith("]"))&&n.length>2}var pu="__novuJsonString";function Mg(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&e[pu]===!0}function Cr(e){if(typeof e=="string"){if(!uu(e))return e;try{let n=JSON.parse(e);return{[pu]:!0,value:Cr(n)}}catch{return e}}if(Array.isArray(e))return e.map(n=>Cr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Cr(r);return n}return e}function Pr(e){if(Mg(e))return JSON.stringify(Pr(e.value));if(Array.isArray(e))return e.map(n=>Pr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Pr(r);return n}return e}function Ng(e){try{return JSON.parse(e),e}catch{try{return(0,cu.jsonrepair)(e)}catch{return e}}}function du(e){return Object.fromEntries(Object.entries(e).map(([n,t])=>typeof t=="string"?[n,uu(t)?Ng(t):t]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[n,du(t)]:[n,t]))}function hu(e){return!(e!=null&&e.data)||typeof e.data!="object"||Array.isArray(e.data)?e:{...e,data:du(e.data)}}var mu=qt(require("ajv"),1),gu=qt(require("ajv-formats"),1);var fu=e=>typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e));var ji=class extends xn{constructor(t,r){let i=r.length===1?"it":"them";super(`Tried to use a ${t} in @novu/framework without ${r.join(", ")} installed. Please install ${i} by running \`npm install ${r.join(" ")}\`.`);this.statusCode=500;this.code="MissingDependencyError"}};var Bi=async(e,n)=>{let t=new Set;if((await Promise.allSettled(e.map(i=>i.import))).forEach((i,o)=>{let a=e[o];i.status==="fulfilled"&&a.exports.every(u=>i.value[u]!==void 0)||t.add(a.name)}),t.size>0)throw new ji(n,Array.from(t))};var zi=class{constructor(){this.requiredImports=[];this.ajv=new mu.default({useDefaults:!0,removeAdditional:"failing",strict:!1}),(0,gu.default)(this.ajv),this.compiledSchemas=new Map}async canHandle(n){let t=n.type==="object"||!!n.anyOf||!!n.allOf||!!n.oneOf;return t&&await Bi(this.requiredImports,"JSON schema"),t}async validate(n,t){let r=this.compiledSchemas.get(t);r||(r=this.ajv.compile(t),this.compiledSchemas.set(t,r));let i=fu(n);return r(i)?{success:!0,data:i}:{success:!1,errors:r.errors.map(a=>({path:a.instancePath,message:a.message}))}}async transformToJsonSchema(n){return n}};var Vi=class{constructor(){this.requiredImports=[{name:"zod",import:import("zod"),exports:["ZodType"]},{name:"zod-to-json-schema",import:import("zod-to-json-schema"),exports:["zodToJsonSchema"]}]}async canHandle(n){let t=n.safeParseAsync!==void 0;return t&&await Bi(this.requiredImports,"Zod schema"),t}async validate(n,t){let r=await t.safeParseAsync(n);return r.success?{success:!0,data:r.data}:{success:!1,errors:r.error.issues.map(i=>({path:`/${i.path.join("/")}`,message:i.message}))}}async transformToJsonSchema(n){let{zodToJsonSchema:t}=await import("zod-to-json-schema");return t(n)}};var Wi=new Vi,Hi=new zi,Mr=async(e,n)=>{if(await Wi.canHandle(e))return Wi.validate(n,e);if(await Hi.canHandle(e))return Hi.validate(n,e);throw new Error("Invalid schema")},yt=async e=>{if(await Wi.canHandle(e))return Wi.transformToJsonSchema(e);if(await Hi.canHandle(e))return Hi.transformToJsonSchema(e);throw new Error("Invalid schema")};function yu(){return["development",void 0,"dev"].includes(process.env.NODE_ENV)}var Qn=class{constructor(n){this.discoveredWorkflows=new Map;this.discoverWorkflowPromises=new Map;this.registeredAgents=new Map;this.version="2.11.2-alpha.0";let t=this.buildOptions(n);this.apiUrl=t.apiUrl,this.secretKey=t.secretKey,this.strictAuthentication=t.strictAuthentication,this.verbose=t.verbose,this.logger=t.logger,this.templateEngine=au()}buildOptions(n){let t={apiUrl:Ui(n==null?void 0:n.apiUrl),secretKey:$i(n==null?void 0:n.secretKey),strictAuthentication:!yu(),verbose:yu(),logger:console};return(n==null?void 0:n.strictAuthentication)!==void 0?t.strictAuthentication=n.strictAuthentication:process.env.NOVU_STRICT_AUTHENTICATION_ENABLED!==void 0&&(t.strictAuthentication=process.env.NOVU_STRICT_AUTHENTICATION_ENABLED==="true"),(n==null?void 0:n.verbose)!==void 0&&(t.verbose=n.verbose),(n==null?void 0:n.logger)!==void 0&&(t.logger=n.logger),t}log(...n){this.verbose&&this.logger.info(...n)}async addWorkflows(n){for(let t of n){if(this.discoveredWorkflows.has(t.id))continue;let r=this.discoverWorkflowPromises.get(t.id);if(r){await r;continue}let i=this.addWorkflow(t);this.discoverWorkflowPromises.set(t.id,i),await i}}addAgents(n){for(let t of n)this.registeredAgents.set(t.id,t)}getAgent(n){return this.registeredAgents.get(n)}async addWorkflow(n){try{let t=await n.discover();lu(t,this.verbose,this.logger),this.discoveredWorkflows.set(n.id,t)}finally{this.discoverWorkflowPromises.delete(n.id)}}healthCheck(){let n=this.getRegisteredWorkflows(),t=n.length,r=n.reduce((i,o)=>i+o.steps.length,0);return{status:"ok",sdkVersion:"2.11.2-alpha.0",frameworkVersion:"2024-06-26",discovered:{workflows:t,steps:r}}}getWorkflow(n){let t=this.discoveredWorkflows.get(n);if(t)return t;throw new Rr(n)}getStep(n,t){let i=this.getWorkflow(n).steps.find(o=>o.stepId===t);if(i)return i;throw new Mi(t)}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 Hc(n)}catch(t){return this.logger.warn("Failed to mock schema, returning empty object:",t),{}}}async validate(n,t,r,i,o,a,s){let u=await Mr(t,n);if(u.success)return u.data;switch(r){case"event":this.throwInvalidEvent(i,o,u.errors);case"step":this.throwInvalidStep(a,i,o,u.errors);case"provider":this.throwInvalidProvider(a,s,i,o,u.errors);default:throw new Error(`Invalid component: '${r}'`)}}throwInvalidProvider(n,t,r,i,o){throw n?t?r==="output"?new Si(i,n,t,o):new Error(`Invalid payload type: '${r}'`):new Error("providerId is required"):new Error("stepId is required")}throwInvalidStep(n,t,r,i){if(!n)throw new Error("stepId is required");switch(t){case"output":throw new yi(r,n,i);case"result":throw new bi(r,n,i);case"controls":throw new gi(r,n,i);default:throw new Error(`Invalid payload type: '${t}'`)}}throwInvalidEvent(n,t,r){switch(n){case"controls":throw new mi(t,r);case"payload":throw new vr(t,r);default:throw new Error(`Invalid payload type: '${n}'`)}}executeStepFactory(n,t,r){return async(i,o,a)=>{if(r())return;let s=this.getStep(n.workflowId,i),u=n.action==="preview";if(!u&&i===n.stepId){let g=await this.createStepControls(s,n),P=await this.compileControls(g,n);if(await this.shouldSkip(a==null?void 0:a.skip,P))return t({options:{skip:!0},outputs:{},providers:{}}),{}}let p=this.previewStep.bind(this),d=this.executeStep.bind(this),y=await(u?p:d)(n,{...s,providers:s.providers.map(g=>{var ee;let P=(ee=a==null?void 0:a.providers)==null?void 0:ee[g.type];if(!P)throw new Ei(g.type);return{...g,resolve:P}}),resolve:o});return this.shouldSanitize({stepType:s.type,options:a})&&(y={...y,outputs:qi(y.outputs)}),i===n.stepId&&t({...y,options:{skip:!1}}),y.outputs}}shouldSanitize({stepType:n,options:t}){return(t==null?void 0:t.disableOutputSanitization)===!0?!1:["email","in_app"].includes(n)}async shouldSkip(n,t){return n?n(t):!1}async executeWorkflow(n){let i=`${{execute:"Executing",preview:"Previewing"}[n.action]||n.action} workflowId:`;this.log(`
112
+ laborum`.split(/\W/),oi=Qr,ai={type:Gt.ALLOWED_TYPES},xc=Zr,ha=Go,Tc=ei,si=ti,kc=Ko,Ac=Xo,fa="[a-zA-Z][a-zA-Z0-9+-.]*",li=`https?://{hostname}(?:${fa})+`,vc="(?:\\?([a-z]{1,7}(=\\w{1,5})?&){0,3})?",Ut={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:li,slug:"[a-zA-Z\\d_-]+","uri-reference":`${li}${vc}`,"uri-template":li.replace("(?:","(?:/\\{[a-z][:a-zA-Z0-9-]*\\}|"),"json-pointer":`(/(?:${fa.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)?)$"},Ut.iri=Ut["uri-reference"],Ut["iri-reference"]=Ut["uri-reference"],Ut["idn-email"]=Ut.email,Ut["idn-hostname"]=Ut.hostname,Ec=new RegExp(`\\{(${Object.keys(Ut).join("|")})\\}`),_c=Qo,Rc=ea,Oc={boolean:fc,null:yc,array:bc,integer:wc,number:da,object:xc,string:Rc},wr=Oc,Ic=re,Cc=({refs:l,schema:c,container:f,synchronous:S,refDepthMax:x,refDepthMin:A})=>{let k={},L={},Q=0,N,ie;return k.resolveSchema=(j,he,ce)=>{if(j==null)return null;if(typeof j.generate=="function")return j;if(typeof(j.$id||j.id)=="string"&&(delete j.id,delete j.$id,delete j.$schema),typeof j.$ref=="string"){let Te=Math.max(A,x)-1;if(j.$ref==="#"||L[j.$ref]<0||N===j.$ref&&++Q>Te)return j.$ref!=="#"&&ie&&ie.length===ce.length?Ye.getLocalRef(c,j.$ref,S&&l):(delete j.$ref,j);typeof L[j.$ref]=="undefined"&&(L[j.$ref]=ve.number(A,x)-1),ie=ce,N=j.$ref;let Re;j.$ref.indexOf("#/")===-1?Re=l[j.$ref]||null:Re=Ye.getLocalRef(c,j.$ref,S&&l)||null;let Ge;if(typeof Re!="undefined"){if(!Re&&_e("ignoreMissingRefs")!==!0)throw new Error(`Reference not found: ${j.$ref}`);L[j.$ref]-=1,Ye.merge(j,Re||{}),Ge=S&&Re&&Re.$ref}return Ge||delete j.$ref,j}if(Array.isArray(j.allOf)){let Te=j.allOf;delete j.allOf,Te.forEach(Re=>{let Ge=k.resolveSchema(Re,null,ce);Ye.merge(j,typeof Ge.thunk=="function"?Ge.thunk(j):Ge),Array.isArray(j.allOf)&&k.resolveSchema(j,he,ce)})}if(Array.isArray(j.oneOf||j.anyOf)&&ce[ce.length-2]!=="dependencies"){let Te=j.oneOf||j.anyOf;return j.enum&&j.oneOf&&(j.enum=j.enum.filter(Re=>Ye.validate(Re,Te))),{thunk(Re){let Ge=Ye.omitProps(j,["anyOf","oneOf"]),Qe=ve.pick(Te);return Ye.merge(Ge,Qe),Te.forEach(oe=>{oe.required&&oe!==Qe&&oe.required.forEach(I=>{if(Qe.required&&Qe.required.includes(I))return;let C=Ge.required&&Ge.required.includes(I);Ge.properties&&!C&&delete Ge.properties[I],Re&&Re.properties&&delete Re.properties[I]})}),Ge}}}if(Object.keys(j).forEach(Te=>{(Array.isArray(j[Te])||typeof j[Te]=="object")&&!Ye.isKey(Te)&&(j[Te]=k.resolveSchema(j[Te],Te,ce.concat(Te)))}),ce){let Te=ce[ce.length-1];if(Te==="properties"||Te==="items")return j}return f.wrap(j)},k},Pc=Cc,ma=Nt,ga=nn,vt=ra(Gl(),1),Dm=vt.default.binaryOptions,Fm=vt.default.boolOptions,Um=vt.default.intOptions,$m=vt.default.nullOptions,qm=vt.default.strOptions,jm=vt.default.Schema,Bm=vt.default.Alias,zm=vt.default.Collection,Vm=vt.default.Merge,Wm=vt.default.Node,Hm=vt.default.Pair,Ym=vt.default.Scalar,Mc=vt.default.YAMLMap,Nc=vt.default.YAMLSeq,Sr=Cn,an=new lc,rt=(l,c,f)=>(console.debug("[json-schema-faker] calling JSONSchemaFaker() is deprecated, call either .generate() or .resolve()"),f&&console.debug("[json-schema-faker] local references are only supported by calling .resolve()"),rt.generate(l,c)),rt.generateWithContext=(l,c)=>{let f=on(c,l);return ma(f,l,an,!0)},rt.generate=(l,c)=>ga(rt.generateWithContext(l,c)),rt.generateYAML=(l,c)=>Sr(rt.generateWithContext(l,c)),rt.resolveWithContext=(l,c,f)=>{typeof c=="string"&&(f=c,c={}),f=f||(typeof process!="undefined"&&typeof process.cwd=="function"?process.cwd():""),f=`${f.replace(/\/+$/,"")}/`;let S=on(c,l),x={order:1,canRead(k){let L=k.url.replace("/:",":");return S[L]||S[L.split("/").pop()]},read(k,L){try{L(null,this.canRead(k))}catch(Q){L(Q)}}},{$RefParser:A}=aa();return A.bundle(f,l,{resolve:{file:{order:100},http:{order:200},fixedRefs:x},dereference:{circular:"ignore"}}).then(k=>ma(S,k,an)).catch(k=>{throw new Error(`Error while resolving schema (${k.message})`)})},rt.resolve=(l,c,f)=>rt.resolveWithContext(l,c,f).then(ga),rt.resolveYAML=(l,c,f)=>rt.resolveWithContext(l,c,f).then(Sr),St(),rt.format=pa,rt.option=_e,rt.random=ve,rt.extend=(l,c)=>(an.extend(l,c),rt),rt.define=(l,c)=>(an.define(l,c),rt),rt.reset=l=>(an.reset(l),St(),rt),rt.locate=l=>an.get(l),rt.VERSION="0.5.5",Lc={...rt},Dc=rt}}),Gm=o({"src/src/main.iife.js"(l,c){var f=(Jm(),u(p));typeof $RefParser!="undefined"&&typeof JSONPath!="undefined"&&f.setDependencies({...JSONPath,$RefParser}),typeof window!="undefined"&&(window.JSONSchemaFaker=f.default),c.exports=f.default,c.exports.JSONSchemaFaker=f.JSONSchemaFaker}});return Gm()})();((e,n)=>{e.JSONSchemaFaker=n()})(typeof self!="undefined"?self:typeof window!="undefined"?window:globalThis,()=>Li);Li.random.shuffle=function(){return["[placeholder]"]};Li.option({useDefaultValue:!0,alwaysFakeOptionals:!0});function Hc(e){return Li.generate(e)}var Yc=async(e,n)=>{let t=new TextEncoder,r=t.encode(e),i=t.encode(n),o=await crypto.subtle.importKey("raw",r,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),a=await crypto.subtle.sign("HMAC",o,i);return Array.from(new Uint8Array(a)).map(s=>s.toString(16).padStart(2,"0")).join("")},Jc=(e,n)=>{if(typeof e!="string"||typeof n!="string"||e.length!==n.length)return!1;let t=0;for(let r=0;r<e.length;r+=1)t|=e.charCodeAt(r)^n.charCodeAt(r);return t===0};var Gc=require("cross-fetch"),Kc=()=>typeof Response!="undefined"?Response:Gc.Response,Xc=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(e){console.error(e)}return""};function Qc(e){return!!e&&typeof e=="object"&&"error"in e&&"message"in e&&"statusCode"in e}var Di=(e,n)=>{if(!e)throw new Ai;return{post:async(t,r)=>{let i=await fetch(`${n}/v1${t}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`},body:JSON.stringify(r)}),o=await i.json();if(i.ok)return o;throw Qc(o)?new vi(o.statusCode,o.error,o.message):new Gn(o)},delete:async t=>(await fetch(`${n}/v1${t}`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`}})).json()}};var iu=require("liquidjs");function xa(e,n){let t={...e};for(let r of Object.keys(n)){let i=n[r];i&&typeof i=="object"&&!Array.isArray(i)?t[r]=xa(t[r]||{},i):(Array.isArray(i),t[r]=i)}return t}function Fi(e,n){let t=n.split(".").reduce((r,i)=>{if(r&&typeof r=="object")return r[i]},e);if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(typeof t=="object"){let r=JSON.stringify(t);return r==="{}"?"":r}return""}function Zc(e,n=2,t,r=", "){if(!Array.isArray(e)||e.length===0)return"";let i=t?e.map(s=>typeof s!="object"||!s?"":Fi(s,t)):e;if(i.length===1)return i[0];if(i.length===2)return`${i[0]} and ${i[1]}`;if(i.length===3&&n>=3)return`${i[0]}${r}${i[1]} and ${i[2]}`;let o=i.slice(0,n),a=i.length-n;return`${o.join(r)} and ${a} ${a===1?"other":"others"}`}var eu=qt(require("pluralize"),1);function tu(e,n="",t="",r="true"){if(e==null)return"";let i=0;if(Array.isArray(e)?i=e.length:typeof e=="object"?i=Object.keys(e).length:typeof e=="string"?i=+e:typeof e=="number"?i=e:i=Number(e),Number.isNaN(i)&&(i=0),i<=0)return"";let o;return t?o=i===1?n:t:o=(0,eu.default)(n,i),r==="true"?`${i} ${o}`:o}var Sg=require("liquidjs"),nu=qt(require("pluralize"),1),xg=require("zod");var Tg="",kg=2,Ag="other",vg=", ",Eg=" and ",_g=", and ";function ru(e,n=Tg,t=kg,r=Ag,i=vg,o=Eg,a=_g){if(!Array.isArray(e)||e.length===0)return"";let s=n?e.map(y=>typeof y!="object"||!y?"":Fi(y,n)):e,u=s.length;if(u===1)return s[0];if(u===2)return`${s[0]}${o}${s[1]}`;if(t>=u){let y=s.slice(0,u-1),g=s[u-1];return`${y.join(i)}${a}${g}`}let p=s.slice(0,t),d=u-t,h=t===1?o:a;return`${p.join(i)}${h}${d} ${(0,nu.default)(r,d)}`}function Rg(e){return Array.isArray(e)||typeof e=="object"&&e!==null?ou(e):typeof e=="string"?e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):e==null?"":String(e)}var ou=(e,n=0)=>Array.isArray(e)||typeof e=="object"&&e!==null?JSON.stringify(e,null,n).replace(/"/g,"'").replace(/\n/g,"\\n"):e==null?"":String(e);function au(e){let n=new iu.Liquid({outputEscape:Rg,...e});return n.registerFilter("json",(t,r)=>ou(t,r)),n.registerFilter("digest",Zc),n.registerFilter("toSentence",ru),n.registerFilter("pluralize",tu),n}var Ln=qt(require("chalk"),1),et={info:e=>Ln.default.blue(e),warning:e=>Ln.default.yellow(e),error:e=>Ln.default.red(e),success:e=>Ln.default.green(e),underline:e=>Ln.default.underline(e),bold:e=>Ln.default.bold(e)},ct={SUCCESS:et.success("\u2714"),ERROR:et.error("\u2717"),WARNING:et.warning("\u26A0"),INFO:et.info("\u2139"),ARROW:et.bold("\u2192"),MOCK:et.info("\u25CB"),HYDRATED:et.bold(et.info("\u2192")),STEP:et.info("\u03C3"),ACTION:et.info("\u03B1"),DURATION:et.info("\u0394"),PROVIDER:et.info("\u2699"),OUTPUT:et.info("\u21E2"),INPUT:et.info("\u21E0"),WORKFLOW:et.info("\u03C9"),STATE:et.info("\u03C3"),EXECUTE:et.info("\u03B5"),PREVIEW:et.info("\u03C1")};function Ui(e){return e||process.env.NOVU_API_URL||"https://api.novu.co"}function $i(e){return e||process.env.NOVU_SECRET_KEY||process.env.NOVU_API_KEY||""}var Ta=qt(require("sanitize-html"),1),Og=["src","alt","width","height","loading","srcset","sizes","crossorigin","usemap","ismap","class","id","style","title","dir","lang"];function Ig(e){return e.toLowerCase().startsWith("on")}function Cg(e){return e.replace(/<\/([a-zA-Z][a-zA-Z0-9]*)\s*\/[^>]*>/g,"</$1>")}var Pg={allowedTags:Ta.default.defaults.allowedTags.concat(["style","img","html","head","body","link","meta","title"]),allowedAttributes:!1,transformTags:{"*":(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Ig(r)||(t[r]=i);return{tagName:e,attribs:t}},img:(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Og.includes(r.toLowerCase())&&(t[r]=i);return{tagName:e,attribs:t}}},allowVulnerableTags:!0,parseStyleAttributes:!1,parser:{lowerCaseAttributeNames:!0}},su=e=>{if(!e)return e;let n=Cg(e),t=/^<!DOCTYPE .*?>/,r=n.match(t),i=(0,Ta.default)(n,Pg);return r?r[0]+i:i},qi=e=>Object.keys(e).reduce((n,t)=>{let r=e[t];return typeof r=="string"?n[t]=su(r):Array.isArray(r)?n[t]=r.map(i=>typeof i=="string"?su(i):typeof i=="object"?qi(i):i):typeof r=="object"&&r!==null?n[t]=qi(r):n[t]=r,n},{});function lu(e,n=!0,t=console){n&&(t.info(`
113
+ ${et.bold(et.underline("Discovered workflowId:"))} '${e.workflowId}'`),e.steps.forEach((r,i)=>{let o=i===e.steps.length-1,a=o?"\u2514":"\u251C";t.info(`${a} ${ct.STEP} Discovered stepId: '${r.stepId}' Type: '${r.type}'`),r.providers.forEach((s,u)=>{let p=u===r.providers.length-1,d=o?" ":"\u2502",h=p?"\u2514":"\u251C";t.info(`${d} ${h} ${ct.PROVIDER} Discovered provider: '${s.type}'`)})}))}var cu=require("jsonrepair");function uu(e){let n=e.trim();return(n.startsWith("{")&&n.endsWith("}")||n.startsWith("[")&&n.endsWith("]"))&&n.length>2}var pu="__novuJsonString";function Mg(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&e[pu]===!0}function Cr(e){if(typeof e=="string"){if(!uu(e))return e;try{let n=JSON.parse(e);return{[pu]:!0,value:Cr(n)}}catch{return e}}if(Array.isArray(e))return e.map(n=>Cr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Cr(r);return n}return e}function Pr(e){if(Mg(e))return JSON.stringify(Pr(e.value));if(Array.isArray(e))return e.map(n=>Pr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Pr(r);return n}return e}function Ng(e){try{return JSON.parse(e),e}catch{try{return(0,cu.jsonrepair)(e)}catch{return e}}}function du(e){return Object.fromEntries(Object.entries(e).map(([n,t])=>typeof t=="string"?[n,uu(t)?Ng(t):t]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[n,du(t)]:[n,t]))}function hu(e){return!(e!=null&&e.data)||typeof e.data!="object"||Array.isArray(e.data)?e:{...e,data:du(e.data)}}var mu=qt(require("ajv"),1),gu=qt(require("ajv-formats"),1);var fu=e=>typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e));var ji=class extends xn{constructor(t,r){let i=r.length===1?"it":"them";super(`Tried to use a ${t} in @novu/framework without ${r.join(", ")} installed. Please install ${i} by running \`npm install ${r.join(" ")}\`.`);this.statusCode=500;this.code="MissingDependencyError"}};var Bi=async(e,n)=>{let t=new Set;if((await Promise.allSettled(e.map(i=>i.import))).forEach((i,o)=>{let a=e[o];i.status==="fulfilled"&&a.exports.every(u=>i.value[u]!==void 0)||t.add(a.name)}),t.size>0)throw new ji(n,Array.from(t))};var zi=class{constructor(){this.requiredImports=[];this.ajv=new mu.default({useDefaults:!0,removeAdditional:"failing",strict:!1}),(0,gu.default)(this.ajv),this.compiledSchemas=new Map}async canHandle(n){let t=n.type==="object"||!!n.anyOf||!!n.allOf||!!n.oneOf;return t&&await Bi(this.requiredImports,"JSON schema"),t}async validate(n,t){let r=this.compiledSchemas.get(t);r||(r=this.ajv.compile(t),this.compiledSchemas.set(t,r));let i=fu(n);return r(i)?{success:!0,data:i}:{success:!1,errors:r.errors.map(a=>({path:a.instancePath,message:a.message}))}}async transformToJsonSchema(n){return n}};var Vi=class{constructor(){this.requiredImports=[{name:"zod",import:import("zod"),exports:["ZodType"]},{name:"zod-to-json-schema",import:import("zod-to-json-schema"),exports:["zodToJsonSchema"]}]}async canHandle(n){let t=n.safeParseAsync!==void 0;return t&&await Bi(this.requiredImports,"Zod schema"),t}async validate(n,t){let r=await t.safeParseAsync(n);return r.success?{success:!0,data:r.data}:{success:!1,errors:r.error.issues.map(i=>({path:`/${i.path.join("/")}`,message:i.message}))}}async transformToJsonSchema(n){let{zodToJsonSchema:t}=await import("zod-to-json-schema");return t(n)}};var Wi=new Vi,Hi=new zi,Mr=async(e,n)=>{if(await Wi.canHandle(e))return Wi.validate(n,e);if(await Hi.canHandle(e))return Hi.validate(n,e);throw new Error("Invalid schema")},yt=async e=>{if(await Wi.canHandle(e))return Wi.transformToJsonSchema(e);if(await Hi.canHandle(e))return Hi.transformToJsonSchema(e);throw new Error("Invalid schema")};function yu(){return["development",void 0,"dev"].includes(process.env.NODE_ENV)}var Qn=class{constructor(n){this.discoveredWorkflows=new Map;this.discoverWorkflowPromises=new Map;this.registeredAgents=new Map;this.version="2.12.1";let t=this.buildOptions(n);this.apiUrl=t.apiUrl,this.secretKey=t.secretKey,this.strictAuthentication=t.strictAuthentication,this.verbose=t.verbose,this.logger=t.logger,this.templateEngine=au()}buildOptions(n){let t={apiUrl:Ui(n==null?void 0:n.apiUrl),secretKey:$i(n==null?void 0:n.secretKey),strictAuthentication:!yu(),verbose:yu(),logger:console};return(n==null?void 0:n.strictAuthentication)!==void 0?t.strictAuthentication=n.strictAuthentication:process.env.NOVU_STRICT_AUTHENTICATION_ENABLED!==void 0&&(t.strictAuthentication=process.env.NOVU_STRICT_AUTHENTICATION_ENABLED==="true"),(n==null?void 0:n.verbose)!==void 0&&(t.verbose=n.verbose),(n==null?void 0:n.logger)!==void 0&&(t.logger=n.logger),t}log(...n){this.verbose&&this.logger.info(...n)}async addWorkflows(n){for(let t of n){if(this.discoveredWorkflows.has(t.id))continue;let r=this.discoverWorkflowPromises.get(t.id);if(r){await r;continue}let i=this.addWorkflow(t);this.discoverWorkflowPromises.set(t.id,i),await i}}addAgents(n){for(let t of n)this.registeredAgents.set(t.id,t)}getAgent(n){return this.registeredAgents.get(n)}async addWorkflow(n){try{let t=await n.discover();lu(t,this.verbose,this.logger),this.discoveredWorkflows.set(n.id,t)}finally{this.discoverWorkflowPromises.delete(n.id)}}healthCheck(){let n=this.getRegisteredWorkflows(),t=n.length,r=n.reduce((i,o)=>i+o.steps.length,0);return{status:"ok",sdkVersion:"2.12.1",frameworkVersion:"2024-06-26",discovered:{workflows:t,steps:r}}}getWorkflow(n){let t=this.discoveredWorkflows.get(n);if(t)return t;throw new Rr(n)}getStep(n,t){let i=this.getWorkflow(n).steps.find(o=>o.stepId===t);if(i)return i;throw new Mi(t)}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 Hc(n)}catch(t){return this.logger.warn("Failed to mock schema, returning empty object:",t),{}}}async validate(n,t,r,i,o,a,s){let u=await Mr(t,n);if(u.success)return u.data;switch(r){case"event":this.throwInvalidEvent(i,o,u.errors);case"step":this.throwInvalidStep(a,i,o,u.errors);case"provider":this.throwInvalidProvider(a,s,i,o,u.errors);default:throw new Error(`Invalid component: '${r}'`)}}throwInvalidProvider(n,t,r,i,o){throw n?t?r==="output"?new Si(i,n,t,o):new Error(`Invalid payload type: '${r}'`):new Error("providerId is required"):new Error("stepId is required")}throwInvalidStep(n,t,r,i){if(!n)throw new Error("stepId is required");switch(t){case"output":throw new yi(r,n,i);case"result":throw new bi(r,n,i);case"controls":throw new gi(r,n,i);default:throw new Error(`Invalid payload type: '${t}'`)}}throwInvalidEvent(n,t,r){switch(n){case"controls":throw new mi(t,r);case"payload":throw new vr(t,r);default:throw new Error(`Invalid payload type: '${n}'`)}}executeStepFactory(n,t,r){return async(i,o,a)=>{if(r())return;let s=this.getStep(n.workflowId,i),u=n.action==="preview";if(!u&&i===n.stepId){let g=await this.createStepControls(s,n),P=await this.compileControls(g,n);if(await this.shouldSkip(a==null?void 0:a.skip,P))return t({options:{skip:!0},outputs:{},providers:{}}),{}}let p=this.previewStep.bind(this),d=this.executeStep.bind(this),y=await(u?p:d)(n,{...s,providers:s.providers.map(g=>{var ee;let P=(ee=a==null?void 0:a.providers)==null?void 0:ee[g.type];if(!P)throw new Ei(g.type);return{...g,resolve:P}}),resolve:o});return this.shouldSanitize({stepType:s.type,options:a})&&(y={...y,outputs:qi(y.outputs)}),i===n.stepId&&t({...y,options:{skip:!1}}),y.outputs}}shouldSanitize({stepType:n,options:t}){return(t==null?void 0:t.disableOutputSanitization)===!0?!1:["email","in_app"].includes(n)}async shouldSkip(n,t){return n?n(t):!1}async executeWorkflow(n){let i=`${{execute:"Executing",preview:"Previewing"}[n.action]||n.action} workflowId:`;this.log(`
114
114
  ${et.bold(et.underline(i))} '${n.workflowId}'`);let o=this.getWorkflow(n.workflowId),a=process.hrtime(),s={outputs:{},providers:{},options:{skip:!1}},u,p=!1,d=new Promise(Oe=>{u=Oe}),h=Oe=>{if(p)throw new Error("setResult can only be called once per workflow execution");u(),p=!0,s=Oe},y=()=>p,g;try{if(n.action==="execute"&&!n.payload)throw new vr(n.workflowId,{message:"Event `payload` is required"});let Oe=await this.createExecutionPayload(n,o),$={...n,payload:Oe};await Promise.race([d,o.execute({payload:Oe,env:n.env,controls:{},subscriber:n.subscriber,context:n.context,step:{email:this.executeStepFactory($,h,y),sms:this.executeStepFactory($,h,y),inApp:this.executeStepFactory($,h,y),digest:this.executeStepFactory($,h,y),delay:this.executeStepFactory($,h,y),push:this.executeStepFactory($,h,y),chat:this.executeStepFactory($,h,y),custom:this.executeStepFactory($,h,y),throttle:this.executeStepFactory($,h,y)}})])}catch(Oe){g=Oe}let P=process.hrtime(a),ee=P[0],Z=P[1],B=ee*1e3+Z/1e6,ue=g?ct.ERROR:ct.SUCCESS,Ae={execute:"Executed",preview:"Previewed"}[n.action]||n.action;if(this.log(`${ue} ${Ae} workflowId: \`${n.workflowId}\``),this.prettyPrintExecute(n,B,g),g)throw g;return{outputs:s.outputs,providers:s.providers,options:s.options,metadata:{status:"success",error:!1,duration:B}}}async createExecutionPayload(n,t){let{payload:r}=n;if(n.action==="preview"){let o=this.mock(t.payload.schema);r=Object.assign(o,r)}return await this.validate(r,t.payload.unknownSchema,"event","payload",n.workflowId)}prettyPrintExecute(n,t,r){if(!this.verbose)return;let i=r?ct.ERROR:ct.SUCCESS,a={execute:"Executed",preview:"Previewed"}[n.action]||n.action,s=r?"Failed to execute":a,u=r?et.error:et.success,p=`${i} ${s} workflowId: '${n.workflowId}`;this.logger.info(`
115
115
  ${et.bold(u(p))}'
116
116
  \u251C ${ct.STEP} stepId: '${n.stepId}'
117
117
  \u251C ${ct.ACTION} action: '${n.action}'
118
118
  \u2514 ${ct.DURATION} duration: '${t.toFixed(2)}ms'
119
- `)}async executeProviders(n,t,r){return t.providers.reduce(async(i,o)=>{let a=await i,s=this.previewProvider.bind(this),u=this.executeProvider.bind(this),d=await(n.action==="preview"?s:u)(n,t,o,r);return{...a,[o.type]:d}},Promise.resolve({}))}previewProvider(n,t,r,i){return this.log(` ${ct.MOCK} Mocked provider: \`${r.type}\``),this.mock(r.outputs.schema)}async executeProvider(n,t,r,i){try{if(n.stepId===t.stepId){let o=await this.createStepControls(t,n),a=await r.resolve({controls:o,outputs:i}),s=await this.validate(a,r.outputs.unknownSchema,"step","output",n.workflowId,t.stepId,r.type);return this.log(` ${ct.SUCCESS} Executed provider: \`${r.type}\``),{...s,_passthrough:a._passthrough}}else return this.log(` ${ct.HYDRATED} Hydrated provider: \`${r.type}\``),{}}catch(o){throw this.log(` ${ct.ERROR} Failed to execute provider: \`${r.type}\``),new _i(r.type,n.action,o)}}async executeStep(n,t){if(n.stepId===t.stepId)try{let r=await this.createStepControls(t,n),i=await this.compileControls(r,n),o=await t.resolve(i),a=await this.validate(o,t.outputs.unknownSchema,"step","output",n.workflowId,t.stepId),s=await this.executeProviders(n,t,a);return this.log(` ${ct.SUCCESS} Executed stepId: \`${t.stepId}\``),{outputs:a,providers:s}}catch(r){throw this.log(` ${ct.ERROR} Failed to execute stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}else try{let r=this.getStepState(n,t.stepId);if(r){let i=await this.validate(r.outputs,t.results.unknownSchema,"step","result",n.workflowId,t.stepId);return this.log(` ${ct.HYDRATED} Hydrated stepId: \`${t.stepId}\``),{outputs:i,providers:await this.executeProviders(n,t,i)}}else throw new fi(n.workflowId,t.stepId)}catch(r){throw this.log(` ${ct.ERROR} Failed to hydrate stepId: \`${t.stepId}\``),r}}async compileControls(n,t){var r;try{let i=Cr(n),o=this.preprocessTranslationPatterns(JSON.stringify(i));o=this.preprocessFilterTranslationArgs(o);let a=this.templateEngine.parse(o),s=this.getWorkflow(t.workflowId),u={workflow:{workflowId:s.workflowId,name:s.name,description:s.description,tags:s.tags,severity:s.severity},payload:t.payload,subscriber:t.subscriber,...t.actor&&{actor:t.actor},context:t.context,steps:Lg(t.state),env:(r=t.env)!=null?r:{}},p=await this.templateEngine.render(a,u),d=this.postprocessTranslationMarkers(p),h=(0,bu.jsonrepair)(d),y=JSON.parse(h),g=Pr(y);return hu(g)}catch(i){throw new wi(t.workflowId,t.stepId,i)}}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,t){return await this.validate(t.controls,n.controls.unknownSchema,"step","controls",t.workflowId,n.stepId)}async previewStep(n,t){try{return await this.constructStepForPreview(n,t)}catch(r){throw this.log(` ${ct.ERROR} Failed to preview stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}}async constructStepForPreview(n,t){return n.stepId===t.stepId?await this.previewRequiredStep(t,n):await this.extractMockDataForPreviousSteps(n,t)}async extractMockDataForPreviousSteps(n,t){let r={},i=this.getStepState(n,t.stepId),o=this.mock(t.results.schema);return{outputs:xa(o,(i==null?void 0:i.outputs)||{}),providers:await this.executeProviders(n,t,r)}}async previewRequiredStep(n,t){let r=await this.createStepControls(n,t),i=await this.compileControls(r,t),o=await n.resolve(i),a=await this.validate(o,n.outputs.unknownSchema,"step","output",t.workflowId,n.stepId);return this.log(` ${ct.MOCK} Mocked stepId: \`${n.stepId}\``),{outputs:a,providers:await this.executeProviders(t,n,a)}}getStepState(n,t){return n.state.find(r=>r.stepId===t)}getStepCode(n,t){return{code:this.getStep(n,t).resolve.toString()}}getWorkflowCode(n){return{code:this.getWorkflow(n).execute.toString()}}getCode(n,t){let r;if(n)t?r=this.getStepCode(n,t):r=this.getWorkflowCode(n);else throw new Rr(n);return r}};function Lg(e){let n={};for(let t of e)n[t.stepId]=t.outputs;return n}var Dg={400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",408:"Request Timeout",409:"Conflict",422:"Unprocessable Entity",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"};function Yi(e){return typeof e=="string"&&e.trim()?e:!e||typeof e!="object"?null:Yi(e.message)}function Fg(e){if(!e)return null;let n;try{n=JSON.parse(e)}catch{return null}if(!n||typeof n!="object")return null;let t=n,r=Yi(t.message);if(r)return r;let i=Yi(t.error);if(i)return i;let o=t.errors;return Array.isArray(o)?Yi(o[0]):null}function Ug(e,n){var i;let t=(i=Dg[e])!=null?i:e,r=Fg(n);return r?`Delivery failed: ${t}: ${r}`:`Delivery failed: ${t}`}var pn=class extends Error{constructor(n,t){super(n),this.name="AgentError",this.cause=t==null?void 0:t.cause,this.delivery=t==null?void 0:t.delivery}},Dn=class extends pn{constructor(n,t){let r={statusCode:n,responseBody:t};super(Ug(n,t),{delivery:r}),this.name="AgentDeliveryError",this.statusCode=n,this.responseBody=t}};function Nr(e){return e instanceof pn?e:e instanceof Error?new pn(e.message,{cause:e}):new pn("Turn failed",{cause:e})}var wu=Symbol.for("novu.agent.runtimeContext");var ka=(i=>(i.ON_MESSAGE="onMessage",i.ON_ACTION="onAction",i.ON_RESOLVE="onResolve",i.ON_REACTION="onReaction",i))(ka||{}),Zn=class{constructor(){this.__novuPendingApproval=!0}};function Su(e){return typeof e=="object"&&e!==null&&"suppress"in e&&e.suppress===!0}function Ji(e){return"type"in e&&e.type==="card"}function xu(e){return typeof e=="object"&&e!==null&&e.type==="tool-approval-card"}var Tu="tool-approval";function $g(e){return e==="approve"||e==="deny"}function Aa(e,n){return`${Tu}:${e}:${n}`}function ku(e){let[n,t,...r]=(e!=null?e:"").split(":"),i=r.join(":");return n!==Tu||!$g(t)||!i?null:{approved:t==="approve",approvalId:i}}async function Au(e,n,t,r){var p,d;let i=r!=null?r:n.id,o={approve:Aa("approve",i),deny:Aa("deny",i)},a=h=>({type:"tool-approval-card",...h}),s=(d=(p=t==null?void 0:t.renderApproval)==null?void 0:p.call(t,{toolCall:n,actionIds:o,approvalCard:a}))!=null?d:a(),u={approvalId:i,toolCallId:n.id,name:n.name,input:n.input};if(e.emitToolApprovalRequest(u),xu(s)){await e.replyApprovalCard(s);return}await e.reply(s)}var tS=5*1024*1024,nS=5*1024*1024,vf=32768,rS=/^[A-Za-z0-9+/]*={0,2}$/;function Kr(e,n){return e.filename?`"${e.filename}"`:`at index ${n}`}function _f(){return globalThis.Buffer}function iS(e){var n,t,r;return(r=(t=(n=_f())==null?void 0:n.isBuffer)==null?void 0:t.call(n,e))!=null?r:!1}function oS(e){return typeof Blob!="undefined"&&e instanceof Blob}function bl(e){let n=_f();if(n)return n.from(e).toString("base64");if(typeof btoa!="function")throw new Error("Unable to encode file data: base64 encoding is not available in this runtime.");let t="";for(let r=0;r<e.length;r+=vf){let i=e.subarray(r,r+vf);t+=String.fromCharCode(...i)}return btoa(t)}function Rf(e){let n=e.replace(/\s/g,""),t=n.length%4;if(!n||t===1||!rS.test(n))return null;let r=n.endsWith("==")?2:n.endsWith("=")?1:0;return Math.floor(n.length*3/4)-r}function Jr(e,n,t){if(e>tS)throw new Error(`Invalid file ${Kr(n,t)}: inline data must be 5 MB or smaller. Use a publicly-accessible URL for larger files.`)}async function aS(e,n,t){if(typeof e=="string"){let r=Rf(e);if(r===null)throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64-encoded string.`);return Jr(r,n,t),e}if(iS(e))return Jr(e.byteLength,n,t),e.toString("base64");if(e instanceof Uint8Array)return Jr(e.byteLength,n,t),bl(e);if(e instanceof ArrayBuffer)return Jr(e.byteLength,n,t),bl(new Uint8Array(e));if(oS(e))return Jr(e.size,n,t),bl(new Uint8Array(await e.arrayBuffer()));throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64 string, Buffer, Uint8Array, ArrayBuffer, or Blob.`)}async function sS(e){if(!(e!=null&&e.length))return;let n=[],t=0;for(let[r,i]of e.entries()){let o=i.data,a=i.url,s=o!=null,u=a!=null;if(s===u)throw new Error(`Invalid file ${Kr(i,r)}: provide exactly one of data or url.`);if(s){let p=await aS(o,i,r),d=Rf(p);if(t+=d!=null?d:0,t>nS)throw new Error("Invalid files: total inline data must be 5 MB or smaller. Use publicly-accessible URLs for larger files.");n.push({...i,data:p});continue}if(u&&typeof a!="string")throw new Error(`Invalid file ${Kr(i,r)}: url must be a string.`);n.push(i)}return n}async function Of(e,n){let t=await sS(n);if(typeof e=="string")return t?{markdown:e,files:t}:{markdown:e};let{isJSX:r,toCardElement:i}=await Promise.resolve().then(()=>(Af(),kf));if(r(e)){let o=i(e);if(o)return t?{card:o,files:t}:{card:o}}if(Ji(e))return t?{card:e,files:t}:{card:e};throw new Error("Invalid message content \u2014 expected string or CardElement")}var Gr=class{constructor(n,t,r,i,o){this.conversationId=r;this.integrationIdentifier=i;this.poster=o;this.editedByHandler=!1;this.messageId=n,this.platformThreadId=t}async edit(n,t){this.editedByHandler=!0;let r=await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,edit:{messageId:this.messageId,content:await Of(n,t==null?void 0:t.files)}});if(!r)throw new Error("Agent edit did not return a message handle");return this.messageId=r.messageId,this.platformThreadId=r.platformThreadId,this}async delete(){await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,deleteMessages:[{messageId:this.messageId}]})}},Ef;Ef=wu;var Do=class{constructor(n,t,r){this[Ef]=!0;this._signals=[];this._toolResults=[];this._pendingToolApprovalRequest=null;this._pendingReactions=[];this._pendingDeletes=[];this._resolveSignal=null;var s,u;this.event=n.event,this.action=(s=n.action)!=null?s:null,this.message=n.message,this.reaction=n.reaction,this.conversation=n.conversation,this.subscriber=n.subscriber,this.history=n.history,this.platform=n.platform,this.platformContext=n.platformContext,this._replyUrl=n.replyUrl,this._conversationId=n.conversationId,this._integrationIdentifier=n.integrationIdentifier,this._secretKey=t,this._poster={post:p=>this._post(p)},this._toolApprovalConfig=r,this._metadataState={...(u=n.conversation.metadata)!=null?u:{}};let i=this;this.metadata={get(p){return i._metadataState[p]},set(p,d){i._metadataState[p]=d,i._signals.push({type:"metadata",action:"set",key:p,value:d})},delete(p){delete i._metadataState[p],i._signals.push({type:"metadata",action:"delete",key:p})},clear(){i._metadataState={},i._signals.push({type:"metadata",action:"clear"})},get current(){return{...i._metadataState}}};let o=p=>this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,typing:p}).then(()=>{}),a=(p=>o(p===void 0?{}:{status:p}));a.stop=()=>o("stop"),this.typing=a,this.toolApproval={request:async p=>(await Au(this,p,this._toolApprovalConfig),new Zn)}}asMessageContext(){return this}async reply(n,t){let r=await Of(n,t==null?void 0:t.files),i={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:r};this._drainSideEffects(i);let o=await this._post(i);if(!o)throw new Error("Agent reply did not return a message handle");return new Gr(o.messageId,o.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}async replyApprovalCard(n){let t={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:{toolApprovalCard:n}};this._drainSideEffects(t);let r=await this._post(t);if(!r)throw new Error("Agent approval card reply did not return a message handle");return new Gr(r.messageId,r.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}createReplyHandle(n){return new Gr(n,"",this._conversationId,this._integrationIdentifier,this._poster)}resolve(n){this._resolveSignal={summary:n}}trigger(n,t){this._signals.push({...t,type:"trigger",workflowId:n})}emitToolApprovalRequest(n){if(this._pendingToolApprovalRequest)throw new Error("Only one tool approval request can be queued before the next reply");this._pendingToolApprovalRequest=n}emitToolResult(n){this._toolResults.push(n)}addReaction(n,t){this._pendingReactions.push({messageId:n,emojiName:t})}deleteMessage(n){this._pendingDeletes.push({messageId:n})}async reportTurnError(){try{await this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,error:!0})}catch(n){console.error("[agent] Failed to report turn error:",n)}}async flush(){if(!this._hasPendingSideEffects())return;let n={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier};this._drainSideEffects(n),await this._post(n)}_hasPendingSideEffects(){return!!(this._pendingToolApprovalRequest||this._signals.length||this._toolResults.length||this._resolveSignal||this._pendingReactions.length||this._pendingDeletes.length)}_drainSideEffects(n){this._pendingToolApprovalRequest&&(n.toolApprovalRequest=this._pendingToolApprovalRequest,this._pendingToolApprovalRequest=null),this._signals.length&&(n.signals=this._signals,this._signals=[]),this._toolResults.length&&(n.toolResults=this._toolResults,this._toolResults=[]),this._pendingReactions.length&&(n.addReactions=this._pendingReactions,this._pendingReactions=[]),this._pendingDeletes.length&&(n.deleteMessages=this._pendingDeletes,this._pendingDeletes=[]),this._resolveSignal&&(n.resolve=this._resolveSignal,this._resolveSignal=null)}async _post(n){let t=await fetch(this._replyUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${this._secretKey}`},body:JSON.stringify(n)});if(!t.ok){let i=await t.text().catch(()=>"");throw new Dn(t.status,i)}let r=await t.text().catch(()=>"");if(!r)return null;try{let i=JSON.parse(r),o=i&&typeof i=="object"&&"data"in i?i.data:i;if(o&&typeof o.messageId=="string"&&typeof o.platformThreadId=="string")return{messageId:o.messageId,platformThreadId:o.platformThreadId}}catch{}return null}};function lS(e){return!!(typeof e=="string"||typeof e=="object"&&e!==null&&Ji(e)||typeof e=="object"&&e!==null&&("markdown"in e||"card"in e||"files"in e))}function cS(e,n){return e}function uS(e,n){var t;for(let r of e){let i=r.toolData;if(r.type==="tool_approval_request"&&(i==null?void 0:i.approvalId)===n&&i.toolCallId)return{approvalId:i.approvalId,toolCallId:i.toolCallId,name:(t=i.toolName)!=null?t:"tool",input:i.input}}}async function If(e){var o;let n=new Do(e.bridge,e.secretKey,e.agent.handlers.toolApproval),{agent:t,event:r,logger:i}=e;try{await pS(t,r,n),await n.flush()}catch(a){let s=Nr(a);i==null||i.error(`[agent:${t.id}] Turn failed (${r}): ${s.message}`,(o=s.cause)!=null?o:s);let u=!1;if(t.handlers.onError)try{let p=await t.handlers.onError(s,cS(n,r));Su(p)?u=!0:lS(p)&&(await n.reply(p),u=!0)}catch(p){i==null||i.error(`[agent:${t.id}] onError failed:`,p)}u||await n.reportTurnError()}finally{try{await n.typing.stop()}catch{}}}async function pS(e,n,t){var i,o;let r=async a=>{a instanceof Zn||a===void 0||await t.reply(a)};switch(n){case"onMessage":{await r(await e.handlers.onMessage(t.message,t));break}case"onAction":{let a=ku((i=t.action)==null?void 0:i.id);if(a&&e.handlers.onToolApproval){let{approved:s,approvalId:u}=a,p=uS(t.history,u),d=p?{id:p.toolCallId,name:p.name,input:p.input}:{id:u,name:""},h=t.createReplyHandle((o=t.action.sourceMessageId)!=null?o:""),y={toolCall:d,approved:s,approvalMessage:h};e.userOnToolApproval===!1&&(await t.typing(),t.action.sourceMessageId&&await h.delete());let g=await e.handlers.onToolApproval(y,t);await r(g);break}e.handlers.onAction&&await r(await e.handlers.onAction(t.action,t));break}case"onReaction":e.handlers.onReaction&&await r(await e.handlers.onReaction(t.reaction,t));break;case"onResolve":e.handlers.onResolve&&await r(await e.handlers.onResolve(t));break;default:throw new Mn(n,ka)}}function Cf(e){let n={};for(let i of e.split(",")){let o=i.trim();if(!o)continue;let a=o.indexOf("=");if(a<=0)continue;let s=o.slice(0,a),u=o.slice(a+1);s&&u&&!(s in n)&&(n[s]=u)}let t=n.t,r=t!==void 0?Number(t):Number.NaN;return{t:Number.isFinite(r)?r:void 0,v1:n.v1}}var ar=class{constructor(n){this.handler=n.handler,this.client=n.client?n.client:new Qn,this.workflows=n.workflows||[],this.agents=n.agents||[],this.http=Di(this.client.secretKey,this.client.apiUrl),this.frameworkName=n.frameworkName,this.hmacEnabled=this.client.strictAuthentication,this.client.addAgents(this.agents)}createHandler(){return async(...n)=>{await this.client.addWorkflows(this.workflows);let t=await this.handler(...n),r=await this.handleAction({actions:t});return t.transformResponse(r)}}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.11.2-alpha.0","novu-framework-server":this.frameworkName,"user-agent":n}}createResponse(n,t){return{status:n,body:JSON.stringify(t),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}){let t=await n.url(),r=await n.method(),i=t.searchParams.get("action")||"health-check",o=t.searchParams.get("workflowId")||"",a=t.searchParams.get("stepId")||"",s=t.searchParams.get("agentId")||"",u=t.searchParams.get("event")||"",p=await n.headers("novu-signature")||"",d={};try{r==="POST"&&(d=await n.body())}catch{}try{i!=="health-check"&&await this.validateHmac(d,p);let h=this.getPostActionMap(d,o,a,i,s,u,n.waitUntil),y=this.getGetActionMap(o,a);if(r==="POST")return await this.handlePostAction(i,h);if(r==="GET")return await this.handleGetAction(i,y);if(r==="OPTIONS")return this.createResponse(200,{})}catch(h){return this.handleError(h)}return this.createError(new ki(r))}getPostActionMap(n,t,r,i,o,a,s){return{trigger:this.triggerAction({workflowId:t,...n}),execute:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},preview:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},"agent-event":async()=>{let u=this.client.getAgent(o);if(!u)return this.createResponse(404,{error:`Agent '${o}' not registered`});let p=If({agent:u,event:a,bridge:n,secretKey:this.client.secretKey,logger:this.client.logger});return s&&s(p),this.createResponse(200,{status:"ack"})}}}triggerAction(n){return async()=>{let t={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}},r=await this.http.post("/events/trigger",t);return this.createResponse(200,r)}}getGetActionMap(n,t){return{discover:async()=>{let r=await this.client.discover();return this.createResponse(200,r)},"health-check":async()=>{let r=await this.client.healthCheck();return this.createResponse(200,r)},code:async()=>{let r=await this.client.getCode(n,t);return this.createResponse(200,r)}}}async handlePostAction(n,t){if(Object.values(kr).includes(n)){let r=t[n];return r()}else throw new Mn(n,kr)}async handleGetAction(n,t){if(Object.values(ui).includes(n)){let r=t[n];return r()}else throw new Mn(n,ui)}handleError(n){if(Pn(n))return n.statusCode>=500&&this.client.logger.error(n),this.createError(n);if(Uc(n))return this.createError(n);{let t=new Gn(n);return this.client.logger.error(t),this.createError(t)}}async validateHmac(n,t){if(!this.hmacEnabled)return;if(!t)throw new Oi;if(!this.client.secretKey)throw new Pi;let r=Cf(t);if(!r.v1||r.t===void 0)throw new Ii;let i=Date.now();if(r.t<i-3e5||r.t>i+3e5)throw new Ci;let o=await Yc(this.client.secretKey,`${r.t}.${JSON.stringify(n)}`);if(!Jc(o,r.v1))throw new Ri}};yl();var sr=Symbol.for("workflow-serialize"),lr=Symbol.for("workflow-deserialize");var dS=Object.defineProperty,hS=Object.defineProperties,fS=Object.getOwnPropertyDescriptors,Mf=Object.getOwnPropertySymbols,mS=Object.prototype.hasOwnProperty,gS=Object.prototype.propertyIsEnumerable,Nf=(e,n,t)=>n in e?dS(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,Uf=(e,n)=>{for(var t in n||(n={}))mS.call(n,t)&&Nf(e,t,n[t]);if(Mf)for(var t of Mf(n))gS.call(n,t)&&Nf(e,t,n[t]);return e},$f=(e,n)=>hS(e,fS(n)),It=(e,n)=>{let t=!1,r=!1;for(let i=0;i<n;i+=1){if(e[i]==="\\"&&i+1<e.length&&e[i+1]==="`"){i+=1;continue}if(e.substring(i,i+3)==="```"){r=!r,i+=2;continue}!r&&e[i]==="`"&&(t=!t)}return t||r},yS=(e,n)=>{let t=e.substring(n,n+3)==="```",r=n>0&&e.substring(n-1,n+2)==="```",i=n>1&&e.substring(n-2,n+1)==="```";return t||r||i},bS=e=>{let n=0;for(let t=0;t<e.length;t+=1){if(e[t]==="\\"&&t+1<e.length&&e[t+1]==="`"){t+=1;continue}e[t]==="`"&&!yS(e,t)&&(n+=1)}return n},Rn=(e,n)=>{let t=!1,r=!1,i=-1;for(let o=0;o<e.length;o+=1){if(e[o]==="\\"&&o+1<e.length&&e[o+1]==="`"){o+=1;continue}if(e.substring(o,o+3)==="```"){r=!r,o+=2;continue}if(!r&&e[o]==="`")if(t){if(i<n&&n<o)return!0;t=!1,i=-1}else t=!0,i=o}return!1},wS=/^(\s*(?:[-*+]|\d+[.)]) +)>(=?\s*[$]?\d)/gm,SS=e=>!e||typeof e!="string"||!e.includes(">")?e:e.replace(wS,(n,t,r,i)=>It(e,i)?n:`${t}\\>${r}`),xS=/(\*\*)([^*]*\*?)$/,TS=/(__)([^_]*?)$/,kS=/(\*\*\*)([^*]*?)$/,AS=/(\*)([^*]*?)$/,vS=/(_)([^_]*?)$/,ES=/(`)([^`]*?)$/,_S=/(~~)([^~]*?)$/,Vn=/^[\s_~*`]*$/,qf=/^[\s]*[-*+][\s]+$/,RS=/[\p{L}\p{N}_]/u,OS=/^```[^`\n]*```?$/,IS=/^\*{4,}$/,CS=/(__)([^_]+)_$/,PS=/(~~)([^~]+)~$/,Lf=/~~/g,On=e=>{if(!e)return!1;let n=e.charCodeAt(0);return n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||n===95?!0:RS.test(e)};var MS=(e,n)=>{let t=1;for(let r=n-1;r>=0;r-=1)if(e[r]==="]")t+=1;else if(e[r]==="["&&(t-=1,t===0))return r;return-1},jf=(e,n)=>{let t=1;for(let r=n+1;r<e.length;r+=1)if(e[r]==="[")t+=1;else if(e[r]==="]"&&(t-=1,t===0))return r;return-1},Fo=(e,n)=>{let t=!1,r=!1;for(let i=0;i<e.length&&i<n;i+=1){if(e[i]==="\\"&&e[i+1]==="$"){i+=1;continue}e[i]==="$"&&(e[i+1]==="$"?(r=!r,i+=1,t=!1):r||(t=!t))}return t||r},NS=(e,n)=>{for(let t=n;t<e.length;t+=1){if(e[t]===")")return!0;if(e[t]===`
119
+ `)}async executeProviders(n,t,r){return t.providers.reduce(async(i,o)=>{let a=await i,s=this.previewProvider.bind(this),u=this.executeProvider.bind(this),d=await(n.action==="preview"?s:u)(n,t,o,r);return{...a,[o.type]:d}},Promise.resolve({}))}previewProvider(n,t,r,i){return this.log(` ${ct.MOCK} Mocked provider: \`${r.type}\``),this.mock(r.outputs.schema)}async executeProvider(n,t,r,i){try{if(n.stepId===t.stepId){let o=await this.createStepControls(t,n),a=await r.resolve({controls:o,outputs:i}),s=await this.validate(a,r.outputs.unknownSchema,"step","output",n.workflowId,t.stepId,r.type);return this.log(` ${ct.SUCCESS} Executed provider: \`${r.type}\``),{...s,_passthrough:a._passthrough}}else return this.log(` ${ct.HYDRATED} Hydrated provider: \`${r.type}\``),{}}catch(o){throw this.log(` ${ct.ERROR} Failed to execute provider: \`${r.type}\``),new _i(r.type,n.action,o)}}async executeStep(n,t){if(n.stepId===t.stepId)try{let r=await this.createStepControls(t,n),i=await this.compileControls(r,n),o=await t.resolve(i),a=await this.validate(o,t.outputs.unknownSchema,"step","output",n.workflowId,t.stepId),s=await this.executeProviders(n,t,a);return this.log(` ${ct.SUCCESS} Executed stepId: \`${t.stepId}\``),{outputs:a,providers:s}}catch(r){throw this.log(` ${ct.ERROR} Failed to execute stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}else try{let r=this.getStepState(n,t.stepId);if(r){let i=await this.validate(r.outputs,t.results.unknownSchema,"step","result",n.workflowId,t.stepId);return this.log(` ${ct.HYDRATED} Hydrated stepId: \`${t.stepId}\``),{outputs:i,providers:await this.executeProviders(n,t,i)}}else throw new fi(n.workflowId,t.stepId)}catch(r){throw this.log(` ${ct.ERROR} Failed to hydrate stepId: \`${t.stepId}\``),r}}async compileControls(n,t){var r;try{let i=Cr(n),o=this.preprocessTranslationPatterns(JSON.stringify(i));o=this.preprocessFilterTranslationArgs(o);let a=this.templateEngine.parse(o),s=this.getWorkflow(t.workflowId),u={workflow:{workflowId:s.workflowId,name:s.name,description:s.description,tags:s.tags,severity:s.severity},payload:t.payload,subscriber:t.subscriber,...t.actor&&{actor:t.actor},context:t.context,steps:Lg(t.state),env:(r=t.env)!=null?r:{}},p=await this.templateEngine.render(a,u),d=this.postprocessTranslationMarkers(p),h=(0,bu.jsonrepair)(d),y=JSON.parse(h),g=Pr(y);return hu(g)}catch(i){throw new wi(t.workflowId,t.stepId,i)}}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,t){return await this.validate(t.controls,n.controls.unknownSchema,"step","controls",t.workflowId,n.stepId)}async previewStep(n,t){try{return await this.constructStepForPreview(n,t)}catch(r){throw this.log(` ${ct.ERROR} Failed to preview stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}}async constructStepForPreview(n,t){return n.stepId===t.stepId?await this.previewRequiredStep(t,n):await this.extractMockDataForPreviousSteps(n,t)}async extractMockDataForPreviousSteps(n,t){let r={},i=this.getStepState(n,t.stepId),o=this.mock(t.results.schema);return{outputs:xa(o,(i==null?void 0:i.outputs)||{}),providers:await this.executeProviders(n,t,r)}}async previewRequiredStep(n,t){let r=await this.createStepControls(n,t),i=await this.compileControls(r,t),o=await n.resolve(i),a=await this.validate(o,n.outputs.unknownSchema,"step","output",t.workflowId,n.stepId);return this.log(` ${ct.MOCK} Mocked stepId: \`${n.stepId}\``),{outputs:a,providers:await this.executeProviders(t,n,a)}}getStepState(n,t){return n.state.find(r=>r.stepId===t)}getStepCode(n,t){return{code:this.getStep(n,t).resolve.toString()}}getWorkflowCode(n){return{code:this.getWorkflow(n).execute.toString()}}getCode(n,t){let r;if(n)t?r=this.getStepCode(n,t):r=this.getWorkflowCode(n);else throw new Rr(n);return r}};function Lg(e){let n={};for(let t of e)n[t.stepId]=t.outputs;return n}var Dg={400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",408:"Request Timeout",409:"Conflict",422:"Unprocessable Entity",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"};function Yi(e){return typeof e=="string"&&e.trim()?e:!e||typeof e!="object"?null:Yi(e.message)}function Fg(e){if(!e)return null;let n;try{n=JSON.parse(e)}catch{return null}if(!n||typeof n!="object")return null;let t=n,r=Yi(t.message);if(r)return r;let i=Yi(t.error);if(i)return i;let o=t.errors;return Array.isArray(o)?Yi(o[0]):null}function Ug(e,n){var i;let t=(i=Dg[e])!=null?i:e,r=Fg(n);return r?`Delivery failed: ${t}: ${r}`:`Delivery failed: ${t}`}var pn=class extends Error{constructor(n,t){super(n),this.name="AgentError",this.cause=t==null?void 0:t.cause,this.delivery=t==null?void 0:t.delivery}},Dn=class extends pn{constructor(n,t){let r={statusCode:n,responseBody:t};super(Ug(n,t),{delivery:r}),this.name="AgentDeliveryError",this.statusCode=n,this.responseBody=t}};function Nr(e){return e instanceof pn?e:e instanceof Error?new pn(e.message,{cause:e}):new pn("Turn failed",{cause:e})}var wu=Symbol.for("novu.agent.runtimeContext");var ka=(i=>(i.ON_MESSAGE="onMessage",i.ON_ACTION="onAction",i.ON_RESOLVE="onResolve",i.ON_REACTION="onReaction",i))(ka||{}),Zn=class{constructor(){this.__novuPendingApproval=!0}};function Su(e){return typeof e=="object"&&e!==null&&"suppress"in e&&e.suppress===!0}function Ji(e){return"type"in e&&e.type==="card"}function xu(e){return typeof e=="object"&&e!==null&&e.type==="tool-approval-card"}var Tu="tool-approval";function $g(e){return e==="approve"||e==="deny"}function Aa(e,n){return`${Tu}:${e}:${n}`}function ku(e){let[n,t,...r]=(e!=null?e:"").split(":"),i=r.join(":");return n!==Tu||!$g(t)||!i?null:{approved:t==="approve",approvalId:i}}async function Au(e,n,t,r){var p,d;let i=r!=null?r:n.id,o={approve:Aa("approve",i),deny:Aa("deny",i)},a=h=>({type:"tool-approval-card",...h}),s=(d=(p=t==null?void 0:t.renderApproval)==null?void 0:p.call(t,{toolCall:n,actionIds:o,approvalCard:a}))!=null?d:a(),u={approvalId:i,toolCallId:n.id,name:n.name,input:n.input};if(e.emitToolApprovalRequest(u),xu(s)){await e.replyApprovalCard(s);return}await e.reply(s)}var tS=5*1024*1024,nS=5*1024*1024,vf=32768,rS=/^[A-Za-z0-9+/]*={0,2}$/;function Kr(e,n){return e.filename?`"${e.filename}"`:`at index ${n}`}function _f(){return globalThis.Buffer}function iS(e){var n,t,r;return(r=(t=(n=_f())==null?void 0:n.isBuffer)==null?void 0:t.call(n,e))!=null?r:!1}function oS(e){return typeof Blob!="undefined"&&e instanceof Blob}function bl(e){let n=_f();if(n)return n.from(e).toString("base64");if(typeof btoa!="function")throw new Error("Unable to encode file data: base64 encoding is not available in this runtime.");let t="";for(let r=0;r<e.length;r+=vf){let i=e.subarray(r,r+vf);t+=String.fromCharCode(...i)}return btoa(t)}function Rf(e){let n=e.replace(/\s/g,""),t=n.length%4;if(!n||t===1||!rS.test(n))return null;let r=n.endsWith("==")?2:n.endsWith("=")?1:0;return Math.floor(n.length*3/4)-r}function Jr(e,n,t){if(e>tS)throw new Error(`Invalid file ${Kr(n,t)}: inline data must be 5 MB or smaller. Use a publicly-accessible URL for larger files.`)}async function aS(e,n,t){if(typeof e=="string"){let r=Rf(e);if(r===null)throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64-encoded string.`);return Jr(r,n,t),e}if(iS(e))return Jr(e.byteLength,n,t),e.toString("base64");if(e instanceof Uint8Array)return Jr(e.byteLength,n,t),bl(e);if(e instanceof ArrayBuffer)return Jr(e.byteLength,n,t),bl(new Uint8Array(e));if(oS(e))return Jr(e.size,n,t),bl(new Uint8Array(await e.arrayBuffer()));throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64 string, Buffer, Uint8Array, ArrayBuffer, or Blob.`)}async function sS(e){if(!(e!=null&&e.length))return;let n=[],t=0;for(let[r,i]of e.entries()){let o=i.data,a=i.url,s=o!=null,u=a!=null;if(s===u)throw new Error(`Invalid file ${Kr(i,r)}: provide exactly one of data or url.`);if(s){let p=await aS(o,i,r),d=Rf(p);if(t+=d!=null?d:0,t>nS)throw new Error("Invalid files: total inline data must be 5 MB or smaller. Use publicly-accessible URLs for larger files.");n.push({...i,data:p});continue}if(u&&typeof a!="string")throw new Error(`Invalid file ${Kr(i,r)}: url must be a string.`);n.push(i)}return n}async function Of(e,n){let t=await sS(n);if(typeof e=="string")return t?{markdown:e,files:t}:{markdown:e};let{isJSX:r,toCardElement:i}=await Promise.resolve().then(()=>(Af(),kf));if(r(e)){let o=i(e);if(o)return t?{card:o,files:t}:{card:o}}if(Ji(e))return t?{card:e,files:t}:{card:e};throw new Error("Invalid message content \u2014 expected string or CardElement")}var Gr=class{constructor(n,t,r,i,o){this.conversationId=r;this.integrationIdentifier=i;this.poster=o;this.editedByHandler=!1;this.messageId=n,this.platformThreadId=t}async edit(n,t){this.editedByHandler=!0;let r=await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,edit:{messageId:this.messageId,content:await Of(n,t==null?void 0:t.files)}});if(!r)throw new Error("Agent edit did not return a message handle");return this.messageId=r.messageId,this.platformThreadId=r.platformThreadId,this}async delete(){await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,deleteMessages:[{messageId:this.messageId}]})}},Ef;Ef=wu;var Do=class{constructor(n,t,r){this[Ef]=!0;this._signals=[];this._toolResults=[];this._pendingToolApprovalRequest=null;this._pendingReactions=[];this._pendingDeletes=[];this._resolveSignal=null;var s,u;this.event=n.event,this.action=(s=n.action)!=null?s:null,this.message=n.message,this.reaction=n.reaction,this.conversation=n.conversation,this.subscriber=n.subscriber,this.history=n.history,this.platform=n.platform,this.platformContext=n.platformContext,this._replyUrl=n.replyUrl,this._conversationId=n.conversationId,this._integrationIdentifier=n.integrationIdentifier,this._secretKey=t,this._poster={post:p=>this._post(p)},this._toolApprovalConfig=r,this._metadataState={...(u=n.conversation.metadata)!=null?u:{}};let i=this;this.metadata={get(p){return i._metadataState[p]},set(p,d){i._metadataState[p]=d,i._signals.push({type:"metadata",action:"set",key:p,value:d})},delete(p){delete i._metadataState[p],i._signals.push({type:"metadata",action:"delete",key:p})},clear(){i._metadataState={},i._signals.push({type:"metadata",action:"clear"})},get current(){return{...i._metadataState}}};let o=p=>this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,typing:p}).then(()=>{}),a=(p=>o(p===void 0?{}:{status:p}));a.stop=()=>o("stop"),this.typing=a,this.toolApproval={request:async p=>(await Au(this,p,this._toolApprovalConfig),new Zn)}}asMessageContext(){return this}async reply(n,t){let r=await Of(n,t==null?void 0:t.files),i={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:r};this._drainSideEffects(i);let o=await this._post(i);if(!o)throw new Error("Agent reply did not return a message handle");return new Gr(o.messageId,o.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}async replyApprovalCard(n){let t={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:{toolApprovalCard:n}};this._drainSideEffects(t);let r=await this._post(t);if(!r)throw new Error("Agent approval card reply did not return a message handle");return new Gr(r.messageId,r.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}createReplyHandle(n){return new Gr(n,"",this._conversationId,this._integrationIdentifier,this._poster)}resolve(n){this._resolveSignal={summary:n}}trigger(n,t){this._signals.push({...t,type:"trigger",workflowId:n})}emitToolApprovalRequest(n){if(this._pendingToolApprovalRequest)throw new Error("Only one tool approval request can be queued before the next reply");this._pendingToolApprovalRequest=n}emitToolResult(n){this._toolResults.push(n)}addReaction(n,t){this._pendingReactions.push({messageId:n,emojiName:t})}deleteMessage(n){this._pendingDeletes.push({messageId:n})}async reportTurnError(){try{await this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,error:!0})}catch(n){console.error("[agent] Failed to report turn error:",n)}}async flush(){if(!this._hasPendingSideEffects())return;let n={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier};this._drainSideEffects(n),await this._post(n)}_hasPendingSideEffects(){return!!(this._pendingToolApprovalRequest||this._signals.length||this._toolResults.length||this._resolveSignal||this._pendingReactions.length||this._pendingDeletes.length)}_drainSideEffects(n){this._pendingToolApprovalRequest&&(n.toolApprovalRequest=this._pendingToolApprovalRequest,this._pendingToolApprovalRequest=null),this._signals.length&&(n.signals=this._signals,this._signals=[]),this._toolResults.length&&(n.toolResults=this._toolResults,this._toolResults=[]),this._pendingReactions.length&&(n.addReactions=this._pendingReactions,this._pendingReactions=[]),this._pendingDeletes.length&&(n.deleteMessages=this._pendingDeletes,this._pendingDeletes=[]),this._resolveSignal&&(n.resolve=this._resolveSignal,this._resolveSignal=null)}async _post(n){let t=await fetch(this._replyUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${this._secretKey}`},body:JSON.stringify(n)});if(!t.ok){let i=await t.text().catch(()=>"");throw new Dn(t.status,i)}let r=await t.text().catch(()=>"");if(!r)return null;try{let i=JSON.parse(r),o=i&&typeof i=="object"&&"data"in i?i.data:i;if(o&&typeof o.messageId=="string"&&typeof o.platformThreadId=="string")return{messageId:o.messageId,platformThreadId:o.platformThreadId}}catch{}return null}};function lS(e){return!!(typeof e=="string"||typeof e=="object"&&e!==null&&Ji(e)||typeof e=="object"&&e!==null&&("markdown"in e||"card"in e||"files"in e))}function cS(e,n){return e}function uS(e,n){var t;for(let r of e){let i=r.toolData;if(r.type==="tool_approval_request"&&(i==null?void 0:i.approvalId)===n&&i.toolCallId)return{approvalId:i.approvalId,toolCallId:i.toolCallId,name:(t=i.toolName)!=null?t:"tool",input:i.input}}}async function If(e){var o;let n=new Do(e.bridge,e.secretKey,e.agent.handlers.toolApproval),{agent:t,event:r,logger:i}=e;try{await pS(t,r,n),await n.flush()}catch(a){let s=Nr(a);i==null||i.error(`[agent:${t.id}] Turn failed (${r}): ${s.message}`,(o=s.cause)!=null?o:s);let u=!1;if(t.handlers.onError)try{let p=await t.handlers.onError(s,cS(n,r));Su(p)?u=!0:lS(p)&&(await n.reply(p),u=!0)}catch(p){i==null||i.error(`[agent:${t.id}] onError failed:`,p)}u||await n.reportTurnError()}finally{try{await n.typing.stop()}catch{}}}async function pS(e,n,t){var i,o;let r=async a=>{a instanceof Zn||a===void 0||await t.reply(a)};switch(n){case"onMessage":{await r(await e.handlers.onMessage(t.message,t));break}case"onAction":{let a=ku((i=t.action)==null?void 0:i.id);if(a&&e.handlers.onToolApproval){let{approved:s,approvalId:u}=a,p=uS(t.history,u),d=p?{id:p.toolCallId,name:p.name,input:p.input}:{id:u,name:""},h=t.createReplyHandle((o=t.action.sourceMessageId)!=null?o:""),y={toolCall:d,approved:s,approvalMessage:h};e.userOnToolApproval===!1&&(await t.typing(),t.action.sourceMessageId&&await h.delete());let g=await e.handlers.onToolApproval(y,t);await r(g);break}e.handlers.onAction&&await r(await e.handlers.onAction(t.action,t));break}case"onReaction":e.handlers.onReaction&&await r(await e.handlers.onReaction(t.reaction,t));break;case"onResolve":e.handlers.onResolve&&await r(await e.handlers.onResolve(t));break;default:throw new Mn(n,ka)}}function Cf(e){let n={};for(let i of e.split(",")){let o=i.trim();if(!o)continue;let a=o.indexOf("=");if(a<=0)continue;let s=o.slice(0,a),u=o.slice(a+1);s&&u&&!(s in n)&&(n[s]=u)}let t=n.t,r=t!==void 0?Number(t):Number.NaN;return{t:Number.isFinite(r)?r:void 0,v1:n.v1}}var ar=class{constructor(n){this.handler=n.handler,this.client=n.client?n.client:new Qn,this.workflows=n.workflows||[],this.agents=n.agents||[],this.http=Di(this.client.secretKey,this.client.apiUrl),this.frameworkName=n.frameworkName,this.hmacEnabled=this.client.strictAuthentication,this.client.addAgents(this.agents)}createHandler(){return async(...n)=>{await this.client.addWorkflows(this.workflows);let t=await this.handler(...n),r=await this.handleAction({actions:t});return t.transformResponse(r)}}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.12.1","novu-framework-server":this.frameworkName,"user-agent":n}}createResponse(n,t){return{status:n,body:JSON.stringify(t),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}){let t=await n.url(),r=await n.method(),i=t.searchParams.get("action")||"health-check",o=t.searchParams.get("workflowId")||"",a=t.searchParams.get("stepId")||"",s=t.searchParams.get("agentId")||"",u=t.searchParams.get("event")||"",p=await n.headers("novu-signature")||"",d={};try{r==="POST"&&(d=await n.body())}catch{}try{i!=="health-check"&&await this.validateHmac(d,p);let h=this.getPostActionMap(d,o,a,i,s,u,n.waitUntil),y=this.getGetActionMap(o,a);if(r==="POST")return await this.handlePostAction(i,h);if(r==="GET")return await this.handleGetAction(i,y);if(r==="OPTIONS")return this.createResponse(200,{})}catch(h){return this.handleError(h)}return this.createError(new ki(r))}getPostActionMap(n,t,r,i,o,a,s){return{trigger:this.triggerAction({workflowId:t,...n}),execute:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},preview:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},"agent-event":async()=>{let u=this.client.getAgent(o);if(!u)return this.createResponse(404,{error:`Agent '${o}' not registered`});let p=If({agent:u,event:a,bridge:n,secretKey:this.client.secretKey,logger:this.client.logger});return s&&s(p),this.createResponse(200,{status:"ack"})}}}triggerAction(n){return async()=>{let t={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}},r=await this.http.post("/events/trigger",t);return this.createResponse(200,r)}}getGetActionMap(n,t){return{discover:async()=>{let r=await this.client.discover();return this.createResponse(200,r)},"health-check":async()=>{let r=await this.client.healthCheck();return this.createResponse(200,r)},code:async()=>{let r=await this.client.getCode(n,t);return this.createResponse(200,r)}}}async handlePostAction(n,t){if(Object.values(kr).includes(n)){let r=t[n];return r()}else throw new Mn(n,kr)}async handleGetAction(n,t){if(Object.values(ui).includes(n)){let r=t[n];return r()}else throw new Mn(n,ui)}handleError(n){if(Pn(n))return n.statusCode>=500&&this.client.logger.error(n),this.createError(n);if(Uc(n))return this.createError(n);{let t=new Gn(n);return this.client.logger.error(t),this.createError(t)}}async validateHmac(n,t){if(!this.hmacEnabled)return;if(!t)throw new Oi;if(!this.client.secretKey)throw new Pi;let r=Cf(t);if(!r.v1||r.t===void 0)throw new Ii;let i=Date.now();if(r.t<i-3e5||r.t>i+3e5)throw new Ci;let o=await Yc(this.client.secretKey,`${r.t}.${JSON.stringify(n)}`);if(!Jc(o,r.v1))throw new Ri}};yl();var sr=Symbol.for("workflow-serialize"),lr=Symbol.for("workflow-deserialize");var dS=Object.defineProperty,hS=Object.defineProperties,fS=Object.getOwnPropertyDescriptors,Mf=Object.getOwnPropertySymbols,mS=Object.prototype.hasOwnProperty,gS=Object.prototype.propertyIsEnumerable,Nf=(e,n,t)=>n in e?dS(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,Uf=(e,n)=>{for(var t in n||(n={}))mS.call(n,t)&&Nf(e,t,n[t]);if(Mf)for(var t of Mf(n))gS.call(n,t)&&Nf(e,t,n[t]);return e},$f=(e,n)=>hS(e,fS(n)),It=(e,n)=>{let t=!1,r=!1;for(let i=0;i<n;i+=1){if(e[i]==="\\"&&i+1<e.length&&e[i+1]==="`"){i+=1;continue}if(e.substring(i,i+3)==="```"){r=!r,i+=2;continue}!r&&e[i]==="`"&&(t=!t)}return t||r},yS=(e,n)=>{let t=e.substring(n,n+3)==="```",r=n>0&&e.substring(n-1,n+2)==="```",i=n>1&&e.substring(n-2,n+1)==="```";return t||r||i},bS=e=>{let n=0;for(let t=0;t<e.length;t+=1){if(e[t]==="\\"&&t+1<e.length&&e[t+1]==="`"){t+=1;continue}e[t]==="`"&&!yS(e,t)&&(n+=1)}return n},Rn=(e,n)=>{let t=!1,r=!1,i=-1;for(let o=0;o<e.length;o+=1){if(e[o]==="\\"&&o+1<e.length&&e[o+1]==="`"){o+=1;continue}if(e.substring(o,o+3)==="```"){r=!r,o+=2;continue}if(!r&&e[o]==="`")if(t){if(i<n&&n<o)return!0;t=!1,i=-1}else t=!0,i=o}return!1},wS=/^(\s*(?:[-*+]|\d+[.)]) +)>(=?\s*[$]?\d)/gm,SS=e=>!e||typeof e!="string"||!e.includes(">")?e:e.replace(wS,(n,t,r,i)=>It(e,i)?n:`${t}\\>${r}`),xS=/(\*\*)([^*]*\*?)$/,TS=/(__)([^_]*?)$/,kS=/(\*\*\*)([^*]*?)$/,AS=/(\*)([^*]*?)$/,vS=/(_)([^_]*?)$/,ES=/(`)([^`]*?)$/,_S=/(~~)([^~]*?)$/,Vn=/^[\s_~*`]*$/,qf=/^[\s]*[-*+][\s]+$/,RS=/[\p{L}\p{N}_]/u,OS=/^```[^`\n]*```?$/,IS=/^\*{4,}$/,CS=/(__)([^_]+)_$/,PS=/(~~)([^~]+)~$/,Lf=/~~/g,On=e=>{if(!e)return!1;let n=e.charCodeAt(0);return n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||n===95?!0:RS.test(e)};var MS=(e,n)=>{let t=1;for(let r=n-1;r>=0;r-=1)if(e[r]==="]")t+=1;else if(e[r]==="["&&(t-=1,t===0))return r;return-1},jf=(e,n)=>{let t=1;for(let r=n+1;r<e.length;r+=1)if(e[r]==="[")t+=1;else if(e[r]==="]"&&(t-=1,t===0))return r;return-1},Fo=(e,n)=>{let t=!1,r=!1;for(let i=0;i<e.length&&i<n;i+=1){if(e[i]==="\\"&&e[i+1]==="$"){i+=1;continue}e[i]==="$"&&(e[i+1]==="$"?(r=!r,i+=1,t=!1):r||(t=!t))}return t||r},NS=(e,n)=>{for(let t=n;t<e.length;t+=1){if(e[t]===")")return!0;if(e[t]===`
120
120
  `)return!1}return!1},Bf=(e,n)=>{for(let t=n-1;t>=0;t-=1){if(e[t]===")")return!1;if(e[t]==="(")return t>0&&e[t-1]==="]"?NS(e,n):!1;if(e[t]===`
121
121
  `)return!1}return!1},LS=(e,n)=>{for(let t=n-1;t>=0;t-=1){if(e[t]===">")return!1;if(e[t]==="<"){let r=t+1<e.length?e[t+1]:"";return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="/"}if(e[t]===`
122
122
  `)return!1}return!1},Sl=(e,n,t)=>{let r=0;for(let u=n-1;u>=0;u-=1)if(e[u]===`
@@ -2,7 +2,7 @@ import { S as ServeHandlerOptions } from '../index-1DobCKAF.cjs';
2
2
  export { C as Client, N as NovuRequestHandler, a as agent, w as workflow } from '../index-1DobCKAF.cjs';
3
3
  export { C as ClientOptions, a as CronExpression, E as ExecuteInput, S as SeverityLevelEnum, W as Workflow } from '../health-check.types-B9FbzRbm.cjs';
4
4
  export { C as ContextResolved, E as EnvironmentSystemVariables, S as Subscriber, p as providerSchemas } from '../subscriber.types-DubxcL8q.cjs';
5
- import { S as SupportedFrameworkName } from '../server.types-BRWsA1CA.cjs';
5
+ import { S as SupportedFrameworkName } from '../server.types-Cc6o5eYH.cjs';
6
6
  export { Actions, Button, Card, CardChild, CardElement, CardLink, CardText, Divider, Select, SelectOption, TextInput } from 'chat';
7
7
  export { A as Agent, a as AgentAction, b as AgentActionContext, c as AgentAttachment, d as AgentContext, e as AgentConversation, f as AgentDeliveryError, g as AgentError, h as AgentHandlerContext, i as AgentHandlers, j as AgentHistoryEntry, k as AgentMessage, l as AgentMessageAuthor, m as AgentMessageContext, n as AgentPlatformContext, o as AgentReaction, p as AgentReactionContext, q as AgentResolveContext, r as AgentSubscriber, s as AgentToolCall, F as FileRef, M as MessageContent, R as ReplyHandle, T as ToolApprovalCard, t as ToolApprovalConfig, u as ToolApprovalDecision, v as toAgentError } from '../agent.types-Dqm2VBTO.cjs';
8
8
  export { AnyStepResolver, ChatStepResolver, EmailStepResolver, InAppStepResolver, PushStepResolver, SmsStepResolver, StepResolverContext, step } from '../step-resolver.cjs';
@@ -109,14 +109,14 @@ ${Ee.comment}`:fe.comment),fe=Ee}G.items[pe]=fe instanceof f.Pair?fe:new f.Pair(
109
109
  et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
110
110
  commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
111
111
  pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est
112
- laborum`.split(/\W/),oi=Qr,ai={type:Gt.ALLOWED_TYPES},Tc=Zr,ha=Go,xc=ei,si=ti,kc=Ko,vc=Xo,fa="[a-zA-Z][a-zA-Z0-9+-.]*",li=`https?://{hostname}(?:${fa})+`,Ac="(?:\\?([a-z]{1,7}(=\\w{1,5})?&){0,3})?",Ut={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:li,slug:"[a-zA-Z\\d_-]+","uri-reference":`${li}${Ac}`,"uri-template":li.replace("(?:","(?:/\\{[a-z][:a-zA-Z0-9-]*\\}|"),"json-pointer":`(/(?:${fa.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)?)$"},Ut.iri=Ut["uri-reference"],Ut["iri-reference"]=Ut["uri-reference"],Ut["idn-email"]=Ut.email,Ut["idn-hostname"]=Ut.hostname,Ec=new RegExp(`\\{(${Object.keys(Ut).join("|")})\\}`),_c=Qo,Rc=ea,Oc={boolean:fc,null:yc,array:bc,integer:wc,number:da,object:Tc,string:Rc},wr=Oc,Ic=re,Cc=({refs:l,schema:c,container:f,synchronous:S,refDepthMax:T,refDepthMin:v})=>{let k={},L={},Q=0,N,ie;return k.resolveSchema=(j,he,ce)=>{if(j==null)return null;if(typeof j.generate=="function")return j;if(typeof(j.$id||j.id)=="string"&&(delete j.id,delete j.$id,delete j.$schema),typeof j.$ref=="string"){let xe=Math.max(v,T)-1;if(j.$ref==="#"||L[j.$ref]<0||N===j.$ref&&++Q>xe)return j.$ref!=="#"&&ie&&ie.length===ce.length?Ye.getLocalRef(c,j.$ref,S&&l):(delete j.$ref,j);typeof L[j.$ref]=="undefined"&&(L[j.$ref]=Ae.number(v,T)-1),ie=ce,N=j.$ref;let Re;j.$ref.indexOf("#/")===-1?Re=l[j.$ref]||null:Re=Ye.getLocalRef(c,j.$ref,S&&l)||null;let Ge;if(typeof Re!="undefined"){if(!Re&&_e("ignoreMissingRefs")!==!0)throw new Error(`Reference not found: ${j.$ref}`);L[j.$ref]-=1,Ye.merge(j,Re||{}),Ge=S&&Re&&Re.$ref}return Ge||delete j.$ref,j}if(Array.isArray(j.allOf)){let xe=j.allOf;delete j.allOf,xe.forEach(Re=>{let Ge=k.resolveSchema(Re,null,ce);Ye.merge(j,typeof Ge.thunk=="function"?Ge.thunk(j):Ge),Array.isArray(j.allOf)&&k.resolveSchema(j,he,ce)})}if(Array.isArray(j.oneOf||j.anyOf)&&ce[ce.length-2]!=="dependencies"){let xe=j.oneOf||j.anyOf;return j.enum&&j.oneOf&&(j.enum=j.enum.filter(Re=>Ye.validate(Re,xe))),{thunk(Re){let Ge=Ye.omitProps(j,["anyOf","oneOf"]),Qe=Ae.pick(xe);return Ye.merge(Ge,Qe),xe.forEach(oe=>{oe.required&&oe!==Qe&&oe.required.forEach(I=>{if(Qe.required&&Qe.required.includes(I))return;let C=Ge.required&&Ge.required.includes(I);Ge.properties&&!C&&delete Ge.properties[I],Re&&Re.properties&&delete Re.properties[I]})}),Ge}}}if(Object.keys(j).forEach(xe=>{(Array.isArray(j[xe])||typeof j[xe]=="object")&&!Ye.isKey(xe)&&(j[xe]=k.resolveSchema(j[xe],xe,ce.concat(xe)))}),ce){let xe=ce[ce.length-1];if(xe==="properties"||xe==="items")return j}return f.wrap(j)},k},Pc=Cc,ma=Nt,ga=nn,At=ra(Gl(),1),Dm=At.default.binaryOptions,Fm=At.default.boolOptions,Um=At.default.intOptions,$m=At.default.nullOptions,qm=At.default.strOptions,jm=At.default.Schema,Bm=At.default.Alias,zm=At.default.Collection,Vm=At.default.Merge,Wm=At.default.Node,Hm=At.default.Pair,Ym=At.default.Scalar,Mc=At.default.YAMLMap,Nc=At.default.YAMLSeq,Sr=Cn,an=new lc,rt=(l,c,f)=>(console.debug("[json-schema-faker] calling JSONSchemaFaker() is deprecated, call either .generate() or .resolve()"),f&&console.debug("[json-schema-faker] local references are only supported by calling .resolve()"),rt.generate(l,c)),rt.generateWithContext=(l,c)=>{let f=on(c,l);return ma(f,l,an,!0)},rt.generate=(l,c)=>ga(rt.generateWithContext(l,c)),rt.generateYAML=(l,c)=>Sr(rt.generateWithContext(l,c)),rt.resolveWithContext=(l,c,f)=>{typeof c=="string"&&(f=c,c={}),f=f||(typeof process!="undefined"&&typeof process.cwd=="function"?process.cwd():""),f=`${f.replace(/\/+$/,"")}/`;let S=on(c,l),T={order:1,canRead(k){let L=k.url.replace("/:",":");return S[L]||S[L.split("/").pop()]},read(k,L){try{L(null,this.canRead(k))}catch(Q){L(Q)}}},{$RefParser:v}=aa();return v.bundle(f,l,{resolve:{file:{order:100},http:{order:200},fixedRefs:T},dereference:{circular:"ignore"}}).then(k=>ma(S,k,an)).catch(k=>{throw new Error(`Error while resolving schema (${k.message})`)})},rt.resolve=(l,c,f)=>rt.resolveWithContext(l,c,f).then(ga),rt.resolveYAML=(l,c,f)=>rt.resolveWithContext(l,c,f).then(Sr),St(),rt.format=pa,rt.option=_e,rt.random=Ae,rt.extend=(l,c)=>(an.extend(l,c),rt),rt.define=(l,c)=>(an.define(l,c),rt),rt.reset=l=>(an.reset(l),St(),rt),rt.locate=l=>an.get(l),rt.VERSION="0.5.5",Lc={...rt},Dc=rt}}),Gm=o({"src/src/main.iife.js"(l,c){var f=(Jm(),u(p));typeof $RefParser!="undefined"&&typeof JSONPath!="undefined"&&f.setDependencies({...JSONPath,$RefParser}),typeof window!="undefined"&&(window.JSONSchemaFaker=f.default),c.exports=f.default,c.exports.JSONSchemaFaker=f.JSONSchemaFaker}});return Gm()})();((e,n)=>{e.JSONSchemaFaker=n()})(typeof self!="undefined"?self:typeof window!="undefined"?window:globalThis,()=>Li);Li.random.shuffle=function(){return["[placeholder]"]};Li.option({useDefaultValue:!0,alwaysFakeOptionals:!0});function Hc(e){return Li.generate(e)}var Yc=async(e,n)=>{let t=new TextEncoder,r=t.encode(e),i=t.encode(n),o=await crypto.subtle.importKey("raw",r,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),a=await crypto.subtle.sign("HMAC",o,i);return Array.from(new Uint8Array(a)).map(s=>s.toString(16).padStart(2,"0")).join("")},Jc=(e,n)=>{if(typeof e!="string"||typeof n!="string"||e.length!==n.length)return!1;let t=0;for(let r=0;r<e.length;r+=1)t|=e.charCodeAt(r)^n.charCodeAt(r);return t===0};var Gc=require("cross-fetch"),Kc=()=>typeof Response!="undefined"?Response:Gc.Response,Xc=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(e){console.error(e)}return""};function Qc(e){return!!e&&typeof e=="object"&&"error"in e&&"message"in e&&"statusCode"in e}var Di=(e,n)=>{if(!e)throw new vi;return{post:async(t,r)=>{let i=await fetch(`${n}/v1${t}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`},body:JSON.stringify(r)}),o=await i.json();if(i.ok)return o;throw Qc(o)?new Ai(o.statusCode,o.error,o.message):new Gn(o)},delete:async t=>(await fetch(`${n}/v1${t}`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`}})).json()}};var iu=require("liquidjs");function Ta(e,n){let t={...e};for(let r of Object.keys(n)){let i=n[r];i&&typeof i=="object"&&!Array.isArray(i)?t[r]=Ta(t[r]||{},i):(Array.isArray(i),t[r]=i)}return t}function Fi(e,n){let t=n.split(".").reduce((r,i)=>{if(r&&typeof r=="object")return r[i]},e);if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(typeof t=="object"){let r=JSON.stringify(t);return r==="{}"?"":r}return""}function Zc(e,n=2,t,r=", "){if(!Array.isArray(e)||e.length===0)return"";let i=t?e.map(s=>typeof s!="object"||!s?"":Fi(s,t)):e;if(i.length===1)return i[0];if(i.length===2)return`${i[0]} and ${i[1]}`;if(i.length===3&&n>=3)return`${i[0]}, ${r}${i[1]} and ${i[2]}`;let o=i.slice(0,n),a=i.length-n;return`${o.join(r)} and ${a} ${a===1?"other":"others"}`}var eu=qt(require("pluralize"),1);function tu(e,n="",t="",r="true"){if(e==null)return"";let i=0;if(Array.isArray(e)?i=e.length:typeof e=="object"?i=Object.keys(e).length:typeof e=="string"?i=+e:typeof e=="number"?i=e:i=Number(e),Number.isNaN(i)&&(i=0),i<=0)return"";let o;return t?o=i===1?n:t:o=(0,eu.default)(n,i),r==="true"?`${i} ${o}`:o}var Sg=require("liquidjs"),nu=qt(require("pluralize"),1),Tg=require("zod");var xg="",kg=2,vg="other",Ag=", ",Eg=" and ",_g=", and ";function ru(e,n=xg,t=kg,r=vg,i=Ag,o=Eg,a=_g){if(!Array.isArray(e)||e.length===0)return"";let s=n?e.map(y=>typeof y!="object"||!y?"":Fi(y,n)):e,u=s.length;if(u===1)return s[0];if(u===2)return`${s[0]}${o}${s[1]}`;if(t>=u){let y=s.slice(0,u-1),g=s[u-1];return`${y.join(i)}${a}${g}`}let p=s.slice(0,t),d=u-t,h=t===1?o:a;return`${p.join(i)}${h}${d} ${(0,nu.default)(r,d)}`}function Rg(e){return Array.isArray(e)||typeof e=="object"&&e!==null?ou(e):typeof e=="string"?e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):e==null?"":String(e)}var ou=(e,n=0)=>Array.isArray(e)||typeof e=="object"&&e!==null?JSON.stringify(e,null,n).replace(/"/g,"'").replace(/\n/g,"\\n"):e==null?"":String(e);function au(e){let n=new iu.Liquid({outputEscape:Rg,...e});return n.registerFilter("json",(t,r)=>ou(t,r)),n.registerFilter("digest",Zc),n.registerFilter("toSentence",ru),n.registerFilter("pluralize",tu),n}var Ln=qt(require("chalk"),1),et={info:e=>Ln.default.blue(e),warning:e=>Ln.default.yellow(e),error:e=>Ln.default.red(e),success:e=>Ln.default.green(e),underline:e=>Ln.default.underline(e),bold:e=>Ln.default.bold(e)},ct={SUCCESS:et.success("\u2714"),ERROR:et.error("\u2717"),WARNING:et.warning("\u26A0"),INFO:et.info("\u2139"),ARROW:et.bold("\u2192"),MOCK:et.info("\u25CB"),HYDRATED:et.bold(et.info("\u2192")),STEP:et.info("\u03C3"),ACTION:et.info("\u03B1"),DURATION:et.info("\u0394"),PROVIDER:et.info("\u2699"),OUTPUT:et.info("\u21E2"),INPUT:et.info("\u21E0"),WORKFLOW:et.info("\u03C9"),STATE:et.info("\u03C3"),EXECUTE:et.info("\u03B5"),PREVIEW:et.info("\u03C1")};function Ui(e){return e||process.env.NOVU_API_URL||"https://api.novu.co"}function $i(e){return e||process.env.NOVU_SECRET_KEY||process.env.NOVU_API_KEY||""}var xa=qt(require("sanitize-html"),1),Og=["src","alt","width","height","loading","srcset","sizes","crossorigin","usemap","ismap","class","id","style","title","dir","lang"];function Ig(e){return e.toLowerCase().startsWith("on")}function Cg(e){return e.replace(/<\/([a-zA-Z][a-zA-Z0-9]*)\s*\/[^>]*>/g,"</$1>")}var Pg={allowedTags:xa.default.defaults.allowedTags.concat(["style","img","html","head","body","link","meta","title"]),allowedAttributes:!1,transformTags:{"*":(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Ig(r)||(t[r]=i);return{tagName:e,attribs:t}},img:(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Og.includes(r.toLowerCase())&&(t[r]=i);return{tagName:e,attribs:t}}},allowVulnerableTags:!0,parseStyleAttributes:!1,parser:{lowerCaseAttributeNames:!0}},su=e=>{if(!e)return e;let n=Cg(e),t=/^<!DOCTYPE .*?>/,r=n.match(t),i=(0,xa.default)(n,Pg);return r?r[0]+i:i},qi=e=>Object.keys(e).reduce((n,t)=>{let r=e[t];return typeof r=="string"?n[t]=su(r):Array.isArray(r)?n[t]=r.map(i=>typeof i=="string"?su(i):typeof i=="object"?qi(i):i):typeof r=="object"&&r!==null?n[t]=qi(r):n[t]=r,n},{});function lu(e,n=!0,t=console){n&&(t.info(`
113
- ${et.bold(et.underline("Discovered workflowId:"))} '${e.workflowId}'`),e.steps.forEach((r,i)=>{let o=i===e.steps.length-1,a=o?"\u2514":"\u251C";t.info(`${a} ${ct.STEP} Discovered stepId: '${r.stepId}' Type: '${r.type}'`),r.providers.forEach((s,u)=>{let p=u===r.providers.length-1,d=o?" ":"\u2502",h=p?"\u2514":"\u251C";t.info(`${d} ${h} ${ct.PROVIDER} Discovered provider: '${s.type}'`)})}))}var cu=require("jsonrepair");function uu(e){let n=e.trim();return(n.startsWith("{")&&n.endsWith("}")||n.startsWith("[")&&n.endsWith("]"))&&n.length>2}var pu="__novuJsonString";function Mg(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&e[pu]===!0}function Cr(e){if(typeof e=="string"){if(!uu(e))return e;try{let n=JSON.parse(e);return{[pu]:!0,value:Cr(n)}}catch{return e}}if(Array.isArray(e))return e.map(n=>Cr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Cr(r);return n}return e}function Pr(e){if(Mg(e))return JSON.stringify(Pr(e.value));if(Array.isArray(e))return e.map(n=>Pr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Pr(r);return n}return e}function Ng(e){try{return JSON.parse(e),e}catch{try{return(0,cu.jsonrepair)(e)}catch{return e}}}function du(e){return Object.fromEntries(Object.entries(e).map(([n,t])=>typeof t=="string"?[n,uu(t)?Ng(t):t]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[n,du(t)]:[n,t]))}function hu(e){return!(e!=null&&e.data)||typeof e.data!="object"||Array.isArray(e.data)?e:{...e,data:du(e.data)}}var mu=qt(require("ajv"),1),gu=qt(require("ajv-formats"),1);var fu=e=>typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e));var ji=class extends Tn{constructor(t,r){let i=r.length===1?"it":"them";super(`Tried to use a ${t} in @novu/framework without ${r.join(", ")} installed. Please install ${i} by running \`npm install ${r.join(" ")}\`.`);this.statusCode=500;this.code="MissingDependencyError"}};var Bi=async(e,n)=>{let t=new Set;if((await Promise.allSettled(e.map(i=>i.import))).forEach((i,o)=>{let a=e[o];i.status==="fulfilled"&&a.exports.every(u=>i.value[u]!==void 0)||t.add(a.name)}),t.size>0)throw new ji(n,Array.from(t))};var zi=class{constructor(){this.requiredImports=[];this.ajv=new mu.default({useDefaults:!0,removeAdditional:"failing",strict:!1}),(0,gu.default)(this.ajv),this.compiledSchemas=new Map}async canHandle(n){let t=n.type==="object"||!!n.anyOf||!!n.allOf||!!n.oneOf;return t&&await Bi(this.requiredImports,"JSON schema"),t}async validate(n,t){let r=this.compiledSchemas.get(t);r||(r=this.ajv.compile(t),this.compiledSchemas.set(t,r));let i=fu(n);return r(i)?{success:!0,data:i}:{success:!1,errors:r.errors.map(a=>({path:a.instancePath,message:a.message}))}}async transformToJsonSchema(n){return n}};var Vi=class{constructor(){this.requiredImports=[{name:"zod",import:import("zod"),exports:["ZodType"]},{name:"zod-to-json-schema",import:import("zod-to-json-schema"),exports:["zodToJsonSchema"]}]}async canHandle(n){let t=n.safeParseAsync!==void 0;return t&&await Bi(this.requiredImports,"Zod schema"),t}async validate(n,t){let r=await t.safeParseAsync(n);return r.success?{success:!0,data:r.data}:{success:!1,errors:r.error.issues.map(i=>({path:`/${i.path.join("/")}`,message:i.message}))}}async transformToJsonSchema(n){let{zodToJsonSchema:t}=await import("zod-to-json-schema");return t(n)}};var Wi=new Vi,Hi=new zi,Mr=async(e,n)=>{if(await Wi.canHandle(e))return Wi.validate(n,e);if(await Hi.canHandle(e))return Hi.validate(n,e);throw new Error("Invalid schema")},yt=async e=>{if(await Wi.canHandle(e))return Wi.transformToJsonSchema(e);if(await Hi.canHandle(e))return Hi.transformToJsonSchema(e);throw new Error("Invalid schema")};function yu(){return["development",void 0,"dev"].includes(process.env.NODE_ENV)}var Qn=class{constructor(n){this.discoveredWorkflows=new Map;this.discoverWorkflowPromises=new Map;this.registeredAgents=new Map;this.version="2.11.2-alpha.0";let t=this.buildOptions(n);this.apiUrl=t.apiUrl,this.secretKey=t.secretKey,this.strictAuthentication=t.strictAuthentication,this.verbose=t.verbose,this.logger=t.logger,this.templateEngine=au()}buildOptions(n){let t={apiUrl:Ui(n==null?void 0:n.apiUrl),secretKey:$i(n==null?void 0:n.secretKey),strictAuthentication:!yu(),verbose:yu(),logger:console};return(n==null?void 0:n.strictAuthentication)!==void 0?t.strictAuthentication=n.strictAuthentication:process.env.NOVU_STRICT_AUTHENTICATION_ENABLED!==void 0&&(t.strictAuthentication=process.env.NOVU_STRICT_AUTHENTICATION_ENABLED==="true"),(n==null?void 0:n.verbose)!==void 0&&(t.verbose=n.verbose),(n==null?void 0:n.logger)!==void 0&&(t.logger=n.logger),t}log(...n){this.verbose&&this.logger.info(...n)}async addWorkflows(n){for(let t of n){if(this.discoveredWorkflows.has(t.id))continue;let r=this.discoverWorkflowPromises.get(t.id);if(r){await r;continue}let i=this.addWorkflow(t);this.discoverWorkflowPromises.set(t.id,i),await i}}addAgents(n){for(let t of n)this.registeredAgents.set(t.id,t)}getAgent(n){return this.registeredAgents.get(n)}async addWorkflow(n){try{let t=await n.discover();lu(t,this.verbose,this.logger),this.discoveredWorkflows.set(n.id,t)}finally{this.discoverWorkflowPromises.delete(n.id)}}healthCheck(){let n=this.getRegisteredWorkflows(),t=n.length,r=n.reduce((i,o)=>i+o.steps.length,0);return{status:"ok",sdkVersion:"2.11.2-alpha.0",frameworkVersion:"2024-06-26",discovered:{workflows:t,steps:r}}}getWorkflow(n){let t=this.discoveredWorkflows.get(n);if(t)return t;throw new Rr(n)}getStep(n,t){let i=this.getWorkflow(n).steps.find(o=>o.stepId===t);if(i)return i;throw new Mi(t)}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 Hc(n)}catch(t){return this.logger.warn("Failed to mock schema, returning empty object:",t),{}}}async validate(n,t,r,i,o,a,s){let u=await Mr(t,n);if(u.success)return u.data;switch(r){case"event":this.throwInvalidEvent(i,o,u.errors);case"step":this.throwInvalidStep(a,i,o,u.errors);case"provider":this.throwInvalidProvider(a,s,i,o,u.errors);default:throw new Error(`Invalid component: '${r}'`)}}throwInvalidProvider(n,t,r,i,o){throw n?t?r==="output"?new Si(i,n,t,o):new Error(`Invalid payload type: '${r}'`):new Error("providerId is required"):new Error("stepId is required")}throwInvalidStep(n,t,r,i){if(!n)throw new Error("stepId is required");switch(t){case"output":throw new yi(r,n,i);case"result":throw new bi(r,n,i);case"controls":throw new gi(r,n,i);default:throw new Error(`Invalid payload type: '${t}'`)}}throwInvalidEvent(n,t,r){switch(n){case"controls":throw new mi(t,r);case"payload":throw new Ar(t,r);default:throw new Error(`Invalid payload type: '${n}'`)}}executeStepFactory(n,t,r){return async(i,o,a)=>{if(r())return;let s=this.getStep(n.workflowId,i),u=n.action==="preview";if(!u&&i===n.stepId){let g=await this.createStepControls(s,n),P=await this.compileControls(g,n);if(await this.shouldSkip(a==null?void 0:a.skip,P))return t({options:{skip:!0},outputs:{},providers:{}}),{}}let p=this.previewStep.bind(this),d=this.executeStep.bind(this),y=await(u?p:d)(n,{...s,providers:s.providers.map(g=>{var ee;let P=(ee=a==null?void 0:a.providers)==null?void 0:ee[g.type];if(!P)throw new Ei(g.type);return{...g,resolve:P}}),resolve:o});return this.shouldSanitize({stepType:s.type,options:a})&&(y={...y,outputs:qi(y.outputs)}),i===n.stepId&&t({...y,options:{skip:!1}}),y.outputs}}shouldSanitize({stepType:n,options:t}){return(t==null?void 0:t.disableOutputSanitization)===!0?!1:["email","in_app"].includes(n)}async shouldSkip(n,t){return n?n(t):!1}async executeWorkflow(n){let i=`${{execute:"Executing",preview:"Previewing"}[n.action]||n.action} workflowId:`;this.log(`
112
+ laborum`.split(/\W/),oi=Qr,ai={type:Gt.ALLOWED_TYPES},Tc=Zr,ha=Go,xc=ei,si=ti,kc=Ko,vc=Xo,fa="[a-zA-Z][a-zA-Z0-9+-.]*",li=`https?://{hostname}(?:${fa})+`,Ac="(?:\\?([a-z]{1,7}(=\\w{1,5})?&){0,3})?",Ut={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:li,slug:"[a-zA-Z\\d_-]+","uri-reference":`${li}${Ac}`,"uri-template":li.replace("(?:","(?:/\\{[a-z][:a-zA-Z0-9-]*\\}|"),"json-pointer":`(/(?:${fa.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)?)$"},Ut.iri=Ut["uri-reference"],Ut["iri-reference"]=Ut["uri-reference"],Ut["idn-email"]=Ut.email,Ut["idn-hostname"]=Ut.hostname,Ec=new RegExp(`\\{(${Object.keys(Ut).join("|")})\\}`),_c=Qo,Rc=ea,Oc={boolean:fc,null:yc,array:bc,integer:wc,number:da,object:Tc,string:Rc},wr=Oc,Ic=re,Cc=({refs:l,schema:c,container:f,synchronous:S,refDepthMax:T,refDepthMin:v})=>{let k={},L={},Q=0,N,ie;return k.resolveSchema=(j,he,ce)=>{if(j==null)return null;if(typeof j.generate=="function")return j;if(typeof(j.$id||j.id)=="string"&&(delete j.id,delete j.$id,delete j.$schema),typeof j.$ref=="string"){let xe=Math.max(v,T)-1;if(j.$ref==="#"||L[j.$ref]<0||N===j.$ref&&++Q>xe)return j.$ref!=="#"&&ie&&ie.length===ce.length?Ye.getLocalRef(c,j.$ref,S&&l):(delete j.$ref,j);typeof L[j.$ref]=="undefined"&&(L[j.$ref]=Ae.number(v,T)-1),ie=ce,N=j.$ref;let Re;j.$ref.indexOf("#/")===-1?Re=l[j.$ref]||null:Re=Ye.getLocalRef(c,j.$ref,S&&l)||null;let Ge;if(typeof Re!="undefined"){if(!Re&&_e("ignoreMissingRefs")!==!0)throw new Error(`Reference not found: ${j.$ref}`);L[j.$ref]-=1,Ye.merge(j,Re||{}),Ge=S&&Re&&Re.$ref}return Ge||delete j.$ref,j}if(Array.isArray(j.allOf)){let xe=j.allOf;delete j.allOf,xe.forEach(Re=>{let Ge=k.resolveSchema(Re,null,ce);Ye.merge(j,typeof Ge.thunk=="function"?Ge.thunk(j):Ge),Array.isArray(j.allOf)&&k.resolveSchema(j,he,ce)})}if(Array.isArray(j.oneOf||j.anyOf)&&ce[ce.length-2]!=="dependencies"){let xe=j.oneOf||j.anyOf;return j.enum&&j.oneOf&&(j.enum=j.enum.filter(Re=>Ye.validate(Re,xe))),{thunk(Re){let Ge=Ye.omitProps(j,["anyOf","oneOf"]),Qe=Ae.pick(xe);return Ye.merge(Ge,Qe),xe.forEach(oe=>{oe.required&&oe!==Qe&&oe.required.forEach(I=>{if(Qe.required&&Qe.required.includes(I))return;let C=Ge.required&&Ge.required.includes(I);Ge.properties&&!C&&delete Ge.properties[I],Re&&Re.properties&&delete Re.properties[I]})}),Ge}}}if(Object.keys(j).forEach(xe=>{(Array.isArray(j[xe])||typeof j[xe]=="object")&&!Ye.isKey(xe)&&(j[xe]=k.resolveSchema(j[xe],xe,ce.concat(xe)))}),ce){let xe=ce[ce.length-1];if(xe==="properties"||xe==="items")return j}return f.wrap(j)},k},Pc=Cc,ma=Nt,ga=nn,At=ra(Gl(),1),Dm=At.default.binaryOptions,Fm=At.default.boolOptions,Um=At.default.intOptions,$m=At.default.nullOptions,qm=At.default.strOptions,jm=At.default.Schema,Bm=At.default.Alias,zm=At.default.Collection,Vm=At.default.Merge,Wm=At.default.Node,Hm=At.default.Pair,Ym=At.default.Scalar,Mc=At.default.YAMLMap,Nc=At.default.YAMLSeq,Sr=Cn,an=new lc,rt=(l,c,f)=>(console.debug("[json-schema-faker] calling JSONSchemaFaker() is deprecated, call either .generate() or .resolve()"),f&&console.debug("[json-schema-faker] local references are only supported by calling .resolve()"),rt.generate(l,c)),rt.generateWithContext=(l,c)=>{let f=on(c,l);return ma(f,l,an,!0)},rt.generate=(l,c)=>ga(rt.generateWithContext(l,c)),rt.generateYAML=(l,c)=>Sr(rt.generateWithContext(l,c)),rt.resolveWithContext=(l,c,f)=>{typeof c=="string"&&(f=c,c={}),f=f||(typeof process!="undefined"&&typeof process.cwd=="function"?process.cwd():""),f=`${f.replace(/\/+$/,"")}/`;let S=on(c,l),T={order:1,canRead(k){let L=k.url.replace("/:",":");return S[L]||S[L.split("/").pop()]},read(k,L){try{L(null,this.canRead(k))}catch(Q){L(Q)}}},{$RefParser:v}=aa();return v.bundle(f,l,{resolve:{file:{order:100},http:{order:200},fixedRefs:T},dereference:{circular:"ignore"}}).then(k=>ma(S,k,an)).catch(k=>{throw new Error(`Error while resolving schema (${k.message})`)})},rt.resolve=(l,c,f)=>rt.resolveWithContext(l,c,f).then(ga),rt.resolveYAML=(l,c,f)=>rt.resolveWithContext(l,c,f).then(Sr),St(),rt.format=pa,rt.option=_e,rt.random=Ae,rt.extend=(l,c)=>(an.extend(l,c),rt),rt.define=(l,c)=>(an.define(l,c),rt),rt.reset=l=>(an.reset(l),St(),rt),rt.locate=l=>an.get(l),rt.VERSION="0.5.5",Lc={...rt},Dc=rt}}),Gm=o({"src/src/main.iife.js"(l,c){var f=(Jm(),u(p));typeof $RefParser!="undefined"&&typeof JSONPath!="undefined"&&f.setDependencies({...JSONPath,$RefParser}),typeof window!="undefined"&&(window.JSONSchemaFaker=f.default),c.exports=f.default,c.exports.JSONSchemaFaker=f.JSONSchemaFaker}});return Gm()})();((e,n)=>{e.JSONSchemaFaker=n()})(typeof self!="undefined"?self:typeof window!="undefined"?window:globalThis,()=>Li);Li.random.shuffle=function(){return["[placeholder]"]};Li.option({useDefaultValue:!0,alwaysFakeOptionals:!0});function Hc(e){return Li.generate(e)}var Yc=async(e,n)=>{let t=new TextEncoder,r=t.encode(e),i=t.encode(n),o=await crypto.subtle.importKey("raw",r,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),a=await crypto.subtle.sign("HMAC",o,i);return Array.from(new Uint8Array(a)).map(s=>s.toString(16).padStart(2,"0")).join("")},Jc=(e,n)=>{if(typeof e!="string"||typeof n!="string"||e.length!==n.length)return!1;let t=0;for(let r=0;r<e.length;r+=1)t|=e.charCodeAt(r)^n.charCodeAt(r);return t===0};var Gc=require("cross-fetch"),Kc=()=>typeof Response!="undefined"?Response:Gc.Response,Xc=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(e){console.error(e)}return""};function Qc(e){return!!e&&typeof e=="object"&&"error"in e&&"message"in e&&"statusCode"in e}var Di=(e,n)=>{if(!e)throw new vi;return{post:async(t,r)=>{let i=await fetch(`${n}/v1${t}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`},body:JSON.stringify(r)}),o=await i.json();if(i.ok)return o;throw Qc(o)?new Ai(o.statusCode,o.error,o.message):new Gn(o)},delete:async t=>(await fetch(`${n}/v1${t}`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${e}`}})).json()}};var iu=require("liquidjs");function Ta(e,n){let t={...e};for(let r of Object.keys(n)){let i=n[r];i&&typeof i=="object"&&!Array.isArray(i)?t[r]=Ta(t[r]||{},i):(Array.isArray(i),t[r]=i)}return t}function Fi(e,n){let t=n.split(".").reduce((r,i)=>{if(r&&typeof r=="object")return r[i]},e);if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(typeof t=="object"){let r=JSON.stringify(t);return r==="{}"?"":r}return""}function Zc(e,n=2,t,r=", "){if(!Array.isArray(e)||e.length===0)return"";let i=t?e.map(s=>typeof s!="object"||!s?"":Fi(s,t)):e;if(i.length===1)return i[0];if(i.length===2)return`${i[0]} and ${i[1]}`;if(i.length===3&&n>=3)return`${i[0]}${r}${i[1]} and ${i[2]}`;let o=i.slice(0,n),a=i.length-n;return`${o.join(r)} and ${a} ${a===1?"other":"others"}`}var eu=qt(require("pluralize"),1);function tu(e,n="",t="",r="true"){if(e==null)return"";let i=0;if(Array.isArray(e)?i=e.length:typeof e=="object"?i=Object.keys(e).length:typeof e=="string"?i=+e:typeof e=="number"?i=e:i=Number(e),Number.isNaN(i)&&(i=0),i<=0)return"";let o;return t?o=i===1?n:t:o=(0,eu.default)(n,i),r==="true"?`${i} ${o}`:o}var Sg=require("liquidjs"),nu=qt(require("pluralize"),1),Tg=require("zod");var xg="",kg=2,vg="other",Ag=", ",Eg=" and ",_g=", and ";function ru(e,n=xg,t=kg,r=vg,i=Ag,o=Eg,a=_g){if(!Array.isArray(e)||e.length===0)return"";let s=n?e.map(y=>typeof y!="object"||!y?"":Fi(y,n)):e,u=s.length;if(u===1)return s[0];if(u===2)return`${s[0]}${o}${s[1]}`;if(t>=u){let y=s.slice(0,u-1),g=s[u-1];return`${y.join(i)}${a}${g}`}let p=s.slice(0,t),d=u-t,h=t===1?o:a;return`${p.join(i)}${h}${d} ${(0,nu.default)(r,d)}`}function Rg(e){return Array.isArray(e)||typeof e=="object"&&e!==null?ou(e):typeof e=="string"?e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):e==null?"":String(e)}var ou=(e,n=0)=>Array.isArray(e)||typeof e=="object"&&e!==null?JSON.stringify(e,null,n).replace(/"/g,"'").replace(/\n/g,"\\n"):e==null?"":String(e);function au(e){let n=new iu.Liquid({outputEscape:Rg,...e});return n.registerFilter("json",(t,r)=>ou(t,r)),n.registerFilter("digest",Zc),n.registerFilter("toSentence",ru),n.registerFilter("pluralize",tu),n}var Ln=qt(require("chalk"),1),et={info:e=>Ln.default.blue(e),warning:e=>Ln.default.yellow(e),error:e=>Ln.default.red(e),success:e=>Ln.default.green(e),underline:e=>Ln.default.underline(e),bold:e=>Ln.default.bold(e)},ct={SUCCESS:et.success("\u2714"),ERROR:et.error("\u2717"),WARNING:et.warning("\u26A0"),INFO:et.info("\u2139"),ARROW:et.bold("\u2192"),MOCK:et.info("\u25CB"),HYDRATED:et.bold(et.info("\u2192")),STEP:et.info("\u03C3"),ACTION:et.info("\u03B1"),DURATION:et.info("\u0394"),PROVIDER:et.info("\u2699"),OUTPUT:et.info("\u21E2"),INPUT:et.info("\u21E0"),WORKFLOW:et.info("\u03C9"),STATE:et.info("\u03C3"),EXECUTE:et.info("\u03B5"),PREVIEW:et.info("\u03C1")};function Ui(e){return e||process.env.NOVU_API_URL||"https://api.novu.co"}function $i(e){return e||process.env.NOVU_SECRET_KEY||process.env.NOVU_API_KEY||""}var xa=qt(require("sanitize-html"),1),Og=["src","alt","width","height","loading","srcset","sizes","crossorigin","usemap","ismap","class","id","style","title","dir","lang"];function Ig(e){return e.toLowerCase().startsWith("on")}function Cg(e){return e.replace(/<\/([a-zA-Z][a-zA-Z0-9]*)\s*\/[^>]*>/g,"</$1>")}var Pg={allowedTags:xa.default.defaults.allowedTags.concat(["style","img","html","head","body","link","meta","title"]),allowedAttributes:!1,transformTags:{"*":(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Ig(r)||(t[r]=i);return{tagName:e,attribs:t}},img:(e,n)=>{let t={};for(let[r,i]of Object.entries(n))Og.includes(r.toLowerCase())&&(t[r]=i);return{tagName:e,attribs:t}}},allowVulnerableTags:!0,parseStyleAttributes:!1,parser:{lowerCaseAttributeNames:!0}},su=e=>{if(!e)return e;let n=Cg(e),t=/^<!DOCTYPE .*?>/,r=n.match(t),i=(0,xa.default)(n,Pg);return r?r[0]+i:i},qi=e=>Object.keys(e).reduce((n,t)=>{let r=e[t];return typeof r=="string"?n[t]=su(r):Array.isArray(r)?n[t]=r.map(i=>typeof i=="string"?su(i):typeof i=="object"?qi(i):i):typeof r=="object"&&r!==null?n[t]=qi(r):n[t]=r,n},{});function lu(e,n=!0,t=console){n&&(t.info(`
113
+ ${et.bold(et.underline("Discovered workflowId:"))} '${e.workflowId}'`),e.steps.forEach((r,i)=>{let o=i===e.steps.length-1,a=o?"\u2514":"\u251C";t.info(`${a} ${ct.STEP} Discovered stepId: '${r.stepId}' Type: '${r.type}'`),r.providers.forEach((s,u)=>{let p=u===r.providers.length-1,d=o?" ":"\u2502",h=p?"\u2514":"\u251C";t.info(`${d} ${h} ${ct.PROVIDER} Discovered provider: '${s.type}'`)})}))}var cu=require("jsonrepair");function uu(e){let n=e.trim();return(n.startsWith("{")&&n.endsWith("}")||n.startsWith("[")&&n.endsWith("]"))&&n.length>2}var pu="__novuJsonString";function Mg(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&e[pu]===!0}function Cr(e){if(typeof e=="string"){if(!uu(e))return e;try{let n=JSON.parse(e);return{[pu]:!0,value:Cr(n)}}catch{return e}}if(Array.isArray(e))return e.map(n=>Cr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Cr(r);return n}return e}function Pr(e){if(Mg(e))return JSON.stringify(Pr(e.value));if(Array.isArray(e))return e.map(n=>Pr(n));if(e&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=Pr(r);return n}return e}function Ng(e){try{return JSON.parse(e),e}catch{try{return(0,cu.jsonrepair)(e)}catch{return e}}}function du(e){return Object.fromEntries(Object.entries(e).map(([n,t])=>typeof t=="string"?[n,uu(t)?Ng(t):t]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[n,du(t)]:[n,t]))}function hu(e){return!(e!=null&&e.data)||typeof e.data!="object"||Array.isArray(e.data)?e:{...e,data:du(e.data)}}var mu=qt(require("ajv"),1),gu=qt(require("ajv-formats"),1);var fu=e=>typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e));var ji=class extends Tn{constructor(t,r){let i=r.length===1?"it":"them";super(`Tried to use a ${t} in @novu/framework without ${r.join(", ")} installed. Please install ${i} by running \`npm install ${r.join(" ")}\`.`);this.statusCode=500;this.code="MissingDependencyError"}};var Bi=async(e,n)=>{let t=new Set;if((await Promise.allSettled(e.map(i=>i.import))).forEach((i,o)=>{let a=e[o];i.status==="fulfilled"&&a.exports.every(u=>i.value[u]!==void 0)||t.add(a.name)}),t.size>0)throw new ji(n,Array.from(t))};var zi=class{constructor(){this.requiredImports=[];this.ajv=new mu.default({useDefaults:!0,removeAdditional:"failing",strict:!1}),(0,gu.default)(this.ajv),this.compiledSchemas=new Map}async canHandle(n){let t=n.type==="object"||!!n.anyOf||!!n.allOf||!!n.oneOf;return t&&await Bi(this.requiredImports,"JSON schema"),t}async validate(n,t){let r=this.compiledSchemas.get(t);r||(r=this.ajv.compile(t),this.compiledSchemas.set(t,r));let i=fu(n);return r(i)?{success:!0,data:i}:{success:!1,errors:r.errors.map(a=>({path:a.instancePath,message:a.message}))}}async transformToJsonSchema(n){return n}};var Vi=class{constructor(){this.requiredImports=[{name:"zod",import:import("zod"),exports:["ZodType"]},{name:"zod-to-json-schema",import:import("zod-to-json-schema"),exports:["zodToJsonSchema"]}]}async canHandle(n){let t=n.safeParseAsync!==void 0;return t&&await Bi(this.requiredImports,"Zod schema"),t}async validate(n,t){let r=await t.safeParseAsync(n);return r.success?{success:!0,data:r.data}:{success:!1,errors:r.error.issues.map(i=>({path:`/${i.path.join("/")}`,message:i.message}))}}async transformToJsonSchema(n){let{zodToJsonSchema:t}=await import("zod-to-json-schema");return t(n)}};var Wi=new Vi,Hi=new zi,Mr=async(e,n)=>{if(await Wi.canHandle(e))return Wi.validate(n,e);if(await Hi.canHandle(e))return Hi.validate(n,e);throw new Error("Invalid schema")},yt=async e=>{if(await Wi.canHandle(e))return Wi.transformToJsonSchema(e);if(await Hi.canHandle(e))return Hi.transformToJsonSchema(e);throw new Error("Invalid schema")};function yu(){return["development",void 0,"dev"].includes(process.env.NODE_ENV)}var Qn=class{constructor(n){this.discoveredWorkflows=new Map;this.discoverWorkflowPromises=new Map;this.registeredAgents=new Map;this.version="2.12.1";let t=this.buildOptions(n);this.apiUrl=t.apiUrl,this.secretKey=t.secretKey,this.strictAuthentication=t.strictAuthentication,this.verbose=t.verbose,this.logger=t.logger,this.templateEngine=au()}buildOptions(n){let t={apiUrl:Ui(n==null?void 0:n.apiUrl),secretKey:$i(n==null?void 0:n.secretKey),strictAuthentication:!yu(),verbose:yu(),logger:console};return(n==null?void 0:n.strictAuthentication)!==void 0?t.strictAuthentication=n.strictAuthentication:process.env.NOVU_STRICT_AUTHENTICATION_ENABLED!==void 0&&(t.strictAuthentication=process.env.NOVU_STRICT_AUTHENTICATION_ENABLED==="true"),(n==null?void 0:n.verbose)!==void 0&&(t.verbose=n.verbose),(n==null?void 0:n.logger)!==void 0&&(t.logger=n.logger),t}log(...n){this.verbose&&this.logger.info(...n)}async addWorkflows(n){for(let t of n){if(this.discoveredWorkflows.has(t.id))continue;let r=this.discoverWorkflowPromises.get(t.id);if(r){await r;continue}let i=this.addWorkflow(t);this.discoverWorkflowPromises.set(t.id,i),await i}}addAgents(n){for(let t of n)this.registeredAgents.set(t.id,t)}getAgent(n){return this.registeredAgents.get(n)}async addWorkflow(n){try{let t=await n.discover();lu(t,this.verbose,this.logger),this.discoveredWorkflows.set(n.id,t)}finally{this.discoverWorkflowPromises.delete(n.id)}}healthCheck(){let n=this.getRegisteredWorkflows(),t=n.length,r=n.reduce((i,o)=>i+o.steps.length,0);return{status:"ok",sdkVersion:"2.12.1",frameworkVersion:"2024-06-26",discovered:{workflows:t,steps:r}}}getWorkflow(n){let t=this.discoveredWorkflows.get(n);if(t)return t;throw new Rr(n)}getStep(n,t){let i=this.getWorkflow(n).steps.find(o=>o.stepId===t);if(i)return i;throw new Mi(t)}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 Hc(n)}catch(t){return this.logger.warn("Failed to mock schema, returning empty object:",t),{}}}async validate(n,t,r,i,o,a,s){let u=await Mr(t,n);if(u.success)return u.data;switch(r){case"event":this.throwInvalidEvent(i,o,u.errors);case"step":this.throwInvalidStep(a,i,o,u.errors);case"provider":this.throwInvalidProvider(a,s,i,o,u.errors);default:throw new Error(`Invalid component: '${r}'`)}}throwInvalidProvider(n,t,r,i,o){throw n?t?r==="output"?new Si(i,n,t,o):new Error(`Invalid payload type: '${r}'`):new Error("providerId is required"):new Error("stepId is required")}throwInvalidStep(n,t,r,i){if(!n)throw new Error("stepId is required");switch(t){case"output":throw new yi(r,n,i);case"result":throw new bi(r,n,i);case"controls":throw new gi(r,n,i);default:throw new Error(`Invalid payload type: '${t}'`)}}throwInvalidEvent(n,t,r){switch(n){case"controls":throw new mi(t,r);case"payload":throw new Ar(t,r);default:throw new Error(`Invalid payload type: '${n}'`)}}executeStepFactory(n,t,r){return async(i,o,a)=>{if(r())return;let s=this.getStep(n.workflowId,i),u=n.action==="preview";if(!u&&i===n.stepId){let g=await this.createStepControls(s,n),P=await this.compileControls(g,n);if(await this.shouldSkip(a==null?void 0:a.skip,P))return t({options:{skip:!0},outputs:{},providers:{}}),{}}let p=this.previewStep.bind(this),d=this.executeStep.bind(this),y=await(u?p:d)(n,{...s,providers:s.providers.map(g=>{var ee;let P=(ee=a==null?void 0:a.providers)==null?void 0:ee[g.type];if(!P)throw new Ei(g.type);return{...g,resolve:P}}),resolve:o});return this.shouldSanitize({stepType:s.type,options:a})&&(y={...y,outputs:qi(y.outputs)}),i===n.stepId&&t({...y,options:{skip:!1}}),y.outputs}}shouldSanitize({stepType:n,options:t}){return(t==null?void 0:t.disableOutputSanitization)===!0?!1:["email","in_app"].includes(n)}async shouldSkip(n,t){return n?n(t):!1}async executeWorkflow(n){let i=`${{execute:"Executing",preview:"Previewing"}[n.action]||n.action} workflowId:`;this.log(`
114
114
  ${et.bold(et.underline(i))} '${n.workflowId}'`);let o=this.getWorkflow(n.workflowId),a=process.hrtime(),s={outputs:{},providers:{},options:{skip:!1}},u,p=!1,d=new Promise(Oe=>{u=Oe}),h=Oe=>{if(p)throw new Error("setResult can only be called once per workflow execution");u(),p=!0,s=Oe},y=()=>p,g;try{if(n.action==="execute"&&!n.payload)throw new Ar(n.workflowId,{message:"Event `payload` is required"});let Oe=await this.createExecutionPayload(n,o),$={...n,payload:Oe};await Promise.race([d,o.execute({payload:Oe,env:n.env,controls:{},subscriber:n.subscriber,context:n.context,step:{email:this.executeStepFactory($,h,y),sms:this.executeStepFactory($,h,y),inApp:this.executeStepFactory($,h,y),digest:this.executeStepFactory($,h,y),delay:this.executeStepFactory($,h,y),push:this.executeStepFactory($,h,y),chat:this.executeStepFactory($,h,y),custom:this.executeStepFactory($,h,y),throttle:this.executeStepFactory($,h,y)}})])}catch(Oe){g=Oe}let P=process.hrtime(a),ee=P[0],Z=P[1],B=ee*1e3+Z/1e6,ue=g?ct.ERROR:ct.SUCCESS,ve={execute:"Executed",preview:"Previewed"}[n.action]||n.action;if(this.log(`${ue} ${ve} workflowId: \`${n.workflowId}\``),this.prettyPrintExecute(n,B,g),g)throw g;return{outputs:s.outputs,providers:s.providers,options:s.options,metadata:{status:"success",error:!1,duration:B}}}async createExecutionPayload(n,t){let{payload:r}=n;if(n.action==="preview"){let o=this.mock(t.payload.schema);r=Object.assign(o,r)}return await this.validate(r,t.payload.unknownSchema,"event","payload",n.workflowId)}prettyPrintExecute(n,t,r){if(!this.verbose)return;let i=r?ct.ERROR:ct.SUCCESS,a={execute:"Executed",preview:"Previewed"}[n.action]||n.action,s=r?"Failed to execute":a,u=r?et.error:et.success,p=`${i} ${s} workflowId: '${n.workflowId}`;this.logger.info(`
115
115
  ${et.bold(u(p))}'
116
116
  \u251C ${ct.STEP} stepId: '${n.stepId}'
117
117
  \u251C ${ct.ACTION} action: '${n.action}'
118
118
  \u2514 ${ct.DURATION} duration: '${t.toFixed(2)}ms'
119
- `)}async executeProviders(n,t,r){return t.providers.reduce(async(i,o)=>{let a=await i,s=this.previewProvider.bind(this),u=this.executeProvider.bind(this),d=await(n.action==="preview"?s:u)(n,t,o,r);return{...a,[o.type]:d}},Promise.resolve({}))}previewProvider(n,t,r,i){return this.log(` ${ct.MOCK} Mocked provider: \`${r.type}\``),this.mock(r.outputs.schema)}async executeProvider(n,t,r,i){try{if(n.stepId===t.stepId){let o=await this.createStepControls(t,n),a=await r.resolve({controls:o,outputs:i}),s=await this.validate(a,r.outputs.unknownSchema,"step","output",n.workflowId,t.stepId,r.type);return this.log(` ${ct.SUCCESS} Executed provider: \`${r.type}\``),{...s,_passthrough:a._passthrough}}else return this.log(` ${ct.HYDRATED} Hydrated provider: \`${r.type}\``),{}}catch(o){throw this.log(` ${ct.ERROR} Failed to execute provider: \`${r.type}\``),new _i(r.type,n.action,o)}}async executeStep(n,t){if(n.stepId===t.stepId)try{let r=await this.createStepControls(t,n),i=await this.compileControls(r,n),o=await t.resolve(i),a=await this.validate(o,t.outputs.unknownSchema,"step","output",n.workflowId,t.stepId),s=await this.executeProviders(n,t,a);return this.log(` ${ct.SUCCESS} Executed stepId: \`${t.stepId}\``),{outputs:a,providers:s}}catch(r){throw this.log(` ${ct.ERROR} Failed to execute stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}else try{let r=this.getStepState(n,t.stepId);if(r){let i=await this.validate(r.outputs,t.results.unknownSchema,"step","result",n.workflowId,t.stepId);return this.log(` ${ct.HYDRATED} Hydrated stepId: \`${t.stepId}\``),{outputs:i,providers:await this.executeProviders(n,t,i)}}else throw new fi(n.workflowId,t.stepId)}catch(r){throw this.log(` ${ct.ERROR} Failed to hydrate stepId: \`${t.stepId}\``),r}}async compileControls(n,t){var r;try{let i=Cr(n),o=this.preprocessTranslationPatterns(JSON.stringify(i));o=this.preprocessFilterTranslationArgs(o);let a=this.templateEngine.parse(o),s=this.getWorkflow(t.workflowId),u={workflow:{workflowId:s.workflowId,name:s.name,description:s.description,tags:s.tags,severity:s.severity},payload:t.payload,subscriber:t.subscriber,...t.actor&&{actor:t.actor},context:t.context,steps:Lg(t.state),env:(r=t.env)!=null?r:{}},p=await this.templateEngine.render(a,u),d=this.postprocessTranslationMarkers(p),h=(0,bu.jsonrepair)(d),y=JSON.parse(h),g=Pr(y);return hu(g)}catch(i){throw new wi(t.workflowId,t.stepId,i)}}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,t){return await this.validate(t.controls,n.controls.unknownSchema,"step","controls",t.workflowId,n.stepId)}async previewStep(n,t){try{return await this.constructStepForPreview(n,t)}catch(r){throw this.log(` ${ct.ERROR} Failed to preview stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}}async constructStepForPreview(n,t){return n.stepId===t.stepId?await this.previewRequiredStep(t,n):await this.extractMockDataForPreviousSteps(n,t)}async extractMockDataForPreviousSteps(n,t){let r={},i=this.getStepState(n,t.stepId),o=this.mock(t.results.schema);return{outputs:Ta(o,(i==null?void 0:i.outputs)||{}),providers:await this.executeProviders(n,t,r)}}async previewRequiredStep(n,t){let r=await this.createStepControls(n,t),i=await this.compileControls(r,t),o=await n.resolve(i),a=await this.validate(o,n.outputs.unknownSchema,"step","output",t.workflowId,n.stepId);return this.log(` ${ct.MOCK} Mocked stepId: \`${n.stepId}\``),{outputs:a,providers:await this.executeProviders(t,n,a)}}getStepState(n,t){return n.state.find(r=>r.stepId===t)}getStepCode(n,t){return{code:this.getStep(n,t).resolve.toString()}}getWorkflowCode(n){return{code:this.getWorkflow(n).execute.toString()}}getCode(n,t){let r;if(n)t?r=this.getStepCode(n,t):r=this.getWorkflowCode(n);else throw new Rr(n);return r}};function Lg(e){let n={};for(let t of e)n[t.stepId]=t.outputs;return n}var Dg={400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",408:"Request Timeout",409:"Conflict",422:"Unprocessable Entity",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"};function Yi(e){return typeof e=="string"&&e.trim()?e:!e||typeof e!="object"?null:Yi(e.message)}function Fg(e){if(!e)return null;let n;try{n=JSON.parse(e)}catch{return null}if(!n||typeof n!="object")return null;let t=n,r=Yi(t.message);if(r)return r;let i=Yi(t.error);if(i)return i;let o=t.errors;return Array.isArray(o)?Yi(o[0]):null}function Ug(e,n){var i;let t=(i=Dg[e])!=null?i:e,r=Fg(n);return r?`Delivery failed: ${t}: ${r}`:`Delivery failed: ${t}`}var pn=class extends Error{constructor(n,t){super(n),this.name="AgentError",this.cause=t==null?void 0:t.cause,this.delivery=t==null?void 0:t.delivery}},Dn=class extends pn{constructor(n,t){let r={statusCode:n,responseBody:t};super(Ug(n,t),{delivery:r}),this.name="AgentDeliveryError",this.statusCode=n,this.responseBody=t}};function Nr(e){return e instanceof pn?e:e instanceof Error?new pn(e.message,{cause:e}):new pn("Turn failed",{cause:e})}var wu=Symbol.for("novu.agent.runtimeContext");var ka=(i=>(i.ON_MESSAGE="onMessage",i.ON_ACTION="onAction",i.ON_RESOLVE="onResolve",i.ON_REACTION="onReaction",i))(ka||{}),Zn=class{constructor(){this.__novuPendingApproval=!0}};function Su(e){return typeof e=="object"&&e!==null&&"suppress"in e&&e.suppress===!0}function Ji(e){return"type"in e&&e.type==="card"}function Tu(e){return typeof e=="object"&&e!==null&&e.type==="tool-approval-card"}var xu="tool-approval";function $g(e){return e==="approve"||e==="deny"}function va(e,n){return`${xu}:${e}:${n}`}function ku(e){let[n,t,...r]=(e!=null?e:"").split(":"),i=r.join(":");return n!==xu||!$g(t)||!i?null:{approved:t==="approve",approvalId:i}}async function vu(e,n,t,r){var p,d;let i=r!=null?r:n.id,o={approve:va("approve",i),deny:va("deny",i)},a=h=>({type:"tool-approval-card",...h}),s=(d=(p=t==null?void 0:t.renderApproval)==null?void 0:p.call(t,{toolCall:n,actionIds:o,approvalCard:a}))!=null?d:a(),u={approvalId:i,toolCallId:n.id,name:n.name,input:n.input};if(e.emitToolApprovalRequest(u),Tu(s)){await e.replyApprovalCard(s);return}await e.reply(s)}var tS=5*1024*1024,nS=5*1024*1024,Af=32768,rS=/^[A-Za-z0-9+/]*={0,2}$/;function Kr(e,n){return e.filename?`"${e.filename}"`:`at index ${n}`}function _f(){return globalThis.Buffer}function iS(e){var n,t,r;return(r=(t=(n=_f())==null?void 0:n.isBuffer)==null?void 0:t.call(n,e))!=null?r:!1}function oS(e){return typeof Blob!="undefined"&&e instanceof Blob}function bl(e){let n=_f();if(n)return n.from(e).toString("base64");if(typeof btoa!="function")throw new Error("Unable to encode file data: base64 encoding is not available in this runtime.");let t="";for(let r=0;r<e.length;r+=Af){let i=e.subarray(r,r+Af);t+=String.fromCharCode(...i)}return btoa(t)}function Rf(e){let n=e.replace(/\s/g,""),t=n.length%4;if(!n||t===1||!rS.test(n))return null;let r=n.endsWith("==")?2:n.endsWith("=")?1:0;return Math.floor(n.length*3/4)-r}function Jr(e,n,t){if(e>tS)throw new Error(`Invalid file ${Kr(n,t)}: inline data must be 5 MB or smaller. Use a publicly-accessible URL for larger files.`)}async function aS(e,n,t){if(typeof e=="string"){let r=Rf(e);if(r===null)throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64-encoded string.`);return Jr(r,n,t),e}if(iS(e))return Jr(e.byteLength,n,t),e.toString("base64");if(e instanceof Uint8Array)return Jr(e.byteLength,n,t),bl(e);if(e instanceof ArrayBuffer)return Jr(e.byteLength,n,t),bl(new Uint8Array(e));if(oS(e))return Jr(e.size,n,t),bl(new Uint8Array(await e.arrayBuffer()));throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64 string, Buffer, Uint8Array, ArrayBuffer, or Blob.`)}async function sS(e){if(!(e!=null&&e.length))return;let n=[],t=0;for(let[r,i]of e.entries()){let o=i.data,a=i.url,s=o!=null,u=a!=null;if(s===u)throw new Error(`Invalid file ${Kr(i,r)}: provide exactly one of data or url.`);if(s){let p=await aS(o,i,r),d=Rf(p);if(t+=d!=null?d:0,t>nS)throw new Error("Invalid files: total inline data must be 5 MB or smaller. Use publicly-accessible URLs for larger files.");n.push({...i,data:p});continue}if(u&&typeof a!="string")throw new Error(`Invalid file ${Kr(i,r)}: url must be a string.`);n.push(i)}return n}async function Of(e,n){let t=await sS(n);if(typeof e=="string")return t?{markdown:e,files:t}:{markdown:e};let{isJSX:r,toCardElement:i}=await Promise.resolve().then(()=>(vf(),kf));if(r(e)){let o=i(e);if(o)return t?{card:o,files:t}:{card:o}}if(Ji(e))return t?{card:e,files:t}:{card:e};throw new Error("Invalid message content \u2014 expected string or CardElement")}var Gr=class{constructor(n,t,r,i,o){this.conversationId=r;this.integrationIdentifier=i;this.poster=o;this.editedByHandler=!1;this.messageId=n,this.platformThreadId=t}async edit(n,t){this.editedByHandler=!0;let r=await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,edit:{messageId:this.messageId,content:await Of(n,t==null?void 0:t.files)}});if(!r)throw new Error("Agent edit did not return a message handle");return this.messageId=r.messageId,this.platformThreadId=r.platformThreadId,this}async delete(){await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,deleteMessages:[{messageId:this.messageId}]})}},Ef;Ef=wu;var Do=class{constructor(n,t,r){this[Ef]=!0;this._signals=[];this._toolResults=[];this._pendingToolApprovalRequest=null;this._pendingReactions=[];this._pendingDeletes=[];this._resolveSignal=null;var s,u;this.event=n.event,this.action=(s=n.action)!=null?s:null,this.message=n.message,this.reaction=n.reaction,this.conversation=n.conversation,this.subscriber=n.subscriber,this.history=n.history,this.platform=n.platform,this.platformContext=n.platformContext,this._replyUrl=n.replyUrl,this._conversationId=n.conversationId,this._integrationIdentifier=n.integrationIdentifier,this._secretKey=t,this._poster={post:p=>this._post(p)},this._toolApprovalConfig=r,this._metadataState={...(u=n.conversation.metadata)!=null?u:{}};let i=this;this.metadata={get(p){return i._metadataState[p]},set(p,d){i._metadataState[p]=d,i._signals.push({type:"metadata",action:"set",key:p,value:d})},delete(p){delete i._metadataState[p],i._signals.push({type:"metadata",action:"delete",key:p})},clear(){i._metadataState={},i._signals.push({type:"metadata",action:"clear"})},get current(){return{...i._metadataState}}};let o=p=>this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,typing:p}).then(()=>{}),a=(p=>o(p===void 0?{}:{status:p}));a.stop=()=>o("stop"),this.typing=a,this.toolApproval={request:async p=>(await vu(this,p,this._toolApprovalConfig),new Zn)}}asMessageContext(){return this}async reply(n,t){let r=await Of(n,t==null?void 0:t.files),i={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:r};this._drainSideEffects(i);let o=await this._post(i);if(!o)throw new Error("Agent reply did not return a message handle");return new Gr(o.messageId,o.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}async replyApprovalCard(n){let t={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:{toolApprovalCard:n}};this._drainSideEffects(t);let r=await this._post(t);if(!r)throw new Error("Agent approval card reply did not return a message handle");return new Gr(r.messageId,r.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}createReplyHandle(n){return new Gr(n,"",this._conversationId,this._integrationIdentifier,this._poster)}resolve(n){this._resolveSignal={summary:n}}trigger(n,t){this._signals.push({...t,type:"trigger",workflowId:n})}emitToolApprovalRequest(n){if(this._pendingToolApprovalRequest)throw new Error("Only one tool approval request can be queued before the next reply");this._pendingToolApprovalRequest=n}emitToolResult(n){this._toolResults.push(n)}addReaction(n,t){this._pendingReactions.push({messageId:n,emojiName:t})}deleteMessage(n){this._pendingDeletes.push({messageId:n})}async reportTurnError(){try{await this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,error:!0})}catch(n){console.error("[agent] Failed to report turn error:",n)}}async flush(){if(!this._hasPendingSideEffects())return;let n={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier};this._drainSideEffects(n),await this._post(n)}_hasPendingSideEffects(){return!!(this._pendingToolApprovalRequest||this._signals.length||this._toolResults.length||this._resolveSignal||this._pendingReactions.length||this._pendingDeletes.length)}_drainSideEffects(n){this._pendingToolApprovalRequest&&(n.toolApprovalRequest=this._pendingToolApprovalRequest,this._pendingToolApprovalRequest=null),this._signals.length&&(n.signals=this._signals,this._signals=[]),this._toolResults.length&&(n.toolResults=this._toolResults,this._toolResults=[]),this._pendingReactions.length&&(n.addReactions=this._pendingReactions,this._pendingReactions=[]),this._pendingDeletes.length&&(n.deleteMessages=this._pendingDeletes,this._pendingDeletes=[]),this._resolveSignal&&(n.resolve=this._resolveSignal,this._resolveSignal=null)}async _post(n){let t=await fetch(this._replyUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${this._secretKey}`},body:JSON.stringify(n)});if(!t.ok){let i=await t.text().catch(()=>"");throw new Dn(t.status,i)}let r=await t.text().catch(()=>"");if(!r)return null;try{let i=JSON.parse(r),o=i&&typeof i=="object"&&"data"in i?i.data:i;if(o&&typeof o.messageId=="string"&&typeof o.platformThreadId=="string")return{messageId:o.messageId,platformThreadId:o.platformThreadId}}catch{}return null}};function lS(e){return!!(typeof e=="string"||typeof e=="object"&&e!==null&&Ji(e)||typeof e=="object"&&e!==null&&("markdown"in e||"card"in e||"files"in e))}function cS(e,n){return e}function uS(e,n){var t;for(let r of e){let i=r.toolData;if(r.type==="tool_approval_request"&&(i==null?void 0:i.approvalId)===n&&i.toolCallId)return{approvalId:i.approvalId,toolCallId:i.toolCallId,name:(t=i.toolName)!=null?t:"tool",input:i.input}}}async function If(e){var o;let n=new Do(e.bridge,e.secretKey,e.agent.handlers.toolApproval),{agent:t,event:r,logger:i}=e;try{await pS(t,r,n),await n.flush()}catch(a){let s=Nr(a);i==null||i.error(`[agent:${t.id}] Turn failed (${r}): ${s.message}`,(o=s.cause)!=null?o:s);let u=!1;if(t.handlers.onError)try{let p=await t.handlers.onError(s,cS(n,r));Su(p)?u=!0:lS(p)&&(await n.reply(p),u=!0)}catch(p){i==null||i.error(`[agent:${t.id}] onError failed:`,p)}u||await n.reportTurnError()}finally{try{await n.typing.stop()}catch{}}}async function pS(e,n,t){var i,o;let r=async a=>{a instanceof Zn||a===void 0||await t.reply(a)};switch(n){case"onMessage":{await r(await e.handlers.onMessage(t.message,t));break}case"onAction":{let a=ku((i=t.action)==null?void 0:i.id);if(a&&e.handlers.onToolApproval){let{approved:s,approvalId:u}=a,p=uS(t.history,u),d=p?{id:p.toolCallId,name:p.name,input:p.input}:{id:u,name:""},h=t.createReplyHandle((o=t.action.sourceMessageId)!=null?o:""),y={toolCall:d,approved:s,approvalMessage:h};e.userOnToolApproval===!1&&(await t.typing(),t.action.sourceMessageId&&await h.delete());let g=await e.handlers.onToolApproval(y,t);await r(g);break}e.handlers.onAction&&await r(await e.handlers.onAction(t.action,t));break}case"onReaction":e.handlers.onReaction&&await r(await e.handlers.onReaction(t.reaction,t));break;case"onResolve":e.handlers.onResolve&&await r(await e.handlers.onResolve(t));break;default:throw new Mn(n,ka)}}function Cf(e){let n={};for(let i of e.split(",")){let o=i.trim();if(!o)continue;let a=o.indexOf("=");if(a<=0)continue;let s=o.slice(0,a),u=o.slice(a+1);s&&u&&!(s in n)&&(n[s]=u)}let t=n.t,r=t!==void 0?Number(t):Number.NaN;return{t:Number.isFinite(r)?r:void 0,v1:n.v1}}var ar=class{constructor(n){this.handler=n.handler,this.client=n.client?n.client:new Qn,this.workflows=n.workflows||[],this.agents=n.agents||[],this.http=Di(this.client.secretKey,this.client.apiUrl),this.frameworkName=n.frameworkName,this.hmacEnabled=this.client.strictAuthentication,this.client.addAgents(this.agents)}createHandler(){return async(...n)=>{await this.client.addWorkflows(this.workflows);let t=await this.handler(...n),r=await this.handleAction({actions:t});return t.transformResponse(r)}}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.11.2-alpha.0","novu-framework-server":this.frameworkName,"user-agent":n}}createResponse(n,t){return{status:n,body:JSON.stringify(t),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}){let t=await n.url(),r=await n.method(),i=t.searchParams.get("action")||"health-check",o=t.searchParams.get("workflowId")||"",a=t.searchParams.get("stepId")||"",s=t.searchParams.get("agentId")||"",u=t.searchParams.get("event")||"",p=await n.headers("novu-signature")||"",d={};try{r==="POST"&&(d=await n.body())}catch{}try{i!=="health-check"&&await this.validateHmac(d,p);let h=this.getPostActionMap(d,o,a,i,s,u,n.waitUntil),y=this.getGetActionMap(o,a);if(r==="POST")return await this.handlePostAction(i,h);if(r==="GET")return await this.handleGetAction(i,y);if(r==="OPTIONS")return this.createResponse(200,{})}catch(h){return this.handleError(h)}return this.createError(new ki(r))}getPostActionMap(n,t,r,i,o,a,s){return{trigger:this.triggerAction({workflowId:t,...n}),execute:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},preview:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},"agent-event":async()=>{let u=this.client.getAgent(o);if(!u)return this.createResponse(404,{error:`Agent '${o}' not registered`});let p=If({agent:u,event:a,bridge:n,secretKey:this.client.secretKey,logger:this.client.logger});return s&&s(p),this.createResponse(200,{status:"ack"})}}}triggerAction(n){return async()=>{let t={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}},r=await this.http.post("/events/trigger",t);return this.createResponse(200,r)}}getGetActionMap(n,t){return{discover:async()=>{let r=await this.client.discover();return this.createResponse(200,r)},"health-check":async()=>{let r=await this.client.healthCheck();return this.createResponse(200,r)},code:async()=>{let r=await this.client.getCode(n,t);return this.createResponse(200,r)}}}async handlePostAction(n,t){if(Object.values(kr).includes(n)){let r=t[n];return r()}else throw new Mn(n,kr)}async handleGetAction(n,t){if(Object.values(ui).includes(n)){let r=t[n];return r()}else throw new Mn(n,ui)}handleError(n){if(Pn(n))return n.statusCode>=500&&this.client.logger.error(n),this.createError(n);if(Uc(n))return this.createError(n);{let t=new Gn(n);return this.client.logger.error(t),this.createError(t)}}async validateHmac(n,t){if(!this.hmacEnabled)return;if(!t)throw new Oi;if(!this.client.secretKey)throw new Pi;let r=Cf(t);if(!r.v1||r.t===void 0)throw new Ii;let i=Date.now();if(r.t<i-3e5||r.t>i+3e5)throw new Ci;let o=await Yc(this.client.secretKey,`${r.t}.${JSON.stringify(n)}`);if(!Jc(o,r.v1))throw new Ri}};yl();var sr=Symbol.for("workflow-serialize"),lr=Symbol.for("workflow-deserialize");var dS=Object.defineProperty,hS=Object.defineProperties,fS=Object.getOwnPropertyDescriptors,Mf=Object.getOwnPropertySymbols,mS=Object.prototype.hasOwnProperty,gS=Object.prototype.propertyIsEnumerable,Nf=(e,n,t)=>n in e?dS(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,Uf=(e,n)=>{for(var t in n||(n={}))mS.call(n,t)&&Nf(e,t,n[t]);if(Mf)for(var t of Mf(n))gS.call(n,t)&&Nf(e,t,n[t]);return e},$f=(e,n)=>hS(e,fS(n)),It=(e,n)=>{let t=!1,r=!1;for(let i=0;i<n;i+=1){if(e[i]==="\\"&&i+1<e.length&&e[i+1]==="`"){i+=1;continue}if(e.substring(i,i+3)==="```"){r=!r,i+=2;continue}!r&&e[i]==="`"&&(t=!t)}return t||r},yS=(e,n)=>{let t=e.substring(n,n+3)==="```",r=n>0&&e.substring(n-1,n+2)==="```",i=n>1&&e.substring(n-2,n+1)==="```";return t||r||i},bS=e=>{let n=0;for(let t=0;t<e.length;t+=1){if(e[t]==="\\"&&t+1<e.length&&e[t+1]==="`"){t+=1;continue}e[t]==="`"&&!yS(e,t)&&(n+=1)}return n},Rn=(e,n)=>{let t=!1,r=!1,i=-1;for(let o=0;o<e.length;o+=1){if(e[o]==="\\"&&o+1<e.length&&e[o+1]==="`"){o+=1;continue}if(e.substring(o,o+3)==="```"){r=!r,o+=2;continue}if(!r&&e[o]==="`")if(t){if(i<n&&n<o)return!0;t=!1,i=-1}else t=!0,i=o}return!1},wS=/^(\s*(?:[-*+]|\d+[.)]) +)>(=?\s*[$]?\d)/gm,SS=e=>!e||typeof e!="string"||!e.includes(">")?e:e.replace(wS,(n,t,r,i)=>It(e,i)?n:`${t}\\>${r}`),TS=/(\*\*)([^*]*\*?)$/,xS=/(__)([^_]*?)$/,kS=/(\*\*\*)([^*]*?)$/,vS=/(\*)([^*]*?)$/,AS=/(_)([^_]*?)$/,ES=/(`)([^`]*?)$/,_S=/(~~)([^~]*?)$/,Vn=/^[\s_~*`]*$/,qf=/^[\s]*[-*+][\s]+$/,RS=/[\p{L}\p{N}_]/u,OS=/^```[^`\n]*```?$/,IS=/^\*{4,}$/,CS=/(__)([^_]+)_$/,PS=/(~~)([^~]+)~$/,Lf=/~~/g,On=e=>{if(!e)return!1;let n=e.charCodeAt(0);return n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||n===95?!0:RS.test(e)};var MS=(e,n)=>{let t=1;for(let r=n-1;r>=0;r-=1)if(e[r]==="]")t+=1;else if(e[r]==="["&&(t-=1,t===0))return r;return-1},jf=(e,n)=>{let t=1;for(let r=n+1;r<e.length;r+=1)if(e[r]==="[")t+=1;else if(e[r]==="]"&&(t-=1,t===0))return r;return-1},Fo=(e,n)=>{let t=!1,r=!1;for(let i=0;i<e.length&&i<n;i+=1){if(e[i]==="\\"&&e[i+1]==="$"){i+=1;continue}e[i]==="$"&&(e[i+1]==="$"?(r=!r,i+=1,t=!1):r||(t=!t))}return t||r},NS=(e,n)=>{for(let t=n;t<e.length;t+=1){if(e[t]===")")return!0;if(e[t]===`
119
+ `)}async executeProviders(n,t,r){return t.providers.reduce(async(i,o)=>{let a=await i,s=this.previewProvider.bind(this),u=this.executeProvider.bind(this),d=await(n.action==="preview"?s:u)(n,t,o,r);return{...a,[o.type]:d}},Promise.resolve({}))}previewProvider(n,t,r,i){return this.log(` ${ct.MOCK} Mocked provider: \`${r.type}\``),this.mock(r.outputs.schema)}async executeProvider(n,t,r,i){try{if(n.stepId===t.stepId){let o=await this.createStepControls(t,n),a=await r.resolve({controls:o,outputs:i}),s=await this.validate(a,r.outputs.unknownSchema,"step","output",n.workflowId,t.stepId,r.type);return this.log(` ${ct.SUCCESS} Executed provider: \`${r.type}\``),{...s,_passthrough:a._passthrough}}else return this.log(` ${ct.HYDRATED} Hydrated provider: \`${r.type}\``),{}}catch(o){throw this.log(` ${ct.ERROR} Failed to execute provider: \`${r.type}\``),new _i(r.type,n.action,o)}}async executeStep(n,t){if(n.stepId===t.stepId)try{let r=await this.createStepControls(t,n),i=await this.compileControls(r,n),o=await t.resolve(i),a=await this.validate(o,t.outputs.unknownSchema,"step","output",n.workflowId,t.stepId),s=await this.executeProviders(n,t,a);return this.log(` ${ct.SUCCESS} Executed stepId: \`${t.stepId}\``),{outputs:a,providers:s}}catch(r){throw this.log(` ${ct.ERROR} Failed to execute stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}else try{let r=this.getStepState(n,t.stepId);if(r){let i=await this.validate(r.outputs,t.results.unknownSchema,"step","result",n.workflowId,t.stepId);return this.log(` ${ct.HYDRATED} Hydrated stepId: \`${t.stepId}\``),{outputs:i,providers:await this.executeProviders(n,t,i)}}else throw new fi(n.workflowId,t.stepId)}catch(r){throw this.log(` ${ct.ERROR} Failed to hydrate stepId: \`${t.stepId}\``),r}}async compileControls(n,t){var r;try{let i=Cr(n),o=this.preprocessTranslationPatterns(JSON.stringify(i));o=this.preprocessFilterTranslationArgs(o);let a=this.templateEngine.parse(o),s=this.getWorkflow(t.workflowId),u={workflow:{workflowId:s.workflowId,name:s.name,description:s.description,tags:s.tags,severity:s.severity},payload:t.payload,subscriber:t.subscriber,...t.actor&&{actor:t.actor},context:t.context,steps:Lg(t.state),env:(r=t.env)!=null?r:{}},p=await this.templateEngine.render(a,u),d=this.postprocessTranslationMarkers(p),h=(0,bu.jsonrepair)(d),y=JSON.parse(h),g=Pr(y);return hu(g)}catch(i){throw new wi(t.workflowId,t.stepId,i)}}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,t){return await this.validate(t.controls,n.controls.unknownSchema,"step","controls",t.workflowId,n.stepId)}async previewStep(n,t){try{return await this.constructStepForPreview(n,t)}catch(r){throw this.log(` ${ct.ERROR} Failed to preview stepId: \`${t.stepId}\``),Pn(r)?r:new _r(t.stepId,n.action,r)}}async constructStepForPreview(n,t){return n.stepId===t.stepId?await this.previewRequiredStep(t,n):await this.extractMockDataForPreviousSteps(n,t)}async extractMockDataForPreviousSteps(n,t){let r={},i=this.getStepState(n,t.stepId),o=this.mock(t.results.schema);return{outputs:Ta(o,(i==null?void 0:i.outputs)||{}),providers:await this.executeProviders(n,t,r)}}async previewRequiredStep(n,t){let r=await this.createStepControls(n,t),i=await this.compileControls(r,t),o=await n.resolve(i),a=await this.validate(o,n.outputs.unknownSchema,"step","output",t.workflowId,n.stepId);return this.log(` ${ct.MOCK} Mocked stepId: \`${n.stepId}\``),{outputs:a,providers:await this.executeProviders(t,n,a)}}getStepState(n,t){return n.state.find(r=>r.stepId===t)}getStepCode(n,t){return{code:this.getStep(n,t).resolve.toString()}}getWorkflowCode(n){return{code:this.getWorkflow(n).execute.toString()}}getCode(n,t){let r;if(n)t?r=this.getStepCode(n,t):r=this.getWorkflowCode(n);else throw new Rr(n);return r}};function Lg(e){let n={};for(let t of e)n[t.stepId]=t.outputs;return n}var Dg={400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",408:"Request Timeout",409:"Conflict",422:"Unprocessable Entity",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"};function Yi(e){return typeof e=="string"&&e.trim()?e:!e||typeof e!="object"?null:Yi(e.message)}function Fg(e){if(!e)return null;let n;try{n=JSON.parse(e)}catch{return null}if(!n||typeof n!="object")return null;let t=n,r=Yi(t.message);if(r)return r;let i=Yi(t.error);if(i)return i;let o=t.errors;return Array.isArray(o)?Yi(o[0]):null}function Ug(e,n){var i;let t=(i=Dg[e])!=null?i:e,r=Fg(n);return r?`Delivery failed: ${t}: ${r}`:`Delivery failed: ${t}`}var pn=class extends Error{constructor(n,t){super(n),this.name="AgentError",this.cause=t==null?void 0:t.cause,this.delivery=t==null?void 0:t.delivery}},Dn=class extends pn{constructor(n,t){let r={statusCode:n,responseBody:t};super(Ug(n,t),{delivery:r}),this.name="AgentDeliveryError",this.statusCode=n,this.responseBody=t}};function Nr(e){return e instanceof pn?e:e instanceof Error?new pn(e.message,{cause:e}):new pn("Turn failed",{cause:e})}var wu=Symbol.for("novu.agent.runtimeContext");var ka=(i=>(i.ON_MESSAGE="onMessage",i.ON_ACTION="onAction",i.ON_RESOLVE="onResolve",i.ON_REACTION="onReaction",i))(ka||{}),Zn=class{constructor(){this.__novuPendingApproval=!0}};function Su(e){return typeof e=="object"&&e!==null&&"suppress"in e&&e.suppress===!0}function Ji(e){return"type"in e&&e.type==="card"}function Tu(e){return typeof e=="object"&&e!==null&&e.type==="tool-approval-card"}var xu="tool-approval";function $g(e){return e==="approve"||e==="deny"}function va(e,n){return`${xu}:${e}:${n}`}function ku(e){let[n,t,...r]=(e!=null?e:"").split(":"),i=r.join(":");return n!==xu||!$g(t)||!i?null:{approved:t==="approve",approvalId:i}}async function vu(e,n,t,r){var p,d;let i=r!=null?r:n.id,o={approve:va("approve",i),deny:va("deny",i)},a=h=>({type:"tool-approval-card",...h}),s=(d=(p=t==null?void 0:t.renderApproval)==null?void 0:p.call(t,{toolCall:n,actionIds:o,approvalCard:a}))!=null?d:a(),u={approvalId:i,toolCallId:n.id,name:n.name,input:n.input};if(e.emitToolApprovalRequest(u),Tu(s)){await e.replyApprovalCard(s);return}await e.reply(s)}var tS=5*1024*1024,nS=5*1024*1024,Af=32768,rS=/^[A-Za-z0-9+/]*={0,2}$/;function Kr(e,n){return e.filename?`"${e.filename}"`:`at index ${n}`}function _f(){return globalThis.Buffer}function iS(e){var n,t,r;return(r=(t=(n=_f())==null?void 0:n.isBuffer)==null?void 0:t.call(n,e))!=null?r:!1}function oS(e){return typeof Blob!="undefined"&&e instanceof Blob}function bl(e){let n=_f();if(n)return n.from(e).toString("base64");if(typeof btoa!="function")throw new Error("Unable to encode file data: base64 encoding is not available in this runtime.");let t="";for(let r=0;r<e.length;r+=Af){let i=e.subarray(r,r+Af);t+=String.fromCharCode(...i)}return btoa(t)}function Rf(e){let n=e.replace(/\s/g,""),t=n.length%4;if(!n||t===1||!rS.test(n))return null;let r=n.endsWith("==")?2:n.endsWith("=")?1:0;return Math.floor(n.length*3/4)-r}function Jr(e,n,t){if(e>tS)throw new Error(`Invalid file ${Kr(n,t)}: inline data must be 5 MB or smaller. Use a publicly-accessible URL for larger files.`)}async function aS(e,n,t){if(typeof e=="string"){let r=Rf(e);if(r===null)throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64-encoded string.`);return Jr(r,n,t),e}if(iS(e))return Jr(e.byteLength,n,t),e.toString("base64");if(e instanceof Uint8Array)return Jr(e.byteLength,n,t),bl(e);if(e instanceof ArrayBuffer)return Jr(e.byteLength,n,t),bl(new Uint8Array(e));if(oS(e))return Jr(e.size,n,t),bl(new Uint8Array(await e.arrayBuffer()));throw new Error(`Invalid file ${Kr(n,t)}: data must be a base64 string, Buffer, Uint8Array, ArrayBuffer, or Blob.`)}async function sS(e){if(!(e!=null&&e.length))return;let n=[],t=0;for(let[r,i]of e.entries()){let o=i.data,a=i.url,s=o!=null,u=a!=null;if(s===u)throw new Error(`Invalid file ${Kr(i,r)}: provide exactly one of data or url.`);if(s){let p=await aS(o,i,r),d=Rf(p);if(t+=d!=null?d:0,t>nS)throw new Error("Invalid files: total inline data must be 5 MB or smaller. Use publicly-accessible URLs for larger files.");n.push({...i,data:p});continue}if(u&&typeof a!="string")throw new Error(`Invalid file ${Kr(i,r)}: url must be a string.`);n.push(i)}return n}async function Of(e,n){let t=await sS(n);if(typeof e=="string")return t?{markdown:e,files:t}:{markdown:e};let{isJSX:r,toCardElement:i}=await Promise.resolve().then(()=>(vf(),kf));if(r(e)){let o=i(e);if(o)return t?{card:o,files:t}:{card:o}}if(Ji(e))return t?{card:e,files:t}:{card:e};throw new Error("Invalid message content \u2014 expected string or CardElement")}var Gr=class{constructor(n,t,r,i,o){this.conversationId=r;this.integrationIdentifier=i;this.poster=o;this.editedByHandler=!1;this.messageId=n,this.platformThreadId=t}async edit(n,t){this.editedByHandler=!0;let r=await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,edit:{messageId:this.messageId,content:await Of(n,t==null?void 0:t.files)}});if(!r)throw new Error("Agent edit did not return a message handle");return this.messageId=r.messageId,this.platformThreadId=r.platformThreadId,this}async delete(){await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,deleteMessages:[{messageId:this.messageId}]})}},Ef;Ef=wu;var Do=class{constructor(n,t,r){this[Ef]=!0;this._signals=[];this._toolResults=[];this._pendingToolApprovalRequest=null;this._pendingReactions=[];this._pendingDeletes=[];this._resolveSignal=null;var s,u;this.event=n.event,this.action=(s=n.action)!=null?s:null,this.message=n.message,this.reaction=n.reaction,this.conversation=n.conversation,this.subscriber=n.subscriber,this.history=n.history,this.platform=n.platform,this.platformContext=n.platformContext,this._replyUrl=n.replyUrl,this._conversationId=n.conversationId,this._integrationIdentifier=n.integrationIdentifier,this._secretKey=t,this._poster={post:p=>this._post(p)},this._toolApprovalConfig=r,this._metadataState={...(u=n.conversation.metadata)!=null?u:{}};let i=this;this.metadata={get(p){return i._metadataState[p]},set(p,d){i._metadataState[p]=d,i._signals.push({type:"metadata",action:"set",key:p,value:d})},delete(p){delete i._metadataState[p],i._signals.push({type:"metadata",action:"delete",key:p})},clear(){i._metadataState={},i._signals.push({type:"metadata",action:"clear"})},get current(){return{...i._metadataState}}};let o=p=>this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,typing:p}).then(()=>{}),a=(p=>o(p===void 0?{}:{status:p}));a.stop=()=>o("stop"),this.typing=a,this.toolApproval={request:async p=>(await vu(this,p,this._toolApprovalConfig),new Zn)}}asMessageContext(){return this}async reply(n,t){let r=await Of(n,t==null?void 0:t.files),i={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:r};this._drainSideEffects(i);let o=await this._post(i);if(!o)throw new Error("Agent reply did not return a message handle");return new Gr(o.messageId,o.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}async replyApprovalCard(n){let t={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:{toolApprovalCard:n}};this._drainSideEffects(t);let r=await this._post(t);if(!r)throw new Error("Agent approval card reply did not return a message handle");return new Gr(r.messageId,r.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}createReplyHandle(n){return new Gr(n,"",this._conversationId,this._integrationIdentifier,this._poster)}resolve(n){this._resolveSignal={summary:n}}trigger(n,t){this._signals.push({...t,type:"trigger",workflowId:n})}emitToolApprovalRequest(n){if(this._pendingToolApprovalRequest)throw new Error("Only one tool approval request can be queued before the next reply");this._pendingToolApprovalRequest=n}emitToolResult(n){this._toolResults.push(n)}addReaction(n,t){this._pendingReactions.push({messageId:n,emojiName:t})}deleteMessage(n){this._pendingDeletes.push({messageId:n})}async reportTurnError(){try{await this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,error:!0})}catch(n){console.error("[agent] Failed to report turn error:",n)}}async flush(){if(!this._hasPendingSideEffects())return;let n={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier};this._drainSideEffects(n),await this._post(n)}_hasPendingSideEffects(){return!!(this._pendingToolApprovalRequest||this._signals.length||this._toolResults.length||this._resolveSignal||this._pendingReactions.length||this._pendingDeletes.length)}_drainSideEffects(n){this._pendingToolApprovalRequest&&(n.toolApprovalRequest=this._pendingToolApprovalRequest,this._pendingToolApprovalRequest=null),this._signals.length&&(n.signals=this._signals,this._signals=[]),this._toolResults.length&&(n.toolResults=this._toolResults,this._toolResults=[]),this._pendingReactions.length&&(n.addReactions=this._pendingReactions,this._pendingReactions=[]),this._pendingDeletes.length&&(n.deleteMessages=this._pendingDeletes,this._pendingDeletes=[]),this._resolveSignal&&(n.resolve=this._resolveSignal,this._resolveSignal=null)}async _post(n){let t=await fetch(this._replyUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${this._secretKey}`},body:JSON.stringify(n)});if(!t.ok){let i=await t.text().catch(()=>"");throw new Dn(t.status,i)}let r=await t.text().catch(()=>"");if(!r)return null;try{let i=JSON.parse(r),o=i&&typeof i=="object"&&"data"in i?i.data:i;if(o&&typeof o.messageId=="string"&&typeof o.platformThreadId=="string")return{messageId:o.messageId,platformThreadId:o.platformThreadId}}catch{}return null}};function lS(e){return!!(typeof e=="string"||typeof e=="object"&&e!==null&&Ji(e)||typeof e=="object"&&e!==null&&("markdown"in e||"card"in e||"files"in e))}function cS(e,n){return e}function uS(e,n){var t;for(let r of e){let i=r.toolData;if(r.type==="tool_approval_request"&&(i==null?void 0:i.approvalId)===n&&i.toolCallId)return{approvalId:i.approvalId,toolCallId:i.toolCallId,name:(t=i.toolName)!=null?t:"tool",input:i.input}}}async function If(e){var o;let n=new Do(e.bridge,e.secretKey,e.agent.handlers.toolApproval),{agent:t,event:r,logger:i}=e;try{await pS(t,r,n),await n.flush()}catch(a){let s=Nr(a);i==null||i.error(`[agent:${t.id}] Turn failed (${r}): ${s.message}`,(o=s.cause)!=null?o:s);let u=!1;if(t.handlers.onError)try{let p=await t.handlers.onError(s,cS(n,r));Su(p)?u=!0:lS(p)&&(await n.reply(p),u=!0)}catch(p){i==null||i.error(`[agent:${t.id}] onError failed:`,p)}u||await n.reportTurnError()}finally{try{await n.typing.stop()}catch{}}}async function pS(e,n,t){var i,o;let r=async a=>{a instanceof Zn||a===void 0||await t.reply(a)};switch(n){case"onMessage":{await r(await e.handlers.onMessage(t.message,t));break}case"onAction":{let a=ku((i=t.action)==null?void 0:i.id);if(a&&e.handlers.onToolApproval){let{approved:s,approvalId:u}=a,p=uS(t.history,u),d=p?{id:p.toolCallId,name:p.name,input:p.input}:{id:u,name:""},h=t.createReplyHandle((o=t.action.sourceMessageId)!=null?o:""),y={toolCall:d,approved:s,approvalMessage:h};e.userOnToolApproval===!1&&(await t.typing(),t.action.sourceMessageId&&await h.delete());let g=await e.handlers.onToolApproval(y,t);await r(g);break}e.handlers.onAction&&await r(await e.handlers.onAction(t.action,t));break}case"onReaction":e.handlers.onReaction&&await r(await e.handlers.onReaction(t.reaction,t));break;case"onResolve":e.handlers.onResolve&&await r(await e.handlers.onResolve(t));break;default:throw new Mn(n,ka)}}function Cf(e){let n={};for(let i of e.split(",")){let o=i.trim();if(!o)continue;let a=o.indexOf("=");if(a<=0)continue;let s=o.slice(0,a),u=o.slice(a+1);s&&u&&!(s in n)&&(n[s]=u)}let t=n.t,r=t!==void 0?Number(t):Number.NaN;return{t:Number.isFinite(r)?r:void 0,v1:n.v1}}var ar=class{constructor(n){this.handler=n.handler,this.client=n.client?n.client:new Qn,this.workflows=n.workflows||[],this.agents=n.agents||[],this.http=Di(this.client.secretKey,this.client.apiUrl),this.frameworkName=n.frameworkName,this.hmacEnabled=this.client.strictAuthentication,this.client.addAgents(this.agents)}createHandler(){return async(...n)=>{await this.client.addWorkflows(this.workflows);let t=await this.handler(...n),r=await this.handleAction({actions:t});return t.transformResponse(r)}}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.12.1","novu-framework-server":this.frameworkName,"user-agent":n}}createResponse(n,t){return{status:n,body:JSON.stringify(t),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}){let t=await n.url(),r=await n.method(),i=t.searchParams.get("action")||"health-check",o=t.searchParams.get("workflowId")||"",a=t.searchParams.get("stepId")||"",s=t.searchParams.get("agentId")||"",u=t.searchParams.get("event")||"",p=await n.headers("novu-signature")||"",d={};try{r==="POST"&&(d=await n.body())}catch{}try{i!=="health-check"&&await this.validateHmac(d,p);let h=this.getPostActionMap(d,o,a,i,s,u,n.waitUntil),y=this.getGetActionMap(o,a);if(r==="POST")return await this.handlePostAction(i,h);if(r==="GET")return await this.handleGetAction(i,y);if(r==="OPTIONS")return this.createResponse(200,{})}catch(h){return this.handleError(h)}return this.createError(new ki(r))}getPostActionMap(n,t,r,i,o,a,s){return{trigger:this.triggerAction({workflowId:t,...n}),execute:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},preview:async()=>{let u=await this.client.executeWorkflow({...n,workflowId:t,stepId:r,action:i});return this.createResponse(200,u)},"agent-event":async()=>{let u=this.client.getAgent(o);if(!u)return this.createResponse(404,{error:`Agent '${o}' not registered`});let p=If({agent:u,event:a,bridge:n,secretKey:this.client.secretKey,logger:this.client.logger});return s&&s(p),this.createResponse(200,{status:"ack"})}}}triggerAction(n){return async()=>{let t={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}},r=await this.http.post("/events/trigger",t);return this.createResponse(200,r)}}getGetActionMap(n,t){return{discover:async()=>{let r=await this.client.discover();return this.createResponse(200,r)},"health-check":async()=>{let r=await this.client.healthCheck();return this.createResponse(200,r)},code:async()=>{let r=await this.client.getCode(n,t);return this.createResponse(200,r)}}}async handlePostAction(n,t){if(Object.values(kr).includes(n)){let r=t[n];return r()}else throw new Mn(n,kr)}async handleGetAction(n,t){if(Object.values(ui).includes(n)){let r=t[n];return r()}else throw new Mn(n,ui)}handleError(n){if(Pn(n))return n.statusCode>=500&&this.client.logger.error(n),this.createError(n);if(Uc(n))return this.createError(n);{let t=new Gn(n);return this.client.logger.error(t),this.createError(t)}}async validateHmac(n,t){if(!this.hmacEnabled)return;if(!t)throw new Oi;if(!this.client.secretKey)throw new Pi;let r=Cf(t);if(!r.v1||r.t===void 0)throw new Ii;let i=Date.now();if(r.t<i-3e5||r.t>i+3e5)throw new Ci;let o=await Yc(this.client.secretKey,`${r.t}.${JSON.stringify(n)}`);if(!Jc(o,r.v1))throw new Ri}};yl();var sr=Symbol.for("workflow-serialize"),lr=Symbol.for("workflow-deserialize");var dS=Object.defineProperty,hS=Object.defineProperties,fS=Object.getOwnPropertyDescriptors,Mf=Object.getOwnPropertySymbols,mS=Object.prototype.hasOwnProperty,gS=Object.prototype.propertyIsEnumerable,Nf=(e,n,t)=>n in e?dS(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,Uf=(e,n)=>{for(var t in n||(n={}))mS.call(n,t)&&Nf(e,t,n[t]);if(Mf)for(var t of Mf(n))gS.call(n,t)&&Nf(e,t,n[t]);return e},$f=(e,n)=>hS(e,fS(n)),It=(e,n)=>{let t=!1,r=!1;for(let i=0;i<n;i+=1){if(e[i]==="\\"&&i+1<e.length&&e[i+1]==="`"){i+=1;continue}if(e.substring(i,i+3)==="```"){r=!r,i+=2;continue}!r&&e[i]==="`"&&(t=!t)}return t||r},yS=(e,n)=>{let t=e.substring(n,n+3)==="```",r=n>0&&e.substring(n-1,n+2)==="```",i=n>1&&e.substring(n-2,n+1)==="```";return t||r||i},bS=e=>{let n=0;for(let t=0;t<e.length;t+=1){if(e[t]==="\\"&&t+1<e.length&&e[t+1]==="`"){t+=1;continue}e[t]==="`"&&!yS(e,t)&&(n+=1)}return n},Rn=(e,n)=>{let t=!1,r=!1,i=-1;for(let o=0;o<e.length;o+=1){if(e[o]==="\\"&&o+1<e.length&&e[o+1]==="`"){o+=1;continue}if(e.substring(o,o+3)==="```"){r=!r,o+=2;continue}if(!r&&e[o]==="`")if(t){if(i<n&&n<o)return!0;t=!1,i=-1}else t=!0,i=o}return!1},wS=/^(\s*(?:[-*+]|\d+[.)]) +)>(=?\s*[$]?\d)/gm,SS=e=>!e||typeof e!="string"||!e.includes(">")?e:e.replace(wS,(n,t,r,i)=>It(e,i)?n:`${t}\\>${r}`),TS=/(\*\*)([^*]*\*?)$/,xS=/(__)([^_]*?)$/,kS=/(\*\*\*)([^*]*?)$/,vS=/(\*)([^*]*?)$/,AS=/(_)([^_]*?)$/,ES=/(`)([^`]*?)$/,_S=/(~~)([^~]*?)$/,Vn=/^[\s_~*`]*$/,qf=/^[\s]*[-*+][\s]+$/,RS=/[\p{L}\p{N}_]/u,OS=/^```[^`\n]*```?$/,IS=/^\*{4,}$/,CS=/(__)([^_]+)_$/,PS=/(~~)([^~]+)~$/,Lf=/~~/g,On=e=>{if(!e)return!1;let n=e.charCodeAt(0);return n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||n===95?!0:RS.test(e)};var MS=(e,n)=>{let t=1;for(let r=n-1;r>=0;r-=1)if(e[r]==="]")t+=1;else if(e[r]==="["&&(t-=1,t===0))return r;return-1},jf=(e,n)=>{let t=1;for(let r=n+1;r<e.length;r+=1)if(e[r]==="[")t+=1;else if(e[r]==="]"&&(t-=1,t===0))return r;return-1},Fo=(e,n)=>{let t=!1,r=!1;for(let i=0;i<e.length&&i<n;i+=1){if(e[i]==="\\"&&e[i+1]==="$"){i+=1;continue}e[i]==="$"&&(e[i+1]==="$"?(r=!r,i+=1,t=!1):r||(t=!t))}return t||r},NS=(e,n)=>{for(let t=n;t<e.length;t+=1){if(e[t]===")")return!0;if(e[t]===`
120
120
  `)return!1}return!1},Bf=(e,n)=>{for(let t=n-1;t>=0;t-=1){if(e[t]===")")return!1;if(e[t]==="(")return t>0&&e[t-1]==="]"?NS(e,n):!1;if(e[t]===`
121
121
  `)return!1}return!1},LS=(e,n)=>{for(let t=n-1;t>=0;t-=1){if(e[t]===">")return!1;if(e[t]==="<"){let r=t+1<e.length?e[t+1]:"";return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="/"}if(e[t]===`
122
122
  `)return!1}return!1},Sl=(e,n,t)=>{let r=0;for(let u=n-1;u>=0;u-=1)if(e[u]===`
@@ -3,7 +3,7 @@ import { S as ServeHandlerOptions } from '../index-1DobCKAF.cjs';
3
3
  export { C as Client, N as NovuRequestHandler, a as agent, w as workflow } from '../index-1DobCKAF.cjs';
4
4
  export { C as ClientOptions, a as CronExpression, E as ExecuteInput, S as SeverityLevelEnum, W as Workflow } from '../health-check.types-B9FbzRbm.cjs';
5
5
  export { C as ContextResolved, E as EnvironmentSystemVariables, S as Subscriber, p as providerSchemas } from '../subscriber.types-DubxcL8q.cjs';
6
- import { S as SupportedFrameworkName } from '../server.types-BRWsA1CA.cjs';
6
+ import { S as SupportedFrameworkName } from '../server.types-Cc6o5eYH.cjs';
7
7
  export { Actions, Button, Card, CardChild, CardElement, CardLink, CardText, Divider, Select, SelectOption, TextInput } from 'chat';
8
8
  export { A as Agent, a as AgentAction, b as AgentActionContext, c as AgentAttachment, d as AgentContext, e as AgentConversation, f as AgentDeliveryError, g as AgentError, h as AgentHandlerContext, i as AgentHandlers, j as AgentHistoryEntry, k as AgentMessage, l as AgentMessageAuthor, m as AgentMessageContext, n as AgentPlatformContext, o as AgentReaction, p as AgentReactionContext, q as AgentResolveContext, r as AgentSubscriber, s as AgentToolCall, F as FileRef, M as MessageContent, R as ReplyHandle, T as ToolApprovalCard, t as ToolApprovalConfig, u as ToolApprovalDecision, v as toAgentError } from '../agent.types-Dqm2VBTO.cjs';
9
9
  export { AnyStepResolver, ChatStepResolver, EmailStepResolver, InAppStepResolver, PushStepResolver, SmsStepResolver, StepResolverContext, step } from '../step-resolver.cjs';
@@ -0,0 +1 @@
1
+ import{d as N,g,i as U,q as D,r as F,s as c,t as h,u as T,v as M}from"./chunk-FRWG7YTE.js";import{a as $,c as L,f as H}from"./chunk-W6DIBD4Z.js";var B=class extends T{constructor(n){super("Unknown BridgeError",{cause:n});this.statusCode=500;this.code="BridgeError"}};var W=class extends c{constructor(n,o){super(`Workflow with id: \`${n}\` has a corrupt state. Step with id: \`${o}\` does not exist. Please provide the missing state.`);this.code="ExecutionStateCorruptError";this.data={workflowId:n,stepId:o}}},q=class extends c{constructor(n,o){super(`Workflow with id: \`${n}\` has invalid \`payload\`. Please provide the correct event payload.`);this.code="ExecutionEventPayloadInvalidError";this.data=o}},V=class extends c{constructor(n,o){super(`Workflow with id: \`${n}\` has invalid \`controls\`. Please provide the correct event controls.`);this.code="ExecutionEventControlInvalidError";this.data=o}},G=class extends c{constructor(n,o,r){super(`Workflow with id: \`${n}\` has an invalid state. Step with id: \`${o}\` has invalid \`controls\`. Please provide the correct step controls.`);this.code="ExecutionStateControlInvalidError";this.data=r}},X=class extends c{constructor(n,o,r){super(`Workflow with id: \`${n}\` has an invalid state. Step with id: \`${o}\` has invalid output. Please provide the correct step output.`);this.code="ExecutionStateOutputInvalidError";this.data=r}},K=class extends c{constructor(n,o,r){super(`Workflow with id: \`${n}\` has an invalid state. Step with id: \`${o}\` has invalid result. Please provide the correct step result.`);this.code="ExecutionStateResultInvalidError";this.data=r}},z=class extends c{constructor(n,o,r){super(`Workflow with id: \`${n}\` has invalid controls syntax in step with id: \`${o}\`. Please correct step control syntax.`);this.code="StepControlCompilationFailedError";this.data=r}},Y=class extends c{constructor(n,o,r,s){super(`Workflow with id: \`${n}\` has an invalid state. Step with id: \`${o}\` and provider with id: \`${r}\` has invalid output. Please provide the correct provider output.`);this.code="ExecutionProviderOutputInvalidError";this.data=s}},Q=class extends c{constructor(n,o){super(`Workflow with id: \`${n}\` has invalid \`payload\`. Please provide the correct payload.`);this.code="WorkflowPayloadInvalidError";this.data=o}};var Z=e=>Object.values(g).includes(e==null?void 0:e.code),it=e=>!Z(e)&&typeof e.statusCode=="number"&&e.statusCode>=400&&e.statusCode<500;var b=e=>Object.values(e).map(t=>`\`${t}\``).join(", "),E=e=>e.replaceAll(/(\w)(\w*)/g,(t,n,o)=>n.toUpperCase()+o.toLowerCase()).replaceAll(/[\s-]+/g,"");var J=class extends D{constructor(){super(...arguments);this.code="MethodNotAllowedError";this.statusCode=405;this.message=`Method not allowed. Please use one of ${b(U)}`}},ee=class extends c{constructor(n,o){super(`Invalid query string: \`action\`=\`${n}\`. Please use one of ${b(o)}`);this.code="InvalidActionError"}},te=class extends c{constructor(){super("Missing secret key. Set the `NOVU_SECRET_KEY` environment variable or pass `secretKey` to the client options.");this.code="MissingSecretKeyError"}};var ne=class extends Error{constructor(t,n,o){super(),this.data={message:o},this.statusCode=t,this.code=n}};var y=class extends M{constructor(t,n){super(`${E(t)} with id: \`${n}\` already exists. Please use a different id.`)}},m=class extends F{constructor(t,n){super(`${E(t)} with id: \`${n}\` does not exist. Please provide a valid id.`)}},R=class extends T{constructor(n,o,r,s){super(`Failed to ${r} ${E(n)} with id: \`${o}\``,{cause:s});this.statusCode=502}};var re=class extends m{constructor(n){super("provider",n);this.code="ProviderNotFoundError"}},oe=class extends R{constructor(n,o,r){super("provider",n,o,r);this.code="ProviderExecutionFailedError"}};var ae=class extends h{constructor(){super("Signature does not match the expected signature. Please ensure the signature provided in the `novu-signature` header is correct and try again.");this.code="SignatureMismatchError"}},ie=class extends h{constructor(){super("Signature not found. Please provide a signature in the `novu-signature` header");this.code="SignatureNotFoundError"}},le=class extends h{constructor(){super("Signature is invalid. Please provide a valid signature in the `novu-signature` header");this.code="SignatureInvalidError"}},pe=class extends h{constructor(){super(`Signature expired. Please provide a signature with a timestamp no older than ${5} minutes in the \`novu-signature\` header`);this.code="SignatureExpiredError"}},de=class extends h{constructor(){super("Signature key not found. Please provide a valid key in the Client constructor `config.secretKey`");this.code="SigningKeyNotFoundError"}},ce=class extends h{constructor(){super("Signature version is invalid. Please provide a signature version with version `v1` in the `novu-signature` header");this.code="SignatureVersionInvalidError"}};var ue=class extends m{constructor(n){super("step",n);this.code="StepNotFoundError"}},ge=class extends y{constructor(n){super("step",n);this.code="StepAlreadyExistsError"}},me=class extends R{constructor(n,o,r){super("step",n,o,r);this.code="StepExecutionFailedError"}};var fe=class extends m{constructor(n){super("workflow",n);this.code="WorkflowNotFoundError"}},he=class extends y{constructor(n){super("workflow",n);this.code="WorkflowAlreadyExistsError"}};function Fe(e,t){let n={...e};for(let o of Object.keys(t)){let r=t[o];r&&typeof r=="object"&&!Array.isArray(r)?n[o]=Fe(n[o]||{},r):(Array.isArray(r),n[o]=r)}return n}function C(e,t){let n=t.split(".").reduce((o,r)=>{if(o&&typeof o=="object")return o[r]},e);if(n==null)return"";if(typeof n=="string")return n;if(typeof n=="number"||typeof n=="boolean")return String(n);if(typeof n=="object"){let o=JSON.stringify(n);return o==="{}"?"":o}return""}function ye(e,t=2,n,o=", "){if(!Array.isArray(e)||e.length===0)return"";let r=n?e.map(i=>typeof i!="object"||!i?"":C(i,n)):e;if(r.length===1)return r[0];if(r.length===2)return`${r[0]} and ${r[1]}`;if(r.length===3&&t>=3)return`${r[0]}${o}${r[1]} and ${r[2]}`;let s=r.slice(0,t),p=r.length-t;return`${s.join(o)} and ${p} ${p===1?"other":"others"}`}import Me from"pluralize";function Re(e,t="",n="",o="true"){if(e==null)return"";let r=0;if(Array.isArray(e)?r=e.length:typeof e=="object"?r=Object.keys(e).length:typeof e=="string"?r=+e:typeof e=="number"?r=e:r=Number(e),Number.isNaN(r)&&(r=0),r<=0)return"";let s;return n?s=r===1?t:n:s=Me(t,r),o==="true"?`${r} ${s}`:s}import{TokenKind as Ae}from"liquidjs";import $e from"pluralize";import{z as f}from"zod";var xe="",_e=2,ve="other",Te=", ",Ee=" and ",Ce=", and ",Se={0:"keyPath",1:"limit",2:"overflowSuffix",3:"wordsConnector",4:"twoWordsConnector",5:"lastWordConnector"};function we(e,t=xe,n=_e,o=ve,r=Te,s=Ee,p=Ce){if(!Array.isArray(e)||e.length===0)return"";let i=t?e.map(u=>typeof u!="object"||!u?"":C(u,t)):e,l=i.length;if(l===1)return i[0];if(l===2)return`${i[0]}${s}${i[1]}`;if(n>=l){let u=i.slice(0,l-1),k=i[l-1];return`${u.join(r)}${p}${k}`}let a=i.slice(0,n),d=l-n,v=n===1?s:p;return`${a.join(r)}${v}${d} ${$e(o,d)}`}function on(e={},...t){let{requireKeyPath:n=!1}=e,o=[];if(t.length<1)return o.push({message:"Expected at least 1 argument",begin:0,end:0,value:""}),o;let r=f.object({keyPath:n?f.string().min(1,"must be non-empty"):f.string().optional().default(xe),limit:f.number().optional().default(_e).refine(i=>i>=0,"must be greater than or equal to 0"),overflowSuffix:f.string().optional().default(ve),wordsConnector:f.string().optional().default(Te),twoWordsConnector:f.string().optional().default(Ee),lastWordConnector:f.string().optional().default(Ce)}),s={};t.forEach((i,l)=>{if(!Array.isArray(i)){let a=i.getText();(i.kind===Ae.Quoted||i.kind===Ae.Number)&&(a=i.content);let d=Se[l];s[d]=a}});let p=r.safeParse(s);if(!p.success)for(let i of p.error.issues){let l="string";"type"in i&&(l=i.type);let a=i.path[0],d=Object.entries(Se).find(([k,De])=>De===a),v=d?parseInt(d[0],10):null,u=typeof v=="number"?t[v]:null;u&&!Array.isArray(u)&&o.push({message:`"toSentence" expects a ${l}${i.message?` that ${i.message}`:""} for argument "${a}"`,begin:u.begin,end:u.end,value:u.getText()})}return o}import{Liquid as Le}from"liquidjs";function He(e){return Array.isArray(e)||typeof e=="object"&&e!==null?Oe(e):typeof e=="string"?e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):e==null?"":String(e)}var Oe=(e,t=0)=>Array.isArray(e)||typeof e=="object"&&e!==null?JSON.stringify(e,null,t).replace(/"/g,"'").replace(/\n/g,"\\n"):e==null?"":String(e);function un(e){let t=new Le({outputEscape:He,...e});return t.registerFilter("json",(n,o)=>Oe(n,o)),t.registerFilter("digest",ye),t.registerFilter("toSentence",we),t.registerFilter("pluralize",Re),t}var Be={400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",408:"Request Timeout",409:"Conflict",422:"Unprocessable Entity",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"};function w(e){return typeof e=="string"&&e.trim()?e:!e||typeof e!="object"?null:w(e.message)}function je(e){if(!e)return null;let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!="object")return null;let n=t,o=w(n.message);if(o)return o;let r=w(n.error);if(r)return r;let s=n.errors;return Array.isArray(s)?w(s[0]):null}function We(e,t){var r;let n=(r=Be[e])!=null?r:e,o=je(t);return o?`Delivery failed: ${n}: ${o}`:`Delivery failed: ${n}`}var A=class extends Error{constructor(t,n){super(t),this.name="AgentError",this.cause=n==null?void 0:n.cause,this.delivery=n==null?void 0:n.delivery}},O=class extends A{constructor(t,n){let o={statusCode:t,responseBody:n};super(We(t,n),{delivery:o}),this.name="AgentDeliveryError",this.statusCode=t,this.responseBody=n}};function mn(e){return e instanceof A?e:e instanceof Error?new A(e.message,{cause:e}):new A("Turn failed",{cause:e})}var qe=(r=>(r.ON_MESSAGE="onMessage",r.ON_ACTION="onAction",r.ON_RESOLVE="onResolve",r.ON_REACTION="onReaction",r))(qe||{}),I=class{constructor(){this.__novuPendingApproval=!0}};function hn(e){return typeof e=="object"&&e!==null&&"suppress"in e&&e.suppress===!0}var Ve=5*1024*1024,Ge=5*1024*1024,Ie=32768,Xe=/^[A-Za-z0-9+/]*={0,2}$/;function _(e,t){return e.filename?`"${e.filename}"`:`at index ${t}`}function ke(){return globalThis.Buffer}function Ke(e){var t,n,o;return(o=(n=(t=ke())==null?void 0:t.isBuffer)==null?void 0:n.call(t,e))!=null?o:!1}function ze(e){return typeof Blob!="undefined"&&e instanceof Blob}function P(e){let t=ke();if(t)return t.from(e).toString("base64");if(typeof btoa!="function")throw new Error("Unable to encode file data: base64 encoding is not available in this runtime.");let n="";for(let o=0;o<e.length;o+=Ie){let r=e.subarray(o,o+Ie);n+=String.fromCharCode(...r)}return btoa(n)}function Ne(e){let t=e.replace(/\s/g,""),n=t.length%4;if(!t||n===1||!Xe.test(t))return null;let o=t.endsWith("==")?2:t.endsWith("=")?1:0;return Math.floor(t.length*3/4)-o}function S(e,t,n){if(e>Ve)throw new Error(`Invalid file ${_(t,n)}: inline data must be 5 MB or smaller. Use a publicly-accessible URL for larger files.`)}async function Ye(e,t,n){if(typeof e=="string"){let o=Ne(e);if(o===null)throw new Error(`Invalid file ${_(t,n)}: data must be a base64-encoded string.`);return S(o,t,n),e}if(Ke(e))return S(e.byteLength,t,n),e.toString("base64");if(e instanceof Uint8Array)return S(e.byteLength,t,n),P(e);if(e instanceof ArrayBuffer)return S(e.byteLength,t,n),P(new Uint8Array(e));if(ze(e))return S(e.size,t,n),P(new Uint8Array(await e.arrayBuffer()));throw new Error(`Invalid file ${_(t,n)}: data must be a base64 string, Buffer, Uint8Array, ArrayBuffer, or Blob.`)}async function Qe(e){if(!(e!=null&&e.length))return;let t=[],n=0;for(let[o,r]of e.entries()){let s=r.data,p=r.url,i=s!=null,l=p!=null;if(i===l)throw new Error(`Invalid file ${_(r,o)}: provide exactly one of data or url.`);if(i){let a=await Ye(s,r,o),d=Ne(a);if(n+=d!=null?d:0,n>Ge)throw new Error("Invalid files: total inline data must be 5 MB or smaller. Use publicly-accessible URLs for larger files.");t.push({...r,data:a});continue}if(l&&typeof p!="string")throw new Error(`Invalid file ${_(r,o)}: url must be a string.`);t.push(r)}return t}async function Ue(e,t){let n=await Qe(t);if(typeof e=="string")return n?{markdown:e,files:n}:{markdown:e};let{isJSX:o,toCardElement:r}=await import("./jsx-runtime-7EPQR56T.js");if(o(e)){let s=r(e);if(s)return n?{card:s,files:n}:{card:s}}if(L(e))return n?{card:e,files:n}:{card:e};throw new Error("Invalid message content \u2014 expected string or CardElement")}var x=class{constructor(t,n,o,r,s){this.conversationId=o;this.integrationIdentifier=r;this.poster=s;this.editedByHandler=!1;this.messageId=t,this.platformThreadId=n}async edit(t,n){this.editedByHandler=!0;let o=await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,edit:{messageId:this.messageId,content:await Ue(t,n==null?void 0:n.files)}});if(!o)throw new Error("Agent edit did not return a message handle");return this.messageId=o.messageId,this.platformThreadId=o.platformThreadId,this}async delete(){await this.poster.post({conversationId:this.conversationId,integrationIdentifier:this.integrationIdentifier,deleteMessages:[{messageId:this.messageId}]})}},Pe;Pe=$;var be=class{constructor(t,n,o){this[Pe]=!0;this._signals=[];this._toolResults=[];this._pendingToolApprovalRequest=null;this._pendingReactions=[];this._pendingDeletes=[];this._resolveSignal=null;var i,l;this.event=t.event,this.action=(i=t.action)!=null?i:null,this.message=t.message,this.reaction=t.reaction,this.conversation=t.conversation,this.subscriber=t.subscriber,this.history=t.history,this.platform=t.platform,this.platformContext=t.platformContext,this._replyUrl=t.replyUrl,this._conversationId=t.conversationId,this._integrationIdentifier=t.integrationIdentifier,this._secretKey=n,this._poster={post:a=>this._post(a)},this._toolApprovalConfig=o,this._metadataState={...(l=t.conversation.metadata)!=null?l:{}};let r=this;this.metadata={get(a){return r._metadataState[a]},set(a,d){r._metadataState[a]=d,r._signals.push({type:"metadata",action:"set",key:a,value:d})},delete(a){delete r._metadataState[a],r._signals.push({type:"metadata",action:"delete",key:a})},clear(){r._metadataState={},r._signals.push({type:"metadata",action:"clear"})},get current(){return{...r._metadataState}}};let s=a=>this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,typing:a}).then(()=>{}),p=(a=>s(a===void 0?{}:{status:a}));p.stop=()=>s("stop"),this.typing=p,this.toolApproval={request:async a=>(await H(this,a,this._toolApprovalConfig),new I)}}asMessageContext(){return this}async reply(t,n){let o=await Ue(t,n==null?void 0:n.files),r={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:o};this._drainSideEffects(r);let s=await this._post(r);if(!s)throw new Error("Agent reply did not return a message handle");return new x(s.messageId,s.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}async replyApprovalCard(t){let n={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,reply:{toolApprovalCard:t}};this._drainSideEffects(n);let o=await this._post(n);if(!o)throw new Error("Agent approval card reply did not return a message handle");return new x(o.messageId,o.platformThreadId,this._conversationId,this._integrationIdentifier,this._poster)}createReplyHandle(t){return new x(t,"",this._conversationId,this._integrationIdentifier,this._poster)}resolve(t){this._resolveSignal={summary:t}}trigger(t,n){this._signals.push({...n,type:"trigger",workflowId:t})}emitToolApprovalRequest(t){if(this._pendingToolApprovalRequest)throw new Error("Only one tool approval request can be queued before the next reply");this._pendingToolApprovalRequest=t}emitToolResult(t){this._toolResults.push(t)}addReaction(t,n){this._pendingReactions.push({messageId:t,emojiName:n})}deleteMessage(t){this._pendingDeletes.push({messageId:t})}async reportTurnError(){try{await this._post({conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier,error:!0})}catch(t){console.error("[agent] Failed to report turn error:",t)}}async flush(){if(!this._hasPendingSideEffects())return;let t={conversationId:this._conversationId,integrationIdentifier:this._integrationIdentifier};this._drainSideEffects(t),await this._post(t)}_hasPendingSideEffects(){return!!(this._pendingToolApprovalRequest||this._signals.length||this._toolResults.length||this._resolveSignal||this._pendingReactions.length||this._pendingDeletes.length)}_drainSideEffects(t){this._pendingToolApprovalRequest&&(t.toolApprovalRequest=this._pendingToolApprovalRequest,this._pendingToolApprovalRequest=null),this._signals.length&&(t.signals=this._signals,this._signals=[]),this._toolResults.length&&(t.toolResults=this._toolResults,this._toolResults=[]),this._pendingReactions.length&&(t.addReactions=this._pendingReactions,this._pendingReactions=[]),this._pendingDeletes.length&&(t.deleteMessages=this._pendingDeletes,this._pendingDeletes=[]),this._resolveSignal&&(t.resolve=this._resolveSignal,this._resolveSignal=null)}async _post(t){let n=await fetch(this._replyUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`ApiKey ${this._secretKey}`},body:JSON.stringify(t)});if(!n.ok){let r=await n.text().catch(()=>"");throw new O(n.status,r)}let o=await n.text().catch(()=>"");if(!o)return null;try{let r=JSON.parse(o),s=r&&typeof r=="object"&&"data"in r?r.data:r;if(s&&typeof s.messageId=="string"&&typeof s.platformThreadId=="string")return{messageId:s.messageId,platformThreadId:s.platformThreadId}}catch{}return null}};var En={type:"object",properties:{},required:[],additionalProperties:!1};var Ze=(a=>(a.PENDING="pending",a.QUEUED="queued",a.RUNNING="running",a.COMPLETED="completed",a.FAILED="failed",a.DELAYED="delayed",a.CANCELED="canceled",a.MERGED="merged",a.SKIPPED="skipped",a))(Ze||{});var Je=(r=>(r.NONE="none",r.LOW="low",r.MEDIUM="medium",r.HIGH="high",r))(Je||{});export{B as a,W as b,q as c,V as d,G as e,X as f,K as g,z as h,Y as i,Q as j,Z as k,it as l,J as m,ee as n,te as o,ne as p,y as q,m as r,R as s,re as t,oe as u,ae as v,ie as w,le as x,pe as y,de as z,ce as A,ue as B,ge as C,me as D,fe as E,he as F,Fe as G,ye as H,Re as I,we as J,on as K,un as L,A as M,O as N,mn as O,qe as P,I as Q,hn as R,be as S,En as T,Ze as U,Je as V};