@lunora/platform-node 1.0.0-alpha.125 → 1.0.0-alpha.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createNodeGlobalStore as r,createNodeSqlExec as t}from"./packem_shared/createNodeGlobalStore-DiGxjmD7.mjs";import{createNodeShardKvStore as d}from"./packem_shared/createNodeShardKvStore-DVi1OsvH.mjs";import{createNodePlatform as f}from"./packem_shared/createNodePlatform-
|
|
1
|
+
import{createNodeGlobalStore as r,createNodeSqlExec as t}from"./packem_shared/createNodeGlobalStore-DiGxjmD7.mjs";import{createNodeShardKvStore as d}from"./packem_shared/createNodeShardKvStore-DVi1OsvH.mjs";import{createNodePlatform as f}from"./packem_shared/createNodePlatform-D29HvrOz.mjs";import{createNodeQueueHost as x}from"./packem_shared/createNodeQueueHost-CttDb5sY.mjs";import{createNodeR2Bucket as p}from"./packem_shared/createNodeR2Bucket-ChHs23n-.mjs";import{createNodeSchedulerHost as l}from"./packem_shared/createNodeSchedulerHost-BEAX6I4m.mjs";import{createNodeShardHost as h}from"./packem_shared/createNodeShardHost-Da19DFX0.mjs";import{createNodeShardRegistry as k}from"./packem_shared/createNodeShardRegistry-D-KxwdUc.mjs";import{createNodeShardState as w}from"./packem_shared/createNodeShardState-D6XMWbFs.mjs";import{createNodeSocketHost as W}from"./packem_shared/createNodeSocketHost-DQs85G7W.mjs";import{createNodeWorkflowHost as g}from"./packem_shared/createNodeWorkflowHost-B76TKiw_.mjs";import{createNodeWorkflowStore as q}from"./packem_shared/createNodeWorkflowStore-CL7RYP6H.mjs";export{r as createNodeGlobalStore,f as createNodePlatform,x as createNodeQueueHost,p as createNodeR2Bucket,l as createNodeSchedulerHost,h as createNodeShardHost,d as createNodeShardKvStore,k as createNodeShardRegistry,w as createNodeShardState,W as createNodeSocketHost,t as createNodeSqlExec,g as createNodeWorkflowHost,q as createNodeWorkflowStore};
|
package/dist/packem_shared/{createNodePlatform-GfadSTHZ.mjs → createNodePlatform-D29HvrOz.mjs}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LunoraError as S}from"@lunora/errors";import{NODE_CAPABILITIES as b}from"@lunora/platform";import{createNodeGlobalStore as N}from"./createNodeGlobalStore-DiGxjmD7.mjs";import{createNodeShardKvStore as k}from"./createNodeShardKvStore-DVi1OsvH.mjs";import{createNodeQueueHost as g}from"./createNodeQueueHost-CttDb5sY.mjs";import{createNodeR2Bucket as y}from"./createNodeR2Bucket-ChHs23n-.mjs";import{createNodeSchedulerHost as R}from"./createNodeSchedulerHost-BEAX6I4m.mjs";import{createNodeShardHost as q}from"./createNodeShardHost-Da19DFX0.mjs";import{createNodeShardRegistry as B}from"./createNodeShardRegistry-D-KxwdUc.mjs";import{createNodeSocketHost as H}from"./createNodeSocketHost-DQs85G7W.mjs";import{createNodeWorkflowHost as I}from"./createNodeWorkflowHost-
|
|
1
|
+
import{LunoraError as S}from"@lunora/errors";import{NODE_CAPABILITIES as b}from"@lunora/platform";import{createNodeGlobalStore as N}from"./createNodeGlobalStore-DiGxjmD7.mjs";import{createNodeShardKvStore as k}from"./createNodeShardKvStore-DVi1OsvH.mjs";import{createNodeQueueHost as g}from"./createNodeQueueHost-CttDb5sY.mjs";import{createNodeR2Bucket as y}from"./createNodeR2Bucket-ChHs23n-.mjs";import{createNodeSchedulerHost as R}from"./createNodeSchedulerHost-BEAX6I4m.mjs";import{createNodeShardHost as q}from"./createNodeShardHost-Da19DFX0.mjs";import{createNodeShardRegistry as B}from"./createNodeShardRegistry-D-KxwdUc.mjs";import{createNodeSocketHost as H}from"./createNodeSocketHost-DQs85G7W.mjs";import{createNodeWorkflowHost as I}from"./createNodeWorkflowHost-B76TKiw_.mjs";import{createNodeWorkflowStore as P}from"./createNodeWorkflowStore-CL7RYP6H.mjs";const G=(o={})=>{const e=[],{database:r,dispose:d,drain:u,host:i}=q(o);e.push(d);try{const s=k(r),t=B(o);e.push(()=>{t.close()});const{directory:l}=t,{socket:h}=H(r),{dispose:m,scheduler:f}=R(r,o);e.push(m);const n=o.queues===void 0?void 0:g(r,{onBatch:o.onQueueBatch??(()=>{throw new S("VALIDATION_ERROR","@lunora/platform-node: createNodePlatform was given `queues` without `onQueueBatch`, so a delivered batch has nowhere to go — pass dispatchQueueBatch from @lunora/queue")}),queues:o.queues}),p=o.objectStorageDirectory===void 0?void 0:y({directory:o.objectStorageDirectory}),a=o.globalTablesPath===void 0?void 0:N({path:o.globalTablesPath});a!==void 0&&e.push(()=>{a.dispose()});const w=o.workflows===void 0?void 0:I({store:P(r),workflows:o.workflows}),c=()=>{for(const v of e.toReversed())v()};return{capabilities:b,close:c,directory:l,drain:u,globalTables:a,kv:s,objectStorage:p,queues:n,scheduler:f,shard:i,sockets:h,workflows:w,[Symbol.dispose]:c}}catch(s){for(const t of e.toReversed())try{t()}catch{}throw s}};export{G as createNodePlatform};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LunoraError as l}from"@lunora/errors";import{isWorkflowDefinition as O,workflowDefaultName as x,createWorkflowRunContext as F,workflowClassName as V}from"@lunora/workflow";import{defineWorkflow as B,createRuntime as P}from"@visulima/workflow";const k="@lunora/platform-node:terminated",$=100,b=100,U=n=>{const r="instances"in n?n.instances.length:n.count;if(!Number.isInteger(r)||r<1||r>b)throw new l("VALIDATION_ERROR",`@lunora/platform-node: createBatch takes 1 to ${String(b)} instances, got ${String(r)}`);return"instances"in n?n.instances:Array.from({length:n.count},()=>({params:n.params}))},W={d:864e5,day:864e5,days:864e5,h:36e5,hour:36e5,hours:36e5,m:6e4,millisecond:1,milliseconds:1,minute:6e4,minutes:6e4,ms:1,s:1e3,second:1e3,seconds:1e3,w:6048e5,week:6048e5,weeks:6048e5,month:2592e6,months:2592e6},q=/^(\d+(?:\.\d+)?)\s*([a-z]+)$/i,D=n=>{if(typeof n=="number"){if(!Number.isFinite(n))throw new l("VALIDATION_ERROR",`@lunora/platform-node: workflow duration must be finite, got ${String(n)}`);return Math.max(0,n)}const r=q.exec(n.trim());if(r===null)throw new l("VALIDATION_ERROR",`@lunora/platform-node: unsupported workflow duration "${n}"`);const o=Number(r[1]),a=(r[2]??"").toLowerCase(),i=W[a];if(i===void 0)throw new l("VALIDATION_ERROR",`@lunora/platform-node: unsupported workflow duration "${n}"`);const d=o*i;if(!Number.isFinite(d))throw new l("VALIDATION_ERROR",`@lunora/platform-node: workflow duration "${n}" overflows`);return Math.max(0,d)},A="@lunora/platform-node:alias",N=n=>`@lunora/platform-node:alias-of:${n}`,S=(n,r,o)=>({attempt:r,config:o,step:{count:1,name:n}}),C={retries:{limit:1}},j=2147483647,H=async n=>new Promise(r=>{setTimeout(r,Math.min(n,j))}),Q=(n,r,o)=>{switch(r){case"exponential":return n*2**(o-1);case"linear":return n*o;default:return n}},X=async(n,r,o,a,i)=>{const d=n.retries?.delay;return typeof d=="function"?D(await d({ctx:a,error:i instanceof Error?i:new Error(String(i))})):Q(r,n.retries?.backoff,o)},z=async(n,r)=>{const o=r instanceof Error?r:new Error(String(r));for(const a of n.splice(0).toSorted((i,d)=>d.order-i.order))try{await a.handler({ctx:a.context,error:o,output:a.output,stepName:a.name})}catch{}},G=n=>{switch(n){case"completed":return"complete";case"failed":return"errored";default:return"waiting"}},K=n=>{const r=[];let o=0;return{do:async(a,i,d,E)=>{const m=o;o+=1;const I=typeof i!="function",g=I?d:i,v=I?E:d;if(typeof g!="function")throw new l("VALIDATION_ERROR",`@lunora/platform-node: step.do("${a}") requires a callback`);const h=I?i:C,R=h.retries?.limit??1;if(!Number.isFinite(R))throw new l("VALIDATION_ERROR",`@lunora/platform-node: step.do("${a}") retries.limit must be a finite number, got ${String(R)}`);const e=Math.max(1,Math.trunc(R)),t=h.retries?.delay,s=t===void 0||typeof t=="function"?0:D(t);let c=S(a,1,h);try{const u=await n.step(a,async()=>{for(let f=1;;f+=1){c=S(a,f,h);try{return await g(c)}catch(w){if(f>=e)throw w;const y=await X(h,s,f,c,w);y>0&&await H(y)}}});return v?.rollback!==void 0&&r.push({context:c,handler:v.rollback,name:a,order:m,output:u}),u}catch(u){throw v?.rollback!==void 0&&r.push({context:c,handler:v.rollback,name:a,order:m,output:void 0}),await z(r,u),u}},sleep:async(a,i)=>{const d=D(i);d!==0&&await n.sleep(a,d)},sleepUntil:async(a,i)=>{const d=typeof i=="number"?i:i.getTime();if(!Number.isFinite(d))throw new l("VALIDATION_ERROR",`@lunora/platform-node: step.sleepUntil("${a}") needs a valid timestamp`);const E=Math.max(0,d-Date.now());E!==0&&await n.sleep(a,E)},waitForEvent:(async(a,i)=>({payload:await n.waitForEvent(a,i.type,{timeout:i.timeout===void 0?void 0:D(i.timeout)}),type:i.type}))}},ee=n=>{const r=Object.entries(n.workflows).map(([e,t])=>{if(!O(t))throw new l("VALIDATION_ERROR",`@lunora/platform-node: "${e}" is not a defineWorkflow result`);return{definition:t,exportName:e,id:t.name??x(e)}}),{store:o}=n,a={...n.env},i=r.map(({definition:e,exportName:t,id:s})=>B({id:s,tags:[t],run:async c=>{const u=K(c),f=F({env:a,event:{instanceId:c.runId,payload:c.payload,timestamp:new Date,workflowName:s},exportName:t,step:u});return await e.handler(f)}})),d=new Set,E={acquire:o.acquire===void 0?void 0:async(e,t,s)=>o.acquire?.(e,t,s)??!1,delete:async e=>o.delete(e),due:async(e,t)=>o.due(e,t),load:async e=>{const t=await o.load(e);return t===void 0||t.definitionId===k||t.definitionId===A?void 0:t},release:o.release===void 0?void 0:async(e,t)=>o.release?.(e,t),save:async e=>{d.has(e.runId)||await o.save(e)}},m=P({leaseTtlMs:n.leaseTtlMs,store:E,workflows:i}),I=async e=>{const t=await o.load(e);if(t===void 0||t.definitionId===A)return!1;d.add(e),await o.delete(e);const s=await o.load(N(e));return s!==void 0&&(await o.delete(s.snapshot),await o.delete(N(e))),!0},g=e=>({delete:async()=>{await I(e)},id:e,pause:()=>Promise.reject(new l("NOT_IMPLEMENTED",`@lunora/platform-node: workflow instance "${e}" cannot be paused — the visulima engine has no pause equivalent`)),restart:()=>Promise.reject(new l("NOT_IMPLEMENTED",`@lunora/platform-node: workflow instance "${e}" cannot be restarted — the visulima engine has no restart equivalent`)),resume:async()=>{if((await o.load(e))?.definitionId===k)throw new l("BAD_REQUEST",`@lunora/platform-node: workflow instance "${e}" was terminated and cannot be resumed`);await m.resume(e)},sendEvent:async t=>{const s=await m.getRun(e);if(s?.status!=="waiting"||s.pending?.kind!=="event"||s.pending.eventName!==t.type)throw new l("BAD_REQUEST",`@lunora/platform-node: workflow instance "${e}" is not waiting for event "${t.type}"`);await m.signal(e,t.type,t.payload)},subscribe:()=>Promise.reject(new l("NOT_IMPLEMENTED",`@lunora/platform-node: workflow instance "${e}" cannot be subscribed to — the visulima engine keeps no per-instance event log to replay`)),status:async()=>{const t=await o.load(e);if(t===void 0)return{status:"unknown"};if(t.definitionId===k)return{status:"terminated"};const s=await m.getRun(e);return s===void 0?{status:"unknown"}:{error:s.error===void 0?void 0:{message:s.error.message,name:s.error.name},output:s.output,status:G(s.status)}},terminate:async()=>{await o.load(e)!==void 0&&(d.add(e),await o.delete(e),await o.save({definitionId:k,runId:e,snapshot:void 0,status:"failed",updatedAt:Date.now()}))}}),v=async e=>{const t=await o.load(e);return t?.definitionId===A?t.snapshot:e},h=async(e,t)=>{if(t?.id===void 0){const u=await m.trigger(e,t?.params);return g(u.runId)}const s=await o.load(t.id);if(s?.definitionId===A)return g(s.snapshot);if(s!==void 0)throw new l("BAD_REQUEST",`@lunora/platform-node: workflow create({ id: "${t.id}" }) names an existing run — pass the id a previous create returned, or a fresh one`);const c=await m.trigger(e,t.params);try{await o.save({definitionId:A,runId:t.id,snapshot:c.runId,status:"failed",updatedAt:Date.now()}),await o.save({definitionId:A,runId:N(c.runId),snapshot:t.id,status:"failed",updatedAt:Date.now()})}catch(u){throw await I(c.runId),u}return g(c.runId)},R={};for(const{exportName:e,id:t}of r){const s={create:async c=>h(t,c),createBatch:async c=>{const u=U(c),f=[],w=[],y=new Set;for(const[_,M]of u.entries()){const p=M.id,L=p!==void 0&&(y.has(p)||await o.load(p)!==void 0);if(p!==void 0&&L){w.push({code:409,id:p,index:_,message:`workflow instance "${p}" already exists in this batch or store`});continue}p!==void 0&&y.add(p);try{f.push(await h(t,M))}catch(T){w.push({code:T instanceof l?400:500,id:p,index:_,message:T instanceof Error?T.message:String(T)})}}return{created:f,errors:w}},deleteBatch:async c=>{if(c.length>$)throw new l("VALIDATION_ERROR",`@lunora/platform-node: deleteBatch takes at most ${String($)} instance ids, got ${String(c.length)}`);const u={deleted:[],errors:[]},f=new Map;for(const w of c){const y=f.get(w)??await I(await v(w));f.set(w,y),y?u.deleted.push({id:w}):u.errors.push({code:404,id:w,message:`workflow instance "${w}" not found`})}return u},get:async c=>g(await v(c))};R[e]=s,a[V(e)]=s}return{bindings:R,env:a,runtime:m}};export{ee as createNodeWorkflowHost};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lunora/platform-node",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.127",
|
|
4
4
|
"description": "Node implementation of the Lunora platform contracts: ShardHost, SocketHost, ShardDirectory, ShardKvStore, SchedulerHost over better-sqlite3 and an in-process socket registry (dev/test target)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"better-sqlite3",
|
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@lunora/d1": "1.0.0-alpha.
|
|
49
|
+
"@lunora/d1": "1.0.0-alpha.169",
|
|
50
50
|
"@lunora/errors": ">=1.0.0-alpha.51 <2.0.0-0",
|
|
51
|
-
"@lunora/platform": "1.0.0-alpha.
|
|
52
|
-
"@lunora/queue": "1.0.0-alpha.
|
|
53
|
-
"@lunora/sql-store": "1.0.0-alpha.
|
|
54
|
-
"@lunora/workflow": "1.0.0-alpha.
|
|
51
|
+
"@lunora/platform": "1.0.0-alpha.58",
|
|
52
|
+
"@lunora/queue": "1.0.0-alpha.97",
|
|
53
|
+
"@lunora/sql-store": "1.0.0-alpha.170",
|
|
54
|
+
"@lunora/workflow": "1.0.0-alpha.73",
|
|
55
55
|
"@visulima/workflow": "3.0.0",
|
|
56
56
|
"better-sqlite3": "^13.0.3",
|
|
57
57
|
"cron-parser": "5.10.1"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{LunoraError as d}from"@lunora/errors";import{isWorkflowDefinition as _,workflowDefaultName as b,createWorkflowRunContext as M,workflowClassName as $}from"@lunora/workflow";import{defineWorkflow as O,createRuntime as L}from"@visulima/workflow";const A="@lunora/platform-node:terminated",D=100,S={d:864e5,day:864e5,days:864e5,h:36e5,hour:36e5,hours:36e5,m:6e4,millisecond:1,milliseconds:1,minute:6e4,minutes:6e4,ms:1,s:1e3,second:1e3,seconds:1e3,w:6048e5,week:6048e5,weeks:6048e5,month:2592e6,months:2592e6},x=/^(\d+(?:\.\d+)?)\s*([a-z]+)$/i,T=o=>{if(typeof o=="number"){if(!Number.isFinite(o))throw new d("VALIDATION_ERROR",`@lunora/platform-node: workflow duration must be finite, got ${String(o)}`);return Math.max(0,o)}const c=x.exec(o.trim());if(c===null)throw new d("VALIDATION_ERROR",`@lunora/platform-node: unsupported workflow duration "${o}"`);const n=Number(c[1]),r=(c[2]??"").toLowerCase(),s=S[r];if(s===void 0)throw new d("VALIDATION_ERROR",`@lunora/platform-node: unsupported workflow duration "${o}"`);const l=n*s;if(!Number.isFinite(l))throw new d("VALIDATION_ERROR",`@lunora/platform-node: workflow duration "${o}" overflows`);return Math.max(0,l)},g="@lunora/platform-node:alias",k=o=>`@lunora/platform-node:alias-of:${o}`,N=(o,c,n)=>({attempt:c,config:n,step:{count:1,name:o}}),F={retries:{limit:1}},P=2147483647,U=async o=>new Promise(c=>{setTimeout(c,Math.min(o,P))}),V=(o,c,n)=>{switch(c){case"exponential":return o*2**(n-1);case"linear":return o*n;default:return o}},B=async(o,c,n,r,s)=>{const l=o.retries?.delay;return typeof l=="function"?T(await l({ctx:r,error:s instanceof Error?s:new Error(String(s))})):V(c,o.retries?.backoff,n)},W=async(o,c)=>{const n=c instanceof Error?c:new Error(String(c));for(const r of o.splice(0).toSorted((s,l)=>l.order-s.order))try{await r.handler({ctx:r.context,error:n,output:r.output,stepName:r.name})}catch{}},q=o=>{switch(o){case"completed":return"complete";case"failed":return"errored";default:return"waiting"}},j=o=>{const c=[];let n=0;return{do:async(r,s,l,I)=>{const f=n;n+=1;const v=typeof s!="function",h=v?l:s,y=v?I:l;if(typeof h!="function")throw new d("VALIDATION_ERROR",`@lunora/platform-node: step.do("${r}") requires a callback`);const p=v?s:F,E=p.retries?.limit??1;if(!Number.isFinite(E))throw new d("VALIDATION_ERROR",`@lunora/platform-node: step.do("${r}") retries.limit must be a finite number, got ${String(E)}`);const e=Math.max(1,Math.trunc(E)),t=p.retries?.delay,a=t===void 0||typeof t=="function"?0:T(t);let i=N(r,1,p);try{const u=await o.step(r,async()=>{for(let w=1;;w+=1){i=N(r,w,p);try{return await h(i)}catch(m){if(w>=e)throw m;const R=await B(p,a,w,i,m);R>0&&await U(R)}}});return y?.rollback!==void 0&&c.push({context:i,handler:y.rollback,name:r,order:f,output:u}),u}catch(u){throw y?.rollback!==void 0&&c.push({context:i,handler:y.rollback,name:r,order:f,output:void 0}),await W(c,u),u}},sleep:async(r,s)=>{const l=T(s);l!==0&&await o.sleep(r,l)},sleepUntil:async(r,s)=>{const l=typeof s=="number"?s:s.getTime();if(!Number.isFinite(l))throw new d("VALIDATION_ERROR",`@lunora/platform-node: step.sleepUntil("${r}") needs a valid timestamp`);const I=Math.max(0,l-Date.now());I!==0&&await o.sleep(r,I)},waitForEvent:(async(r,s)=>({payload:await o.waitForEvent(r,s.type,{timeout:s.timeout===void 0?void 0:T(s.timeout)}),type:s.type}))}},X=o=>{const c=Object.entries(o.workflows).map(([e,t])=>{if(!_(t))throw new d("VALIDATION_ERROR",`@lunora/platform-node: "${e}" is not a defineWorkflow result`);return{definition:t,exportName:e,id:t.name??b(e)}}),{store:n}=o,r={...o.env},s=c.map(({definition:e,exportName:t,id:a})=>O({id:a,tags:[t],run:async i=>{const u=j(i),w=M({env:r,event:{instanceId:i.runId,payload:i.payload,timestamp:new Date,workflowName:a},exportName:t,step:u});return await e.handler(w)}})),l=new Set,I={acquire:n.acquire===void 0?void 0:async(e,t,a)=>n.acquire?.(e,t,a)??!1,delete:async e=>n.delete(e),due:async(e,t)=>n.due(e,t),load:async e=>{const t=await n.load(e);return t===void 0||t.definitionId===A||t.definitionId===g?void 0:t},release:n.release===void 0?void 0:async(e,t)=>n.release?.(e,t),save:async e=>{l.has(e.runId)||await n.save(e)}},f=L({leaseTtlMs:o.leaseTtlMs,store:I,workflows:s}),v=async e=>{const t=await n.load(e);if(t===void 0||t.definitionId===g)return!1;l.add(e),await n.delete(e);const a=await n.load(k(e));return a!==void 0&&(await n.delete(a.snapshot),await n.delete(k(e))),!0},h=e=>({delete:async()=>{await v(e)},id:e,pause:()=>Promise.reject(new d("NOT_IMPLEMENTED",`@lunora/platform-node: workflow instance "${e}" cannot be paused — the visulima engine has no pause equivalent`)),restart:()=>Promise.reject(new d("NOT_IMPLEMENTED",`@lunora/platform-node: workflow instance "${e}" cannot be restarted — the visulima engine has no restart equivalent`)),resume:async()=>{if((await n.load(e))?.definitionId===A)throw new d("BAD_REQUEST",`@lunora/platform-node: workflow instance "${e}" was terminated and cannot be resumed`);await f.resume(e)},sendEvent:async t=>{const a=await f.getRun(e);if(a?.status!=="waiting"||a.pending?.kind!=="event"||a.pending.eventName!==t.type)throw new d("BAD_REQUEST",`@lunora/platform-node: workflow instance "${e}" is not waiting for event "${t.type}"`);await f.signal(e,t.type,t.payload)},subscribe:()=>Promise.reject(new d("NOT_IMPLEMENTED",`@lunora/platform-node: workflow instance "${e}" cannot be subscribed to — the visulima engine keeps no per-instance event log to replay`)),status:async()=>{const t=await n.load(e);if(t===void 0)return{status:"unknown"};if(t.definitionId===A)return{status:"terminated"};const a=await f.getRun(e);return a===void 0?{status:"unknown"}:{error:a.error===void 0?void 0:{message:a.error.message,name:a.error.name},output:a.output,status:q(a.status)}},terminate:async()=>{await n.load(e)!==void 0&&(l.add(e),await n.delete(e),await n.save({definitionId:A,runId:e,snapshot:void 0,status:"failed",updatedAt:Date.now()}))}}),y=async e=>{const t=await n.load(e);return t?.definitionId===g?t.snapshot:e},p=async(e,t)=>{if(t?.id===void 0){const u=await f.trigger(e,t?.params);return h(u.runId)}const a=await n.load(t.id);if(a?.definitionId===g)return h(a.snapshot);if(a!==void 0)throw new d("BAD_REQUEST",`@lunora/platform-node: workflow create({ id: "${t.id}" }) names an existing run — pass the id a previous create returned, or a fresh one`);const i=await f.trigger(e,t.params);return await n.save({definitionId:g,runId:t.id,snapshot:i.runId,status:"failed",updatedAt:Date.now()}),await n.save({definitionId:g,runId:k(i.runId),snapshot:t.id,status:"failed",updatedAt:Date.now()}),h(i.runId)},E={};for(const{exportName:e,id:t}of c){const a={create:async i=>p(t,i),createBatch:async i=>{const u=[];for(const w of i)u.push(await p(t,w));return u},deleteBatch:async i=>{if(i.length>D)throw new d("VALIDATION_ERROR",`@lunora/platform-node: deleteBatch takes at most ${String(D)} instance ids, got ${String(i.length)}`);const u={deleted:[],errors:[]},w=new Map;for(const m of i){const R=w.get(m)??await v(await y(m));w.set(m,R),R?u.deleted.push({id:m}):u.errors.push({code:404,id:m,message:`workflow instance "${m}" not found`})}return u},get:async i=>h(await y(i))};E[e]=a,r[$(e)]=a}return{bindings:E,env:r,runtime:f}};export{X as createNodeWorkflowHost};
|