@lunora/workflow 1.0.0-alpha.30 → 1.0.0-alpha.32

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.
@@ -1,5 +1,5 @@
1
1
  import { WorkflowEntrypoint, WorkflowEvent, WorkflowStep } from 'cloudflare:workers';
2
- import { W as WorkflowDefinition } from "../packem_shared/types.d-BmtJnXue.mjs";
2
+ import { W as WorkflowDefinition } from "../packem_shared/types.d-CeA8m4Iq.mjs";
3
3
  import '@lunora/values';
4
4
  /**
5
5
  * Base class for the generated `WorkflowEntrypoint` classes. Applies a
@@ -1,5 +1,5 @@
1
1
  import { WorkflowEntrypoint, WorkflowEvent, WorkflowStep } from 'cloudflare:workers';
2
- import { W as WorkflowDefinition } from "../packem_shared/types.d-BmtJnXue.js";
2
+ import { W as WorkflowDefinition } from "../packem_shared/types.d-CeA8m4Iq.js";
3
3
  import '@lunora/values';
4
4
  /**
5
5
  * Base class for the generated `WorkflowEntrypoint` classes. Applies a
package/dist/do/index.mjs CHANGED
@@ -1 +1 @@
1
- import{WorkflowEntrypoint as p}from"cloudflare:workers";import{NonRetryableError as i}from"cloudflare:workflows";import{convertNonRetryableError as m}from"../packem_shared/NonRetryableError-9ZqDUzwT.mjs";import{extractBranchMarker as f,stripBranchMarker as h,signalBranchParentSafe as l,errorOutcome as u,okOutcome as y}from"../packem_shared/MAX_BRANCHES-C05O5LY9.mjs";import{createWorkflowRunContext as d}from"../packem_shared/createWorkflowRunContext-CNvJHMci.mjs";class N extends p{#r;#t;constructor(t,e,o,r){super(t,e),this.#t=o,this.#r=r??"workflow"}async run(t,e){const o=e,r=f(t.payload),c=r?{...t,payload:h(t.payload)}:t,a=d({env:this.env,event:c,exportName:this.#r,nonRetryableErrorClass:i,step:o});let n;try{n=await this.#t.handler(a)}catch(s){return r&&await l({env:this.env,log:a.log,step:o},r,u(s)),m(s,i)}return r&&await l({env:this.env,log:a.log,step:o},r,y(n)),n}}export{N as default};
1
+ import{WorkflowEntrypoint as p}from"cloudflare:workers";import{NonRetryableError as i}from"cloudflare:workflows";import{convertNonRetryableError as m}from"../packem_shared/NonRetryableError-9ZqDUzwT.mjs";import{extractBranchMarker as f,stripBranchMarker as h,signalBranchParentSafe as l,errorOutcome as u,okOutcome as y}from"../packem_shared/MAX_BRANCHES-C05O5LY9.mjs";import{createWorkflowRunContext as d}from"../packem_shared/createWorkflowRunContext-B3-fz0oh.mjs";class N extends p{#r;#t;constructor(t,e,o,r){super(t,e),this.#t=o,this.#r=r??"workflow"}async run(t,e){const o=e,r=f(t.payload),c=r?{...t,payload:h(t.payload)}:t,a=d({env:this.env,event:c,exportName:this.#r,nonRetryableErrorClass:i,step:o});let n;try{n=await this.#t.handler(a)}catch(s){return r&&await l({env:this.env,log:a.log,step:o},r,u(s)),m(s,i)}return r&&await l({env:this.env,log:a.log,step:o},r,y(n)),n}}export{N as default};
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as Workflows, L as LunoraWorkflowsOptions, b as WorkflowEventDefinition, S as StepArgsValidator, c as StepConfig, d as StepDefinition, e as WorkflowConfig, W as WorkflowDefinition, f as WorkflowBranch, g as WorkflowInstanceStatus, h as WorkflowEventLike, i as WorkflowStepLike, j as WorkflowRunContext, k as WorkflowLogger, l as WorkflowRunFunction, m as WorkflowRunStepFunction, n as WorkflowWaitForEventFunction } from "./packem_shared/types.d-BmtJnXue.mjs";
2
- export type { A as ArgsOf, B as BranchCompensationParams, F as FunctionReference, I as InferStepArgs, R as RunFunctionOptions, o as RunStepOptions, p as StepHandler, q as StepRollbackContext, r as StepRollbackHandler, s as StepRunContext, t as WaitForEventOptions, u as WorkflowBindingLike, v as WorkflowBranchOutputs, w as WorkflowCreateOptions, x as WorkflowHandle, y as WorkflowHandler, z as WorkflowInstanceLike, C as WorkflowParallelFunction, D as WorkflowRollbackContextLike, E as WorkflowRollbackHandlerLike, G as WorkflowSpawnFunction, H as WorkflowSpawnOptions, J as WorkflowStatusResult, K as WorkflowStepConfigLike, M as WorkflowStepContextLike, N as WorkflowStepRollbackOptionsLike } from "./packem_shared/types.d-BmtJnXue.mjs";
1
+ import { a as Workflows, L as LunoraWorkflowsOptions, b as WorkflowEventDefinition, S as StepArgsValidator, c as StepConfig, d as StepDefinition, e as WorkflowConfig, W as WorkflowDefinition, f as WorkflowBranch, g as WorkflowInstanceStatus, h as WorkflowEventLike, i as WorkflowStepLike, j as WorkflowRunContext, k as WorkflowLogger, l as WorkflowRunFunction, m as WorkflowRunStepFunction, n as WorkflowWaitForEventFunction } from "./packem_shared/types.d-CeA8m4Iq.mjs";
2
+ export type { A as ArgsOf, B as BranchCompensationParams, F as FunctionReference, I as InferStepArgs, R as RunFunctionOptions, o as RunStepOptions, p as StepHandler, q as StepRollbackContext, r as StepRollbackHandler, s as StepRunContext, t as WaitForEventOptions, u as WorkflowBindingLike, v as WorkflowBranchOutputs, w as WorkflowCreateOptions, x as WorkflowHandle, y as WorkflowHandler, z as WorkflowInstanceLike, C as WorkflowParallelFunction, D as WorkflowRollbackContextLike, E as WorkflowRollbackHandlerLike, G as WorkflowSpawnFunction, H as WorkflowSpawnOptions, J as WorkflowStatusResult, K as WorkflowStepConfigLike, M as WorkflowStepContextLike, N as WorkflowStepRollbackOptionsLike } from "./packem_shared/types.d-CeA8m4Iq.mjs";
3
3
  import { Validator } from '@lunora/values';
4
4
  import { LunoraError } from '@lunora/errors';
5
5
  /** Wiring info for one declared workflow, emitted by codegen into the generated shard. */
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as Workflows, L as LunoraWorkflowsOptions, b as WorkflowEventDefinition, S as StepArgsValidator, c as StepConfig, d as StepDefinition, e as WorkflowConfig, W as WorkflowDefinition, f as WorkflowBranch, g as WorkflowInstanceStatus, h as WorkflowEventLike, i as WorkflowStepLike, j as WorkflowRunContext, k as WorkflowLogger, l as WorkflowRunFunction, m as WorkflowRunStepFunction, n as WorkflowWaitForEventFunction } from "./packem_shared/types.d-BmtJnXue.js";
2
- export type { A as ArgsOf, B as BranchCompensationParams, F as FunctionReference, I as InferStepArgs, R as RunFunctionOptions, o as RunStepOptions, p as StepHandler, q as StepRollbackContext, r as StepRollbackHandler, s as StepRunContext, t as WaitForEventOptions, u as WorkflowBindingLike, v as WorkflowBranchOutputs, w as WorkflowCreateOptions, x as WorkflowHandle, y as WorkflowHandler, z as WorkflowInstanceLike, C as WorkflowParallelFunction, D as WorkflowRollbackContextLike, E as WorkflowRollbackHandlerLike, G as WorkflowSpawnFunction, H as WorkflowSpawnOptions, J as WorkflowStatusResult, K as WorkflowStepConfigLike, M as WorkflowStepContextLike, N as WorkflowStepRollbackOptionsLike } from "./packem_shared/types.d-BmtJnXue.js";
1
+ import { a as Workflows, L as LunoraWorkflowsOptions, b as WorkflowEventDefinition, S as StepArgsValidator, c as StepConfig, d as StepDefinition, e as WorkflowConfig, W as WorkflowDefinition, f as WorkflowBranch, g as WorkflowInstanceStatus, h as WorkflowEventLike, i as WorkflowStepLike, j as WorkflowRunContext, k as WorkflowLogger, l as WorkflowRunFunction, m as WorkflowRunStepFunction, n as WorkflowWaitForEventFunction } from "./packem_shared/types.d-CeA8m4Iq.js";
2
+ export type { A as ArgsOf, B as BranchCompensationParams, F as FunctionReference, I as InferStepArgs, R as RunFunctionOptions, o as RunStepOptions, p as StepHandler, q as StepRollbackContext, r as StepRollbackHandler, s as StepRunContext, t as WaitForEventOptions, u as WorkflowBindingLike, v as WorkflowBranchOutputs, w as WorkflowCreateOptions, x as WorkflowHandle, y as WorkflowHandler, z as WorkflowInstanceLike, C as WorkflowParallelFunction, D as WorkflowRollbackContextLike, E as WorkflowRollbackHandlerLike, G as WorkflowSpawnFunction, H as WorkflowSpawnOptions, J as WorkflowStatusResult, K as WorkflowStepConfigLike, M as WorkflowStepContextLike, N as WorkflowStepRollbackOptionsLike } from "./packem_shared/types.d-CeA8m4Iq.js";
3
3
  import { Validator } from '@lunora/values';
