eve 0.39.3 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/src/chunks/{use-eve-agent-CTI9fHaO.js → use-eve-agent-C0SG1Ttk.js} +4 -1
- package/dist/src/chunks/{use-eve-agent-DlkXRQVo.js → use-eve-agent-D71oDil7.js} +4 -1
- package/dist/src/cli/commands/registry.js +1 -1
- package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
- package/dist/src/cli/run.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +7 -6
- package/dist/src/compiled/@linqapp/chat-sdk-adapter/LICENSE +201 -0
- package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.d.ts +3 -0
- package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.js +8 -0
- package/dist/src/compiled/@workflow/core/create-hook.d.ts +9 -5
- package/dist/src/compiled/@workflow/core/index.js +2 -2
- package/dist/src/compiled/@workflow/core/private.d.ts +31 -12
- package/dist/src/compiled/@workflow/core/private.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +27 -0
- package/dist/src/compiled/@workflow/core/runtime/quickjs-entrypoint.d.ts +2 -0
- package/dist/src/compiled/@workflow/core/runtime/step-executor.d.ts +49 -1
- package/dist/src/compiled/@workflow/core/runtime/step-latency.d.ts +6 -0
- package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +81 -1
- package/dist/src/compiled/@workflow/core/runtime.js +3 -3
- package/dist/src/compiled/@workflow/core/serialization.d.ts +10 -2
- package/dist/src/compiled/@workflow/core/telemetry.d.ts +6 -0
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/world/env-config.d.ts +10 -0
- package/dist/src/compiled/@workflow/world/events.d.ts +96 -0
- package/dist/src/compiled/@workflow/world/index.d.ts +2 -1
- package/dist/src/compiled/@workflow/world/interfaces.d.ts +38 -1
- package/dist/src/compiled/@workflow/world/node-http-flag.d.ts +41 -0
- package/dist/src/compiled/@workflow/world/node-http.d.ts +81 -0
- package/dist/src/compiled/@workflow/world-local/index.js +5 -5
- package/dist/src/compiled/@workflow/world-vercel/index.js +12 -12
- package/dist/src/compiled/_chunks/workflow/{attribute-changes-B8K0pwpH.js → attribute-changes-DXbpwBdw.js} +2 -2
- package/dist/src/compiled/_chunks/workflow/{dist-BRGbNjhD.js → dist-Dk0aQqFO.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{env-config-DxamfI7T.js → env-config-L94XftKz.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/frames-Dl2Hcma4.js +3 -0
- package/dist/src/compiled/_chunks/workflow/{private-z_2Kcwee.js → private-CuQ4HTFC.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/resume-hook-E-Nkx8q_.js +1 -0
- package/dist/src/compiled/_chunks/workflow/run-cIeex2KF.js +1 -0
- package/dist/src/compiled/_chunks/workflow/sleep-CxFsdxB_.js +1 -0
- package/dist/src/compiled/_chunks/workflow/undici-DznrXKcM.js +95 -0
- package/dist/src/compiled/_chunks/workflow/wait-until-BZHmJCAW.js +15 -0
- package/dist/src/compiled/_chunks/workflow/{ws-transport-TYZ9zwoZ.js → ws-transport-Ct6yyRWZ.js} +1 -1
- package/dist/src/compiled/shadcn-registry/index.d.ts +1 -0
- package/dist/src/compiled/shadcn-registry/index.js +285 -379
- package/dist/src/execution/sandbox/logging-session.js +1 -1
- package/dist/src/execution/tasks/child/steps.d.ts +1 -0
- package/dist/src/execution/tasks/child/steps.js +1 -1
- package/dist/src/execution/tasks/parent/control-shared.d.ts +1 -1
- package/dist/src/execution/tasks/parent/dispatch-task-step.d.ts +1 -1
- package/dist/src/execution/tasks/parent/dispatch.js +1 -1
- package/dist/src/harness/execute-tool.d.ts +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/public/channels/linq/inboundContent.d.ts +4 -0
- package/dist/src/public/channels/linq/inboundContent.js +1 -0
- package/dist/src/public/channels/linq/index.d.ts +1 -0
- package/dist/src/public/channels/linq/index.js +1 -0
- package/dist/src/public/channels/linq/linqChannel.d.ts +66 -0
- package/dist/src/public/channels/linq/linqChannel.js +1 -0
- package/dist/src/public/channels/teams/api.js +2 -2
- package/dist/src/public/channels/teams/defaults.js +1 -1
- package/dist/src/public/channels/teams/hitl.d.ts +9 -0
- package/dist/src/public/channels/teams/hitl.js +1 -1
- package/dist/src/public/channels/teams/index.d.ts +1 -1
- package/dist/src/public/channels/teams/index.js +1 -1
- package/dist/src/public/channels/teams/teamsChannel.d.ts +8 -0
- package/dist/src/public/channels/teams/teamsChannel.js +1 -1
- package/dist/src/runtime/framework-tools/tasks.d.ts +1 -5
- package/dist/src/runtime/framework-tools/tasks.js +1 -1
- package/dist/src/runtime/prompt/compose.js +1 -1
- package/dist/src/setup/integrations/linq/connect.d.ts +32 -0
- package/dist/src/setup/integrations/linq/connect.js +1 -0
- package/dist/src/setup/integrations/linq/setup.d.ts +22 -0
- package/dist/src/setup/integrations/linq/setup.js +15 -0
- package/dist/src/setup/integrations/registry.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/scaffold/create/web-template.d.ts +2 -2
- package/dist/src/setup/scaffold/create/web-template.js +74 -50
- package/dist/src/shared/empty-delivery.d.ts +1 -1
- package/dist/src/shared/empty-delivery.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/linq.mdx +67 -0
- package/docs/channels/meta.json +1 -0
- package/docs/channels/overview.mdx +3 -2
- package/docs/channels/teams.mdx +2 -0
- package/docs/guides/client/streaming.mdx +1 -1
- package/docs/meta.json +2 -1
- package/package.json +12 -6
- package/dist/src/compiled/_chunks/workflow/frames-DoexhtxJ.js +0 -3
- package/dist/src/compiled/_chunks/workflow/resume-hook-DO_MuJlY.js +0 -1
- package/dist/src/compiled/_chunks/workflow/run-lq7-eG0l.js +0 -1
- package/dist/src/compiled/_chunks/workflow/sleep-7TgF3i-e.js +0 -1
- package/dist/src/compiled/_chunks/workflow/undici-BBG5cZTy.js +0 -95
- package/dist/src/compiled/_chunks/workflow/wait-until-BPSgt1Wg.js +0 -15
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{t as e}from"../../_chunks/node/rolldown-runtime-DaDcL9Zw.js";import{B as t,C as n,Et as r,K as i,Pt as a,b as o,jt as s,kt as c,q as l,tt as u,u as d,wt as f}from"../../_chunks/node/dist-C3lNQvLX.js";function p(e,t,n,r,i){if(r===`m`)throw TypeError(`Private method is not writable`);if(r===`a`&&!i)throw TypeError(`Private accessor was defined without a setter`);if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return r===`a`?i.call(e,n):i?i.value=n:t.set(e,n),n}function m(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)}let h=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return h=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^n()&15>>e/4).toString(16))};function g(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}const _=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)};var v=class extends Error{},y=class e extends v{constructor(t,n,r,i){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.error=n;let a=n;this.code=a?.code,this.doc_url=a?.doc_url,this.retry_after=a?.retry_after}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new x({message:r,cause:_(n)});let a=n?.error;return t===400?new C(t,a,r,i):t===401?new w(t,a,r,i):t===403?new T(t,a,r,i):t===404?new E(t,a,r,i):t===409?new D(t,a,r,i):t===422?new ee(t,a,r,i):t===429?new te(t,a,r,i):t>=500?new ne(t,a,r,i):new e(t,a,r,i)}},b=class extends y{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},x=class extends y{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},S=class extends x{constructor({message:e}={}){super({message:e??`Request timed out.`})}},C=class extends y{},w=class extends y{},T=class extends y{},E=class extends y{},D=class extends y{},ee=class extends y{},te=class extends y{},ne=class extends y{};const re=/^[a-z][a-z0-9+.-]*:/i,ie=e=>re.test(e);let O=e=>(O=Array.isArray,O(e)),ae=O;function oe(e){return typeof e==`object`?e??{}:{}}function se(e){if(!e)return!0;for(let t in e)return!1;return!0}function ce(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const le=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new v(`${e} must be an integer`);if(t<0)throw new v(`${e} must be a positive integer`);return t},ue=e=>{try{return JSON.parse(e)}catch{return}},de=e=>new Promise(t=>setTimeout(t,e)),k=`0.40.0`;function fe(){return typeof Deno<`u`&&Deno.build!=null?`deno`:typeof EdgeRuntime<`u`?`edge`:Object.prototype.toString.call(globalThis.process===void 0?0:globalThis.process)===`[object process]`?`node`:`unknown`}const pe=()=>{let e=fe();if(e===`deno`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":k,"X-Stainless-OS":ge(Deno.build.os),"X-Stainless-Arch":he(Deno.build.arch),"X-Stainless-Runtime":`deno`,"X-Stainless-Runtime-Version":typeof Deno.version==`string`?Deno.version:Deno.version?.deno??`unknown`};if(typeof EdgeRuntime<`u`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":k,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":`edge`,"X-Stainless-Runtime-Version":globalThis.process.version};if(e===`node`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":k,"X-Stainless-OS":ge(globalThis.process.platform??`unknown`),"X-Stainless-Arch":he(globalThis.process.arch??`unknown`),"X-Stainless-Runtime":`node`,"X-Stainless-Runtime-Version":globalThis.process.version??`unknown`};let t=me();return t?{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":k,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":k,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`unknown`,"X-Stainless-Runtime-Version":`unknown`}};function me(){if(typeof navigator>`u`||!navigator)return null;for(let{key:e,pattern:t}of[{key:`edge`,pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`chrome`,pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`firefox`,pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`safari`,pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}]){let n=t.exec(navigator.userAgent);if(n)return{browser:e,version:`${n[1]||0}.${n[2]||0}.${n[3]||0}`}}return null}const he=e=>e===`x32`?`x32`:e===`x86_64`||e===`x64`?`x64`:e===`arm`?`arm`:e===`aarch64`||e===`arm64`?`arm64`:e?`other:${e}`:`unknown`,ge=e=>(e=e.toLowerCase(),e.includes(`ios`)?`iOS`:e===`android`?`Android`:e===`darwin`?`MacOS`:e===`win32`?`Windows`:e===`freebsd`?`FreeBSD`:e===`openbsd`?`OpenBSD`:e===`linux`?`Linux`:e?`Other:${e}`:`Unknown`);let _e;const ve=()=>_e??=pe();function ye(){if(typeof fetch<`u`)return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new LinqAPIV3({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function be(...e){let t=globalThis.ReadableStream;if(t===void 0)throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function xe(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return be({start(){},async pull(e){let{done:n,value:r}=await t.next();n?e.close():e.enqueue(r)},async cancel(){await t.return?.()}})}async function Se(e){if(typeof e!=`object`||!e)return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),n=t.cancel();t.releaseLock(),await n}const Ce=({headers:e,body:t})=>({bodyHeaders:{"content-type":`application/json`},body:JSON.stringify(t)}),we=`RFC3986`,Te=e=>String(e),Ee={RFC1738:e=>String(e).replace(/%20/g,`+`),RFC3986:Te};let A=(e,t)=>(A=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),A(e,t));const j=(()=>{let e=[];for(let t=0;t<256;++t)e.push(`%`+((t<16?`0`:``)+t.toString(16)).toUpperCase());return e})(),M=1024,De=(e,t,n,r,i)=>{if(e.length===0)return e;let a=e;if(typeof e==`symbol`?a=Symbol.prototype.toString.call(e):typeof e!=`string`&&(a=String(e)),n===`iso-8859-1`)return escape(a).replace(/%u[0-9a-f]{4}/gi,function(e){return`%26%23`+parseInt(e.slice(2),16)+`%3B`});let o=``;for(let e=0;e<a.length;e+=M){let t=a.length>=M?a.slice(e,e+M):a,n=[];for(let e=0;e<t.length;++e){let r=t.charCodeAt(e);if(r===45||r===46||r===95||r===126||r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||i===`RFC1738`&&(r===40||r===41)){n[n.length]=t.charAt(e);continue}if(r<128){n[n.length]=j[r];continue}if(r<2048){n[n.length]=j[192|r>>6]+j[128|r&63];continue}if(r<55296||r>=57344){n[n.length]=j[224|r>>12]+j[128|r>>6&63]+j[128|r&63];continue}e+=1,r=65536+((r&1023)<<10|t.charCodeAt(e)&1023),n[n.length]=j[240|r>>18]+j[128|r>>12&63]+j[128|r>>6&63]+j[128|r&63]}o+=n.join(``)}return o};function Oe(e){return!e||typeof e!=`object`?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}function ke(e,t){if(O(e)){let n=[];for(let r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)}const Ae={brackets(e){return String(e)+`[]`},comma:`comma`,indices(e,t){return String(e)+`[`+t+`]`},repeat(e){return String(e)}},je=function(e,t){Array.prototype.push.apply(e,O(t)?t:[t])};let Me;const N={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:`indices`,charset:`utf-8`,charsetSentinel:!1,delimiter:`&`,encode:!0,encodeDotInKeys:!1,encoder:De,encodeValuesOnly:!1,format:we,formatter:Te,indices:!1,serializeDate(e){return(Me??=Function.prototype.call.bind(Date.prototype.toISOString))(e)},skipNulls:!1,strictNullHandling:!1};function Ne(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`symbol`||typeof e==`bigint`}const P={};function Pe(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_){let v=e,y=_,b=0,x=!1;for(;(y=y.get(P))!==void 0&&!x;){let t=y.get(e);if(b+=1,t!==void 0){if(t===b)throw RangeError(`Cyclic object value`);x=!0}y.get(P)===void 0&&(b=0)}if(typeof l==`function`?v=l(t,v):v instanceof Date?v=f?.(v):n===`comma`&&O(v)&&(v=ke(v,function(e){return e instanceof Date?f?.(e):e})),v===null){if(a)return c&&!h?c(t,N.encoder,g,`key`,p):t;v=``}if(Ne(v)||Oe(v)){if(c){let e=h?t:c(t,N.encoder,g,`key`,p);return[m?.(e)+`=`+m?.(c(v,N.encoder,g,`value`,p))]}return[m?.(t)+`=`+m?.(String(v))]}let S=[];if(v===void 0)return S;let C;if(n===`comma`&&O(v))h&&c&&(v=ke(v,c)),C=[{value:v.length>0?v.join(`,`)||null:void 0}];else if(O(l))C=l;else{let e=Object.keys(v);C=u?e.sort(u):e}let w=s?String(t).replace(/\./g,`%2E`):String(t),T=r&&O(v)&&v.length===1?w+`[]`:w;if(i&&O(v)&&v.length===0)return T+`[]`;for(let t=0;t<C.length;++t){let y=C[t],x=typeof y==`object`&&y.value!==void 0?y.value:v[y];if(o&&x===null)continue;let w=d&&s?y.replace(/\./g,`%2E`):y,E=O(v)?typeof n==`function`?n(T,w):T:T+(d?`.`+w:`[`+w+`]`);_.set(e,b);let D=new WeakMap;D.set(P,_),je(S,Pe(x,E,n,r,i,a,o,s,n===`comma`&&h&&O(v)?null:c,l,u,d,f,p,m,h,g,D))}return S}function Fe(e=N){if(e.allowEmptyArrays!==void 0&&typeof e.allowEmptyArrays!=`boolean`)throw TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(e.encodeDotInKeys!==void 0&&typeof e.encodeDotInKeys!=`boolean`)throw TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(e.encoder!==null&&e.encoder!==void 0&&typeof e.encoder!=`function`)throw TypeError(`Encoder has to be a function.`);let t=e.charset||N.charset;if(e.charset!==void 0&&e.charset!==`utf-8`&&e.charset!==`iso-8859-1`)throw TypeError(`The charset option must be either utf-8, iso-8859-1, or undefined`);let n=we;if(e.format!==void 0){if(!A(Ee,e.format))throw TypeError(`Unknown format option provided.`);n=e.format}let r=Ee[n],i=N.filter;(typeof e.filter==`function`||O(e.filter))&&(i=e.filter);let a;if(a=e.arrayFormat&&e.arrayFormat in Ae?e.arrayFormat:`indices`in e?e.indices?`indices`:`repeat`:N.arrayFormat,`commaRoundTrip`in e&&typeof e.commaRoundTrip!=`boolean`)throw TypeError("`commaRoundTrip` must be a boolean, or absent");let o=e.allowDots===void 0?e.encodeDotInKeys?!0:N.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix==`boolean`?e.addQueryPrefix:N.addQueryPrefix,allowDots:o,allowEmptyArrays:typeof e.allowEmptyArrays==`boolean`?!!e.allowEmptyArrays:N.allowEmptyArrays,arrayFormat:a,charset:t,charsetSentinel:typeof e.charsetSentinel==`boolean`?e.charsetSentinel:N.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:e.delimiter===void 0?N.delimiter:e.delimiter,encode:typeof e.encode==`boolean`?e.encode:N.encode,encodeDotInKeys:typeof e.encodeDotInKeys==`boolean`?e.encodeDotInKeys:N.encodeDotInKeys,encoder:typeof e.encoder==`function`?e.encoder:N.encoder,encodeValuesOnly:typeof e.encodeValuesOnly==`boolean`?e.encodeValuesOnly:N.encodeValuesOnly,filter:i,format:n,formatter:r,serializeDate:typeof e.serializeDate==`function`?e.serializeDate:N.serializeDate,skipNulls:typeof e.skipNulls==`boolean`?e.skipNulls:N.skipNulls,sort:typeof e.sort==`function`?e.sort:null,strictNullHandling:typeof e.strictNullHandling==`boolean`?e.strictNullHandling:N.strictNullHandling}}function Ie(e,t={}){let n=e,r=Fe(t),i,a;typeof r.filter==`function`?(a=r.filter,n=a(``,n)):O(r.filter)&&(a=r.filter,i=a);let o=[];if(typeof n!=`object`||!n)return``;let s=Ae[r.arrayFormat],c=s===`comma`&&r.commaRoundTrip;i||=Object.keys(n),r.sort&&i.sort(r.sort);let l=new WeakMap;for(let e=0;e<i.length;++e){let t=i[e];r.skipNulls&&n[t]===null||je(o,Pe(n[t],t,s,c,r.allowEmptyArrays,r.strictNullHandling,r.skipNulls,r.encodeDotInKeys,r.encode?r.encoder:null,r.filter,r.sort,r.allowDots,r.serializeDate,r.format,r.formatter,r.encodeValuesOnly,r.charset,l))}let u=o.join(r.delimiter),d=r.addQueryPrefix===!0?`?`:``;return r.charsetSentinel&&(r.charset===`iso-8859-1`?d+=`utf8=%26%2310003%3B&`:d+=`utf8=%E2%9C%93&`),u.length>0?d+u:``}function Le(e){return Ie(e,{arrayFormat:`comma`})}const F={off:0,error:200,warn:300,info:400,debug:500},Re=(e,t,n)=>{if(e){if(ce(F,e))return e;R(n).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(F))}`)}};function I(){}function L(e,t,n){return!t||F[e]>F[n]?I:t[e].bind(t)}const ze={error:I,warn:I,info:I,debug:I};let Be=new WeakMap;function R(e){let t=e.logger,n=e.logLevel??`off`;if(!t)return ze;let r=Be.get(t);if(r&&r[0]===n)return r[1];let i={error:L(`error`,t,n),warn:L(`warn`,t,n),info:L(`info`,t,n),debug:L(`debug`,t,n)};return Be.set(t,[n,i]),i}const z=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([e,t])=>[e,e.toLowerCase()===`authorization`||e.toLowerCase()===`api-key`||e.toLowerCase()===`x-api-key`||e.toLowerCase()===`cookie`||e.toLowerCase()===`set-cookie`?`***`:t])),`retryOfRequestLogID`in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);async function Ve(e,t){let{response:n,requestLogID:r,retryOfRequestLogID:i,startTime:a}=t,o=await(async()=>{if(n.status===204)return null;if(t.options.__binaryResponse)return n;let e=n.headers.get(`content-type`)?.split(`;`)[0]?.trim();return e?.includes(`application/json`)||e?.endsWith(`+json`)?n.headers.get(`content-length`)===`0`?void 0:await n.json():await n.text()})();return R(e).debug(`[${r}] response parsed`,z({retryOfRequestLogID:i,url:n.url,status:n.status,body:o,durationMs:Date.now()-a})),o}var B,He=class e extends Promise{constructor(e,t,n=Ve){super(e=>{e(null)}),this.responsePromise=t,this.parseResponse=n,B.set(this,void 0),p(this,B,e,`f`)}_thenUnwrap(t){return new e(m(this,B,`f`),this.responsePromise,async(e,n)=>t(await this.parseResponse(e,n),n))}asResponse(){return this.responsePromise.then(e=>e.response)}async withResponse(){let[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t}}parse(){return this.parsedPromise||=this.responsePromise.then(e=>this.parseResponse(m(this,B,`f`),e)),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}};B=new WeakMap;var V,Ue=class{constructor(e,t,n,r){V.set(this,void 0),p(this,V,e,`f`),this.options=r,this.response=t,this.body=n}hasNextPage(){return this.getPaginatedItems().length?this.nextPageRequestOptions()!=null:!1}async getNextPage(){let e=this.nextPageRequestOptions();if(!e)throw new v("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,V,`f`).requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(V=new WeakMap,Symbol.asyncIterator)](){for await(let e of this.iterPages())for(let t of e.getPaginatedItems())yield t}},We=class extends He{constructor(e,t,n){super(e,t,async(e,t)=>new n(e,t.response,await Ve(e,t),t.options))}async*[Symbol.asyncIterator](){let e=await this;for await(let t of e)yield t}},Ge=class extends Ue{constructor(e,t,n,r){super(e,t,n,r),this.chats=n.chats||[],this.next_cursor=n.next_cursor||``}getPaginatedItems(){return this.chats??[]}nextPageRequestOptions(){let e=this.next_cursor;return e?{...this.options,query:{...oe(this.options.query),cursor:e}}:null}},Ke=class extends Ue{constructor(e,t,n,r){super(e,t,n,r),this.messages=n.messages||[],this.next_cursor=n.next_cursor||``}getPaginatedItems(){return this.messages??[]}nextPageRequestOptions(){let e=this.next_cursor;return e?{...this.options,query:{...oe(this.options.query),cursor:e}}:null}};const qe=()=>{if(typeof File>`u`){let{process:e}=globalThis,t=typeof e?.versions?.node==`string`&&parseInt(e.versions.node.split(`.`))<20;throw Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":``))}};function H(e,t,n){return qe(),new File(e,t??`unknown_file`,n)}function Je(e){return(typeof e==`object`&&!!e&&(`name`in e&&e.name&&String(e.name)||`url`in e&&e.url&&String(e.url)||`filename`in e&&e.filename&&String(e.filename)||`path`in e&&e.path&&String(e.path))||``).split(/[\\/]/).pop()||void 0}const Ye=e=>typeof e==`object`&&!!e&&typeof e[Symbol.asyncIterator]==`function`,Xe=e=>typeof e==`object`&&!!e&&typeof e.size==`number`&&typeof e.type==`string`&&typeof e.text==`function`&&typeof e.slice==`function`&&typeof e.arrayBuffer==`function`,Ze=e=>typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.lastModified==`number`&&Xe(e),Qe=e=>typeof e==`object`&&!!e&&typeof e.url==`string`&&typeof e.blob==`function`;async function $e(e,t,n){if(qe(),e=await e,Ze(e))return e instanceof File?e:H([await e.arrayBuffer()],e.name);if(Qe(e)){let r=await e.blob();return t||=new URL(e.url).pathname.split(/[\\/]/).pop(),H(await U(r),t,n)}let r=await U(e);if(t||=Je(e),!n?.type){let e=r.find(e=>typeof e==`object`&&`type`in e&&e.type);typeof e==`string`&&(n={...n,type:e})}return H(r,t,n)}async function U(e){let t=[];if(typeof e==`string`||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Xe(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else if(Ye(e))for await(let n of e)t.push(...await U(n));else{let t=e?.constructor?.name;throw Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:``}${et(e)}`)}return t}function et(e){return typeof e!=`object`||!e?``:`; props: [${Object.getOwnPropertyNames(e).map(e=>`"${e}"`).join(`, `)}]`}var W=class{constructor(e){this._client=e}};const tt=Symbol(`brand.privateNullableHeaders`);function*nt(e){if(!e)return;if(tt in e){let{values:t,nulls:n}=e;yield*t.entries();for(let e of n)yield[e,null];return}let t=!1,n;e instanceof Headers?n=e.entries():ae(e)?n=e:(t=!0,n=Object.entries(e??{}));for(let e of n){let n=e[0];if(typeof n!=`string`)throw TypeError(`expected header name to be a string`);let r=ae(e[1])?e[1]:[e[1]],i=!1;for(let e of r)e!==void 0&&(t&&!i&&(i=!0,yield[n,null]),yield[n,e])}}const G=e=>{let t=new Headers,n=new Set;for(let r of e){let e=new Set;for(let[i,a]of nt(r)){let r=i.toLowerCase();e.has(r)||(t.delete(i),e.add(r)),a===null?(t.delete(i),n.add(r)):(t.append(i,a),n.delete(r))}}return{[tt]:!0,values:t,nulls:n}};function rt(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const it=Object.freeze(Object.create(null)),K=((e=rt)=>function(t,...n){if(t.length===1)return t[0];let r=!1,i=[],a=t.reduce((t,a,o)=>{/[?#]/.test(a)&&(r=!0);let s=n[o],c=(r?encodeURIComponent:e)(``+s);return o!==n.length&&(s==null||typeof s==`object`&&s.toString===Object.getPrototypeOf(Object.getPrototypeOf(s.hasOwnProperty??it)??it)?.toString)&&(c=s+``,i.push({start:t.length+a.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(s).slice(8,-1)} is not a valid path parameter`})),t+a+(o===n.length?``:c)},``),o=a.split(/[?#]/,1)[0],s=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,c;for(;(c=s.exec(o))!==null;)i.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can\'t be safely passed as a path parameter`});if(i.sort((e,t)=>e.start-t.start),i.length>0){let e=0,t=i.reduce((t,n)=>{let r=` `.repeat(n.start-e),i=`^`.repeat(n.length);return e=n.start+n.length,t+r+i},``);throw new v(`Path parameters result in path with invalid segments:\n${i.map(e=>e.error).join(`
|
|
2
|
+
`)}\n${a}\n${t}`)}return a})(rt);var at=class extends W{create(e,t){return this._client.post(`/v3/attachments`,{body:e,...t})}retrieve(e,t){return this._client.get(K`/v3/attachments/${e}`,t)}delete(e,t){return this._client.delete(K`/v3/attachments/${e}`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}},ot=class extends W{retrieve(e={},t){return this._client.get(`/v3/available_number`,{query:e,...t})}},st=class extends W{list(e){return this._client.get(`/v3/blocked_handles`,e)}block(e,t){return this._client.post(`/v3/blocked_handles`,{body:e,...t})}unblock(e,t){return this._client.delete(`/v3/blocked_handles`,{body:e,...t,headers:G([{Accept:`*/*`},t?.headers])})}},ct=class extends W{checkIMessage(e,t){return this._client.post(`/v3/capability/check_imessage`,{body:e,...t})}checkRCS(e,t){return this._client.post(`/v3/capability/check_rcs`,{body:e,...t})}},lt=class extends W{remove(e,t){return this._client.delete(K`/v3/chats/${e}/background`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}set(e,t,n){return this._client.post(K`/v3/chats/${e}/background`,{body:t,...n,headers:G([{Accept:`*/*`},n?.headers])})}},ut=class extends W{retrieve(e,t){return this._client.get(K`/v3/chats/${e}/location`,{...t,headers:G([{Accept:`application/geo+json`},t?.headers])})}request(e,t){return this._client.post(K`/v3/chats/${e}/location/request`,t)}},dt=class extends W{list(e,t={},n){return this._client.getAPIList(K`/v3/chats/${e}/messages`,Ke,{query:t,...n})}send(e,t,n){return this._client.post(K`/v3/chats/${e}/messages`,{body:t,...n})}},ft=class extends W{add(e,t,n){return this._client.post(K`/v3/chats/${e}/participants`,{body:t,...n})}remove(e,t,n){return this._client.delete(K`/v3/chats/${e}/participants`,{body:t,...n})}},pt=class extends W{create(e,t,n){return this._client.post(K`/v3/chats/${e}/polls`,{body:t,...n})}},mt=class extends W{start(e,t){return this._client.post(K`/v3/chats/${e}/typing`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}stop(e,t){return this._client.delete(K`/v3/chats/${e}/typing`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}},q=class extends W{constructor(){super(...arguments),this.participants=new ft(this._client),this.typing=new mt(this._client),this.messages=new dt(this._client),this.location=new ut(this._client),this.polls=new pt(this._client),this.background=new lt(this._client)}create(e,t){return this._client.post(`/v3/chats`,{body:e,...t})}retrieve(e,t){return this._client.get(K`/v3/chats/${e}`,t)}update(e,t,n){return this._client.put(K`/v3/chats/${e}`,{body:t,...n})}leaveChat(e,t){return this._client.post(K`/v3/chats/${e}/leave`,t)}listChats(e={},t){return this._client.getAPIList(`/v3/chats`,Ge,{query:e,...t})}markAsRead(e,t){return this._client.post(K`/v3/chats/${e}/read`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}sendVoicememo(e,t,n){return this._client.post(K`/v3/chats/${e}/voicememo`,{body:t,...n})}shareContactCard(e,t){return this._client.post(K`/v3/chats/${e}/share_contact_card`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}};q.Participants=ft,q.Typing=mt,q.Messages=dt,q.Location=ut,q.Polls=pt,q.Background=lt;var ht=class extends W{create(e,t){return this._client.post(`/v3/contact_card`,{body:e,...t})}retrieve(e={},t){return this._client.get(`/v3/contact_card`,{query:e,...t})}update(e,t){let{phone_number:n,...r}=e;return this._client.patch(`/v3/contact_card`,{query:{phone_number:n},body:r,...t})}},gt=class extends W{retrieve(e,t){return this._client.get(K`/v3/experiences/${e}`,t)}list(e){return this._client.get(`/v3/experiences`,e)}},_t=class extends W{retrieve(e,t){return this._client.get(K`/v3/messages/${e}/poll`,t)}addOptions(e,t,n){return this._client.post(K`/v3/messages/${e}/poll/options`,{body:t,...n})}vote(e,t,n){return this._client.post(K`/v3/messages/${e}/poll/votes`,{body:t,...n})}},J=class extends W{constructor(){super(...arguments),this.poll=new _t(this._client)}create(e,t){let{"Idempotency-Key":n,...r}=e;return this._client.post(`/v3/messages`,{body:r,...t,headers:G([{...n==null?void 0:{"Idempotency-Key":n}},t?.headers])})}retrieve(e,t){return this._client.get(K`/v3/messages/${e}`,t)}update(e,t,n){return this._client.patch(K`/v3/messages/${e}`,{body:t,...n})}delete(e,t){return this._client.delete(K`/v3/messages/${e}`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}addReaction(e,t,n){return this._client.post(K`/v3/messages/${e}/reactions`,{body:t,...n})}listMessagesThread(e,t={},n){return this._client.getAPIList(K`/v3/messages/${e}/thread`,Ke,{query:t,...n})}updateAppCard(e,t,n){return this._client.post(K`/v3/messages/${e}/update`,{body:t,...n})}};J.Poll=_t;var vt=class extends W{connect(e,t){return this._client.post(K`/v3/payments/handles/${e}/connect`,t)}connection(e,t){return this._client.get(K`/v3/payments/handles/${e}/connection`,t)}revoke(e,t){return this._client.delete(K`/v3/payments/handles/${e}/connection`,t)}verify(e,t,n){return this._client.post(K`/v3/payments/handles/${e}/verify`,{body:t,...n})}},yt=class extends W{retrieve(e,t){return this._client.get(K`/v3/payments/providers/${e}`,t)}connect(e,t,n){return this._client.post(K`/v3/payments/providers/${e}/connect`,{body:t,...n})}},bt=class extends W{create(e,t){let{"Idempotency-Key":n,...r}=e;return this._client.post(`/v3/payment_requests`,{body:r,...t,headers:G([{...n==null?void 0:{"Idempotency-Key":n}},t?.headers])})}retrieve(e,t){return this._client.get(K`/v3/payment_requests/${e}`,t)}list(e={},t){return this._client.get(`/v3/payment_requests`,{query:e,...t})}cancel(e,t){return this._client.post(K`/v3/payment_requests/${e}/cancel`,t)}},xt=class extends W{create(e,t){return this._client.post(`/v3/payments`,{body:e,...t})}retrieve(e,t){return this._client.get(K`/v3/payments/${e}`,t)}cancel(e,t){return this._client.post(K`/v3/payments/${e}/cancel`,t)}credentials(e,t){return this._client.get(K`/v3/payments/${e}/credentials`,t)}},St=class extends W{update(e,t,n){return this._client.put(K`/v3/phone_numbers/${e}`,{body:t,...n})}list(e){return this._client.get(`/v3/phone_numbers`,e)}getReputationAudit(e,t,n){let{phoneNumber:r}=t;return this._client.get(K`/v3/phone_numbers/${r}/reputation_audit/${e}`,n)}startReputationAudit(e,t){return this._client.post(K`/v3/phone_numbers/${e}/reputation_audit`,t)}},Ct=class extends W{list(e){return this._client.get(`/v3/phonenumbers`,e)}},wt=class extends W{list(e){return this._client.get(`/v3/webhook-events`,e)}},Tt=class extends W{create(e,t){return this._client.post(`/v3/webhook-subscriptions`,{body:e,...t})}retrieve(e,t){return this._client.get(K`/v3/webhook-subscriptions/${e}`,t)}update(e,t,n){return this._client.put(K`/v3/webhook-subscriptions/${e}`,{body:t,...n})}list(e){return this._client.get(`/v3/webhook-subscriptions`,e)}delete(e,t){return this._client.delete(K`/v3/webhook-subscriptions/${e}`,{...t,headers:G([{Accept:`*/*`},t?.headers])})}},Et=e((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.timingSafeEqual=void 0;function t(e,t=``){if(!e)throw Error(t)}function n(e,n){if(e.byteLength!==n.byteLength)return!1;e instanceof DataView||(e=new DataView(ArrayBuffer.isView(e)?e.buffer:e)),n instanceof DataView||(n=new DataView(ArrayBuffer.isView(n)?n.buffer:n)),t(e instanceof DataView),t(n instanceof DataView);let r=e.byteLength,i=0,a=-1;for(;++a<r;)i|=e.getUint8(a)^n.getUint8(a);return i===0}e.timingSafeEqual=n})),Dt=e((e=>{var t=e&&e.__extends||(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})();Object.defineProperty(e,"__esModule",{value:!0});var n=256,r=function(){function e(e){e===void 0&&(e=`=`),this._paddingCharacter=e}return e.prototype.encodedLength=function(e){return this._paddingCharacter?(e+2)/3*4|0:(e*8+5)/6|0},e.prototype.encode=function(e){for(var t=``,n=0;n<e.length-2;n+=3){var r=e[n]<<16|e[n+1]<<8|e[n+2];t+=this._encodeByte(r>>>18&63),t+=this._encodeByte(r>>>12&63),t+=this._encodeByte(r>>>6&63),t+=this._encodeByte(r>>>0&63)}var i=e.length-n;if(i>0){var r=e[n]<<16|(i===2?e[n+1]<<8:0);t+=this._encodeByte(r>>>18&63),t+=this._encodeByte(r>>>12&63),i===2?t+=this._encodeByte(r>>>6&63):t+=this._paddingCharacter||``,t+=this._paddingCharacter||``}return t},e.prototype.maxDecodedLength=function(e){return this._paddingCharacter?e/4*3|0:(e*6+7)/8|0},e.prototype.decodedLength=function(e){return this.maxDecodedLength(e.length-this._getPaddingLength(e))},e.prototype.decode=function(e){if(e.length===0)return new Uint8Array;for(var t=this._getPaddingLength(e),r=e.length-t,i=new Uint8Array(this.maxDecodedLength(r)),a=0,o=0,s=0,c=0,l=0,u=0,d=0;o<r-4;o+=4)c=this._decodeChar(e.charCodeAt(o+0)),l=this._decodeChar(e.charCodeAt(o+1)),u=this._decodeChar(e.charCodeAt(o+2)),d=this._decodeChar(e.charCodeAt(o+3)),i[a++]=c<<2|l>>>4,i[a++]=l<<4|u>>>2,i[a++]=u<<6|d,s|=c&n,s|=l&n,s|=u&n,s|=d&n;if(o<r-1&&(c=this._decodeChar(e.charCodeAt(o)),l=this._decodeChar(e.charCodeAt(o+1)),i[a++]=c<<2|l>>>4,s|=c&n,s|=l&n),o<r-2&&(u=this._decodeChar(e.charCodeAt(o+2)),i[a++]=l<<4|u>>>2,s|=u&n),o<r-3&&(d=this._decodeChar(e.charCodeAt(o+3)),i[a++]=u<<6|d,s|=d&n),s!==0)throw Error(`Base64Coder: incorrect characters for decoding`);return i},e.prototype._encodeByte=function(e){var t=e;return t+=65,t+=25-e>>>8&6,t+=51-e>>>8&-75,t+=61-e>>>8&-15,t+=62-e>>>8&3,String.fromCharCode(t)},e.prototype._decodeChar=function(e){var t=n;return t+=(42-e&e-44)>>>8&-n+e-43+62,t+=(46-e&e-48)>>>8&-n+e-47+63,t+=(47-e&e-58)>>>8&-n+e-48+52,t+=(64-e&e-91)>>>8&-n+e-65+0,t+=(96-e&e-123)>>>8&-n+e-97+26,t},e.prototype._getPaddingLength=function(e){var t=0;if(this._paddingCharacter){for(var n=e.length-1;n>=0&&e[n]===this._paddingCharacter;n--)t++;if(e.length<4||t>2)throw Error(`Base64Coder: incorrect padding`)}return t},e}();e.Coder=r;var i=new r;function a(e){return i.encode(e)}e.encode=a;function o(e){return i.decode(e)}e.decode=o;var s=function(e){t(r,e);function r(){return e!==null&&e.apply(this,arguments)||this}return r.prototype._encodeByte=function(e){var t=e;return t+=65,t+=25-e>>>8&6,t+=51-e>>>8&-75,t+=61-e>>>8&-13,t+=62-e>>>8&49,String.fromCharCode(t)},r.prototype._decodeChar=function(e){var t=n;return t+=(44-e&e-46)>>>8&-n+e-45+62,t+=(94-e&e-96)>>>8&-n+e-95+63,t+=(47-e&e-58)>>>8&-n+e-48+52,t+=(64-e&e-91)>>>8&-n+e-65+0,t+=(96-e&e-123)>>>8&-n+e-97+26,t},r}(r);e.URLSafeCoder=s;var c=new s;function l(e){return c.encode(e)}e.encodeURLSafe=l;function u(e){return c.decode(e)}e.decodeURLSafe=u,e.encodedLength=function(e){return i.encodedLength(e)},e.maxDecodedLength=function(e){return i.maxDecodedLength(e)},e.decodedLength=function(e){return i.decodedLength(e)}})),Ot=e(((e,t)=>{(function(e,n){var r={};n(r);var i=r.default;for(var a in r)i[a]=r[a];typeof t==`object`&&typeof t.exports==`object`?t.exports=i:typeof define==`function`&&define.amd?define(function(){return i}):e.sha256=i})(e,function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(e,n,r,i,a){for(var o,s,c,l,u,d,f,p,m,h,g,_,v;a>=64;){for(o=n[0],s=n[1],c=n[2],l=n[3],u=n[4],d=n[5],f=n[6],p=n[7],h=0;h<16;h++)g=i+h*4,e[h]=(r[g]&255)<<24|(r[g+1]&255)<<16|(r[g+2]&255)<<8|r[g+3]&255;for(h=16;h<64;h++)m=e[h-2],_=(m>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,m=e[h-15],v=(m>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,e[h]=(_+e[h-7]|0)+(v+e[h-16]|0);for(h=0;h<64;h++)_=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&d^~u&f)|0)+(p+(t[h]+e[h]|0)|0)|0,v=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&s^o&c^s&c)|0,p=f,f=d,d=u,u=l+_|0,l=c,c=s,s=o,o=_+v|0;n[0]+=o,n[1]+=s,n[2]+=c,n[3]+=l,n[4]+=u,n[5]+=d,n[6]+=f,n[7]+=p,i+=64,a-=64}return i}var r=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(var e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(t===void 0&&(t=e.length),this.finished)throw Error(`SHA256: can't update because hash was finished.`);var r=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[r++],t--;this.bufferLength===64&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(r=n(this.temp,this.state,e,r,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[r++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,r=this.bufferLength,i=t/536870912|0,a=t<<3,o=t%64<56?64:128;this.buffer[r]=128;for(var s=r+1;s<o-8;s++)this.buffer[s]=0;this.buffer[o-8]=i>>>24&255,this.buffer[o-7]=i>>>16&255,this.buffer[o-6]=i>>>8&255,this.buffer[o-5]=i>>>0&255,this.buffer[o-4]=a>>>24&255,this.buffer[o-3]=a>>>16&255,this.buffer[o-2]=a>>>8&255,this.buffer[o-1]=a>>>0&255,n(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(var s=0;s<8;s++)e[s*4+0]=this.state[s]>>>24&255,e[s*4+1]=this.state[s]>>>16&255,e[s*4+2]=this.state[s]>>>8&255,e[s*4+3]=this.state[s]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var n=0;n<this.state.length;n++)this.state[n]=e[n];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=r;var i=function(){function e(e){this.inner=new r,this.outer=new r,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)new r().update(e).finish(t).clean();else for(var n=0;n<e.length;n++)t[n]=e[n];for(var n=0;n<t.length;n++)t[n]^=54;this.inner.update(t);for(var n=0;n<t.length;n++)t[n]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(var n=0;n<t.length;n++)t[n]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();e.HMAC=i;function a(e){var t=new r().update(e),n=t.digest();return t.clean(),n}e.hash=a,e.default=a;function o(e,t){var n=new i(e).update(t),r=n.digest();return n.clean(),r}e.hmac=o;function s(e,t,n,r){var i=r[0];if(i===0)throw Error(`hkdf: cannot expand more`);t.reset(),i>1&&t.update(e),n&&t.update(n),t.update(r),t.finish(e),r[0]++}var c=new Uint8Array(e.digestLength);function l(e,t,n,r){t===void 0&&(t=c),r===void 0&&(r=32);for(var a=new Uint8Array([1]),l=new i(o(t,e)),u=new Uint8Array(l.digestLength),d=u.length,f=new Uint8Array(r),p=0;p<r;p++)d===u.length&&(s(u,l,n,a),d=0),f[p]=u[d++];return l.clean(),u.fill(0),a.fill(0),f}e.hkdf=l;function u(e,t,n,r){for(var a=new i(e),o=a.digestLength,s=new Uint8Array(4),c=new Uint8Array(o),l=new Uint8Array(o),u=new Uint8Array(r),d=0;d*o<r;d++){var f=d+1;s[0]=f>>>24&255,s[1]=f>>>16&255,s[2]=f>>>8&255,s[3]=f>>>0&255,a.reset(),a.update(t),a.update(s),a.finish(l);for(var p=0;p<o;p++)c[p]=l[p];for(var p=2;p<=n;p++){a.reset(),a.update(l).finish(l);for(var m=0;m<o;m++)c[m]^=l[m]}for(var p=0;p<o&&d*o+p<r;p++)u[d*o+p]=c[p]}for(var d=0;d<o;d++)c[d]=l[d]=0;for(var d=0;d<4;d++)s[d]=0;return a.clean(),u}e.pbkdf2=u})})),kt=e((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Webhook=e.WebhookVerificationError=void 0;let t=Et(),n=Dt(),r=Ot();var i=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype),this.name=`ExtendableError`,this.stack=Error(t).stack}},a=class e extends i{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype),this.name=`WebhookVerificationError`}};e.WebhookVerificationError=a;var o=class e{constructor(t,r){if(!t)throw Error(`Secret can't be empty.`);if(r?.format===`raw`)t instanceof Uint8Array?this.key=t:this.key=Uint8Array.from(t,e=>e.charCodeAt(0));else{if(typeof t!=`string`)throw Error(`Expected secret to be of type string`);t.startsWith(e.prefix)&&(t=t.substring(e.prefix.length)),this.key=n.decode(t)}}verify(e,n){let r={};for(let e of Object.keys(n))r[e.toLowerCase()]=n[e];let i=r[`webhook-id`],o=r[`webhook-signature`],s=r[`webhook-timestamp`];if(!o||!i||!s)throw new a(`Missing required headers`);let c=this.verifyTimestamp(s),l=this.sign(i,c,e).split(`,`)[1],u=o.split(` `),d=new globalThis.TextEncoder;for(let n of u){let[r,i]=n.split(`,`);if(r===`v1`&&(0,t.timingSafeEqual)(d.encode(i),d.encode(l)))return JSON.parse(e.toString())}throw new a(`No matching signature found`)}sign(e,t,i){if(typeof i!=`string`)if(i.constructor.name===`Buffer`)i=i.toString();else throw Error(`Expected payload to be of type string or Buffer.`);let a=new TextEncoder,o=Math.floor(t.getTime()/1e3),s=a.encode(`${e}.${o}.${i}`);return`v1,${n.encode(r.hmac(this.key,s))}`}verifyTimestamp(e){let t=Math.floor(Date.now()/1e3),n=parseInt(e,10);if(isNaN(n))throw new a(`Invalid Signature Headers`);if(t-n>300)throw new a(`Message timestamp too old`);if(n>t+300)throw new a(`Message timestamp too new`);return new Date(n*1e3)}};e.Webhook=o,o.prefix=`whsec_`}))(),At=class extends W{unwrap(e,{headers:t,key:n}){if(t!==void 0){let r=n===void 0?this._client.webhookSecret:n;if(r===null)throw Error(`Webhook key must not be null in order to unwrap`);new kt.Webhook(r).verify(e,t)}return JSON.parse(e)}};const Y=e=>{if(globalThis.process!==void 0)return globalThis.process.env?.[e]?.trim()||void 0;if(globalThis.Deno!==void 0)return globalThis.Deno.env?.get?.(e)?.trim()||void 0};var X,jt,Z,Mt,Q=class{constructor({baseURL:e=Y(`LINQ_API_V3_BASE_URL`),apiKey:t=Y(`LINQ_API_V3_API_KEY`),webhookSecret:n=Y(`LINQ_WEBHOOK_SECRET`)??null,...r}={}){if(X.add(this),Z.set(this,void 0),this.chats=new q(this),this.messages=new J(this),this.attachments=new at(this),this.phonenumbers=new Ct(this),this.phoneNumbers=new St(this),this.availableNumber=new ot(this),this.paymentRequests=new bt(this),this.paymentProviders=new yt(this),this.paymentHandles=new vt(this),this.payments=new xt(this),this.blockedHandles=new st(this),this.experiences=new gt(this),this.webhookEvents=new wt(this),this.webhookSubscriptions=new Tt(this),this.capability=new ct(this),this.webhooks=new At(this),this.contactCard=new ht(this),t===void 0)throw new v(`The LINQ_API_V3_API_KEY environment variable is missing or empty; either provide it, or instantiate the LinqAPIV3 client with an apiKey option, like new LinqAPIV3({ apiKey: 'My API Key' }).`);let i={apiKey:t,webhookSecret:n,...r,baseURL:e||`https://api.linqapp.com/api/partner`};this.baseURL=i.baseURL,this.timeout=i.timeout??jt.DEFAULT_TIMEOUT,this.logger=i.logger??console;let a=`warn`;this.logLevel=a,this.logLevel=Re(i.logLevel,`ClientOptions.logLevel`,this)??Re(Y(`LINQ_API_V3_LOG`),`process.env['LINQ_API_V3_LOG']`,this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??ye(),p(this,Z,Ce,`f`);let o=Y(`LINQ_API_V3_CUSTOM_HEADERS`);if(o){let e={};for(let t of o.split(`
|
|
3
|
+
`)){let n=t.indexOf(`:`);n>=0&&(e[t.substring(0,n).trim()]=t.substring(n+1).trim())}i.defaultHeaders={...e,...i.defaultHeaders}}this._options=i,this.apiKey=t,this.webhookSecret=n}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return G([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Le(e)}getUserAgent(){return`${this.constructor.name}/JS ${k}`}defaultIdempotencyKey(){return`stainless-node-retry-${h()}`}makeStatusError(e,t,n,r){return y.generate(e,t,n,r)}buildURL(e,t,n){let r=!m(this,X,`m`,Mt).call(this)&&n||this.baseURL,i=ie(e)?new URL(e):new URL(r+(r.endsWith(`/`)&&e.startsWith(`/`)?e.slice(1):e)),a=this.defaultQuery(),o=Object.fromEntries(i.searchParams);return(!se(a)||!se(o))&&(t={...o,...a,...t}),typeof t==`object`&&t&&!Array.isArray(t)&&(i.search=this.stringifyQuery(t)),i.toString()}async prepareOptions(e){}async prepareRequest(e,{url:t,options:n}){}get(e,t){return this.methodRequest(`get`,e,t)}post(e,t){return this.methodRequest(`post`,e,t)}patch(e,t){return this.methodRequest(`patch`,e,t)}put(e,t){return this.methodRequest(`put`,e,t)}delete(e,t){return this.methodRequest(`delete`,e,t)}methodRequest(e,t,n){return this.request(Promise.resolve(n).then(n=>({method:e,path:t,...n})))}request(e,t=null){return new He(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,n){let r=await e,i=r.maxRetries??this.maxRetries;t??=i,await this.prepareOptions(r);let{req:a,url:o,timeout:s}=await this.buildRequest(r,{retryCount:i-t});await this.prepareRequest(a,{url:o,options:r});let c=`log_`+(Math.random()*(1<<24)|0).toString(16).padStart(6,`0`),l=n===void 0?``:`, retryOf: ${n}`,u=Date.now();if(R(this).debug(`[${c}] sending request`,z({retryOfRequestLogID:n,method:r.method,url:o,options:r,headers:a.headers})),r.signal?.aborted)throw new b;let d=new AbortController,f=await this.fetchWithTimeout(o,a,s,d).catch(_),p=Date.now();if(f instanceof globalThis.Error){let e=`retrying, ${t} attempts remaining`;if(r.signal?.aborted)throw new b;let i=g(f)||/timed? ?out/i.test(String(f)+(`cause`in f?String(f.cause):``));if(t)return R(this).info(`[${c}] connection ${i?`timed out`:`failed`} - ${e}`),R(this).debug(`[${c}] connection ${i?`timed out`:`failed`} (${e})`,z({retryOfRequestLogID:n,url:o,durationMs:p-u,message:f.message})),this.retryRequest(r,t,n??c);throw R(this).info(`[${c}] connection ${i?`timed out`:`failed`} - error; no more retries left`),R(this).debug(`[${c}] connection ${i?`timed out`:`failed`} (error; no more retries left)`,z({retryOfRequestLogID:n,url:o,durationMs:p-u,message:f.message})),i?new S:new x({cause:f})}let m=`[${c}${l}] ${a.method} ${o} ${f.ok?`succeeded`:`failed`} with status ${f.status} in ${p-u}ms`;if(!f.ok){let e=await this.shouldRetry(f);if(t&&e){let e=`retrying, ${t} attempts remaining`;return await Se(f.body),R(this).info(`${m} - ${e}`),R(this).debug(`[${c}] response error (${e})`,z({retryOfRequestLogID:n,url:f.url,status:f.status,headers:f.headers,durationMs:p-u})),this.retryRequest(r,t,n??c,f.headers)}let i=e?`error; no more retries left`:`error; not retryable`;R(this).info(`${m} - ${i}`);let a=await f.text().catch(e=>_(e).message),o=ue(a),s=o?void 0:a;throw R(this).debug(`[${c}] response error (${i})`,z({retryOfRequestLogID:n,url:f.url,status:f.status,headers:f.headers,message:s,durationMs:Date.now()-u})),this.makeStatusError(f.status,o,s,f.headers)}return R(this).info(m),R(this).debug(`[${c}] response start`,z({retryOfRequestLogID:n,url:f.url,status:f.status,headers:f.headers,durationMs:p-u})),{response:f,options:r,controller:d,requestLogID:c,retryOfRequestLogID:n,startTime:u}}getAPIList(e,t,n){return this.requestAPIList(t,n&&`then`in n?n.then(t=>({method:`get`,path:e,...t})):{method:`get`,path:e,...n})}requestAPIList(e,t){let n=this.makeRequest(t,null,void 0);return new We(this,n,e)}async fetchWithTimeout(e,t,n,r){let{signal:i,method:a,...o}=t||{},s=this._makeAbort(r);i&&i.addEventListener(`abort`,s,{once:!0});let c=setTimeout(s,n),l=globalThis.ReadableStream&&o.body instanceof globalThis.ReadableStream||typeof o.body==`object`&&o.body!==null&&Symbol.asyncIterator in o.body,u={signal:r.signal,...l?{duplex:`half`}:{},method:`GET`,...o};a&&(u.method=a.toUpperCase());try{return await this.fetch.call(void 0,e,u)}finally{clearTimeout(c)}}async shouldRetry(e){let t=e.headers.get(`x-should-retry`);return t===`true`?!0:t===`false`?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,n,r){let i,a=r?.get(`retry-after-ms`);if(a){let e=parseFloat(a);Number.isNaN(e)||(i=e)}let o=r?.get(`retry-after`);if(o&&!i){let e=parseFloat(o);i=Number.isNaN(e)?Date.parse(o)-Date.now():e*1e3}if(i===void 0){let n=e.maxRetries??this.maxRetries;i=this.calculateDefaultRetryTimeoutMillis(t,n)}return await de(i),this.makeRequest(e,t-1,n)}calculateDefaultRetryTimeoutMillis(e,t){let n=t-e;return Math.min(.5*2**n,8)*(1-Math.random()*.25)*1e3}async buildRequest(e,{retryCount:t=0}={}){let n={...e},{method:r,path:i,query:a,defaultBaseURL:o}=n,s=this.buildURL(i,a,o);`timeout`in n&&le(`timeout`,n.timeout),n.timeout=n.timeout??this.timeout;let{bodyHeaders:c,body:l}=this.buildBody({options:n});return{req:{method:r,headers:await this.buildHeaders({options:e,method:r,bodyHeaders:c,retryCount:t}),...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:`half`},...l&&{body:l},...this.fetchOptions??{},...n.fetchOptions??{}},url:s,timeout:n.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:n,retryCount:r}){let i={};this.idempotencyHeader&&t!==`get`&&(e.idempotencyKey||=this.defaultIdempotencyKey(),i[this.idempotencyHeader]=e.idempotencyKey);let a=G([i,{Accept:`application/json`,"User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(r),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...ve()},await this.authHeaders(e),this._options.defaultHeaders,n,e.headers]);return this.validateHeaders(a),a.values}_makeAbort(e){return()=>e.abort()}buildBody({options:e}){let{body:t,headers:n}=e;if(!t)return t==null&&`body`in e?m(this,Z,`f`).call(this,{body:t,headers:G([n])}):{bodyHeaders:void 0,body:void 0};let r=G([n]);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t==`string`&&r.values.has(`content-type`)||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||globalThis.ReadableStream&&t instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:t}:typeof t==`object`&&(Symbol.asyncIterator in t||Symbol.iterator in t&&`next`in t&&typeof t.next==`function`)?{bodyHeaders:void 0,body:xe(t)}:typeof t==`object`&&r.values.get(`content-type`)===`application/x-www-form-urlencoded`?{bodyHeaders:{"content-type":`application/x-www-form-urlencoded`},body:this.stringifyQuery(t)}:m(this,Z,`f`).call(this,{body:t,headers:r})}};jt=Q,Z=new WeakMap,X=new WeakSet,Mt=function(){return this.baseURL!==`https://api.linqapp.com/api/partner`},Q.LinqAPIV3=jt,Q.DEFAULT_TIMEOUT=6e4,Q.LinqAPIV3Error=v,Q.APIError=y,Q.APIConnectionError=x,Q.APIConnectionTimeoutError=S,Q.APIUserAbortError=b,Q.NotFoundError=E,Q.ConflictError=D,Q.RateLimitError=te,Q.BadRequestError=C,Q.AuthenticationError=w,Q.InternalServerError=ne,Q.PermissionDeniedError=T,Q.UnprocessableEntityError=ee,Q.toFile=$e,Q.Chats=q,Q.Messages=J,Q.Attachments=at,Q.Phonenumbers=Ct,Q.PhoneNumbers=St,Q.AvailableNumber=ot,Q.PaymentRequests=bt,Q.PaymentProviders=yt,Q.PaymentHandles=vt,Q.Payments=xt,Q.BlockedHandles=st,Q.Experiences=gt,Q.WebhookEvents=wt,Q.WebhookSubscriptions=Tt,Q.Capability=ct,Q.Webhooks=At,Q.ContactCard=ht;function $(e){return typeof e==`object`&&!!e}function Nt(e){return typeof e==`string`||!$(e)?null:l(e)?e:l(e.card)?e.card:null}function Pt(e){return e.startsWith(`https://`)}function Ft(e){let t=[];return e.imageUrl&&Pt(e.imageUrl)&&t.push(e.imageUrl),It(e.children,t),t}function It(e,t){for(let n of e)n.type===`image`&&Pt(n.url)?t.push(n.url):n.type===`section`&&It(n.children,t)}function Lt(e){let t=[];e.title&&t.push(e.title),e.subtitle&&t.push(e.subtitle);for(let n of e.children){let e=Rt(n);e&&t.push(e)}return t.join(`
|
|
4
|
+
`)}function Rt(e){switch(e.type){case`text`:return f(e.content).trim()||null;case`fields`:return e.children.map(e=>`${e.label}: ${e.value}`).join(`
|
|
5
|
+
`);case`link`:return Bt(e.label,e.url);case`divider`:return`———`;case`image`:return Pt(e.url)?null:Bt(e.alt,e.url);case`table`:return s(e.headers,e.rows);case`section`:{let t=e.children.map(e=>Rt(e)).filter(e=>!!e);return t.length>0?t.join(`
|
|
6
|
+
`):null}case`actions`:return zt(e);default:return null}}function zt(e){let t=[],n=[];for(let r of e.children)switch(r.type){case`button`:n.push(r.label);break;case`link-button`:{let e=Bt(r.label,r.url);e&&t.push(e);break}case`select`:case`radio_select`:{let e=r.options.map(e=>e.label).join(`, `);t.push(e?`${r.label}: ${e}`:r.label);break}default:break}return n.length>0&&t.unshift(`Options: ${n.join(`, `)}`),t.length>0?t.join(`
|
|
7
|
+
`):null}function Bt(e,t){return e&&e!==t?`${e}: ${t}`:t}function Vt(e){return Ht(e.children)}function Ht(e){return e.some(e=>e.type===`section`?Ht(e.children):e.type===`actions`&&e.children.some(e=>e.type===`button`||e.type===`select`||e.type===`radio_select`))}var Ut=class extends u{toAst(e){return r(e)}fromAst(e){return a(e)}cardToFallbackText(e){return Lt(e)}};function Wt(e,t){let n=qt(e),i=n.parts.flatMap(e=>e.type===`media`?[en(e)]:[]),a=Qt(n.parts,i),s=$t(n.parts),c=n.isMe,l=n.sender?.id||n.sender?.handle||`unknown`,u=n.sender?.handle||n.sender?.id||`unknown`;return new o({id:n.id,threadId:t({chatId:n.chatId,isGroup:n.isGroup}),text:a,formatted:r(a),raw:e,author:{userId:l,userName:u,fullName:u,isBot:c,isMe:c},metadata:{dateSent:Zt(n.sentAt),edited:n.edited,editedAt:n.editedAt?Zt(n.editedAt):void 0},attachments:i,links:s})}function Gt(e){return e.event_type===`message.received`}function Kt(e){return e.event_type===`reaction.added`||e.event_type===`reaction.removed`}function qt(e){if(Jt(e))return{id:e.id,chatId:e.chat.id,isGroup:e.chat.is_group??void 0,parts:e.parts,isMe:e.direction===`outbound`||e.sender_handle.is_me===!0,sender:e.sender_handle,sentAt:e.sent_at,edited:!1};if(Yt(e))return{id:e.message.id,chatId:e.chat_id,isGroup:void 0,parts:e.message.parts,isMe:!0,sender:e.message.from_handle,sentAt:e.message.sent_at||e.message.created_at,edited:!1};if(Xt(e)){let t=e.updated_at!==e.created_at;return{id:e.id,chatId:e.chat_id,isGroup:void 0,parts:e.parts??[],isMe:e.is_from_me||e.from_handle?.is_me===!0,sender:e.from_handle,sentAt:e.sent_at||e.created_at,edited:t,editedAt:t?e.updated_at:void 0}}throw new n(`parseMessage only supports Linq message payloads`)}function Jt(e){return $(e)&&`chat`in e&&`direction`in e&&`sender_handle`in e}function Yt(e){return $(e)&&`chat_id`in e&&`message`in e&&$(e.message)}function Xt(e){return $(e)&&`chat_id`in e&&`is_from_me`in e&&`created_at`in e}function Zt(e){if(e){let t=new Date(e);if(!Number.isNaN(t.getTime()))return t}return new Date}function Qt(e,t){let n=e.flatMap(e=>(e.type===`text`||e.type===`link`)&&typeof e.value==`string`?[e.value]:[]),r=t.map(e=>{let t=e.name||e.mimeType||e.type;return`[${e.type} attachment: ${t}]`});return[...n,...r].join(`
|
|
8
|
+
`).trim()}function $t(e){let t=new Set;for(let n of e){if(n.type===`link`){t.add(n.value);continue}if(n.type===`text`)for(let e of nn(n.value))t.add(e)}return[...t].map(e=>({url:e}))}function en(e){return{type:tn(e.mime_type),url:e.url,name:e.filename,mimeType:e.mime_type,size:e.size_bytes,width:e.width??e.width_px,height:e.height??e.height_px,fetchMetadata:{url:e.url},fetchData:async()=>{let t=await fetch(e.url);if(!t.ok)throw Error(`Failed to fetch Linq attachment ${e.id||e.url}: ${t.status}`);return Buffer.from(await t.arrayBuffer())}}}function tn(e){return e.startsWith(`image/`)?`image`:e.startsWith(`video/`)?`video`:e.startsWith(`audio/`)?`audio`:`file`}function nn(e){return(e.match(/https?:\/\/[^\s<>()]+/gi)??[]).map(e=>e.replace(/[.,!?;:]+$/g,``))}const rn={jpg:`image/jpeg`,jpeg:`image/jpeg`,png:`image/png`,gif:`image/gif`,heic:`image/heic`,heif:`image/heif`,bmp:`image/bmp`,tif:`image/tiff`,tiff:`image/tiff`,webp:`image/webp`,mp4:`video/mp4`,mov:`video/quicktime`,m4v:`video/x-m4v`,"3gp":`video/3gpp`,m4a:`audio/x-m4a`,mp3:`audio/mpeg`,aac:`audio/aac`,wav:`audio/x-wav`,aiff:`audio/x-aiff`,caf:`audio/x-caf`,amr:`audio/amr`,pdf:`application/pdf`,txt:`text/plain`,csv:`text/csv`,rtf:`text/rtf`,vcf:`text/vcard`,ics:`text/calendar`,html:`text/html`,htm:`text/html`,json:`application/json`,zip:`application/zip`,doc:`application/msword`,docx:`application/vnd.openxmlformats-officedocument.wordprocessingml.document`,xls:`application/vnd.ms-excel`,xlsx:`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,ppt:`application/vnd.ms-powerpoint`,pptx:`application/vnd.openxmlformats-officedocument.presentationml.presentation`};function an(e){return typeof e==`string`||!$(e)?{attachments:[],files:[]}:{attachments:Array.isArray(e.attachments)?e.attachments:[],files:Array.isArray(e.files)?e.files:[]}}async function on(e,t){let{attachments:n,files:r}=an(t);if(n.length===0&&r.length===0)return[];let i=[];for(let t of n)i.push(await sn(e,t));for(let t of r)i.push(await cn(e,t));return i}async function sn(e,t){if(t.url&&t.url.startsWith(`https://`)&&!fn(t.size))return{type:`media`,url:t.url};let n=await un(t),r=t.name??hn(t.mimeType);return{type:`media`,attachment_id:await ln(e,n,r,pn(t.mimeType,r))}}async function cn(e,t){let n=await dn(t.data),r=pn(t.mimeType,t.filename);return{type:`media`,attachment_id:await ln(e,n,t.filename,r)}}async function ln(e,t,n,r){let i=await e.attachments.create({filename:n,content_type:r,size_bytes:t.byteLength}),a=await fetch(i.upload_url,{method:i.http_method,headers:i.required_headers,body:t});if(!a.ok)throw Error(`Failed to upload Linq attachment ${n}: ${a.status} ${a.statusText}`);return i.attachment_id}async function un(e){if(e.data!=null)return dn(e.data);if(typeof e.fetchData==`function`)return dn(await e.fetchData());if(e.url){let t=await fetch(e.url);if(!t.ok)throw Error(`Failed to download Linq attachment ${e.name??e.url}: ${t.status}`);return new Uint8Array(await t.arrayBuffer())}throw Error(`Outbound attachment ${e.name??`(unnamed)`} has no data, fetchData, or url to send`)}async function dn(e){if(e instanceof Uint8Array||e instanceof ArrayBuffer)return new Uint8Array(e);if(typeof Blob<`u`&&e instanceof Blob)return new Uint8Array(await e.arrayBuffer());throw Error(`Unsupported attachment data type; expected Buffer, Blob, or ArrayBuffer`)}function fn(e){return typeof e==`number`&&e>10485760}function pn(e,t){if(e&&e.trim())return mn(e.trim());let n=t.split(`.`).pop()?.toLowerCase(),r=n?rn[n]:void 0;if(r)return r;throw Error(`Cannot determine content type for attachment "${t}"; set mimeType on the attachment`)}function mn(e){let t=e.toLowerCase();return t===`image/jpg`?`image/jpeg`:t}function hn(e){let t=e?gn(e):void 0;return t?`attachment.${t}`:`attachment`}function gn(e){let t=mn(e);for(let[e,n]of Object.entries(rn))if(n===t)return e}const _n={like:`thumbs_up`,dislike:`thumbs_down`,love:`heart`,laugh:`laugh`,emphasize:`exclamation`,question:`question`};function vn(e){if(e.reaction_type===`custom`)return e.custom_emoji?{emoji:t.fromGChat(e.custom_emoji),rawEmoji:e.custom_emoji}:null;let n=_n[e.reaction_type];return n?{emoji:i(n),rawEmoji:e.reaction_type}:null}function yn(e){let n=typeof e==`string`?e:e.name,r=n.trim().replace(/^\{\{emoji:/,``).replace(/\}\}$/,``).replace(/^:+|:+$/g,``).toLowerCase();return[`thumbs_up`,`thumbsup`,`+1`,`like`,`👍`].includes(r)?{type:`like`}:[`thumbs_down`,`thumbsdown`,`-1`,`dislike`,`👎`].includes(r)?{type:`dislike`}:[`heart`,`love`,`❤️`,`❤`].includes(r)?{type:`love`}:[`laugh`,`joy`,`rofl`,`😂`,`🤣`].includes(r)?{type:`laugh`}:[`exclamation`,`emphasize`,`!!`,`!`,`‼️`,`‼`,`❗`].includes(r)?{type:`emphasize`}:[`question`,`?`,`❓`].includes(r)?{type:`question`}:{type:`custom`,custom_emoji:t.toDiscord(n)}}async function bn(e,t){if(!t)return{ok:!1,response:new Response(`Linq webhook signing secret is not configured`,{status:503})};let n=await e.text();try{new kt.Webhook(t).verify(n,Object.fromEntries(e.headers))}catch{return{ok:!1,response:new Response(`Invalid Linq webhook`,{status:401})}}try{return{ok:!0,event:JSON.parse(n)}}catch{return{ok:!1,response:new Response(`Invalid JSON`,{status:400})}}}var xn=class{name=`linq`;userName=`linq`;apiClient;baseURL;converter=new Ut;credentials;signingSecret;webhookVerifier;chat=null;logger;chatKinds=new Map;constructor(e){if(!e.credentials&&!e.apiKey)throw Error(`Linq requires apiKey or a credentials provider.`);if(!e.webhookVerifier&&!e.credentials&&!e.signingSecret)throw Error(`Linq requires signingSecret or a webhookVerifier.`);this.apiClient=e.apiKey?new Q({apiKey:e.apiKey,baseURL:e.baseURL}):null,this.baseURL=e.baseURL,this.credentials=e.credentials,this.signingSecret=e.signingSecret,this.webhookVerifier=e.webhookVerifier,this.logger=new d}async getApiClient(){if(this.apiClient)return this.apiClient;let e=await this.credentials?.();if(!e?.apiKey)throw Error(`Linq credentials did not provide an API key.`);return new Q({apiKey:e.apiKey,baseURL:this.baseURL})}async getSigningSecret(){if(this.signingSecret)return this.signingSecret;let e=await this.credentials?.();if(!e?.signingSecret)throw Error(`Linq credentials did not provide a webhook signing secret.`);return e.signingSecret}async initialize(e){this.chat=e,this.logger=e.getLogger(`linq`)}encodeThreadId(e){return e.pendingHandle?`linq:pending:${e.pendingHandle}`:(e.isGroup!==void 0&&this.chatKinds.set(e.chatId,e.isGroup),`linq:${e.chatId}`)}decodeThreadId(e){let[t,n,r]=e.split(`:`);if(t!==`linq`||!n)throw Error(`Invalid Linq thread ID: ${e}`);if(n===`pending`){let t=e.slice(13);if(!t)throw Error(`Invalid Linq thread ID: ${e}`);return{chatId:``,pendingHandle:t,isGroup:!1}}if(r===`group`||r===`dm`){let e=r===`group`;return this.chatKinds.set(n,e),{chatId:n,isGroup:e}}if(r!==void 0)throw Error(`Invalid Linq thread ID: ${e}`);return{chatId:n,isGroup:this.chatKinds.get(n)}}async fetchMessages(e,t){let n=this.requireChatId(e),r=await(await this.getApiClient()).chats.messages.list(n,{cursor:t?.cursor,limit:t?.limit});return{messages:r.messages.map(e=>this.parseMessage(e)).sort(function(e,t){return e.metadata.dateSent.getTime()-t.metadata.dateSent.getTime()}),nextCursor:r.next_cursor||void 0}}async fetchMessage(e,t){try{let e=await(await this.getApiClient()).messages.retrieve(t);return this.parseMessage(e)}catch(e){if($(e)&&e.status===404)return null;throw e}}async postMessage(e,t){let{chatId:n,pendingHandle:r}=this.decodeThreadId(e),i=this.converter.renderPostable(t).trim(),a=await on(await this.getApiClient(),t),o=[];i&&o.push({type:`text`,value:i});let s=Nt(t);if(s){Vt(s)&&this.logger.warn(`Card buttons/selects were flattened to text — onAction() handlers never fire over iMessage/SMS. Use LinkButton/CardLink URLs or handle plain-text replies instead.`);for(let e of Ft(s))o.push({type:`media`,url:e})}if(o.push(...a),o.length===0)throw Error(`Linq message must include text or media.`);let c=await this.getApiClient();if(r){let e=await c.messages.create({to:[r],message:{parts:o}});return{id:e.message.id,threadId:this.encodeThreadId({chatId:e.chat_id}),raw:e}}let l=await c.chats.messages.send(n,{message:{parts:o}});return{id:l.message.id,threadId:this.encodeThreadId({chatId:l.chat_id||n}),raw:l}}requireChatId(e){let{chatId:t,pendingHandle:n}=this.decodeThreadId(e);if(n)throw Error(`Linq thread ${e} has no chat yet — send a message first to create it.`);return t}async openDM(e){let t=e.trim();if(!t)throw Error(`Linq openDM requires a handle.`);return this.encodeThreadId({chatId:``,pendingHandle:t})}async editMessage(e,t,n){let r=this.requireChatId(e),i=this.converter.renderPostable(n).trim();if(!i)throw Error(`Linq message text cannot be empty.`);let a=await(await this.getApiClient()).messages.update(t,{text:i,part_index:0});return{id:a.id,threadId:this.encodeThreadId({chatId:a.chat_id||r}),raw:a}}deleteMessage(e,t){throw new n(`deleteMessage is not implemented`)}async addReaction(e,t,n){await(await this.getApiClient()).messages.addReaction(t,{operation:`add`,...yn(n)})}async removeReaction(e,t,n){await(await this.getApiClient()).messages.addReaction(t,{operation:`remove`,...yn(n)})}async fetchThread(e){let t=this.requireChatId(e),n=await(await this.getApiClient()).chats.retrieve(t);return{id:this.encodeThreadId({chatId:n.id,isGroup:n.is_group}),channelId:this.encodeThreadId({chatId:n.id,isGroup:n.is_group}),channelName:n.display_name??void 0,isDM:!n.is_group,metadata:{chat:n}}}async startTyping(e,t){let n=this.requireChatId(e),{isGroup:r}=this.decodeThreadId(e);if(r!==!0)try{await(await this.getApiClient()).chats.typing.start(n)}catch(e){if($(e)&&e.status===403)return;throw e}}async markRead(e,t){let{chatId:n}=this.decodeThreadId(e);await(await this.getApiClient()).chats.markAsRead(n)}async stream(e,t){let n=``;for await(let e of t){if(typeof e==`string`){n+=e;continue}e.type===`markdown_text`&&(n+=e.text)}return this.postMessage(e,n.trim()?{markdown:n}:` `)}async handleWebhook(e,t){let n=this.webhookVerifier?await this.verifyTrustedWebhook(e):await bn(e,await this.getSigningSecret());if(!n.ok)return n.response;let{event:r}=n;if(this.chat&&Gt(r)&&r.data.direction===`inbound`){let e=r.data.chat.id,n=r.data.chat.is_group??void 0;if(n===void 0&&!this.chatKinds.has(e))try{let t=await(await this.getApiClient()).chats.retrieve(e);this.chatKinds.set(e,t.is_group)}catch(t){this.logger.warn(`Failed to resolve Linq chat kind for ${e}`,{error:t})}let i=this.encodeThreadId({chatId:e,isGroup:n});this.chat.processMessage(this,i,async()=>this.parseMessage(r.data),t)}else this.chat&&Kt(r)&&this.processReactionWebhook(this.chat,r,t);return new Response(`OK`,{status:200})}async verifyTrustedWebhook(e){let t=new Uint8Array(await e.arrayBuffer());try{if(await this.webhookVerifier?.(e,t)===!1)return{ok:!1,response:new Response(`Invalid Linq webhook`,{status:401})}}catch{return{ok:!1,response:new Response(`Invalid Linq webhook`,{status:401})}}try{return{ok:!0,event:JSON.parse(new TextDecoder().decode(t))}}catch{return{ok:!1,response:new Response(`Invalid JSON`,{status:400})}}}processReactionWebhook(e,t,n){let{chat_id:r,message_id:i}=t.data;if(!r||!i){this.logger.debug(`Ignoring Linq ${t.event_type} webhook without chat/message ID`);return}let a=vn(t.data);if(!a){this.logger.debug(`Ignoring Linq ${t.event_type} webhook with unsupported reaction type ${t.data.reaction_type}`);return}let o=t.data.from_handle,s=t.data.is_from_me||o?.is_me===!0,c=o?.id||o?.handle||t.data.from||`unknown`,l=o?.handle||t.data.from||c;e.processReaction({adapter:this,added:t.event_type===`reaction.added`,emoji:a.emoji,rawEmoji:a.rawEmoji,messageId:i,threadId:this.encodeThreadId({chatId:r}),raw:t,user:{userId:c,userName:l,fullName:l,isBot:s,isMe:s}},n)}parseMessage(e){return Wt(e,e=>this.encodeThreadId(e))}rehydrateAttachment(e){let t=e.fetchMetadata?.url??e.url;return t?{...e,fetchData:async()=>{let e=await fetch(t);if(!e.ok)throw Error(`Failed to fetch Linq attachment ${t}: ${e.status}`);return Buffer.from(await e.arrayBuffer())}}:e}renderFormatted(e){return c(e).trim()}channelIdFromThreadId(e){return e}isDM(e){return this.decodeThreadId(e).isGroup===!1}};function Sn(e){return new xn(e)}export{Sn as createLinqAdapter};
|
|
@@ -108,13 +108,17 @@ export interface HookOptions {
|
|
|
108
108
|
* the token with the information it has available.
|
|
109
109
|
*
|
|
110
110
|
* Deterministic tokens are intended for use with `createHook()` and
|
|
111
|
-
* server-side `resumeHook()` only. For webhooks (`createWebhook()`),
|
|
112
|
-
*
|
|
113
|
-
*
|
|
111
|
+
* server-side `resumeHook()` only. For webhooks (`createWebhook()`), an
|
|
112
|
+
* explicit token is not accepted — one is always generated for you.
|
|
113
|
+
*
|
|
114
|
+
* A generated token is not trivial to guess but is not a security
|
|
115
|
+
* contract, so authenticate webhook requests themselves rather than
|
|
116
|
+
* relying on URL secrecy:
|
|
117
|
+
* https://workflow-sdk.dev/docs/foundations/hooks#token-design
|
|
114
118
|
*
|
|
115
119
|
* If provided, the token must be a non-empty string; passing an empty
|
|
116
|
-
* string throws. If not provided (or `undefined`), a
|
|
117
|
-
*
|
|
120
|
+
* string throws. If not provided (or `undefined`), a token is generated
|
|
121
|
+
* for you.
|
|
118
122
|
*
|
|
119
123
|
* @example
|
|
120
124
|
*
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{E as e,I as t,
|
|
2
|
-
`)}`)}return await x(t,r.value)}}}async function E(e,t={}){let n=
|
|
1
|
+
import{E as e,I as t,Jn as n,P as r,X as i,Z as a,cr as o,gr as s,hr as c,lr as l,mr as u,or as d,pr as f,rr as p,ur as m}from"../../_chunks/workflow/wait-until-BZHmJCAW.js";import{i as h,u as g}from"../../_chunks/workflow/dist-CqvWKNQv.js";import{a as _,i as v,r as y,t as b}from"../../_chunks/workflow/attribute-changes-DXbpwBdw.js";import"../../_chunks/workflow/dist-Dk0aQqFO.js";import{n as x}from"../../_chunks/workflow/resume-hook-E-Nkx8q_.js";import{t as S}from"../../_chunks/workflow/sleep-CxFsdxB_.js";function C(e){v(`createHook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-hook`,C)}function w(e){v(`createWebhook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook`,w)}function T({schema:e}={}){function t(e){v(`defineHook().create()`,`https://workflow-sdk.dev/docs/api-reference/workflow/define-hook`,t)}return{create:t,async resume(t,n){if(!e?.[`~standard`])return await x(t,n);let r=e[`~standard`].validate(n);if(r instanceof Promise&&(r=await r),r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>String(typeof e==`object`&&e?e.key:e)).join(`.`);return t?` at "${t}": ${e.message}`:` ${e.message}`});throw Error(`Hook payload did not match the defined schema:\n${e.join(`
|
|
2
|
+
`)}`)}return await x(t,r.value)}}}async function E(e,t={}){let n=a.getStore(),r=n?.workflowMetadata?.workflowRunId;if(!r)throw new h(`setAttributes() must be called from a 'use workflow' or 'use step' function. Calling it from plain host code is not supported.`);let i=b(e,t);if(i.length!==0){if(n.runReadyBarrier)try{await n.runReadyBarrier}catch{}await(await d()).events.create(r,{eventType:`attr_set`,specVersion:6,eventData:{changes:i,writer:{type:`step`,stepId:n.stepMetadata.stepId,attempt:n.stepMetadata.attempt},...t.allowReservedAttributes===!0?{allowReservedAttributes:!0}:{}}})}}function D(){let e=a.getStore();return e||y(`getStepMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-step-metadata`,D),e.stepMetadata}function O(){let e=a.getStore();return e||_(`getWorkflowMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-workflow-metadata`,O),e.workflowMetadata}function k(d={}){let h=a.getStore();h||_(`getWritable()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-writable`,k);let{namespace:g}=d,v=h.workflowMetadata.workflowRunId,y=i(v,g);h.writables??=new Map;let b=h.writables,x=b.get(y);if(x)return x.writable;let S=t(r(globalThis,h.ops,v,h.encryptionKey,!0,h.runReadyBarrier),h.encryptionKey),C=new e(v,y,h.runReadyBarrier),w=o();return h.ops.push(w.promise),l(S.readable,C,w).catch(()=>{}),m(S.writable,w),Object.defineProperty(S.writable,f,{value:y,writable:!1}),Object.defineProperty(S.writable,s,{value:v,writable:!1}),h.workflowDeploymentId&&Object.defineProperty(S.writable,u,{value:h.workflowDeploymentId,writable:!1}),n(h.encryptionKey)&&Object.defineProperty(S.writable,c,{value:p(h.encryptionKey.keyPair.publicKey),writable:!1}),b.set(y,{writable:S.writable,state:w}),S.writable}export{h as FatalError,g as RetryableError,C as createHook,w as createWebhook,T as defineHook,D as getStepMetadata,O as getWorkflowMetadata,k as getWritable,E as setAttributes,S as sleep};
|
|
@@ -132,6 +132,13 @@ interface DeliveryBarrierEntry {
|
|
|
132
132
|
* once a consumer takes the payload.
|
|
133
133
|
*/
|
|
134
134
|
armed: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Retire this entry: resolve `delivered` and remove it from the registry,
|
|
137
|
+
* exactly as `markDelivered` would. Called only by the context's safety-net
|
|
138
|
+
* dispenser ({@link ensureBarrierSafetyNet}), and only on the lowest-index
|
|
139
|
+
* entry at delivery idle. Idempotent.
|
|
140
|
+
*/
|
|
141
|
+
retire: () => void;
|
|
135
142
|
}
|
|
136
143
|
/**
|
|
137
144
|
* Awaits, in strict event-log order, every still-registered delivery that is
|
|
@@ -172,18 +179,18 @@ interface DeliveryBarrierEntry {
|
|
|
172
179
|
* in log order; {@link hasParkedCommittedDelivery} deliberately reports such a
|
|
173
180
|
* step as not self-resolving so that idle stays reachable.
|
|
174
181
|
*
|
|
175
|
-
* "The whole chain then delivers in log order" rests on the PAYLOAD's
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* the
|
|
185
|
-
*
|
|
186
|
-
*
|
|
182
|
+
* "The whole chain then delivers in log order" rests on the PAYLOAD's barrier
|
|
183
|
+
* being retired before that of anything parked behind it. That order is
|
|
184
|
+
* structural: safety-net retirements go through one per-context dispenser that
|
|
185
|
+
* only ever retires the lowest-index entry at delivery idle, and every
|
|
186
|
+
* retirement that wakes a chain flips {@link hasParkedCommittedDelivery} back
|
|
187
|
+
* to true, re-blocking the dispenser until the chain has drained — see
|
|
188
|
+
* {@link ensureBarrierSafetyNet}. (This used to rest on the FIFO of one idle
|
|
189
|
+
* poll per barrier, which held for a single parked segment but decayed to
|
|
190
|
+
* timing noise with several — the release order, and therefore the ULIDs
|
|
191
|
+
* drawn by the woken branches, then depended on how much log the replay had
|
|
192
|
+
* loaded. storm-log-replay.test.ts replays a production log corrupted exactly
|
|
193
|
+
* that way.)
|
|
187
194
|
*/
|
|
188
195
|
export declare function awaitEarlierDeliveries(ctx: WorkflowOrchestratorContext, eventIndex: number | undefined, kind: DeliveryKind): Promise<void>;
|
|
189
196
|
/** Handle for a registered branch-deciding delivery barrier. */
|
|
@@ -273,6 +280,18 @@ export declare function hasParkedCommittedDelivery(ctx: WorkflowOrchestratorCont
|
|
|
273
280
|
* what it has and has not done yet says nothing about the run. Two callers
|
|
274
281
|
* read it, for the two such decisions: {@link scheduleWhenIdle} for the
|
|
275
282
|
* suspension, and the events consumer's unconsumed-event check for divergence.
|
|
283
|
+
*
|
|
284
|
+
* A non-empty barrier registry counts as in flight, even when every remaining
|
|
285
|
+
* entry is parked behind an unclaimed buffered payload. Those entries only
|
|
286
|
+
* move when the safety-net dispenser retires them (lowest-first, see
|
|
287
|
+
* {@link ensureBarrierSafetyNet}), and the deliveries they release are real
|
|
288
|
+
* workflow reactions — a suspension raised before they run would be computed
|
|
289
|
+
* from a VM that has not seen them, scheduling none of their follow-up work
|
|
290
|
+
* and leaving the run dormant (the vercel/workflow#3183 shape). The dispenser
|
|
291
|
+
* itself is gated on {@link canRetireAbandonedBarriers}, the weaker predicate
|
|
292
|
+
* without the registry term, precisely so it can do the draining that this
|
|
293
|
+
* predicate waits for; registry size strictly decreases at each retirement,
|
|
294
|
+
* so idle is always reached.
|
|
276
295
|
*/
|
|
277
296
|
export declare function isDeliveryIdle(ctx: WorkflowOrchestratorContext): boolean;
|
|
278
297
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"../../_chunks/workflow/private-
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"../../_chunks/workflow/private-CuQ4HTFC.js";export{o as awaitEarlierDeliveries,n as getStepFunction,i as hasParkedCommittedDelivery,t as isDeliveryIdle,e as registerDeliveryBarrier,r as registerStepFunction,a as scheduleWhenIdle};
|
|
@@ -120,6 +120,33 @@ export declare const MAX_RESILIENT_STEP_INPUT_BYTES: number;
|
|
|
120
120
|
* latency the parallel publish saves.
|
|
121
121
|
*/
|
|
122
122
|
export declare function isResilientStepDispatchEnabled(): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Whether batched event transitions are enabled: the suspension handler folds
|
|
125
|
+
* a clean fan-out's `step_created` + `wait_created` writes into one
|
|
126
|
+
* `world.events.createBatch` call (one durable write, per-event outcomes)
|
|
127
|
+
* instead of one write per event. Only engages when the World implements the
|
|
128
|
+
* optional `events.createBatch` AND the run is on slot identity
|
|
129
|
+
* (specVersion >= 6) AND the suspension carries no attribute/hook writes and
|
|
130
|
+
* no resilient step dispatch — everything else keeps the single-event path
|
|
131
|
+
* byte-for-byte.
|
|
132
|
+
*
|
|
133
|
+
* Reads `process.env.WORKFLOW_BATCH_TRANSITIONS` lazily. Default **ON**;
|
|
134
|
+
* disabled only by an explicit `'0'` / `'false'` (case-insensitive) — the
|
|
135
|
+
* operator escape hatch that restores the exact prior one-write-per-event
|
|
136
|
+
* path, mirroring `WORKFLOW_TURBO`'s kill-switch shape.
|
|
137
|
+
*/
|
|
138
|
+
export declare function isBatchTransitionsEnabled(): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Ceiling on events per `createBatch` call from the batched fan-out fold.
|
|
141
|
+
* Mirrors the server's transaction budgets with a comfortable margin: each
|
|
142
|
+
* fan-out event costs 2 transaction items server-side (entity + event row)
|
|
143
|
+
* against the 100-item DynamoDB cap, and inline payloads count against a
|
|
144
|
+
* 768 KB byte budget — 32 events stays well under both, and a fan-out larger
|
|
145
|
+
* than this simply commits in successive batches (split batches lose
|
|
146
|
+
* cross-batch atomicity, which is exactly today's per-event-write crash
|
|
147
|
+
* surface — every batch still converges on retry via per-event 409s).
|
|
148
|
+
*/
|
|
149
|
+
export declare const MAX_BATCH_FANOUT_EVENTS = 32;
|
|
123
150
|
/**
|
|
124
151
|
* Optional client-side override for the server-supplied per-run event ceiling.
|
|
125
152
|
* When set to a positive integer, the runtime clamps the server's limit *down*
|
|
@@ -101,6 +101,8 @@ export declare function runWorkflowWithQuickJS(params: {
|
|
|
101
101
|
* the in-flight body instead of requeueing the step.
|
|
102
102
|
*/
|
|
103
103
|
ownerMessageId?: string;
|
|
104
|
+
/** Request ID of the queue invocation, when the queue provides one. */
|
|
105
|
+
requestId?: string;
|
|
104
106
|
/**
|
|
105
107
|
* Queue namespace resolved at route registration (runtime.ts). Must be
|
|
106
108
|
* threaded into every message publish: the builders bake the namespace
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Event, SerializedData, World } from '#compiled/@workflow/world/index.js';
|
|
1
|
+
import type { Event, SerializedData, StartedStep, World } from '#compiled/@workflow/world/index.js';
|
|
2
2
|
import type { PayloadKey } from '../serialization/encryption.js';
|
|
3
3
|
import { type SlotSnapshotParams } from './helpers.js';
|
|
4
4
|
import { ReplayRecoveryReporter } from './replay-recovery-reporter.js';
|
|
@@ -12,6 +12,8 @@ export interface StepExecutorParams {
|
|
|
12
12
|
workflowDeploymentId?: string;
|
|
13
13
|
workflowName: string;
|
|
14
14
|
workflowStartedAt: number;
|
|
15
|
+
/** Request ID of the invocation executing this step, when provided by its queue. */
|
|
16
|
+
requestId?: string;
|
|
15
17
|
/** Root run id of this run's lineage, carried into the step context. */
|
|
16
18
|
rootRunId?: string;
|
|
17
19
|
stepId: string;
|
|
@@ -35,6 +37,17 @@ export interface StepExecutorParams {
|
|
|
35
37
|
* carries no payload (the legacy contract).
|
|
36
38
|
*/
|
|
37
39
|
lazyStepInput?: SerializedData;
|
|
40
|
+
/**
|
|
41
|
+
* Pre-claimed inline start: the suspension handler committed (or lost) this
|
|
42
|
+
* step's `step_created` + `step_started` pair inside its batched fan-out
|
|
43
|
+
* write, so the start this executor would otherwise send has already been
|
|
44
|
+
* decided. `owned: false` returns `{ type: 'skipped' }` before any write —
|
|
45
|
+
* the same outcome as losing the lazy claim's atomic create. `owned: true`
|
|
46
|
+
* skips both start paths (no start write at all) and runs the body against
|
|
47
|
+
* the claimed step. Mutually exclusive with `lazyStepInput`: the input
|
|
48
|
+
* already rode the pair's `step_created`, and the claimed step carries it.
|
|
49
|
+
*/
|
|
50
|
+
preclaimedStart?: PreclaimedInlineStart;
|
|
38
51
|
/**
|
|
39
52
|
* Inline step ownership: the queue message ID of the invocation this
|
|
40
53
|
* executeStep call runs in (from the queue handler's meta). When set, the
|
|
@@ -140,6 +153,41 @@ export interface StepExecutorParams {
|
|
|
140
153
|
/** One-shot recovery telemetry activated by the orchestrator replay. */
|
|
141
154
|
replayRecoveryReporter?: ReplayRecoveryReporter;
|
|
142
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* The settled outcome of a `step_created` + `step_started` pair the
|
|
158
|
+
* suspension handler folded into its batched fan-out write (see
|
|
159
|
+
* `SuspensionHandlerResult.inlineClaims`). Handed to executeStep as
|
|
160
|
+
* {@link StepExecutorParams.preclaimedStart} so the executor runs (or skips)
|
|
161
|
+
* the body off the batch's verdict instead of sending a start of its own.
|
|
162
|
+
*/
|
|
163
|
+
export type PreclaimedInlineStart = {
|
|
164
|
+
/** The pair committed: this execution owns the step and runs the body. */
|
|
165
|
+
owned: true;
|
|
166
|
+
/**
|
|
167
|
+
* The started step entity from the batch result, with the locally
|
|
168
|
+
* dehydrated input attached by the suspension handler (batch responses
|
|
169
|
+
* return refs lazily; the body's hydration wants the same bytes the
|
|
170
|
+
* pair's `step_created` carried).
|
|
171
|
+
*/
|
|
172
|
+
step: StartedStep;
|
|
173
|
+
/**
|
|
174
|
+
* `Date.now()` taken right before the batch POST that carried the pair
|
|
175
|
+
* — the claim's "start POST sent" instant, anchoring RSFS exactly like
|
|
176
|
+
* the lazy claim's own POST would.
|
|
177
|
+
*/
|
|
178
|
+
batchPostSentAtMs?: number;
|
|
179
|
+
/**
|
|
180
|
+
* `Date.now()` taken right after that batch POST returned — the
|
|
181
|
+
* claim's completion instant (T6 of the hook-resume TTR window).
|
|
182
|
+
*/
|
|
183
|
+
claimCompletedAtMs?: number;
|
|
184
|
+
} | {
|
|
185
|
+
/**
|
|
186
|
+
* The pair lost its atomic create-claim (per-event 409): a concurrent
|
|
187
|
+
* writer owns the step, so the body must not run here.
|
|
188
|
+
*/
|
|
189
|
+
owned: false;
|
|
190
|
+
};
|
|
143
191
|
/**
|
|
144
192
|
* Inline-delta returned by a step-terminal write when the caller passed
|
|
145
193
|
* {@link StepExecutorParams.inlineDeltaSinceCursor} and the World supports
|
|
@@ -193,5 +193,11 @@ export declare function computeStepLatencyEventData(params: {
|
|
|
193
193
|
lazyStepStart: boolean;
|
|
194
194
|
/** Whether the body ran optimistically, without awaiting step_started. */
|
|
195
195
|
optimisticStart: boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Whether the step's `step_created` + `step_started` pair was pre-claimed
|
|
198
|
+
* inside the suspension handler's batched fan-out write (no start POST of
|
|
199
|
+
* its own at all).
|
|
200
|
+
*/
|
|
201
|
+
preclaimedStart?: boolean;
|
|
196
202
|
}): StepLatencyEventData | undefined;
|
|
197
203
|
//# sourceMappingURL=step-latency.d.ts.map
|
|
@@ -3,6 +3,7 @@ import { type SerializedData, type TraceCarrier, type ValidQueueName, type Workf
|
|
|
3
3
|
import type { StepInvocationQueueItem, WorkflowSuspension } from '../global.js';
|
|
4
4
|
import { type LoadedEventLog } from './helpers.js';
|
|
5
5
|
import { ReplayRecoveryReporter } from './replay-recovery-reporter.js';
|
|
6
|
+
import type { PreclaimedInlineStart } from './step-executor.js';
|
|
6
7
|
export interface SuspensionHandlerParams {
|
|
7
8
|
suspension: WorkflowSuspension;
|
|
8
9
|
world: World;
|
|
@@ -52,6 +53,31 @@ export interface SuspensionHandlerParams {
|
|
|
52
53
|
*/
|
|
53
54
|
getTraceCarrier: () => Promise<TraceCarrier>;
|
|
54
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* Inline step ownership: the queue message ID of the invocation this
|
|
58
|
+
* suspension runs in (the queue handler's meta). When present AND the
|
|
59
|
+
* batched fan-out engages, the lazy-inline steps' deferred writes are
|
|
60
|
+
* folded into the batch as `step_created` + `step_started` pairs — the
|
|
61
|
+
* started row stamped with this ID, exactly like the lazy claim it
|
|
62
|
+
* replaces — pre-claiming the steps the caller is about to run inline. See
|
|
63
|
+
* {@link SuspensionHandlerResult.inlineClaims}. Callers that never
|
|
64
|
+
* inline-execute (terminal drain) omit it, keeping their lazy steps on the
|
|
65
|
+
* plain deferred path.
|
|
66
|
+
*/
|
|
67
|
+
ownerMessageId?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Lets the batched fan-out return before every chunk has committed: only
|
|
70
|
+
* the chunk carrying the pre-claimed inline pairs gates the handler's
|
|
71
|
+
* return (its claims are what the caller starts bodies from), while the
|
|
72
|
+
* trailing chunks' commits — and every chunk's in-flush step-message
|
|
73
|
+
* publishes — ride {@link SuspensionHandlerResult.deferredBatchWork}. A
|
|
74
|
+
* caller that opts in MUST await that promise before acking its delivery:
|
|
75
|
+
* the durability contract ("every create durable before ack") moves from
|
|
76
|
+
* the handler's return to that join, and nothing else re-drives a lost
|
|
77
|
+
* trailing chunk. Callers that don't opt in (terminal drain, default)
|
|
78
|
+
* keep the everything-durable-at-return behavior.
|
|
79
|
+
*/
|
|
80
|
+
allowDeferredBatchWork?: boolean;
|
|
55
81
|
}
|
|
56
82
|
/**
|
|
57
83
|
* Result of handling a suspension. Returns pending step items so the caller
|
|
@@ -104,6 +130,60 @@ export interface SuspensionHandlerResult {
|
|
|
104
130
|
stepName: string;
|
|
105
131
|
dehydratedInput: SerializedData;
|
|
106
132
|
}>;
|
|
133
|
+
/**
|
|
134
|
+
* Pre-claimed inline starts, by correlation id: the per-step verdicts of
|
|
135
|
+
* the `step_created` + `step_started` pairs the batched fan-out committed
|
|
136
|
+
* for the lazy-inline steps. A step with an entry here is passed to
|
|
137
|
+
* `executeStep` as `preclaimedStart` INSTEAD of `lazyStepInput` — its
|
|
138
|
+
* input already rode the pair, and the claim is settled: `owned: true`
|
|
139
|
+
* carries the started attempt-1 entity (input re-attached) so the body
|
|
140
|
+
* runs straight off the batch commit with no start write of its own;
|
|
141
|
+
* `owned: false` lost the pair's atomic create-claim to a concurrent
|
|
142
|
+
* writer, and executeStep returns `skipped` without running the body —
|
|
143
|
+
* the same outcome as losing the lazy claim. Empty whenever the fold did
|
|
144
|
+
* not engage (batching off, no `ownerMessageId`, or the lone-inline case,
|
|
145
|
+
* which keeps the optimistic lazy path and its claim/body overlap).
|
|
146
|
+
*
|
|
147
|
+
* Crash window: the pair commits before the caller runs the body, so a
|
|
148
|
+
* crash between them leaves a started step stamped with this message's
|
|
149
|
+
* ID. Redelivery of the same message re-executes it via the owned-recovery
|
|
150
|
+
* path — the exact machinery the lazy claim's crash window already uses.
|
|
151
|
+
*/
|
|
152
|
+
inlineClaims: Map<string, PreclaimedInlineStart>;
|
|
153
|
+
/**
|
|
154
|
+
* The highest slot the batched fan-out committed, when it ran. The batch's
|
|
155
|
+
* own events are not in the caller's loaded log (the next reload picks
|
|
156
|
+
* them up), so the caller folds this ceiling into the slot snapshot it
|
|
157
|
+
* hands the inline executions — otherwise every inline terminal write
|
|
158
|
+
* would name a pre-batch position and be answered with a skipped-slot
|
|
159
|
+
* report echoing the events this suspension just wrote. Under
|
|
160
|
+
* {@link SuspensionHandlerParams.allowDeferredBatchWork} this covers the
|
|
161
|
+
* chunks that had committed by the handler's return (always the pair
|
|
162
|
+
* chunk); a trailing chunk that commits later is echoed back on the
|
|
163
|
+
* terminal writes like any foreign event — reports the executor reads for
|
|
164
|
+
* position and discards.
|
|
165
|
+
*
|
|
166
|
+
* So the echo is only fully suppressed for a SINGLE-chunk fold. On a
|
|
167
|
+
* multi-chunk fan-out the bodies start off the pair chunk while trailing
|
|
168
|
+
* chunks are still in flight, and an inline terminal write issued in that
|
|
169
|
+
* window still names a position below them and still draws a report for
|
|
170
|
+
* their events. Bounded (trailing chunks only, large fan-outs only) and
|
|
171
|
+
* self-correcting on the next reload — recorded so a report seen there
|
|
172
|
+
* reads as expected rather than as a bug.
|
|
173
|
+
*/
|
|
174
|
+
batchCommittedSlotCeiling?: number;
|
|
175
|
+
/**
|
|
176
|
+
* The batched fan-out's deferred work, present only when the caller opted
|
|
177
|
+
* in via {@link SuspensionHandlerParams.allowDeferredBatchWork} and
|
|
178
|
+
* trailing work exists: the commits of every chunk except the pair chunk,
|
|
179
|
+
* plus every chunk's step-message publishes (each chained on ITS OWN
|
|
180
|
+
* chunk's commit, so publish-after-create holds per step). The caller
|
|
181
|
+
* MUST await it before acking — a rejection here is a failed suspension
|
|
182
|
+
* write and fails the delivery exactly as it would have at the handler's
|
|
183
|
+
* return. Steps whose messages this work publishes are already in
|
|
184
|
+
* {@link queuedStepCorrelationIds} at return time.
|
|
185
|
+
*/
|
|
186
|
+
deferredBatchWork?: Promise<void>;
|
|
107
187
|
/**
|
|
108
188
|
* The soonest pending wait, if any: seconds until it elapses and the
|
|
109
189
|
* correlationId of the wait that produced that timeout. The
|
|
@@ -153,5 +233,5 @@ export interface SuspensionHandlerResult {
|
|
|
153
233
|
* 1. Hooks are processed first to prevent race conditions with webhook receivers
|
|
154
234
|
* 2. Step events and wait events are created in parallel
|
|
155
235
|
*/
|
|
156
|
-
export declare function handleSuspension({ suspension, world, run, span, requestId, eventLog, runReadyBarrier, replayRecoveryReporter, stepDispatch, }: SuspensionHandlerParams): Promise<SuspensionHandlerResult>;
|
|
236
|
+
export declare function handleSuspension({ suspension, world, run, span, requestId, eventLog, runReadyBarrier, replayRecoveryReporter, stepDispatch, ownerMessageId, allowDeferredBatchWork, }: SuspensionHandlerParams): Promise<SuspensionHandlerResult>;
|
|
157
237
|
//# sourceMappingURL=suspension-handler.d.ts.map
|