4
4
  import { LunoraError } from '@lunora/errors';
5
5
  /** Wiring info for one declared workflow, emitted by codegen into the generated shard. */
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{createWorkflowContext as e}from"./packem_shared/createWorkflowContext-zQR_9N-v.mjs";import{default as f}from"./packem_shared/createWorkflows-LvAyUyKq.mjs";import{defineWorkflowEvent as a,isWorkflowEventDefinition as i}from"./packem_shared/defineWorkflowEvent-suERPEEV.mjs";import{defineStep as p,isStepDefinition as s}from"./packem_shared/defineStep-D1-9eOnA.mjs";import{defineWorkflow as m,isWorkflowDefinition as x,workflowBindingName as k,workflowClassName as W,workflowDefaultName as c}from"./packem_shared/defineWorkflow-tKaIifbZ.mjs";import{NonRetryableError as N,convertNonRetryableError as R,isNonRetryableError as v,toNativeNonRetryableError as d}from"./packem_shared/NonRetryableError-9ZqDUzwT.mjs";import{MAX_BRANCHES as C,branch as S}from"./packem_shared/MAX_BRANCHES-C05O5LY9.mjs";import{WorkflowsRestError as y,createWorkflowsRestClient as D}from"./packem_shared/WorkflowsRestError-HhBsn3PQ.mjs";import{createWorkflowRunContext as g}from"./packem_shared/createWorkflowRunContext-CNvJHMci.mjs";import{c as h,v as F}from"./packem_shared/run-step-7RiMJYR7.mjs";import{createWaitForEvent as M}from"./packem_shared/createWaitForEvent-DjWsI895.mjs";export{C as MAX_BRANCHES,N as NonRetryableError,y as WorkflowsRestError,S as branch,R as convertNonRetryableError,h as createRunStep,M as createWaitForEvent,e as createWorkflowContext,g as createWorkflowRunContext,f as createWorkflows,D as createWorkflowsRestClient,p as defineStep,m as defineWorkflow,a as defineWorkflowEvent,v as isNonRetryableError,s as isStepDefinition,x as isWorkflowDefinition,i as isWorkflowEventDefinition,d as toNativeNonRetryableError,F as validateStepArgs,k as workflowBindingName,W as workflowClassName,c as workflowDefaultName};
1
+ import{createWorkflowContext as e}from"./packem_shared/createWorkflowContext-zQR_9N-v.mjs";import{default as f}from"./packem_shared/createWorkflows-LvAyUyKq.mjs";import{defineWorkflowEvent as a,isWorkflowEventDefinition as i}from"./packem_shared/defineWorkflowEvent-suERPEEV.mjs";import{defineStep as p,isStepDefinition as s}from"./packem_shared/defineStep-D1-9eOnA.mjs";import{defineWorkflow as m,isWorkflowDefinition as x,workflowBindingName as k,workflowClassName as W,workflowDefaultName as c}from"./packem_shared/defineWorkflow-tKaIifbZ.mjs";import{NonRetryableError as N,convertNonRetryableError as R,isNonRetryableError as v,toNativeNonRetryableError as d}from"./packem_shared/NonRetryableError-9ZqDUzwT.mjs";import{MAX_BRANCHES as C,branch as S}from"./packem_shared/MAX_BRANCHES-C05O5LY9.mjs";import{WorkflowsRestError as y,createWorkflowsRestClient as D}from"./packem_shared/WorkflowsRestError-HhBsn3PQ.mjs";import{createWorkflowRunContext as g}from"./packem_shared/createWorkflowRunContext-B3-fz0oh.mjs";import{c as h,v as F}from"./packem_shared/run-step-cJ-miof9.mjs";import{createWaitForEvent as M}from"./packem_shared/createWaitForEvent-DjWsI895.mjs";export{C as MAX_BRANCHES,N as NonRetryableError,y as WorkflowsRestError,S as branch,R as convertNonRetryableError,h as createRunStep,M as createWaitForEvent,e as createWorkflowContext,g as createWorkflowRunContext,f as createWorkflows,D as createWorkflowsRestClient,p as defineStep,m as defineWorkflow,a as defineWorkflowEvent,v as isNonRetryableError,s as isStepDefinition,x as isWorkflowDefinition,i as isWorkflowEventDefinition,d as toNativeNonRetryableError,F as validateStepArgs,k as workflowBindingName,W as workflowClassName,c as workflowDefaultName};
@@ -0,0 +1 @@
1
+ import{c as p,v as o}from"./run-step-cJ-miof9.mjs";import"./defineWorkflowEvent-suERPEEV.mjs";import"./NonRetryableError-9ZqDUzwT.mjs";export{p as createRunStep,o as validateStepArgs};
@@ -1 +1 @@
1
- import{a as v,c as w}from"./run-step-7RiMJYR7.mjs";import{LunoraError as i}from"@lunora/errors";import{workflowBindingName as s}from"./defineWorkflow-tKaIifbZ.mjs";import{createSpawn as u,createParallel as m}from"./MAX_BRANCHES-C05O5LY9.mjs";import{createWaitForEvent as p}from"./createWaitForEvent-DjWsI895.mjs";const g=e=>({debug:(r,...n)=>{console.debug(e,r,...n)},error:(r,...n)=>{console.error(e,r,...n)},info:(r,...n)=>{console.info(e,r,...n)},warn:(r,...n)=>{console.warn(e,r,...n)}}),I=e=>{const r=g(`[workflow:${e.exportName}]`),n=v({env:e.env,fetchImpl:e.fetchImpl,label:"@lunora/workflow"}),f=t=>{const a=s(t),o=e.env[a];if(!o||typeof o.create!="function"||typeof o.get!="function")throw new i("INTERNAL",`@lunora/workflow: cannot spawn child workflow "${t}" — no Workflow binding "${a}" on env (is it declared in lunora/workflows.ts?)`);return o};let l=0;const d=t=>{if(t!==void 0)return t;const a=`${e.event.instanceId}-c${String(l)}`;return l+=1,a},c={env:e.env,instanceId:e.event.instanceId,log:r,nextChildId:d,parentBinding:s(e.exportName),resolveBinding:f,step:e.step};return{env:e.env,event:e.event,log:r,parallel:m(c),params:e.event.payload,run:n,runStep:w({env:e.env,log:r,nonRetryableErrorClass:e.nonRetryableErrorClass,run:n,step:e.step}),spawn:u(c),step:e.step,waitForEvent:p({nonRetryableErrorClass:e.nonRetryableErrorClass,step:e.step})}};export{I as createWorkflowRunContext};
1
+ import{F as w,c as v}from"./run-step-cJ-miof9.mjs";import{LunoraError as i}from"@lunora/errors";import{workflowBindingName as s}from"./defineWorkflow-tKaIifbZ.mjs";import{createSpawn as u,createParallel as m}from"./MAX_BRANCHES-C05O5LY9.mjs";import{createWaitForEvent as p}from"./createWaitForEvent-DjWsI895.mjs";const g=e=>({debug:(r,...n)=>{console.debug(e,r,...n)},error:(r,...n)=>{console.error(e,r,...n)},info:(r,...n)=>{console.info(e,r,...n)},warn:(r,...n)=>{console.warn(e,r,...n)}}),I=e=>{const r=g(`[workflow:${e.exportName}]`),n=w({env:e.env,fetchImpl:e.fetchImpl,label:"@lunora/workflow"}),f=t=>{const a=s(t),o=e.env[a];if(!o||typeof o.create!="function"||typeof o.get!="function")throw new i("INTERNAL",`@lunora/workflow: cannot spawn child workflow "${t}" — no Workflow binding "${a}" on env (is it declared in lunora/workflows.ts?)`);return o};let l=0;const d=t=>{if(t!==void 0)return t;const a=`${e.event.instanceId}-c${String(l)}`;return l+=1,a},c={env:e.env,instanceId:e.event.instanceId,log:r,nextChildId:d,parentBinding:s(e.exportName),resolveBinding:f,step:e.step};return{env:e.env,event:e.event,log:r,parallel:m(c),params:e.event.payload,run:n,runStep:v({env:e.env,log:r,nonRetryableErrorClass:e.nonRetryableErrorClass,run:n,step:e.step}),spawn:u(c),step:e.step,waitForEvent:p({nonRetryableErrorClass:e.nonRetryableErrorClass,step:e.step})}};export{I as createWorkflowRunContext};
@@ -0,0 +1 @@
1
+ import{LunoraError as y,isLunoraError as S}from"@lunora/errors";import{parseValidatorMap as T}from"@lunora/values";import{RESERVED_EVENT_TYPE_PREFIX as N}from"./defineWorkflowEvent-suERPEEV.mjs";import{raiseNonRetryable as b,convertNonRetryableError as O}from"./NonRetryableError-9ZqDUzwT.mjs";const A=(t,r,e)=>{if(r===void 0)return{dispose:()=>{},signal:t};const a=new AbortController,o=setTimeout(()=>{a.abort(e())},r);return{dispose:()=>{clearTimeout(o)},signal:a.signal}},_=t=>{let r="";for(let e=0;e<t.length;e+=32768)r+=String.fromCharCode(...t.subarray(e,e+32768));return btoa(r)},v=t=>_(t).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"");new TextDecoder;const R=new TextEncoder,w="=",L=t=>{for(let r=0;r<t.length;r+=1)if(t.charCodeAt(r)>255)return!1;return!0},k=t=>v(R.encode(JSON.stringify(t))),x=t=>!t.startsWith(w)&&L(t)?t:`${w}${v(R.encode(t))}`,C="/_lunora/scheduler/dispatch",D=3e4,P=t=>{let r=t.length;for(;r>0&&t[r-1]==="/";)r-=1;return t.slice(0,r)},$=Symbol("lunoraDispatchFailure"),U=Symbol("lunoraDispatchMessageId"),E=(t,r)=>(Object.defineProperty(t,$,{value:!0}),r!==void 0&&Object.defineProperty(t,U,{value:r}),t),M=(t,r,e,a)=>{try{const o=JSON.parse(e)?.error;if(typeof o=="object"&&o!==null&&typeof o.code=="string"){const{code:u,data:i,message:c}=o;return E(new y(u,typeof c=="string"?c:void 0,{data:i,status:r}),a)}}catch{}return E(new y("INTERNAL",`${t}: function dispatch failed (${String(r)}): ${e}`,{status:r}),a)},J=new Set([400,403,404,422]),j=t=>S(t)&&t[$]===!0&&J.has(t.status),K=(t,r,e)=>new y("INTERNAL",`${t}: function dispatch to "${r}" timed out after ${String(e)}ms`,{status:503}),z=t=>{const{label:r}=t,e=globalThis.fetch,a=t.fetchImpl??(typeof e=="function"?e.bind(globalThis):void 0);return async(o,u,i={})=>{if(typeof a!="function")throw new TypeError(`${r}: no fetch implementation available — pass fetchImpl or run on a platform with global fetch`);const c=t.env.LUNORA_ORIGIN_URL;if(typeof c!="string"||c.length===0)throw new y("INTERNAL",`${r}: \`LUNORA_ORIGIN_URL\` must be set on the Worker env so a handler can call back into Lunora functions`);const d=t.env.LUNORA_ADMIN_TOKEN;if(typeof d!="string"||d.length===0)throw new y("INTERNAL",`${r}: \`LUNORA_ADMIN_TOKEN\` must be set on the Worker env to authenticate function dispatch`);const p=`${P(c)}${C}`,s={authorization:`Bearer ${d}`,"content-type":"application/json"};t.identity?.userId!==void 0&&(s["x-lunora-userid"]=x(t.identity.userId)),t.identity?.claims!==void 0&&(s["x-lunora-identity"]=k(t.identity.claims));const m=i.timeoutMs??D,h=A(void 0,m,()=>new DOMException(`dispatch timed out after ${String(m)}ms`,"TimeoutError")),n=f=>{throw f instanceof Error&&f.name==="TimeoutError"?K(r,o.__lunoraRef,m):f};let l;try{try{l=await a(p,{body:JSON.stringify({args:u??{},functionPath:o.__lunoraRef,id:i.dedupId,shardKey:i.shardKey}),headers:s,method:"POST",signal:h.signal})}catch(g){return n(g)}if(!l.ok){let g;try{g=await l.text()}catch(I){return n(I)}throw M(r,l.status,g,i.messageId)}let f;try{f=await l.text()}catch(g){return n(g)}if(f.length===0)return;try{return JSON.parse(f)}catch{throw new y("INTERNAL",`${r}: function dispatch returned a non-JSON body (${String(l.status)}): ${f}`,{status:l.status})}}finally{h.dispose()}}},W=(t,r)=>T(t,r,"step args"),B=t=>async(r,e,a)=>{const o=a?.config??r.config,u=a?.name??r.name;if(u.startsWith(N))return b(`@lunora/workflow: ctx.runStep step name "${u}" is reserved — the "${N}" prefix is used by the framework's own steps`,void 0,t.nonRetryableErrorClass);const i=W(r.args,e),c=async s=>{const m={attempt:s.attempt,config:s.config,env:t.env,log:t.log,run:t.run,step:s.step};let h;try{h=await r.handler(m,i)}catch(n){return j(n)?b(n.message,n,t.nonRetryableErrorClass):O(n,t.nonRetryableErrorClass)}if(!r.returns)return h;try{return r.returns.parse(h)}catch(n){const l=n instanceof Error?n.message:String(n);return b(`step "${r.name}" returns validation failed: ${l}`,n,t.nonRetryableErrorClass)}},d=r.rollback,p=d?{rollback:async s=>{await d({args:i,env:t.env,error:s.error,log:t.log,output:s.output,run:t.run})},rollbackConfig:r.rollbackConfig}:void 0;return o===void 0?t.step.do(u,c,p):t.step.do(u,o,c,p)};export{z as F,B as c,W as v};
@@ -252,6 +252,15 @@ interface StepDefinition<A extends StepArgsValidator = StepArgsValidator, Result
252
252
  interface RunStepOptions {
253
253
  /** Override the step's declared durability config for this call. */
254
254
  config?: WorkflowStepConfigLike;
255
+ /**
256
+ * Override the durable step name for this call. Cloudflare keys a durable
257
+ * step by name **and occurrence** (`step.count` counts the calls made under
258
+ * one name in a run), so reusing a name in a loop is fine and each
259
+ * occurrence caches independently — this is for giving a call its own
260
+ * addressable name, e.g. to target it with `instance.restart({ from })`.
261
+ * Must be deterministic across replays, like any step name.
262
+ */
263
+ name?: string;
255
264
  }
256
265
  /**
257
266
  * Run a reusable {@link StepDefinition} as a durable, memoized, retried step:
@@ -252,6 +252,15 @@ interface StepDefinition<A extends StepArgsValidator = StepArgsValidator, Result
252
252
  interface RunStepOptions {
253
253
  /** Override the step's declared durability config for this call. */
254
254
  config?: WorkflowStepConfigLike;
255
+ /**
256
+ * Override the durable step name for this call. Cloudflare keys a durable
257
+ * step by name **and occurrence** (`step.count` counts the calls made under
258
+ * one name in a run), so reusing a name in a loop is fine and each
259
+ * occurrence caches independently — this is for giving a call its own
260
+ * addressable name, e.g. to target it with `instance.restart({ from })`.
261
+ * Must be deterministic across replays, like any step name.
262
+ */
263
+ name?: string;
255
264
  }
256
265
  /**
257
266
  * Run a reusable {@link StepDefinition} as a durable, memoized, retried step:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/workflow",
3
- "version": "1.0.0-alpha.30",
3
+ "version": "1.0.0-alpha.32",
4
4
  "description": "Durable workflows for Lunora: defineWorkflow over Cloudflare Workflows, generated WorkflowEntrypoint classes, and the ctx.workflows surface",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -48,8 +48,8 @@
48
48
  "access": "public"
49
49
  },
50
50
  "dependencies": {
51
- "@lunora/errors": "1.0.0-alpha.22",
52
- "@lunora/values": "1.0.0-alpha.27"
51
+ "@lunora/errors": "1.0.0-alpha.23",
52
+ "@lunora/values": "1.0.0-alpha.28"
53
53
  },
54
54
  "engines": {
55
55
  "node": "^22.15.0 || >=24.11.0"
@@ -1 +0,0 @@
1
- import{c as r,v as p}from"./run-step-7RiMJYR7.mjs";import"./NonRetryableError-9ZqDUzwT.mjs";export{r as createRunStep,p as validateStepArgs};
@@ -1 +0,0 @@
1
- import{LunoraError as d,isLunoraError as A}from"@lunora/errors";import{parseValidatorMap as O}from"@lunora/values";import{raiseNonRetryable as b,convertNonRetryableError as S}from"./NonRetryableError-9ZqDUzwT.mjs";const I=t=>{let r="";for(let e=0;e<t.length;e+=32768)r+=String.fromCharCode(...t.subarray(e,e+32768));return btoa(r)},R=t=>I(t).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"");new TextDecoder;const $=new TextEncoder,N="=",L=t=>{for(let r=0;r<t.length;r+=1)if(t.charCodeAt(r)>255)return!1;return!0},T=t=>R($.encode(JSON.stringify(t))),_=t=>!t.startsWith(N)&&L(t)?t:`${N}${R($.encode(t))}`,k="/_lunora/scheduler/dispatch",C=3e4,U=t=>{let r=t.length;for(;r>0&&t[r-1]==="/";)r-=1;return t.slice(0,r)},v=Symbol("lunoraDispatchFailure"),w=t=>(Object.defineProperty(t,v,{value:!0}),t),x=(t,r,e)=>{try{const a=JSON.parse(e)?.error;if(typeof a=="object"&&a!==null&&typeof a.code=="string"){const{code:i,data:u,message:s}=a;return w(new d(i,typeof s=="string"?s:void 0,{data:u,status:r}))}}catch{}return w(new d("INTERNAL",`${t}: function dispatch failed (${String(r)}): ${e}`,{status:r}))},D=new Set([400,403,404,422]),J=t=>A(t)&&t[v]===!0&&D.has(t.status),K=(t,r,e)=>new d("INTERNAL",`${t}: function dispatch to "${r}" timed out after ${String(e)}ms`,{status:503}),G=t=>{const{label:r}=t,e=globalThis.fetch,a=t.fetchImpl??(typeof e=="function"?e.bind(globalThis):void 0);return async(i,u,s={})=>{if(typeof a!="function")throw new TypeError(`${r}: no fetch implementation available — pass fetchImpl or run on a platform with global fetch`);const f=t.env.LUNORA_ORIGIN_URL;if(typeof f!="string"||f.length===0)throw new d("INTERNAL",`${r}: \`LUNORA_ORIGIN_URL\` must be set on the Worker env so a handler can call back into Lunora functions`);const h=t.env.LUNORA_ADMIN_TOKEN;if(typeof h!="string"||h.length===0)throw new d("INTERNAL",`${r}: \`LUNORA_ADMIN_TOKEN\` must be set on the Worker env to authenticate function dispatch`);const c=`${U(f)}${k}`,y={authorization:`Bearer ${h}`,"content-type":"application/json"};t.identity?.userId!==void 0&&(y["x-lunora-userid"]=_(t.identity.userId)),t.identity?.claims!==void 0&&(y["x-lunora-identity"]=T(t.identity.claims));const g=s.timeoutMs??C,n=AbortSignal.timeout(g),m=o=>{throw o instanceof Error&&o.name==="TimeoutError"?K(r,i.__lunoraRef,g):o};let l;try{l=await a(c,{body:JSON.stringify({args:u??{},functionPath:i.__lunoraRef,shardKey:s.shardKey}),headers:y,method:"POST",signal:n})}catch(o){return m(o)}if(!l.ok){let o;try{o=await l.text()}catch(E){return m(E)}throw x(r,l.status,o)}let p;try{p=await l.text()}catch(o){return m(o)}if(p.length!==0)try{return JSON.parse(p)}catch{throw new d("INTERNAL",`${r}: function dispatch returned a non-JSON body (${String(l.status)}): ${p}`,{status:l.status})}}},M=(t,r)=>O(t,r,"step args"),z=t=>async(r,e,a)=>{const i=a?.config??r.config,u=M(r.args,e),s=async c=>{const y={attempt:c.attempt,config:c.config,env:t.env,log:t.log,run:t.run,step:c.step};let g;try{g=await r.handler(y,u)}catch(n){return J(n)?b(n.message,n,t.nonRetryableErrorClass):S(n,t.nonRetryableErrorClass)}if(!r.returns)return g;try{return r.returns.parse(g)}catch(n){const m=n instanceof Error?n.message:String(n);return b(`step "${r.name}" returns validation failed: ${m}`,n,t.nonRetryableErrorClass)}},f=r.rollback,h=f?{rollback:async c=>{await f({args:u,env:t.env,error:c.error,log:t.log,output:c.output,run:t.run})},rollbackConfig:r.rollbackConfig}:void 0;return i===void 0?t.step.do(r.name,s,h):t.step.do(r.name,i,s,h)};export{G as a,z as c,M as v};