rivetkit 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/browser/client.d.ts +19 -6
  2. package/dist/browser/client.js +4 -4
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +4 -4
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/tsup/actor/errors.cjs +4 -2
  7. package/dist/tsup/actor/errors.cjs.map +1 -1
  8. package/dist/tsup/actor/errors.d.cts +1 -1
  9. package/dist/tsup/actor/errors.d.ts +1 -1
  10. package/dist/tsup/actor/errors.js +3 -1
  11. package/dist/tsup/agent-os/index.cjs +4 -4
  12. package/dist/tsup/agent-os/index.cjs.map +1 -1
  13. package/dist/tsup/agent-os/index.d.cts +18 -5
  14. package/dist/tsup/agent-os/index.d.ts +18 -5
  15. package/dist/tsup/agent-os/index.js +4 -4
  16. package/dist/tsup/agent-os/index.js.map +1 -1
  17. package/dist/tsup/{chunk-NIY3RSPX.cjs → chunk-3MHDOUD7.cjs} +11 -2
  18. package/dist/tsup/chunk-3MHDOUD7.cjs.map +1 -0
  19. package/dist/tsup/{chunk-KORQB2IR.cjs → chunk-4FC7TVS6.cjs} +6 -2
  20. package/dist/tsup/chunk-4FC7TVS6.cjs.map +1 -0
  21. package/dist/tsup/{chunk-47HHIEXH.cjs → chunk-4UUEB43Y.cjs} +4 -4
  22. package/dist/tsup/{chunk-47HHIEXH.cjs.map → chunk-4UUEB43Y.cjs.map} +1 -1
  23. package/dist/tsup/{chunk-7QKCIVAY.cjs → chunk-5IWLUJ6W.cjs} +167 -167
  24. package/dist/tsup/{chunk-7QKCIVAY.cjs.map → chunk-5IWLUJ6W.cjs.map} +1 -1
  25. package/dist/tsup/{chunk-P2GNQ4RN.js → chunk-H6VVZMWN.js} +4 -4
  26. package/dist/tsup/{chunk-MEHBWPLJ.js → chunk-I35VSLEM.js} +3 -3
  27. package/dist/tsup/{chunk-BEI24WTI.js → chunk-JBUZRPY5.js} +2 -2
  28. package/dist/tsup/{chunk-B6VUNZUD.cjs → chunk-JLJJZYCJ.cjs} +10 -10
  29. package/dist/tsup/{chunk-B6VUNZUD.cjs.map → chunk-JLJJZYCJ.cjs.map} +1 -1
  30. package/dist/tsup/{chunk-VTTFNQQI.js → chunk-L2X3YFER.js} +31 -6
  31. package/dist/tsup/chunk-L2X3YFER.js.map +1 -0
  32. package/dist/tsup/{chunk-DXXJPH55.cjs → chunk-MNHKOS6L.cjs} +39 -14
  33. package/dist/tsup/chunk-MNHKOS6L.cjs.map +1 -0
  34. package/dist/tsup/{chunk-UMZVD6DQ.js → chunk-NERUIBOT.js} +2 -2
  35. package/dist/tsup/{chunk-I4LN3FNT.cjs → chunk-OST76LRW.cjs} +7 -7
  36. package/dist/tsup/{chunk-I4LN3FNT.cjs.map → chunk-OST76LRW.cjs.map} +1 -1
  37. package/dist/tsup/{chunk-LVTBW2RE.cjs → chunk-OZBCXBVP.cjs} +3 -3
  38. package/dist/tsup/{chunk-LVTBW2RE.cjs.map → chunk-OZBCXBVP.cjs.map} +1 -1
  39. package/dist/tsup/{chunk-4JDSFJS5.js → chunk-PT6OIW5E.js} +5 -5
  40. package/dist/tsup/{chunk-2OTRTA3J.js → chunk-R6KPN5EW.js} +2 -2
  41. package/dist/tsup/{chunk-3677IIOV.cjs → chunk-V5KMAMX3.cjs} +5 -5
  42. package/dist/tsup/{chunk-3677IIOV.cjs.map → chunk-V5KMAMX3.cjs.map} +1 -1
  43. package/dist/tsup/{chunk-DPIMKYNB.js → chunk-XIX5DOZN.js} +10 -1
  44. package/dist/tsup/chunk-XIX5DOZN.js.map +1 -0
  45. package/dist/tsup/{chunk-BRP62GZC.js → chunk-ZZ3WBRPD.js} +5 -1
  46. package/dist/tsup/chunk-ZZ3WBRPD.js.map +1 -0
  47. package/dist/tsup/client/mod.cjs +7 -7
  48. package/dist/tsup/client/mod.d.cts +3 -3
  49. package/dist/tsup/client/mod.d.ts +3 -3
  50. package/dist/tsup/client/mod.js +6 -6
  51. package/dist/tsup/common/log.cjs +3 -3
  52. package/dist/tsup/common/log.js +2 -2
  53. package/dist/tsup/common/websocket.cjs +4 -4
  54. package/dist/tsup/common/websocket.js +3 -3
  55. package/dist/tsup/{config-CZQQ-mso.d.cts → config-CzvopP5m.d.cts} +22 -7
  56. package/dist/tsup/{config-BxWAw3iH.d.ts → config-DZuT7tcp.d.ts} +22 -7
  57. package/dist/tsup/context-CyAdY-aA.d.ts +128 -0
  58. package/dist/tsup/context-sNB28g0N.d.cts +128 -0
  59. package/dist/tsup/dynamic/mod.cjs +2 -2
  60. package/dist/tsup/dynamic/mod.d.cts +2 -2
  61. package/dist/tsup/dynamic/mod.d.ts +2 -2
  62. package/dist/tsup/dynamic/mod.js +1 -1
  63. package/dist/tsup/inspector/mod.cjs +6 -6
  64. package/dist/tsup/inspector/mod.js +5 -5
  65. package/dist/tsup/inspector-tab/mod.cjs +2 -2
  66. package/dist/tsup/inspector-tab/mod.cjs.map +1 -1
  67. package/dist/tsup/inspector-tab/mod.d.cts +3 -3
  68. package/dist/tsup/inspector-tab/mod.d.ts +3 -3
  69. package/dist/tsup/inspector-tab/mod.js +1 -1
  70. package/dist/tsup/inspector-tab/mod.js.map +1 -1
  71. package/dist/tsup/mod.cjs +292 -276
  72. package/dist/tsup/mod.cjs.map +1 -1
  73. package/dist/tsup/mod.d.cts +4 -4
  74. package/dist/tsup/mod.d.ts +4 -4
  75. package/dist/tsup/mod.js +202 -186
  76. package/dist/tsup/mod.js.map +1 -1
  77. package/dist/tsup/test/mod.cjs +10 -10
  78. package/dist/tsup/test/mod.d.cts +2 -2
  79. package/dist/tsup/test/mod.d.ts +2 -2
  80. package/dist/tsup/test/mod.js +6 -6
  81. package/dist/tsup/{utils-DQosb24I.d.ts → utils-CqDnC_PS.d.cts} +2 -1
  82. package/dist/tsup/{utils-DQosb24I.d.cts → utils-CqDnC_PS.d.ts} +2 -1
  83. package/dist/tsup/utils.cjs +3 -3
  84. package/dist/tsup/utils.d.cts +1 -1
  85. package/dist/tsup/utils.d.ts +1 -1
  86. package/dist/tsup/utils.js +2 -2
  87. package/dist/tsup/workflow/mod.cjs +184 -148
  88. package/dist/tsup/workflow/mod.cjs.map +1 -1
  89. package/dist/tsup/workflow/mod.d.cts +6 -6
  90. package/dist/tsup/workflow/mod.d.ts +6 -6
  91. package/dist/tsup/workflow/mod.js +177 -141
  92. package/dist/tsup/workflow/mod.js.map +1 -1
  93. package/package.json +11 -11
  94. package/src/actor/config.ts +14 -0
  95. package/src/actor/errors.ts +11 -0
  96. package/src/inspector-tab/mod.ts +1 -1
  97. package/src/registry/index.ts +74 -18
  98. package/src/registry/napi-runtime.ts +16 -0
  99. package/src/registry/native.ts +79 -30
  100. package/src/registry/runtime.ts +11 -0
  101. package/src/registry/wasm-runtime.ts +11 -0
  102. package/src/utils/env-vars.ts +31 -0
  103. package/src/workflow/context.ts +675 -244
  104. package/src/workflow/driver.ts +20 -7
  105. package/src/workflow/mod.ts +25 -9
  106. package/dist/tsup/chunk-BRP62GZC.js.map +0 -1
  107. package/dist/tsup/chunk-DPIMKYNB.js.map +0 -1
  108. package/dist/tsup/chunk-DXXJPH55.cjs.map +0 -1
  109. package/dist/tsup/chunk-KORQB2IR.cjs.map +0 -1
  110. package/dist/tsup/chunk-NIY3RSPX.cjs.map +0 -1
  111. package/dist/tsup/chunk-VTTFNQQI.js.map +0 -1
  112. package/dist/tsup/context-Bw7xq8w3.d.cts +0 -92
  113. package/dist/tsup/context-D8QA76sV.d.ts +0 -92
  114. package/src/utils/serve.ts +0 -216
  115. /package/dist/tsup/{chunk-P2GNQ4RN.js.map → chunk-H6VVZMWN.js.map} +0 -0
  116. /package/dist/tsup/{chunk-MEHBWPLJ.js.map → chunk-I35VSLEM.js.map} +0 -0
  117. /package/dist/tsup/{chunk-BEI24WTI.js.map → chunk-JBUZRPY5.js.map} +0 -0
  118. /package/dist/tsup/{chunk-UMZVD6DQ.js.map → chunk-NERUIBOT.js.map} +0 -0
  119. /package/dist/tsup/{chunk-4JDSFJS5.js.map → chunk-PT6OIW5E.js.map} +0 -0
  120. /package/dist/tsup/{chunk-2OTRTA3J.js.map → chunk-R6KPN5EW.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/workflow/mod.ts","../../../src/workflow/constants.ts","../../../src/workflow/context.ts","../../../src/workflow/driver.ts"],"sourcesContent":["// @ts-nocheck\n\nimport {\n\tCriticalError,\n\tEntryInProgressError,\n\tHistoryDivergedError,\n\tJoinError,\n\tRaceError,\n\tRollbackCheckpointError,\n\tRollbackError,\n\treplayWorkflowFromStep,\n\trunWorkflow,\n\tStepExhaustedError,\n\ttype WorkflowErrorEvent,\n} from \"@rivetkit/workflow-engine\";\nimport invariant from \"invariant\";\nimport type { RunContext } from \"@/actor/config\";\nimport {\n\tACTOR_CONTEXT_INTERNAL_SYMBOL,\n\tRUN_FUNCTION_CONFIG_SYMBOL,\n} from \"@/actor/config\";\nimport type { AnyStaticActorInstance } from \"@/actor/definition\";\nimport { RivetError } from \"@/actor/errors\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"@/actor/schema\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport { stringifyError } from \"@/utils\";\nimport { ActorWorkflowContext } from \"./context\";\nimport { ActorWorkflowControlDriver, ActorWorkflowDriver } from \"./driver\";\nimport { createWorkflowInspectorAdapter } from \"./inspector\";\n\nexport type {\n\tTryBlockCatchKind,\n\tTryBlockConfig,\n\tTryBlockFailure,\n\tTryBlockResult,\n\tTryStepCatchKind,\n\tTryStepConfig,\n\tTryStepFailure,\n\tTryStepResult,\n\tWorkflowError,\n\tWorkflowErrorEvent,\n} from \"@rivetkit/workflow-engine\";\nexport { Loop } from \"@rivetkit/workflow-engine\";\nexport {\n\tActorWorkflowContext,\n\ttype WorkflowBranchContextOf,\n\ttype WorkflowContextOf,\n\ttype WorkflowLoopContextOf,\n\ttype WorkflowStepContextOf,\n} from \"./context\";\n\nfunction shouldRethrowWorkflowError(error: unknown): boolean {\n\tif (\n\t\terror instanceof CriticalError ||\n\t\terror instanceof JoinError ||\n\t\terror instanceof RaceError ||\n\t\terror instanceof RollbackError ||\n\t\terror instanceof StepExhaustedError\n\t) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\terror instanceof EntryInProgressError ||\n\t\terror instanceof HistoryDivergedError ||\n\t\terror instanceof RollbackCheckpointError\n\t) {\n\t\treturn true;\n\t}\n\n\treturn true;\n}\n\nfunction workflowReplayInFlightError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"workflow_in_flight\",\n\t\t\"Workflow replay is unavailable while the workflow is currently in flight.\",\n\t\t{\n\t\t\tpublic: true,\n\t\t\tstatusCode: 409,\n\t\t},\n\t);\n}\n\nfunction isWorkflowReplayBlockedByRunningEntry(error: unknown): boolean {\n\treturn (\n\t\terror instanceof Error &&\n\t\terror.message ===\n\t\t\t\"Cannot replay a workflow while a step is currently running\"\n\t);\n}\n\nexport interface WorkflowOptions<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\tonError?: (\n\t\tctx: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tevent: WorkflowErrorEvent,\n\t) => void | Promise<void>;\n}\n\nexport function workflow<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n>(\n\tfn: (\n\t\tctx: ActorWorkflowContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => Promise<unknown>,\n\toptions: WorkflowOptions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> = {},\n): (\n\tc: RunContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n) => Promise<void> {\n\tconst onError = options.onError;\n\tconst workflowInspectors = new Map<\n\t\tstring,\n\t\tReturnType<typeof createWorkflowInspectorAdapter>\n\t>();\n\n\tfunction getWorkflowInspector(actorId: string) {\n\t\tlet workflowInspector = workflowInspectors.get(actorId);\n\t\tif (!workflowInspector) {\n\t\t\tworkflowInspector = createWorkflowInspectorAdapter();\n\t\t\tworkflowInspectors.set(actorId, workflowInspector);\n\t\t}\n\t\treturn workflowInspector;\n\t}\n\n\tasync function run(\n\t\trunCtx: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<void> {\n\t\tconst actor = (\n\t\t\trunCtx as unknown as {\n\t\t\t\t[ACTOR_CONTEXT_INTERNAL_SYMBOL]?: AnyStaticActorInstance;\n\t\t\t}\n\t\t)[ACTOR_CONTEXT_INTERNAL_SYMBOL];\n\t\tinvariant(actor, \"workflow() requires an actor instance\");\n\t\tconst workflowInspector = getWorkflowInspector(actor.id);\n\n\t\tconst driver = new ActorWorkflowDriver(actor, runCtx);\n\t\tconst controlDriver = new ActorWorkflowControlDriver(actor);\n\t\tworkflowInspector.setReplayFromStep(async (entryId) => {\n\t\t\tconst workflowState = await workflowInspector.adapter.getState();\n\t\t\tif (\n\t\t\t\tactor.isRunHandlerActive() ||\n\t\t\t\tworkflowState === \"pending\" ||\n\t\t\t\tworkflowState === \"running\"\n\t\t\t) {\n\t\t\t\tthrow workflowReplayInFlightError();\n\t\t\t}\n\n\t\t\tlet snapshot;\n\t\t\ttry {\n\t\t\t\tsnapshot = await replayWorkflowFromStep(\n\t\t\t\t\tactor.id,\n\t\t\t\t\tcontrolDriver,\n\t\t\t\t\tentryId,\n\t\t\t\t\t{ scheduleAlarm: false },\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (isWorkflowReplayBlockedByRunningEntry(error)) {\n\t\t\t\t\tthrow workflowReplayInFlightError();\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tworkflowInspector.update(snapshot);\n\t\t\tawait actor.restartRunHandler();\n\t\t\treturn workflowInspector.adapter.getHistory();\n\t\t});\n\n\t\tconst handle = runWorkflow(\n\t\t\tactor.id,\n\t\t\tasync (ctx) => await fn(new ActorWorkflowContext(ctx, runCtx)),\n\t\t\tundefined,\n\t\t\tdriver,\n\t\t\t{\n\t\t\t\tmode: \"live\",\n\t\t\t\tlogger: runCtx.log,\n\t\t\t\tonHistoryUpdated: workflowInspector.update,\n\t\t\t\tonError: onError\n\t\t\t\t\t? async (event) => await onError(runCtx, event)\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t);\n\t\tworkflowInspector.setGetState(async () => await handle.getState());\n\n\t\tconst onAbort = () => {\n\t\t\thandle.evict();\n\t\t};\n\t\tif (runCtx.abortSignal.aborted) {\n\t\t\tonAbort();\n\t\t} else {\n\t\t\trunCtx.abortSignal.addEventListener(\"abort\", onAbort, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tawait handle.result;\n\t\t} catch (error) {\n\t\t\tif (runCtx.abortSignal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (shouldRethrowWorkflowError(error)) {\n\t\t\t\trunCtx.log.error({\n\t\t\t\t\tmsg: \"workflow run failed\",\n\t\t\t\t\terror: stringifyError(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\trunCtx.log.warn({\n\t\t\t\tmsg: \"workflow failed and will sleep until woken\",\n\t\t\t\terror: stringifyError(error),\n\t\t\t});\n\t\t} finally {\n\t\t\trunCtx.abortSignal.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t}\n\n\tconst runWithConfig = run as typeof run & {\n\t\t[RUN_FUNCTION_CONFIG_SYMBOL]?: {\n\t\t\ticon?: string;\n\t\t\tinspectorFactory?: (actor: unknown) => unknown;\n\t\t};\n\t};\n\trunWithConfig[RUN_FUNCTION_CONFIG_SYMBOL] = {\n\t\ticon: \"diagram-project\",\n\t\tinspectorFactory: (actor) => {\n\t\t\tconst actorId = resolveWorkflowInspectorActorId(actor);\n\t\t\treturn {\n\t\t\t\tworkflow: actorId\n\t\t\t\t\t? getWorkflowInspector(actorId).adapter\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tgetHistory: () => null,\n\t\t\t\t\t\t\tonHistoryUpdated: () => () => {},\n\t\t\t\t\t\t\treplayFromStep: async () => null,\n\t\t\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n\n\treturn runWithConfig;\n}\n\nfunction resolveWorkflowInspectorActorId(actor: unknown): string | undefined {\n\tif (typeof actor === \"string\" && actor.length > 0) {\n\t\treturn actor;\n\t}\n\n\tif (!actor || typeof actor !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\tconst candidate = actor as {\n\t\tid?: unknown;\n\t\tactorId?: unknown;\n\t};\n\tif (typeof candidate.id === \"string\" && candidate.id.length > 0) {\n\t\treturn candidate.id;\n\t}\n\tif (typeof candidate.actorId === \"string\" && candidate.actorId.length > 0) {\n\t\treturn candidate.actorId;\n\t}\n\n\treturn undefined;\n}\n","export const WORKFLOW_GUARD_KV_KEY = \"__rivet_actor_workflow_guard_triggered\";\n","// @ts-nocheck\n\nimport type {\n\tBranchConfig,\n\tBranchOutput,\n\tEntryKindType,\n\tLoopConfig,\n\tLoopResult,\n\tStepConfig,\n\tTryBlockConfig,\n\tTryBlockResult,\n\tTryStepConfig,\n\tTryStepResult,\n\tWorkflowContextInterface,\n\tWorkflowQueueMessage,\n} from \"@rivetkit/workflow-engine\";\nimport type {\n\tQueueFilterName,\n\tQueueNextBatchOptions,\n\tQueueNextOptions,\n\tQueueResultMessageForName,\n} from \"@/actor/config\";\nimport { RAW_STATE_SYMBOL, type RunContext } from \"@/actor/config\";\nimport type {\n\tAnyActorDefinition,\n\tBaseActorDefinition,\n} from \"@/actor/definition\";\nimport type {\n\tEventSchemaConfig,\n\tInferEventArgs,\n\tInferSchemaMap,\n\tQueueSchemaConfig,\n} from \"@/actor/schema\";\nimport type { Client } from \"@/client/client\";\nimport type {\n\tAnyDatabaseProvider,\n\tInferDatabaseClient,\n} from \"@/common/database/config\";\nimport type { Registry } from \"@/registry\";\nimport { WORKFLOW_GUARD_KV_KEY } from \"./constants\";\n\ntype WorkflowActorQueueNextOptions<\n\tTName extends string,\n\tTCompletable extends boolean,\n> = Omit<QueueNextOptions<TName, TCompletable>, \"signal\">;\n\ntype WorkflowActorQueueNextOptionsFallback<TCompletable extends boolean> = Omit<\n\tQueueNextOptions<string, TCompletable>,\n\t\"signal\"\n>;\n\ntype WorkflowActorQueueNextBatchOptions<\n\tTName extends string,\n\tTCompletable extends boolean,\n> = Omit<QueueNextBatchOptions<TName, TCompletable>, \"signal\">;\n\ntype WorkflowActorQueueNextBatchOptionsFallback<TCompletable extends boolean> =\n\tOmit<QueueNextBatchOptions<string, TCompletable>, \"signal\">;\n\ntype ActorWorkflowLoopConfig<\n\tS,\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = Omit<LoopConfig<S, T>, \"run\"> & {\n\trun: (\n\t\tctx: ActorWorkflowContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tstate: S,\n\t) => Promise<\n\t\tLoopResult<S, T> | (S extends undefined ? undefined | void : never)\n\t>;\n};\n\ntype ActorWorkflowBranchConfig<\n\tTOutput,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = {\n\trun: (\n\t\tctx: ActorWorkflowContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => Promise<TOutput>;\n};\n\nexport class ActorWorkflowContext<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> implements WorkflowContextInterface\n{\n\t#inner: WorkflowContextInterface;\n\t#runCtx: RunContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\t#actorAccessDepth = 0;\n\t#allowActorAccess = false;\n\t#guardViolation = false;\n\n\tconstructor(\n\t\tinner: WorkflowContextInterface,\n\t\trunCtx: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) {\n\t\tthis.#inner = inner;\n\t\tthis.#runCtx = runCtx;\n\t}\n\n\tget workflowId(): string {\n\t\treturn this.#inner.workflowId;\n\t}\n\n\tget abortSignal(): AbortSignal {\n\t\treturn this.#inner.abortSignal;\n\t}\n\n\tget queue() {\n\t\tconst self = this;\n\t\tfunction next<\n\t\t\tconst TName extends QueueFilterName<TQueues>,\n\t\t\tconst TCompletable extends boolean = false,\n\t\t>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextOptions<TName, TCompletable>,\n\t\t): Promise<QueueResultMessageForName<TQueues, TName, TCompletable>>;\n\t\tfunction next<const TCompletable extends boolean = false>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextOptionsFallback<TCompletable>,\n\t\t): Promise<\n\t\t\tQueueResultMessageForName<\n\t\t\t\tTQueues,\n\t\t\t\tQueueFilterName<TQueues>,\n\t\t\t\tTCompletable\n\t\t\t>\n\t\t>;\n\t\tasync function next(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextOptions<string, boolean>,\n\t\t): Promise<WorkflowQueueMessage<unknown>> {\n\t\t\tconst message = await self.#inner.queue.next(name, opts);\n\t\t\treturn self.#toActorQueueMessage(message);\n\t\t}\n\n\t\tfunction nextBatch<\n\t\t\tconst TName extends QueueFilterName<TQueues>,\n\t\t\tconst TCompletable extends boolean = false,\n\t\t>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextBatchOptions<TName, TCompletable>,\n\t\t): Promise<\n\t\t\tArray<QueueResultMessageForName<TQueues, TName, TCompletable>>\n\t\t>;\n\t\tfunction nextBatch<const TCompletable extends boolean = false>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextBatchOptionsFallback<TCompletable>,\n\t\t): Promise<\n\t\t\tArray<\n\t\t\t\tQueueResultMessageForName<\n\t\t\t\t\tTQueues,\n\t\t\t\t\tQueueFilterName<TQueues>,\n\t\t\t\t\tTCompletable\n\t\t\t\t>\n\t\t\t>\n\t\t>;\n\t\tasync function nextBatch(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextBatchOptions<string, boolean>,\n\t\t): Promise<Array<WorkflowQueueMessage<unknown>>> {\n\t\t\tconst messages = await self.#inner.queue.nextBatch(name, opts);\n\t\t\treturn messages.map((message) =>\n\t\t\t\tself.#toActorQueueMessage(message),\n\t\t\t);\n\t\t}\n\n\t\tfunction send<K extends keyof TQueues & string>(\n\t\t\tname: K,\n\t\t\tbody: InferSchemaMap<TQueues>[K],\n\t\t): Promise<void>;\n\t\tfunction send(\n\t\t\tname: keyof TQueues extends never ? string : never,\n\t\t\tbody: unknown,\n\t\t): Promise<void>;\n\t\tasync function send(name: string, body: unknown): Promise<void> {\n\t\t\tself.#ensureActorAccess(\"queue.send\");\n\t\t\tawait self.#runCtx.queue.send(name as never, body as never);\n\t\t}\n\n\t\treturn {\n\t\t\tnext,\n\t\t\tnextBatch,\n\t\t\tsend,\n\t\t};\n\t}\n\n\tasync step<T>(\n\t\tnameOrConfig: string | StepConfig<T>,\n\t\trun?: () => Promise<T>,\n\t): Promise<T> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Step run function missing\");\n\t\t\t}\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.step(nameOrConfig, () =>\n\t\t\t\t\tthis.#withActorAccessAndStateRollback(run),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst stepConfig = nameOrConfig as StepConfig<T>;\n\t\tconst config: StepConfig<T> = {\n\t\t\t...stepConfig,\n\t\t\trun: () => this.#withActorAccessAndStateRollback(stepConfig.run),\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.step(config));\n\t}\n\n\tasync tryStep<T>(\n\t\tnameOrConfig: string | TryStepConfig<T>,\n\t\trun?: () => Promise<T>,\n\t): Promise<TryStepResult<T>> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Step run function missing\");\n\t\t\t}\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.tryStep(nameOrConfig, () =>\n\t\t\t\t\tthis.#withActorAccessAndStateRollback(run),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst stepConfig = nameOrConfig as TryStepConfig<T>;\n\t\tconst config: TryStepConfig<T> = {\n\t\t\t...stepConfig,\n\t\t\trun: () => this.#withActorAccessAndStateRollback(stepConfig.run),\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.tryStep(config));\n\t}\n\n\tasync try<T>(\n\t\tnameOrConfig: string | Parameters<WorkflowContextInterface[\"try\"]>[0],\n\t\trun?: (\n\t\t\tctx: ActorWorkflowContext<\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t) => Promise<T>,\n\t): Promise<TryBlockResult<T>> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Try run function missing\");\n\t\t\t}\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.try(nameOrConfig, async (ctx) =>\n\t\t\t\t\trun(this.#createChildContext(ctx)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst tryConfig = nameOrConfig as TryBlockConfig<T>;\n\t\tconst config: TryBlockConfig<T> = {\n\t\t\t...tryConfig,\n\t\t\trun: async (ctx) => tryConfig.run(this.#createChildContext(ctx)),\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.try(config));\n\t}\n\n\tasync loop<T>(\n\t\tname: string,\n\t\trun: (\n\t\t\tctx: ActorWorkflowContext<\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t) => Promise<LoopResult<undefined, T> | undefined | void>,\n\t): Promise<T>;\n\tasync loop<T>(\n\t\tname: string,\n\t\trun: (\n\t\t\tctx: WorkflowContextInterface,\n\t\t) => Promise<LoopResult<undefined, T> | undefined | void>,\n\t): Promise<T>;\n\tasync loop<S, T>(\n\t\tconfig: ActorWorkflowLoopConfig<\n\t\t\tS,\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<T>;\n\tasync loop<S, T>(config: LoopConfig<S, T>): Promise<T>;\n\tasync loop(\n\t\tnameOrConfig:\n\t\t\t| string\n\t\t\t| LoopConfig<any, any>\n\t\t\t| ActorWorkflowLoopConfig<\n\t\t\t\t\tany,\n\t\t\t\t\tany,\n\t\t\t\t\tTState,\n\t\t\t\t\tTConnParams,\n\t\t\t\t\tTConnState,\n\t\t\t\t\tTVars,\n\t\t\t\t\tTInput,\n\t\t\t\t\tTDatabase,\n\t\t\t\t\tTEvents,\n\t\t\t\t\tTQueues\n\t\t\t >,\n\t\trun?: (\n\t\t\tctx: ActorWorkflowContext<\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t) => Promise<LoopResult<undefined, any> | undefined | void>,\n\t): Promise<any> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Loop run function missing\");\n\t\t\t}\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.loop(nameOrConfig, async (ctx) =>\n\t\t\t\t\trun(this.#createChildContext(ctx)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst wrapped: LoopConfig<any, any> = {\n\t\t\t...nameOrConfig,\n\t\t\trun: async (ctx, state) =>\n\t\t\t\tnameOrConfig.run(this.#createChildContext(ctx), state),\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.loop(wrapped));\n\t}\n\n\tsleep(name: string, durationMs: number): Promise<void> {\n\t\treturn this.#inner.sleep(name, durationMs);\n\t}\n\n\tsleepUntil(name: string, timestampMs: number): Promise<void> {\n\t\treturn this.#inner.sleepUntil(name, timestampMs);\n\t}\n\n\tdestroy(): void {\n\t\tthis.#ensureActorAccess(\"destroy\");\n\t\tthis.#runCtx.destroy();\n\t}\n\n\tasync rollbackCheckpoint(name: string): Promise<void> {\n\t\tawait this.#wrapActive(() => this.#inner.rollbackCheckpoint(name));\n\t}\n\n\tasync join<\n\t\tT extends Record<\n\t\t\tstring,\n\t\t\tActorWorkflowBranchConfig<\n\t\t\t\tunknown,\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>\n\t\t>,\n\t>(\n\t\tname: string,\n\t\tbranches: T,\n\t): Promise<{ [K in keyof T]: Awaited<ReturnType<T[K][\"run\"]>> }>;\n\tasync join<T extends Record<string, BranchConfig<unknown>>>(\n\t\tname: string,\n\t\tbranches: T,\n\t): Promise<{ [K in keyof T]: BranchOutput<T[K]> }>;\n\tasync join(name: string, branches: Record<string, BranchConfig<unknown>>) {\n\t\tconst wrappedBranches = Object.fromEntries(\n\t\t\tObject.entries(branches).map(([key, branch]) => [\n\t\t\t\tkey,\n\t\t\t\t{\n\t\t\t\t\trun: async (ctx: WorkflowContextInterface) =>\n\t\t\t\t\t\tbranch.run(this.#createChildContext(ctx)),\n\t\t\t\t},\n\t\t\t]),\n\t\t) as Record<string, BranchConfig<unknown>>;\n\t\treturn await this.#wrapActive(() =>\n\t\t\tthis.#inner.join(name, wrappedBranches),\n\t\t);\n\t}\n\n\tasync race<T>(\n\t\tname: string,\n\t\tbranches: Array<{\n\t\t\tname: string;\n\t\t\trun: (\n\t\t\t\tctx: ActorWorkflowContext<\n\t\t\t\t\tTState,\n\t\t\t\t\tTConnParams,\n\t\t\t\t\tTConnState,\n\t\t\t\t\tTVars,\n\t\t\t\t\tTInput,\n\t\t\t\t\tTDatabase,\n\t\t\t\t\tTEvents,\n\t\t\t\t\tTQueues\n\t\t\t\t>,\n\t\t\t) => Promise<T>;\n\t\t}>,\n\t): Promise<{ winner: string; value: T }>;\n\tasync race<T>(\n\t\tname: string,\n\t\tbranches: Array<{\n\t\t\tname: string;\n\t\t\trun: (ctx: WorkflowContextInterface) => Promise<T>;\n\t\t}>,\n\t): Promise<{ winner: string; value: T }> {\n\t\tconst wrappedBranches = branches.map((branch) => ({\n\t\t\tname: branch.name,\n\t\t\trun: (ctx: WorkflowContextInterface) =>\n\t\t\t\tbranch.run(this.#createChildContext(ctx)),\n\t\t}));\n\t\treturn (await this.#wrapActive(() =>\n\t\t\tthis.#inner.race(name, wrappedBranches),\n\t\t)) as { winner: string; value: T };\n\t}\n\n\tasync removed(name: string, originalType: EntryKindType): Promise<void> {\n\t\tawait this.#wrapActive(() => this.#inner.removed(name, originalType));\n\t}\n\n\tisEvicted(): boolean {\n\t\treturn this.#inner.isEvicted();\n\t}\n\n\tget state(): TState extends never ? never : TState {\n\t\tthis.#ensureActorAccess(\"state\");\n\t\treturn this.#runCtx.state as TState extends never ? never : TState;\n\t}\n\n\tget vars(): TVars extends never ? never : TVars {\n\t\tthis.#ensureActorAccess(\"vars\");\n\t\treturn this.#runCtx.vars as TVars extends never ? never : TVars;\n\t}\n\n\tclient<R extends Registry<any> = Registry<any>>(): Client<R> {\n\t\tthis.#ensureActorAccess(\"client\");\n\t\treturn this.#runCtx.client<R>();\n\t}\n\n\tget db(): TDatabase extends never ? never : InferDatabaseClient<TDatabase> {\n\t\tthis.#ensureActorAccess(\"db\");\n\t\treturn this.#runCtx.db as TDatabase extends never\n\t\t\t? never\n\t\t\t: InferDatabaseClient<TDatabase>;\n\t}\n\n\tget log() {\n\t\treturn this.#runCtx.log;\n\t}\n\n\t/** @deprecated No-op. Use `keepAwake(promise)` or `waitUntil(promise)` instead. */\n\tsetPreventSleep(_prevent: boolean): void {\n\t\tthis.#ensureActorAccess(\"setPreventSleep\");\n\t}\n\n\t/** @deprecated No-op. Always returns `false`. */\n\tget preventSleep(): boolean {\n\t\tthis.#ensureActorAccess(\"preventSleep\");\n\t\treturn false;\n\t}\n\n\t/**\n\t * Holds the actor awake for the duration of the provided promise. The\n\t * actor cannot idle-sleep or finalize the sleep grace period until the\n\t * promise settles.\n\t */\n\tkeepAwake<T>(promise: Promise<T>): Promise<T> {\n\t\tthis.#ensureActorAccess(\"keepAwake\");\n\t\treturn this.#runCtx.keepAwake(promise);\n\t}\n\n\t/**\n\t * Registers a promise that the sleep grace period will wait on. Use this\n\t * for best-effort flush/cleanup work that may complete inside the grace\n\t * window. For work the actor must stay running through, prefer\n\t * `c.keepAwake(promise)` which also blocks idle sleep.\n\t */\n\twaitUntil(promise: Promise<void>): void {\n\t\tthis.#ensureActorAccess(\"waitUntil\");\n\t\tthis.#runCtx.waitUntil(promise);\n\t}\n\n\tget actorId(): string {\n\t\treturn this.#runCtx.actorId;\n\t}\n\n\tbroadcast<K extends keyof TEvents & string>(\n\t\tname: K,\n\t\t...args: InferEventArgs<InferSchemaMap<TEvents>[K]>\n\t): void;\n\tbroadcast(\n\t\tname: keyof TEvents extends never ? string : never,\n\t\t...args: Array<unknown>\n\t): void;\n\tbroadcast(name: string, ...args: Array<unknown>): void {\n\t\tthis.#ensureActorAccess(\"broadcast\");\n\t\tthis.#runCtx.broadcast(\n\t\t\tname as never,\n\t\t\t...(args as unknown[] as never[]),\n\t\t);\n\t}\n\n\t#toActorQueueMessage<T>(\n\t\tmessage: WorkflowQueueMessage<T>,\n\t): WorkflowQueueMessage<T> & { id: bigint } {\n\t\tlet id: bigint;\n\t\ttry {\n\t\t\tid = BigInt(message.id);\n\t\t} catch {\n\t\t\tthrow new Error(`Invalid queue message id \"${message.id}\"`);\n\t\t}\n\t\treturn {\n\t\t\tid,\n\t\t\tname: message.name,\n\t\t\tbody: message.body,\n\t\t\tcreatedAt: message.createdAt,\n\t\t\t...(message.complete ? { complete: message.complete } : {}),\n\t\t};\n\t}\n\n\tasync #wrapActive<T>(run: () => Promise<T>): Promise<T> {\n\t\treturn await this.#runCtx.internalKeepAwake(run);\n\t}\n\n\tasync #withActorAccess<T>(run: () => Promise<T>): Promise<T> {\n\t\tthis.#actorAccessDepth++;\n\t\tif (this.#actorAccessDepth === 1) {\n\t\t\tthis.#allowActorAccess = true;\n\t\t}\n\t\ttry {\n\t\t\treturn await run();\n\t\t} finally {\n\t\t\tthis.#actorAccessDepth--;\n\t\t\tif (this.#actorAccessDepth === 0) {\n\t\t\t\tthis.#allowActorAccess = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync #withActorAccessAndStateRollback<T>(\n\t\trun: () => Promise<T>,\n\t): Promise<T> {\n\t\tlet stateSnapshot: { state: TState } | null = null;\n\t\ttry {\n\t\t\tstateSnapshot = { state: this.#runCtx[RAW_STATE_SYMBOL]() };\n\t\t} catch (error) {\n\t\t\tthis.#runCtx.log.debug({\n\t\t\t\tmsg: \"failed to get state, likely due to being stateless workflow\",\n\t\t\t\terror,\n\t\t\t});\n\t\t}\n\t\tif (stateSnapshot) {\n\t\t\tstateSnapshot.state = structuredClone(stateSnapshot.state);\n\t\t}\n\t\tconst varsSnapshot = structuredClone(this.#runCtx.vars);\n\t\ttry {\n\t\t\treturn await this.#withActorAccess(run);\n\t\t} catch (error) {\n\t\t\tif (stateSnapshot) {\n\t\t\t\tthis.#runCtx.state = stateSnapshot.state;\n\t\t\t}\n\t\t\tthis.#runCtx.vars = varsSnapshot;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t#ensureActorAccess(feature: string): void {\n\t\tif (!this.#allowActorAccess) {\n\t\t\tthis.#guardViolation = true;\n\t\t\tthis.#markGuardTriggered();\n\t\t\tthrow new Error(\n\t\t\t\t`${feature} is only available inside workflow steps`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconsumeGuardViolation(): boolean {\n\t\tconst violated = this.#guardViolation;\n\t\tthis.#guardViolation = false;\n\t\treturn violated;\n\t}\n\n\t#markGuardTriggered(): void {\n\t\ttry {\n\t\t\tconst state = this.#runCtx.state as Record<string, unknown>;\n\t\t\tif (\n\t\t\t\tstate &&\n\t\t\t\ttypeof state === \"object\" &&\n\t\t\t\t\"guardTriggered\" in state\n\t\t\t) {\n\t\t\t\t(state as Record<string, unknown>).guardTriggered = true;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore if state is unavailable\n\t\t}\n\n\t\tthis.#runCtx.waitUntil(\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#runCtx.kv.put(WORKFLOW_GUARD_KV_KEY, \"true\");\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.#runCtx.log.error({\n\t\t\t\t\t\tmsg: \"failed to persist workflow guard flag\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})(),\n\t\t);\n\t}\n\n\t#createChildContext(\n\t\tctx: WorkflowContextInterface,\n\t): ActorWorkflowContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> {\n\t\treturn new ActorWorkflowContext(ctx, this.#runCtx);\n\t}\n}\n\nexport type WorkflowContextOf<AD extends AnyActorDefinition> =\n\tAD extends BaseActorDefinition<\n\t\tinfer S,\n\t\tinfer CP,\n\t\tinfer CS,\n\t\tinfer V,\n\t\tinfer I,\n\t\tinfer DB extends AnyDatabaseProvider,\n\t\tinfer E extends EventSchemaConfig,\n\t\tinfer Q extends QueueSchemaConfig,\n\t\tany\n\t>\n\t\t? ActorWorkflowContext<S, CP, CS, V, I, DB, E, Q>\n\t\t: never;\n\nexport type WorkflowLoopContextOf<AD extends AnyActorDefinition> =\n\tWorkflowContextOf<AD>;\n\nexport type WorkflowBranchContextOf<AD extends AnyActorDefinition> =\n\tWorkflowContextOf<AD>;\n\nexport type WorkflowStepContextOf<AD extends AnyActorDefinition> =\n\tWorkflowContextOf<AD>;\n","// @ts-nocheck\n\nimport type {\n\tEngineDriver,\n\tKVEntry,\n\tKVWrite,\n\tMessage,\n\tWorkflowMessageDriver,\n} from \"@rivetkit/workflow-engine\";\nimport type { RunContext } from \"@/actor/config\";\nimport type { AnyStaticActorInstance } from \"@/actor/definition\";\nimport { makeWorkflowKey, workflowStoragePrefix } from \"@/actor/keys\";\n\nconst WORKFLOW_STORAGE_PREFIX = workflowStoragePrefix();\n\nfunction stripWorkflowKey(prefixed: Uint8Array): Uint8Array {\n\treturn prefixed.slice(WORKFLOW_STORAGE_PREFIX.length);\n}\n\nfunction computeUpperBound(prefix: Uint8Array): Uint8Array | null {\n\tconst upperBound = prefix.slice();\n\tfor (let i = upperBound.length - 1; i >= 0; i--) {\n\t\tif (upperBound[i] !== 0xff) {\n\t\t\tupperBound[i]++;\n\t\t\treturn upperBound.slice(0, i + 1);\n\t\t}\n\t}\n\treturn null;\n}\n\nclass ActorWorkflowMessageDriver implements WorkflowMessageDriver {\n\t#actor: AnyStaticActorInstance;\n\t#runCtx: RunContext<any, any, any, any, any, any, any, any>;\n\n\tconstructor(\n\t\tactor: AnyStaticActorInstance,\n\t\trunCtx: RunContext<any, any, any, any, any, any, any, any>,\n\t) {\n\t\tthis.#actor = actor;\n\t\tthis.#runCtx = runCtx;\n\t}\n\n\tasync addMessage(message: Message): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.queueManager.enqueue(message.name, message.data),\n\t\t);\n\t}\n\n\tasync receiveMessages(opts: {\n\t\tnames?: readonly string[];\n\t\tcount: number;\n\t\tcompletable: boolean;\n\t}): Promise<Message[]> {\n\t\tconst messages = await this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.queueManager.receive(\n\t\t\t\topts.names && opts.names.length > 0\n\t\t\t\t\t? [...opts.names]\n\t\t\t\t\t: undefined,\n\t\t\t\topts.count,\n\t\t\t\t0,\n\t\t\t\tundefined,\n\t\t\t\topts.completable,\n\t\t\t),\n\t\t);\n\t\treturn messages.map((message) => ({\n\t\t\tid: message.id.toString(),\n\t\t\tname: message.name,\n\t\t\tdata: message.body,\n\t\t\tsentAt: message.createdAt,\n\t\t\t...(opts.completable\n\t\t\t\t? {\n\t\t\t\t\t\tcomplete: async (response?: unknown) => {\n\t\t\t\t\t\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\t\t\t\t\t\tthis.#actor.queueManager.completeMessage(\n\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t}));\n\t}\n\n\tasync completeMessage(\n\t\tmessageId: string,\n\t\tresponse?: unknown,\n\t): Promise<void> {\n\t\tlet parsedId: bigint;\n\t\ttry {\n\t\t\tparsedId = BigInt(messageId);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.queueManager.completeMessageById(parsedId, response),\n\t\t);\n\t}\n}\n\nexport class ActorWorkflowDriver implements EngineDriver {\n\treadonly workerPollInterval = 100;\n\treadonly messageDriver: WorkflowMessageDriver;\n\t#actor: AnyStaticActorInstance;\n\t#runCtx: RunContext<any, any, any, any, any, any, any, any>;\n\n\tconstructor(\n\t\tactor: AnyStaticActorInstance,\n\t\trunCtx: RunContext<any, any, any, any, any, any, any, any>,\n\t) {\n\t\tthis.#actor = actor;\n\t\tthis.#runCtx = runCtx;\n\t\tthis.messageDriver = new ActorWorkflowMessageDriver(actor, runCtx);\n\t}\n\n\tasync get(key: Uint8Array): Promise<Uint8Array | null> {\n\t\tconst [value] = await this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvBatchGet(this.#actor.id, [\n\t\t\t\tmakeWorkflowKey(key),\n\t\t\t]),\n\t\t);\n\t\treturn value ?? null;\n\t}\n\n\tasync set(key: Uint8Array, value: Uint8Array): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvBatchPut(this.#actor.id, [\n\t\t\t\t[makeWorkflowKey(key), value],\n\t\t\t]),\n\t\t);\n\t}\n\n\tasync delete(key: Uint8Array): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvBatchDelete(this.#actor.id, [\n\t\t\t\tmakeWorkflowKey(key),\n\t\t\t]),\n\t\t);\n\t}\n\n\tasync deletePrefix(prefix: Uint8Array): Promise<void> {\n\t\tconst start = makeWorkflowKey(prefix);\n\t\tconst end = computeUpperBound(start);\n\t\tif (end) {\n\t\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\t\tthis.#actor.driver.kvDeleteRange(this.#actor.id, start, end),\n\t\t\t);\n\t\t} else {\n\t\t\tconst entries = await this.#runCtx.internalKeepAwake(\n\t\t\t\tthis.#actor.driver.kvListPrefix(this.#actor.id, start),\n\t\t\t);\n\t\t\tif (entries.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\t\tthis.#actor.driver.kvBatchDelete(\n\t\t\t\t\tthis.#actor.id,\n\t\t\t\t\tentries.map(([key]) => key),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tasync deleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvDeleteRange(\n\t\t\t\tthis.#actor.id,\n\t\t\t\tmakeWorkflowKey(start),\n\t\t\t\tmakeWorkflowKey(end),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync list(prefix: Uint8Array): Promise<KVEntry[]> {\n\t\tconst entries = await this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvListPrefix(\n\t\t\t\tthis.#actor.id,\n\t\t\t\tmakeWorkflowKey(prefix),\n\t\t\t),\n\t\t);\n\t\treturn entries.map(([key, value]) => ({\n\t\t\tkey: stripWorkflowKey(key),\n\t\t\tvalue,\n\t\t}));\n\t}\n\n\tasync batch(writes: KVWrite[]): Promise<void> {\n\t\tif (writes.length === 0) return;\n\n\t\t// Flush actor state together with workflow state to ensure atomicity.\n\t\t// If the server crashes after workflow flush, actor state must also be persisted.\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tPromise.all([\n\t\t\t\tthis.#actor.driver.kvBatchPut(\n\t\t\t\t\tthis.#actor.id,\n\t\t\t\t\twrites.map(({ key, value }) => [\n\t\t\t\t\t\tmakeWorkflowKey(key),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tthis.#actor.stateManager.saveState({\n\t\t\t\t\timmediate: true,\n\t\t\t\t}),\n\t\t\t]),\n\t\t);\n\t}\n\n\tasync setAlarm(_workflowId: string, wakeAt: number): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.setAlarm(this.#actor, wakeAt),\n\t\t);\n\t}\n\n\tasync clearAlarm(_workflowId: string): Promise<void> {\n\t\t// No dedicated clear alarm support in actor drivers.\n\t\treturn;\n\t}\n\n\twaitForMessages(\n\t\tmessageNames: string[],\n\t\tabortSignal: AbortSignal,\n\t): Promise<void> {\n\t\treturn this.#actor.queueManager.waitForNames(\n\t\t\tmessageNames.length > 0 ? messageNames : undefined,\n\t\t\tabortSignal,\n\t\t);\n\t}\n}\n\nclass NoopWorkflowMessageDriver implements WorkflowMessageDriver {\n\tasync addMessage(_message: Message): Promise<void> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n\n\tasync receiveMessages(_opts: {\n\t\tnames?: readonly string[];\n\t\tcount: number;\n\t\tcompletable: boolean;\n\t}): Promise<Message[]> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n\n\tasync completeMessage(\n\t\t_messageId: string,\n\t\t_response?: unknown,\n\t): Promise<void> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n}\n\nexport class ActorWorkflowControlDriver implements EngineDriver {\n\treadonly workerPollInterval = 100;\n\treadonly messageDriver: WorkflowMessageDriver =\n\t\tnew NoopWorkflowMessageDriver();\n\t#actor: AnyStaticActorInstance;\n\n\tconstructor(actor: AnyStaticActorInstance) {\n\t\tthis.#actor = actor;\n\t}\n\n\tasync get(key: Uint8Array): Promise<Uint8Array | null> {\n\t\tconst [value] = await this.#actor.driver.kvBatchGet(this.#actor.id, [\n\t\t\tmakeWorkflowKey(key),\n\t\t]);\n\t\treturn value ?? null;\n\t}\n\n\tasync set(key: Uint8Array, value: Uint8Array): Promise<void> {\n\t\tawait this.#actor.driver.kvBatchPut(this.#actor.id, [\n\t\t\t[makeWorkflowKey(key), value],\n\t\t]);\n\t}\n\n\tasync delete(key: Uint8Array): Promise<void> {\n\t\tawait this.#actor.driver.kvBatchDelete(this.#actor.id, [\n\t\t\tmakeWorkflowKey(key),\n\t\t]);\n\t}\n\n\tasync deletePrefix(prefix: Uint8Array): Promise<void> {\n\t\tconst start = makeWorkflowKey(prefix);\n\t\tconst end = computeUpperBound(start);\n\t\tif (end) {\n\t\t\tawait this.#actor.driver.kvDeleteRange(this.#actor.id, start, end);\n\t\t\treturn;\n\t\t}\n\n\t\tconst entries = await this.#actor.driver.kvListPrefix(\n\t\t\tthis.#actor.id,\n\t\t\tstart,\n\t\t);\n\t\tif (entries.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tawait this.#actor.driver.kvBatchDelete(\n\t\t\tthis.#actor.id,\n\t\t\tentries.map(([key]) => key),\n\t\t);\n\t}\n\n\tasync deleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait this.#actor.driver.kvDeleteRange(\n\t\t\tthis.#actor.id,\n\t\t\tmakeWorkflowKey(start),\n\t\t\tmakeWorkflowKey(end),\n\t\t);\n\t}\n\n\tasync list(prefix: Uint8Array): Promise<KVEntry[]> {\n\t\tconst entries = await this.#actor.driver.kvListPrefix(\n\t\t\tthis.#actor.id,\n\t\t\tmakeWorkflowKey(prefix),\n\t\t);\n\t\treturn entries.map(([key, value]) => ({\n\t\t\tkey: stripWorkflowKey(key),\n\t\t\tvalue,\n\t\t}));\n\t}\n\n\tasync batch(writes: KVWrite[]): Promise<void> {\n\t\tif (writes.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.#actor.driver.kvBatchPut(\n\t\t\tthis.#actor.id,\n\t\t\twrites.map(({ key, value }) => [makeWorkflowKey(key), value]),\n\t\t);\n\t}\n\n\tasync setAlarm(_workflowId: string, wakeAt: number): Promise<void> {\n\t\tawait this.#actor.driver.setAlarm(this.#actor, wakeAt);\n\t}\n\n\tasync clearAlarm(_workflowId: string): Promise<void> {\n\t\treturn;\n\t}\n\n\twaitForMessages(\n\t\t_messageNames: string[],\n\t\t_abortSignal: AbortSignal,\n\t): Promise<void> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/workflow/mod.ts","../../../src/workflow/constants.ts","../../../src/workflow/context.ts","../../../src/workflow/driver.ts"],"sourcesContent":["import {\n\tCriticalError,\n\tEntryInProgressError,\n\tHistoryDivergedError,\n\tJoinError,\n\tRaceError,\n\tRollbackCheckpointError,\n\tRollbackError,\n\treplayWorkflowFromStep,\n\ttype RunWorkflowOptions,\n\trunWorkflow,\n\tStepExhaustedError,\n\ttype WorkflowErrorEvent,\n} from \"@rivetkit/workflow-engine\";\nimport invariant from \"invariant\";\nimport type { RunContext } from \"@/actor/config\";\nimport {\n\tACTOR_CONTEXT_INTERNAL_SYMBOL,\n\tRUN_FUNCTION_CONFIG_SYMBOL,\n} from \"@/actor/config\";\nimport type { AnyStaticActorInstance } from \"@/actor/definition\";\nimport { isActorAbortedError, RivetError } from \"@/actor/errors\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"@/actor/schema\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport { stringifyError } from \"@/utils\";\nimport { WorkflowContext } from \"./context\";\nimport { ActorWorkflowControlDriver, ActorWorkflowDriver } from \"./driver\";\nimport { createWorkflowInspectorAdapter } from \"./inspector\";\n\nexport type {\n\tTryBlockCatchKind,\n\tTryBlockConfig,\n\tTryBlockFailure,\n\tTryBlockResult,\n\tTryStepCatchKind,\n\tTryStepConfig,\n\tTryStepFailure,\n\tTryStepResult,\n\tWorkflowError,\n\tWorkflowErrorEvent,\n} from \"@rivetkit/workflow-engine\";\nexport { Loop } from \"@rivetkit/workflow-engine\";\nexport {\n\ttype WorkflowBranchConfig,\n\ttype WorkflowBranchContextOf,\n\tWorkflowContext,\n\ttype WorkflowContextOf,\n\ttype WorkflowLoopConfig,\n\ttype WorkflowLoopContextOf,\n\ttype WorkflowStepConfig,\n\tWorkflowStepContext,\n\ttype WorkflowStepContextOf,\n\ttype WorkflowTryConfig,\n\ttype WorkflowTryStepConfig,\n} from \"./context\";\n\nfunction shouldRethrowWorkflowError(error: unknown): boolean {\n\tif (\n\t\terror instanceof CriticalError ||\n\t\terror instanceof JoinError ||\n\t\terror instanceof RaceError ||\n\t\terror instanceof RollbackError ||\n\t\terror instanceof StepExhaustedError\n\t) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\terror instanceof EntryInProgressError ||\n\t\terror instanceof HistoryDivergedError ||\n\t\terror instanceof RollbackCheckpointError\n\t) {\n\t\treturn true;\n\t}\n\n\treturn true;\n}\n\nfunction workflowReplayInFlightError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"workflow_in_flight\",\n\t\t\"Workflow replay is unavailable while the workflow is currently in flight.\",\n\t\t{\n\t\t\tpublic: true,\n\t\t\tstatusCode: 409,\n\t\t},\n\t);\n}\n\nfunction isWorkflowReplayBlockedByRunningEntry(error: unknown): boolean {\n\treturn (\n\t\terror instanceof Error &&\n\t\terror.message ===\n\t\t\t\"Cannot replay a workflow while a step is currently running\"\n\t);\n}\n\nexport interface WorkflowOptions<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\tonError?: (\n\t\tctx: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tevent: WorkflowErrorEvent,\n\t) => void | Promise<void>;\n}\n\nexport function workflow<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n>(\n\tfn: (\n\t\tctx: WorkflowContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => Promise<unknown>,\n\toptions: WorkflowOptions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> = {},\n): (\n\tc: RunContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n) => Promise<void> {\n\tconst onError = options.onError;\n\tconst workflowInspectors = new Map<\n\t\tstring,\n\t\tReturnType<typeof createWorkflowInspectorAdapter>\n\t>();\n\n\tfunction getWorkflowInspector(actorId: string) {\n\t\tlet workflowInspector = workflowInspectors.get(actorId);\n\t\tif (!workflowInspector) {\n\t\t\tworkflowInspector = createWorkflowInspectorAdapter();\n\t\t\tworkflowInspectors.set(actorId, workflowInspector);\n\t\t}\n\t\treturn workflowInspector;\n\t}\n\n\tasync function run(\n\t\trunCtx: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<void> {\n\t\tconst actor = (\n\t\t\trunCtx as unknown as {\n\t\t\t\t[ACTOR_CONTEXT_INTERNAL_SYMBOL]?: AnyStaticActorInstance;\n\t\t\t}\n\t\t)[ACTOR_CONTEXT_INTERNAL_SYMBOL];\n\t\tinvariant(actor, \"workflow() requires an actor instance\");\n\t\tconst workflowInspector = getWorkflowInspector(actor.id);\n\n\t\tconst driver = new ActorWorkflowDriver(actor, runCtx);\n\t\tconst controlDriver = new ActorWorkflowControlDriver(actor);\n\t\tworkflowInspector.setReplayFromStep(async (entryId) => {\n\t\t\tconst workflowState = await workflowInspector.adapter.getState();\n\t\t\tif (\n\t\t\t\tactor.isRunHandlerActive() ||\n\t\t\t\tworkflowState === \"pending\" ||\n\t\t\t\tworkflowState === \"running\"\n\t\t\t) {\n\t\t\t\tthrow workflowReplayInFlightError();\n\t\t\t}\n\n\t\t\tlet snapshot;\n\t\t\ttry {\n\t\t\t\tsnapshot = await replayWorkflowFromStep(\n\t\t\t\t\tactor.id,\n\t\t\t\t\tcontrolDriver,\n\t\t\t\t\tentryId,\n\t\t\t\t\t{ scheduleAlarm: false },\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (isWorkflowReplayBlockedByRunningEntry(error)) {\n\t\t\t\t\tthrow workflowReplayInFlightError();\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tworkflowInspector.update(snapshot);\n\t\t\tawait actor.restartRunHandler();\n\t\t\treturn workflowInspector.adapter.getHistory();\n\t\t});\n\n\t\tconst handle = runWorkflow(\n\t\t\tactor.id,\n\t\t\tasync (ctx) => await fn(new WorkflowContext(ctx, runCtx)),\n\t\t\tundefined,\n\t\t\tdriver,\n\t\t\t{\n\t\t\t\tmode: \"live\",\n\t\t\t\t// The actor logger and the engine's pino logger are runtime\n\t\t\t\t// compatible but not structurally assignable.\n\t\t\t\tlogger: runCtx.log as RunWorkflowOptions[\"logger\"],\n\t\t\t\tonHistoryUpdated: workflowInspector.update,\n\t\t\t\tonError: onError\n\t\t\t\t\t? async (event) => await onError(runCtx, event)\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t);\n\t\tworkflowInspector.setGetState(async () => await handle.getState());\n\n\t\tconst onAbort = () => {\n\t\t\thandle.evict();\n\t\t};\n\t\tif (runCtx.abortSignal.aborted) {\n\t\t\tonAbort();\n\t\t} else {\n\t\t\trunCtx.abortSignal.addEventListener(\"abort\", onAbort, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tawait handle.result;\n\t\t} catch (error) {\n\t\t\t// `abortSignal.aborted` is delivered on a separate async hop and\n\t\t\t// races the rejection, so detect the sleep abort structurally too.\n\t\t\tif (runCtx.abortSignal.aborted || isActorAbortedError(error)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (shouldRethrowWorkflowError(error)) {\n\t\t\t\trunCtx.log.error({\n\t\t\t\t\tmsg: \"workflow run failed\",\n\t\t\t\t\terror: stringifyError(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\trunCtx.log.warn({\n\t\t\t\tmsg: \"workflow failed and will sleep until woken\",\n\t\t\t\terror: stringifyError(error),\n\t\t\t});\n\t\t} finally {\n\t\t\trunCtx.abortSignal.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t}\n\n\tconst runWithConfig = run as typeof run & {\n\t\t[RUN_FUNCTION_CONFIG_SYMBOL]?: {\n\t\t\ticon?: string;\n\t\t\tinspectorFactory?: (actor: unknown) => unknown;\n\t\t\tdisposeInspector?: (actorId: string) => void;\n\t\t};\n\t};\n\trunWithConfig[RUN_FUNCTION_CONFIG_SYMBOL] = {\n\t\ticon: \"diagram-project\",\n\t\t// Drop the per-actor inspector when the actor is destroyed so this map\n\t\t// does not retain one inspector (and its encoded history) per actor id\n\t\t// for the process lifetime.\n\t\tdisposeInspector: (actorId) => {\n\t\t\tworkflowInspectors.delete(actorId);\n\t\t},\n\t\tinspectorFactory: (actor) => {\n\t\t\tconst actorId = resolveWorkflowInspectorActorId(actor);\n\t\t\treturn {\n\t\t\t\tworkflow: actorId\n\t\t\t\t\t? getWorkflowInspector(actorId).adapter\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tgetHistory: () => null,\n\t\t\t\t\t\t\tonHistoryUpdated: () => () => {},\n\t\t\t\t\t\t\treplayFromStep: async () => null,\n\t\t\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n\n\treturn runWithConfig;\n}\n\nfunction resolveWorkflowInspectorActorId(actor: unknown): string | undefined {\n\tif (typeof actor === \"string\" && actor.length > 0) {\n\t\treturn actor;\n\t}\n\n\tif (!actor || typeof actor !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\tconst candidate = actor as {\n\t\tid?: unknown;\n\t\tactorId?: unknown;\n\t};\n\tif (typeof candidate.id === \"string\" && candidate.id.length > 0) {\n\t\treturn candidate.id;\n\t}\n\tif (typeof candidate.actorId === \"string\" && candidate.actorId.length > 0) {\n\t\treturn candidate.actorId;\n\t}\n\n\treturn undefined;\n}\n","export const WORKFLOW_GUARD_KV_KEY = \"__rivet_actor_workflow_guard_triggered\";\n","import type {\n\tBranchConfig,\n\tBranchOutput,\n\tEntryKindType,\n\tLoopConfig,\n\tLoopResult,\n\tStepConfig,\n\tTryBlockConfig,\n\tTryBlockResult,\n\tTryStepConfig,\n\tTryStepResult,\n\tWorkflowContextInterface,\n\tWorkflowQueueMessage,\n} from \"@rivetkit/workflow-engine\";\nimport type {\n\tQueueFilterName,\n\tQueueNextBatchOptions,\n\tQueueNextOptions,\n\tQueueResultMessageForName,\n} from \"@/actor/config\";\nimport { RAW_STATE_SYMBOL, type RunContext } from \"@/actor/config\";\nimport type {\n\tAnyActorDefinition,\n\tBaseActorDefinition,\n} from \"@/actor/definition\";\nimport type {\n\tEventSchemaConfig,\n\tInferEventArgs,\n\tInferSchemaMap,\n\tQueueSchemaConfig,\n} from \"@/actor/schema\";\nimport type { Client } from \"@/client/client\";\nimport type {\n\tAnyDatabaseProvider,\n\tInferDatabaseClient,\n} from \"@/common/database/config\";\nimport type { Registry } from \"@/registry\";\nimport { WORKFLOW_GUARD_KV_KEY } from \"./constants\";\n\ntype WorkflowActorQueueNextOptions<\n\tTName extends string,\n\tTCompletable extends boolean,\n> = Omit<QueueNextOptions<TName, TCompletable>, \"signal\">;\n\ntype WorkflowActorQueueNextOptionsFallback<TCompletable extends boolean> = Omit<\n\tQueueNextOptions<string, TCompletable>,\n\t\"signal\"\n>;\n\ntype WorkflowActorQueueNextBatchOptions<\n\tTName extends string,\n\tTCompletable extends boolean,\n> = Omit<QueueNextBatchOptions<TName, TCompletable>, \"signal\">;\n\ntype WorkflowActorQueueNextBatchOptionsFallback<TCompletable extends boolean> =\n\tOmit<QueueNextBatchOptions<string, TCompletable>, \"signal\">;\n\n// Step run callbacks receive a WorkflowStepContext, which is the only place\n// actor data (state/db/vars/client) may be touched.\ntype WorkflowStepRun<\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = (\n\tstep: WorkflowStepContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n) => Promise<T>;\n\n// Step rollback callbacks compensate a committed step, so they also run with a\n// WorkflowStepContext to mutate actor data.\ntype WorkflowStepRollback<\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = (\n\tstep: WorkflowStepContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n\toutput: T,\n) => Promise<void>;\n\n// Orchestration callbacks (try/loop/race/join) receive a WorkflowContext,\n// because inside them you sequence further steps rather than touch actor data.\ntype WorkflowContextRun<\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = (\n\tctx: WorkflowContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n) => Promise<T>;\n\nexport type WorkflowStepConfig<\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = Omit<StepConfig<T>, \"run\" | \"rollback\"> & {\n\trun: WorkflowStepRun<\n\t\tT,\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\trollback?: WorkflowStepRollback<\n\t\tT,\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n};\n\nexport type WorkflowTryStepConfig<\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = Omit<TryStepConfig<T>, \"run\" | \"rollback\"> & {\n\trun: WorkflowStepRun<\n\t\tT,\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\trollback?: WorkflowStepRollback<\n\t\tT,\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n};\n\nexport type WorkflowTryConfig<\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = Omit<TryBlockConfig<T>, \"run\"> & {\n\trun: WorkflowContextRun<\n\t\tT,\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n};\n\nexport type WorkflowLoopConfig<\n\tS,\n\tT,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = Omit<LoopConfig<S, T>, \"run\"> & {\n\trun: (\n\t\tctx: WorkflowContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tstate: S,\n\t) => Promise<\n\t\tLoopResult<S, T> | (S extends undefined ? undefined | void : never)\n\t>;\n};\n\nexport type WorkflowBranchConfig<\n\tTOutput,\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> = {\n\trun: WorkflowContextRun<\n\t\tTOutput,\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n};\n\n// Marks a step context inactive once its step has finished. Module-private so it\n// never appears on the public surface.\nconst DEACTIVATE_STEP = Symbol(\"workflow.step.deactivate\");\n\n/**\n * The context handed to a workflow step (`step` / `tryStep` callbacks). This is\n * the only scope where actor data (state, vars, db, client) and side effects\n * (broadcast, queue.send) are reachable. It is valid only while its step is\n * executing; using it after the step resolves throws.\n */\nexport class WorkflowStepContext<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t#runCtx: RunContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\t#active = true;\n\t#onGuardViolation: () => void;\n\n\tconstructor(\n\t\trunCtx: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tonGuardViolation: () => void,\n\t) {\n\t\tthis.#runCtx = runCtx;\n\t\tthis.#onGuardViolation = onGuardViolation;\n\t}\n\n\t[DEACTIVATE_STEP](): void {\n\t\tthis.#active = false;\n\t}\n\n\t#ensureActive(feature: string): void {\n\t\tif (!this.#active) {\n\t\t\tthis.#onGuardViolation();\n\t\t\tthrow new Error(\n\t\t\t\t`${feature} is only available inside workflow steps`,\n\t\t\t);\n\t\t}\n\t}\n\n\tget actorId(): string {\n\t\treturn this.#runCtx.actorId;\n\t}\n\n\tget name(): string {\n\t\treturn this.#runCtx.name;\n\t}\n\n\tget key(): string[] {\n\t\treturn this.#runCtx.key;\n\t}\n\n\tget log() {\n\t\treturn this.#runCtx.log;\n\t}\n\n\tget abortSignal(): AbortSignal {\n\t\treturn this.#runCtx.abortSignal;\n\t}\n\n\tget state(): TState extends never ? never : TState {\n\t\tthis.#ensureActive(\"state\");\n\t\treturn this.#runCtx.state as TState extends never ? never : TState;\n\t}\n\n\tget vars(): TVars extends never ? never : TVars {\n\t\tthis.#ensureActive(\"vars\");\n\t\treturn this.#runCtx.vars as TVars extends never ? never : TVars;\n\t}\n\n\tget db(): TDatabase extends never ? never : InferDatabaseClient<TDatabase> {\n\t\tthis.#ensureActive(\"db\");\n\t\treturn this.#runCtx.db as TDatabase extends never\n\t\t\t? never\n\t\t\t: InferDatabaseClient<TDatabase>;\n\t}\n\n\tclient<R extends Registry<any> = Registry<any>>(): Client<R> {\n\t\tthis.#ensureActive(\"client\");\n\t\treturn this.#runCtx.client<R>();\n\t}\n\n\tbroadcast<K extends keyof TEvents & string>(\n\t\tname: K,\n\t\t...args: InferEventArgs<InferSchemaMap<TEvents>[K]>\n\t): void;\n\tbroadcast(\n\t\tname: keyof TEvents extends never ? string : never,\n\t\t...args: Array<unknown>\n\t): void;\n\tbroadcast(name: string, ...args: Array<unknown>): void {\n\t\tthis.#ensureActive(\"broadcast\");\n\t\tthis.#runCtx.broadcast(\n\t\t\tname as never,\n\t\t\t...(args as unknown[] as never[]),\n\t\t);\n\t}\n\n\tget queue() {\n\t\tconst self = this;\n\t\tfunction send<K extends keyof TQueues & string>(\n\t\t\tname: K,\n\t\t\tbody: InferSchemaMap<TQueues>[K],\n\t\t): Promise<void>;\n\t\tfunction send(\n\t\t\tname: keyof TQueues extends never ? string : never,\n\t\t\tbody: unknown,\n\t\t): Promise<void>;\n\t\tasync function send(name: string, body: unknown): Promise<void> {\n\t\t\tself.#ensureActive(\"queue.send\");\n\t\t\tawait self.#runCtx.queue.send(name as never, body as never);\n\t\t}\n\t\treturn { send };\n\t}\n\n\t/**\n\t * Holds the actor awake for the duration of the provided promise. The actor\n\t * cannot idle-sleep or finalize the sleep grace period until the promise\n\t * settles.\n\t */\n\tkeepAwake<T>(promise: Promise<T>): Promise<T> {\n\t\tthis.#ensureActive(\"keepAwake\");\n\t\treturn this.#runCtx.keepAwake(promise);\n\t}\n\n\t/**\n\t * Registers a promise that the sleep grace period will wait on. Use this for\n\t * best-effort flush/cleanup work that may complete inside the grace window.\n\t */\n\twaitUntil(promise: Promise<void>): void {\n\t\tthis.#ensureActive(\"waitUntil\");\n\t\tthis.#runCtx.waitUntil(promise);\n\t}\n\n\tdestroy(): void {\n\t\tthis.#ensureActive(\"destroy\");\n\t\tthis.#runCtx.destroy();\n\t}\n}\n\n/**\n * The context handed to the workflow function and to orchestration callbacks\n * (`try` / `loop` / `race` / `join`). It exposes the deterministic, replayable\n * workflow primitives (step, sleep, queue waits, control flow). It deliberately\n * does NOT expose actor data; reach `state`, `db`, `vars`, `client`, and\n * `broadcast` through the step context passed to `step` / `tryStep`.\n */\nexport class WorkflowContext<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t#inner: WorkflowContextInterface;\n\t#runCtx: RunContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\n\tconstructor(\n\t\tinner: WorkflowContextInterface,\n\t\trunCtx: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) {\n\t\tthis.#inner = inner;\n\t\tthis.#runCtx = runCtx;\n\t}\n\n\tget workflowId(): string {\n\t\treturn this.#inner.workflowId;\n\t}\n\n\tget abortSignal(): AbortSignal {\n\t\treturn this.#inner.abortSignal;\n\t}\n\n\tget actorId(): string {\n\t\treturn this.#runCtx.actorId;\n\t}\n\n\tget name(): string {\n\t\treturn this.#runCtx.name;\n\t}\n\n\tget key(): string[] {\n\t\treturn this.#runCtx.key;\n\t}\n\n\tget log() {\n\t\treturn this.#runCtx.log;\n\t}\n\n\tget queue() {\n\t\tconst self = this;\n\t\tfunction next<\n\t\t\tconst TName extends QueueFilterName<TQueues>,\n\t\t\tconst TCompletable extends boolean = false,\n\t\t>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextOptions<TName, TCompletable>,\n\t\t): Promise<QueueResultMessageForName<TQueues, TName, TCompletable>>;\n\t\tfunction next<const TCompletable extends boolean = false>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextOptionsFallback<TCompletable>,\n\t\t): Promise<\n\t\t\tQueueResultMessageForName<\n\t\t\t\tTQueues,\n\t\t\t\tQueueFilterName<TQueues>,\n\t\t\t\tTCompletable\n\t\t\t>\n\t\t>;\n\t\t// The implementation signature stays broad so the schema-typed public\n\t\t// overloads above remain compatible with it.\n\t\tasync function next(name: string, opts?: any): Promise<any> {\n\t\t\tconst message = await self.#inner.queue.next(name, opts);\n\t\t\treturn self.#toActorQueueMessage(message);\n\t\t}\n\n\t\tfunction nextBatch<\n\t\t\tconst TName extends QueueFilterName<TQueues>,\n\t\t\tconst TCompletable extends boolean = false,\n\t\t>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextBatchOptions<TName, TCompletable>,\n\t\t): Promise<\n\t\t\tArray<QueueResultMessageForName<TQueues, TName, TCompletable>>\n\t\t>;\n\t\tfunction nextBatch<const TCompletable extends boolean = false>(\n\t\t\tname: string,\n\t\t\topts?: WorkflowActorQueueNextBatchOptionsFallback<TCompletable>,\n\t\t): Promise<\n\t\t\tArray<\n\t\t\t\tQueueResultMessageForName<\n\t\t\t\t\tTQueues,\n\t\t\t\t\tQueueFilterName<TQueues>,\n\t\t\t\t\tTCompletable\n\t\t\t\t>\n\t\t\t>\n\t\t>;\n\t\tasync function nextBatch(name: string, opts?: any): Promise<any> {\n\t\t\tconst messages = await self.#inner.queue.nextBatch(name, opts);\n\t\t\treturn messages.map((message) =>\n\t\t\t\tself.#toActorQueueMessage(message),\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tnext,\n\t\t\tnextBatch,\n\t\t};\n\t}\n\n\tstep<T>(\n\t\tname: string,\n\t\trun: WorkflowStepRun<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<T>;\n\tstep<T>(\n\t\tconfig: WorkflowStepConfig<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<T>;\n\tasync step<T>(\n\t\tnameOrConfig:\n\t\t\t| string\n\t\t\t| WorkflowStepConfig<\n\t\t\t\t\tT,\n\t\t\t\t\tTState,\n\t\t\t\t\tTConnParams,\n\t\t\t\t\tTConnState,\n\t\t\t\t\tTVars,\n\t\t\t\t\tTInput,\n\t\t\t\t\tTDatabase,\n\t\t\t\t\tTEvents,\n\t\t\t\t\tTQueues\n\t\t\t >,\n\t\trun?: WorkflowStepRun<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<T> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Step run function missing\");\n\t\t\t}\n\t\t\tconst stepRun = run;\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.step(nameOrConfig, () => this.#runStep(stepRun)),\n\t\t\t);\n\t\t}\n\t\tconst stepConfig = nameOrConfig;\n\t\tconst rollback = stepConfig.rollback;\n\t\tconst config: StepConfig<T> = {\n\t\t\t...stepConfig,\n\t\t\trun: () => this.#runStep(stepConfig.run),\n\t\t\trollback: rollback\n\t\t\t\t? (_ctx, output) => this.#runRollback(rollback, output)\n\t\t\t\t: undefined,\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.step(config));\n\t}\n\n\ttryStep<T>(\n\t\tname: string,\n\t\trun: WorkflowStepRun<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<TryStepResult<T>>;\n\ttryStep<T>(\n\t\tconfig: WorkflowTryStepConfig<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<TryStepResult<T>>;\n\tasync tryStep<T>(\n\t\tnameOrConfig:\n\t\t\t| string\n\t\t\t| WorkflowTryStepConfig<\n\t\t\t\t\tT,\n\t\t\t\t\tTState,\n\t\t\t\t\tTConnParams,\n\t\t\t\t\tTConnState,\n\t\t\t\t\tTVars,\n\t\t\t\t\tTInput,\n\t\t\t\t\tTDatabase,\n\t\t\t\t\tTEvents,\n\t\t\t\t\tTQueues\n\t\t\t >,\n\t\trun?: WorkflowStepRun<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<TryStepResult<T>> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Step run function missing\");\n\t\t\t}\n\t\t\tconst stepRun = run;\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.tryStep(nameOrConfig, () => this.#runStep(stepRun)),\n\t\t\t);\n\t\t}\n\t\tconst stepConfig = nameOrConfig;\n\t\tconst rollback = stepConfig.rollback;\n\t\tconst config: TryStepConfig<T> = {\n\t\t\t...stepConfig,\n\t\t\trun: () => this.#runStep(stepConfig.run),\n\t\t\trollback: rollback\n\t\t\t\t? (_ctx, output) => this.#runRollback(rollback, output)\n\t\t\t\t: undefined,\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.tryStep(config));\n\t}\n\n\ttry<T>(\n\t\tname: string,\n\t\trun: WorkflowContextRun<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<TryBlockResult<T>>;\n\ttry<T>(\n\t\tconfig: WorkflowTryConfig<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<TryBlockResult<T>>;\n\tasync try<T>(\n\t\tnameOrConfig:\n\t\t\t| string\n\t\t\t| WorkflowTryConfig<\n\t\t\t\t\tT,\n\t\t\t\t\tTState,\n\t\t\t\t\tTConnParams,\n\t\t\t\t\tTConnState,\n\t\t\t\t\tTVars,\n\t\t\t\t\tTInput,\n\t\t\t\t\tTDatabase,\n\t\t\t\t\tTEvents,\n\t\t\t\t\tTQueues\n\t\t\t >,\n\t\trun?: WorkflowContextRun<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<TryBlockResult<T>> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Try run function missing\");\n\t\t\t}\n\t\t\tconst tryRun = run;\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.try(nameOrConfig, async (ctx) =>\n\t\t\t\t\ttryRun(this.#createChildContext(ctx)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst tryConfig = nameOrConfig;\n\t\tconst config: TryBlockConfig<T> = {\n\t\t\t...tryConfig,\n\t\t\trun: async (ctx) => tryConfig.run(this.#createChildContext(ctx)),\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.try(config));\n\t}\n\n\tloop<T>(\n\t\tname: string,\n\t\trun: (\n\t\t\tctx: WorkflowContext<\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t) => Promise<LoopResult<undefined, T> | undefined | void>,\n\t): Promise<T>;\n\tloop<S, T>(\n\t\tconfig: WorkflowLoopConfig<\n\t\t\tS,\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<T>;\n\tasync loop(\n\t\tnameOrConfig:\n\t\t\t| string\n\t\t\t| WorkflowLoopConfig<\n\t\t\t\t\tany,\n\t\t\t\t\tany,\n\t\t\t\t\tTState,\n\t\t\t\t\tTConnParams,\n\t\t\t\t\tTConnState,\n\t\t\t\t\tTVars,\n\t\t\t\t\tTInput,\n\t\t\t\t\tTDatabase,\n\t\t\t\t\tTEvents,\n\t\t\t\t\tTQueues\n\t\t\t >,\n\t\trun?: (\n\t\t\tctx: WorkflowContext<\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t) => Promise<LoopResult<undefined, any> | undefined | void>,\n\t): Promise<any> {\n\t\tif (typeof nameOrConfig === \"string\") {\n\t\t\tif (!run) {\n\t\t\t\tthrow new Error(\"Loop run function missing\");\n\t\t\t}\n\t\t\tconst loopRun = run;\n\t\t\treturn await this.#wrapActive(() =>\n\t\t\t\tthis.#inner.loop(\n\t\t\t\t\tnameOrConfig,\n\t\t\t\t\t// A void return (no explicit Loop result) is undefined at\n\t\t\t\t\t// runtime, which the engine treats as continue.\n\t\t\t\t\tasync (\n\t\t\t\t\t\tctx,\n\t\t\t\t\t): Promise<LoopResult<undefined, any> | undefined> =>\n\t\t\t\t\t\t(await loopRun(this.#createChildContext(ctx))) ??\n\t\t\t\t\t\tundefined,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst loopConfig = nameOrConfig;\n\t\tconst wrapped: LoopConfig<any, any> = {\n\t\t\t...loopConfig,\n\t\t\trun: (async (ctx, state) =>\n\t\t\t\t(await loopConfig.run(this.#createChildContext(ctx), state)) ??\n\t\t\t\tundefined) as LoopConfig<any, any>[\"run\"],\n\t\t};\n\t\treturn await this.#wrapActive(() => this.#inner.loop(wrapped));\n\t}\n\n\tsleep(name: string, durationMs: number): Promise<void> {\n\t\treturn this.#inner.sleep(name, durationMs);\n\t}\n\n\tsleepUntil(name: string, timestampMs: number): Promise<void> {\n\t\treturn this.#inner.sleepUntil(name, timestampMs);\n\t}\n\n\tasync rollbackCheckpoint(name: string): Promise<void> {\n\t\tawait this.#wrapActive(() => this.#inner.rollbackCheckpoint(name));\n\t}\n\n\tasync join<\n\t\tT extends Record<\n\t\t\tstring,\n\t\t\tWorkflowBranchConfig<\n\t\t\t\tunknown,\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>\n\t\t>,\n\t>(\n\t\tname: string,\n\t\tbranches: T,\n\t): Promise<{ [K in keyof T]: Awaited<ReturnType<T[K][\"run\"]>> }>;\n\tasync join<T extends Record<string, BranchConfig<unknown>>>(\n\t\tname: string,\n\t\tbranches: T,\n\t): Promise<{ [K in keyof T]: BranchOutput<T[K]> }>;\n\tasync join(\n\t\tname: string,\n\t\tbranches: Record<string, { run: (ctx: any) => Promise<unknown> }>,\n\t) {\n\t\tconst wrappedBranches = Object.fromEntries(\n\t\t\tObject.entries(branches).map(([key, branch]) => [\n\t\t\t\tkey,\n\t\t\t\t{\n\t\t\t\t\trun: async (ctx: WorkflowContextInterface) =>\n\t\t\t\t\t\tbranch.run(this.#createChildContext(ctx)),\n\t\t\t\t},\n\t\t\t]),\n\t\t) as Record<string, BranchConfig<unknown>>;\n\t\treturn await this.#wrapActive(() =>\n\t\t\tthis.#inner.join(name, wrappedBranches),\n\t\t);\n\t}\n\n\tasync race<T>(\n\t\tname: string,\n\t\tbranches: Array<{\n\t\t\tname: string;\n\t\t\trun: WorkflowContextRun<\n\t\t\t\tT,\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>;\n\t\t}>,\n\t): Promise<{ winner: string; value: T }> {\n\t\tconst wrappedBranches = branches.map((branch) => ({\n\t\t\tname: branch.name,\n\t\t\trun: (ctx: WorkflowContextInterface) =>\n\t\t\t\tbranch.run(this.#createChildContext(ctx)),\n\t\t}));\n\t\treturn (await this.#wrapActive(() =>\n\t\t\tthis.#inner.race(name, wrappedBranches),\n\t\t)) as { winner: string; value: T };\n\t}\n\n\tasync removed(name: string, originalType: EntryKindType): Promise<void> {\n\t\tawait this.#wrapActive(() => this.#inner.removed(name, originalType));\n\t}\n\n\tisEvicted(): boolean {\n\t\treturn this.#inner.isEvicted();\n\t}\n\n\t// Runs a user step body inside a fresh step context, snapshotting actor\n\t// state/vars so a thrown step rolls back its mutations, and deactivating the\n\t// step context once the body settles so it cannot be used after the step.\n\tasync #runStep<T>(\n\t\trun: WorkflowStepRun<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t): Promise<T> {\n\t\tconst stepCtx = new WorkflowStepContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>(this.#runCtx, () => this.#markGuardTriggered());\n\n\t\tlet stateSnapshot: { state: TState } | null = null;\n\t\ttry {\n\t\t\tstateSnapshot = { state: this.#runCtx[RAW_STATE_SYMBOL]() };\n\t\t} catch (error) {\n\t\t\tthis.#runCtx.log.debug({\n\t\t\t\tmsg: \"failed to get state, likely due to being stateless workflow\",\n\t\t\t\terror,\n\t\t\t});\n\t\t}\n\t\tif (stateSnapshot) {\n\t\t\tstateSnapshot.state = structuredClone(stateSnapshot.state);\n\t\t}\n\t\tconst varsSnapshot = structuredClone(this.#runCtx.vars);\n\n\t\ttry {\n\t\t\treturn await run(stepCtx);\n\t\t} catch (error) {\n\t\t\tif (stateSnapshot) {\n\t\t\t\tthis.#runCtx.state = stateSnapshot.state;\n\t\t\t}\n\t\t\tthis.#runCtx.vars = varsSnapshot;\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tstepCtx[DEACTIVATE_STEP]();\n\t\t}\n\t}\n\n\t#toActorQueueMessage<T>(\n\t\tmessage: WorkflowQueueMessage<T>,\n\t): WorkflowQueueMessage<T> & { id: bigint } {\n\t\tlet id: bigint;\n\t\ttry {\n\t\t\tid = BigInt(message.id);\n\t\t} catch {\n\t\t\tthrow new Error(`Invalid queue message id \"${message.id}\"`);\n\t\t}\n\t\treturn {\n\t\t\tid,\n\t\t\tname: message.name,\n\t\t\tbody: message.body,\n\t\t\tcreatedAt: message.createdAt,\n\t\t\t...(message.complete ? { complete: message.complete } : {}),\n\t\t};\n\t}\n\n\t// Runs a step rollback compensation with an active step context. Rollbacks\n\t// intentionally mutate actor state, so their writes are not snapshotted.\n\tasync #runRollback<T>(\n\t\trollback: WorkflowStepRollback<\n\t\t\tT,\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\toutput: T,\n\t): Promise<void> {\n\t\tconst stepCtx = new WorkflowStepContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>(this.#runCtx, () => this.#markGuardTriggered());\n\t\ttry {\n\t\t\tawait rollback(stepCtx, output);\n\t\t} finally {\n\t\t\tstepCtx[DEACTIVATE_STEP]();\n\t\t}\n\t}\n\n\tasync #wrapActive<T>(run: () => Promise<T>): Promise<T> {\n\t\treturn await this.#runCtx.internalKeepAwake(run);\n\t}\n\n\t// Records that a step context was used outside its step. Mirrors the value\n\t// onto actor state and a KV flag so callers can observe the violation.\n\t#markGuardTriggered(): void {\n\t\ttry {\n\t\t\tconst state = this.#runCtx.state as Record<string, unknown>;\n\t\t\tif (\n\t\t\t\tstate &&\n\t\t\t\ttypeof state === \"object\" &&\n\t\t\t\t\"guardTriggered\" in state\n\t\t\t) {\n\t\t\t\t(state as Record<string, unknown>).guardTriggered = true;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore if state is unavailable\n\t\t}\n\n\t\tthis.#runCtx.waitUntil(\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#runCtx.kv.put(WORKFLOW_GUARD_KV_KEY, \"true\");\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.#runCtx.log.error({\n\t\t\t\t\t\tmsg: \"failed to persist workflow guard flag\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})(),\n\t\t);\n\t}\n\n\t#createChildContext(\n\t\tctx: WorkflowContextInterface,\n\t): WorkflowContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> {\n\t\treturn new WorkflowContext(ctx, this.#runCtx);\n\t}\n}\n\nexport type WorkflowContextOf<AD extends AnyActorDefinition> =\n\tAD extends BaseActorDefinition<\n\t\tinfer S,\n\t\tinfer CP,\n\t\tinfer CS,\n\t\tinfer V,\n\t\tinfer I,\n\t\tinfer DB extends AnyDatabaseProvider,\n\t\tinfer E extends EventSchemaConfig,\n\t\tinfer Q extends QueueSchemaConfig,\n\t\tany\n\t>\n\t\t? WorkflowContext<S, CP, CS, V, I, DB, E, Q>\n\t\t: never;\n\nexport type WorkflowLoopContextOf<AD extends AnyActorDefinition> =\n\tWorkflowContextOf<AD>;\n\nexport type WorkflowBranchContextOf<AD extends AnyActorDefinition> =\n\tWorkflowContextOf<AD>;\n\nexport type WorkflowStepContextOf<AD extends AnyActorDefinition> =\n\tAD extends BaseActorDefinition<\n\t\tinfer S,\n\t\tinfer CP,\n\t\tinfer CS,\n\t\tinfer V,\n\t\tinfer I,\n\t\tinfer DB extends AnyDatabaseProvider,\n\t\tinfer E extends EventSchemaConfig,\n\t\tinfer Q extends QueueSchemaConfig,\n\t\tany\n\t>\n\t\t? WorkflowStepContext<S, CP, CS, V, I, DB, E, Q>\n\t\t: never;\n","import type {\n\tEngineDriver,\n\tKVEntry,\n\tKVWrite,\n\tMessage,\n\tWorkflowMessageDriver,\n} from \"@rivetkit/workflow-engine\";\nimport type { RunContext } from \"@/actor/config\";\nimport type { AnyStaticActorInstance } from \"@/actor/definition\";\nimport { makeWorkflowKey, workflowStoragePrefix } from \"@/actor/keys\";\n\nconst WORKFLOW_STORAGE_PREFIX = workflowStoragePrefix();\n\n// Mirrors the element shape returned by `queueManager.receive`. The actor\n// instance is reached through a loose type here, so the call's result is\n// untyped and the message must be annotated explicitly.\ninterface ReceivedQueueMessage {\n\tid: bigint;\n\tname: string;\n\tbody: unknown;\n\tcreatedAt: number;\n\tcomplete?: (response?: unknown) => Promise<void>;\n}\n\n// `kvListPrefix` returns key/value tuples, but the loose actor type erases that\n// so the tuple destructures need an explicit annotation.\ntype KVEntryTuple = [Uint8Array, Uint8Array];\n\nfunction stripWorkflowKey(prefixed: Uint8Array): Uint8Array {\n\treturn prefixed.slice(WORKFLOW_STORAGE_PREFIX.length);\n}\n\nfunction computeUpperBound(prefix: Uint8Array): Uint8Array | null {\n\tconst upperBound = prefix.slice();\n\tfor (let i = upperBound.length - 1; i >= 0; i--) {\n\t\tif (upperBound[i] !== 0xff) {\n\t\t\tupperBound[i]++;\n\t\t\treturn upperBound.slice(0, i + 1);\n\t\t}\n\t}\n\treturn null;\n}\n\nclass ActorWorkflowMessageDriver implements WorkflowMessageDriver {\n\t#actor: AnyStaticActorInstance;\n\t#runCtx: RunContext<any, any, any, any, any, any, any, any>;\n\n\tconstructor(\n\t\tactor: AnyStaticActorInstance,\n\t\trunCtx: RunContext<any, any, any, any, any, any, any, any>,\n\t) {\n\t\tthis.#actor = actor;\n\t\tthis.#runCtx = runCtx;\n\t}\n\n\tasync addMessage(message: Message): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.queueManager.enqueue(message.name, message.data),\n\t\t);\n\t}\n\n\tasync receiveMessages(opts: {\n\t\tnames?: readonly string[];\n\t\tcount: number;\n\t\tcompletable: boolean;\n\t}): Promise<Message[]> {\n\t\tconst messages = await this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.queueManager.receive(\n\t\t\t\topts.names && opts.names.length > 0\n\t\t\t\t\t? [...opts.names]\n\t\t\t\t\t: undefined,\n\t\t\t\topts.count,\n\t\t\t\t0,\n\t\t\t\tundefined,\n\t\t\t\topts.completable,\n\t\t\t),\n\t\t);\n\t\treturn messages.map((message: ReceivedQueueMessage) => ({\n\t\t\tid: message.id.toString(),\n\t\t\tname: message.name,\n\t\t\tdata: message.body,\n\t\t\tsentAt: message.createdAt,\n\t\t\t...(opts.completable\n\t\t\t\t? {\n\t\t\t\t\t\tcomplete: async (response?: unknown) => {\n\t\t\t\t\t\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\t\t\t\t\t\tthis.#actor.queueManager.completeMessage(\n\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t}));\n\t}\n\n\tasync completeMessage(\n\t\tmessageId: string,\n\t\tresponse?: unknown,\n\t): Promise<void> {\n\t\tlet parsedId: bigint;\n\t\ttry {\n\t\t\tparsedId = BigInt(messageId);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.queueManager.completeMessageById(parsedId, response),\n\t\t);\n\t}\n}\n\nexport class ActorWorkflowDriver implements EngineDriver {\n\treadonly workerPollInterval = 100;\n\treadonly messageDriver: WorkflowMessageDriver;\n\t#actor: AnyStaticActorInstance;\n\t#runCtx: RunContext<any, any, any, any, any, any, any, any>;\n\n\tconstructor(\n\t\tactor: AnyStaticActorInstance,\n\t\trunCtx: RunContext<any, any, any, any, any, any, any, any>,\n\t) {\n\t\tthis.#actor = actor;\n\t\tthis.#runCtx = runCtx;\n\t\tthis.messageDriver = new ActorWorkflowMessageDriver(actor, runCtx);\n\t}\n\n\tasync get(key: Uint8Array): Promise<Uint8Array | null> {\n\t\tconst [value] = await this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvBatchGet(this.#actor.id, [\n\t\t\t\tmakeWorkflowKey(key),\n\t\t\t]),\n\t\t);\n\t\treturn value ?? null;\n\t}\n\n\tasync set(key: Uint8Array, value: Uint8Array): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvBatchPut(this.#actor.id, [\n\t\t\t\t[makeWorkflowKey(key), value],\n\t\t\t]),\n\t\t);\n\t}\n\n\tasync delete(key: Uint8Array): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvBatchDelete(this.#actor.id, [\n\t\t\t\tmakeWorkflowKey(key),\n\t\t\t]),\n\t\t);\n\t}\n\n\tasync deletePrefix(prefix: Uint8Array): Promise<void> {\n\t\tconst start = makeWorkflowKey(prefix);\n\t\tconst end = computeUpperBound(start);\n\t\tif (end) {\n\t\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\t\tthis.#actor.driver.kvDeleteRange(this.#actor.id, start, end),\n\t\t\t);\n\t\t} else {\n\t\t\tconst entries = await this.#runCtx.internalKeepAwake(\n\t\t\t\tthis.#actor.driver.kvListPrefix(this.#actor.id, start),\n\t\t\t);\n\t\t\tif (entries.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\t\tthis.#actor.driver.kvBatchDelete(\n\t\t\t\t\tthis.#actor.id,\n\t\t\t\t\tentries.map(([key]: KVEntryTuple) => key),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tasync deleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvDeleteRange(\n\t\t\t\tthis.#actor.id,\n\t\t\t\tmakeWorkflowKey(start),\n\t\t\t\tmakeWorkflowKey(end),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync list(prefix: Uint8Array): Promise<KVEntry[]> {\n\t\tconst entries = await this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.kvListPrefix(\n\t\t\t\tthis.#actor.id,\n\t\t\t\tmakeWorkflowKey(prefix),\n\t\t\t),\n\t\t);\n\t\treturn entries.map(([key, value]: KVEntryTuple) => ({\n\t\t\tkey: stripWorkflowKey(key),\n\t\t\tvalue,\n\t\t}));\n\t}\n\n\tasync batch(writes: KVWrite[]): Promise<void> {\n\t\tif (writes.length === 0) return;\n\n\t\t// Flush actor state together with workflow state to ensure atomicity.\n\t\t// If the server crashes after workflow flush, actor state must also be persisted.\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tPromise.all([\n\t\t\t\tthis.#actor.driver.kvBatchPut(\n\t\t\t\t\tthis.#actor.id,\n\t\t\t\t\twrites.map(({ key, value }) => [\n\t\t\t\t\t\tmakeWorkflowKey(key),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tthis.#actor.stateManager.saveState({\n\t\t\t\t\timmediate: true,\n\t\t\t\t}),\n\t\t\t]),\n\t\t);\n\t}\n\n\tasync setAlarm(_workflowId: string, wakeAt: number): Promise<void> {\n\t\tawait this.#runCtx.internalKeepAwake(\n\t\t\tthis.#actor.driver.setAlarm(this.#actor, wakeAt),\n\t\t);\n\t}\n\n\tasync clearAlarm(_workflowId: string): Promise<void> {\n\t\t// No dedicated clear alarm support in actor drivers.\n\t\treturn;\n\t}\n\n\twaitForMessages(\n\t\tmessageNames: string[],\n\t\tabortSignal: AbortSignal,\n\t): Promise<void> {\n\t\treturn this.#actor.queueManager.waitForNames(\n\t\t\tmessageNames.length > 0 ? messageNames : undefined,\n\t\t\tabortSignal,\n\t\t);\n\t}\n}\n\nclass NoopWorkflowMessageDriver implements WorkflowMessageDriver {\n\tasync addMessage(_message: Message): Promise<void> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n\n\tasync receiveMessages(_opts: {\n\t\tnames?: readonly string[];\n\t\tcount: number;\n\t\tcompletable: boolean;\n\t}): Promise<Message[]> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n\n\tasync completeMessage(\n\t\t_messageId: string,\n\t\t_response?: unknown,\n\t): Promise<void> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n}\n\nexport class ActorWorkflowControlDriver implements EngineDriver {\n\treadonly workerPollInterval = 100;\n\treadonly messageDriver: WorkflowMessageDriver =\n\t\tnew NoopWorkflowMessageDriver();\n\t#actor: AnyStaticActorInstance;\n\n\tconstructor(actor: AnyStaticActorInstance) {\n\t\tthis.#actor = actor;\n\t}\n\n\tasync get(key: Uint8Array): Promise<Uint8Array | null> {\n\t\tconst [value] = await this.#actor.driver.kvBatchGet(this.#actor.id, [\n\t\t\tmakeWorkflowKey(key),\n\t\t]);\n\t\treturn value ?? null;\n\t}\n\n\tasync set(key: Uint8Array, value: Uint8Array): Promise<void> {\n\t\tawait this.#actor.driver.kvBatchPut(this.#actor.id, [\n\t\t\t[makeWorkflowKey(key), value],\n\t\t]);\n\t}\n\n\tasync delete(key: Uint8Array): Promise<void> {\n\t\tawait this.#actor.driver.kvBatchDelete(this.#actor.id, [\n\t\t\tmakeWorkflowKey(key),\n\t\t]);\n\t}\n\n\tasync deletePrefix(prefix: Uint8Array): Promise<void> {\n\t\tconst start = makeWorkflowKey(prefix);\n\t\tconst end = computeUpperBound(start);\n\t\tif (end) {\n\t\t\tawait this.#actor.driver.kvDeleteRange(this.#actor.id, start, end);\n\t\t\treturn;\n\t\t}\n\n\t\tconst entries = await this.#actor.driver.kvListPrefix(\n\t\t\tthis.#actor.id,\n\t\t\tstart,\n\t\t);\n\t\tif (entries.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tawait this.#actor.driver.kvBatchDelete(\n\t\t\tthis.#actor.id,\n\t\t\tentries.map(([key]: KVEntryTuple) => key),\n\t\t);\n\t}\n\n\tasync deleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait this.#actor.driver.kvDeleteRange(\n\t\t\tthis.#actor.id,\n\t\t\tmakeWorkflowKey(start),\n\t\t\tmakeWorkflowKey(end),\n\t\t);\n\t}\n\n\tasync list(prefix: Uint8Array): Promise<KVEntry[]> {\n\t\tconst entries = await this.#actor.driver.kvListPrefix(\n\t\t\tthis.#actor.id,\n\t\t\tmakeWorkflowKey(prefix),\n\t\t);\n\t\treturn entries.map(([key, value]: KVEntryTuple) => ({\n\t\t\tkey: stripWorkflowKey(key),\n\t\t\tvalue,\n\t\t}));\n\t}\n\n\tasync batch(writes: KVWrite[]): Promise<void> {\n\t\tif (writes.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.#actor.driver.kvBatchPut(\n\t\t\tthis.#actor.id,\n\t\t\twrites.map(({ key, value }) => [makeWorkflowKey(key), value]),\n\t\t);\n\t}\n\n\tasync setAlarm(_workflowId: string, wakeAt: number): Promise<void> {\n\t\tawait this.#actor.driver.setAlarm(this.#actor, wakeAt);\n\t}\n\n\tasync clearAlarm(_workflowId: string): Promise<void> {\n\t\treturn;\n\t}\n\n\twaitForMessages(\n\t\t_messageNames: string[],\n\t\t_abortSignal: AbortSignal,\n\t): Promise<void> {\n\t\tthrow new Error(\"Workflow control driver does not support messages\");\n\t}\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rivetkit",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Lightweight libraries for building stateful actors on edge platforms",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -188,22 +188,19 @@
188
188
  "actor-config-schema-gen": "tsx scripts/actor-config-schema-gen.ts"
189
189
  },
190
190
  "dependencies": {
191
- "@hono/node-server": "^1.18.2",
192
- "@hono/node-ws": "^1.1.1",
193
191
  "@hono/zod-openapi": "^1.1.5",
194
192
  "@rivet-dev/agent-os-core": "^0.1.1",
195
193
  "@rivetkit/bare-ts": "^0.6.2",
196
- "@rivetkit/engine-cli": "2.3.0",
197
- "@rivetkit/engine-envoy-protocol": "2.3.0",
194
+ "@rivetkit/engine-cli": "2.3.1",
195
+ "@rivetkit/engine-envoy-protocol": "2.3.1",
198
196
  "@rivetkit/on-change": "6.0.1",
199
- "@rivetkit/rivetkit-napi": "2.3.0",
200
- "@rivetkit/rivetkit-wasm": "2.3.0",
201
- "@rivetkit/traces": "2.3.0",
202
- "@rivetkit/virtual-websocket": "2.3.0",
203
- "@rivetkit/workflow-engine": "2.3.0",
197
+ "@rivetkit/rivetkit-napi": "2.3.1",
198
+ "@rivetkit/rivetkit-wasm": "2.3.1",
199
+ "@rivetkit/traces": "2.3.1",
200
+ "@rivetkit/virtual-websocket": "2.3.1",
201
+ "@rivetkit/workflow-engine": "2.3.1",
204
202
  "cbor-x": "^1.6.0",
205
203
  "drizzle-orm": "^0.44.2",
206
- "get-port": "^7.1.0",
207
204
  "hono": "^4.7.0",
208
205
  "invariant": "^2.2.4",
209
206
  "p-retry": "^6.2.1",
@@ -215,12 +212,15 @@
215
212
  "devDependencies": {
216
213
  "@biomejs/biome": "^2.3",
217
214
  "@copilotkit/llmock": "^1.6.0",
215
+ "@hono/node-server": "^1.18.2",
216
+ "@hono/node-ws": "^1.1.1",
218
217
  "@rivet-dev/agent-os-common": "*",
219
218
  "@rivet-dev/agent-os-pi": "^0.1.1",
220
219
  "@standard-schema/spec": "^1.0.0",
221
220
  "@types/invariant": "^2",
222
221
  "@types/node": "^22.13.1",
223
222
  "eventsource": "^4.0.0",
223
+ "get-port": "^7.1.0",
224
224
  "tsup": "^8.4.0",
225
225
  "tsx": "^4.19.4",
226
226
  "typescript": "^5.7.3",
@@ -881,6 +881,8 @@ interface RunFunctionConfig {
881
881
  icon?: string;
882
882
  inspector?: RunInspectorConfig;
883
883
  inspectorFactory?: (actor: unknown) => RunInspectorConfig | undefined;
884
+ /** Release any per-actor inspector state held for this actor id. */
885
+ disposeInspector?: (actorId: string) => void;
884
886
  }
885
887
 
886
888
  type RunFunctionWithConfig = ((...args: any[]) => any) & {
@@ -931,6 +933,18 @@ export function getRunInspectorConfig(
931
933
  return run.inspector;
932
934
  }
933
935
 
936
+ /** Release per-actor inspector state for a destroyed actor, if the run handler registered a disposer. */
937
+ export function disposeRunInspector(
938
+ run: ((...args: any[]) => any) | AnyRunConfig | undefined,
939
+ actorId: string,
940
+ ): void {
941
+ if (!run || typeof run !== "function") {
942
+ return;
943
+ }
944
+ const config = (run as RunFunctionWithConfig)[RUN_FUNCTION_CONFIG_SYMBOL];
945
+ config?.disposeInspector?.(actorId);
946
+ }
947
+
934
948
  // This schema is used to validate the input at runtime. The generic types are defined below in `ActorConfig`.
935
949
  //
936
950
  // We don't use Zod generics with `z.custom` because:
@@ -98,6 +98,17 @@ export function isRivetErrorLike(
98
98
  );
99
99
  }
100
100
 
101
+ // Matches the `actor`/`aborted` error that core raises when an in-flight queue
102
+ // wait is interrupted because the actor is going to sleep. This is the expected
103
+ // way a parked `run` handler unwinds during sleep, not a failure.
104
+ export function isActorAbortedError(error: unknown): boolean {
105
+ return (
106
+ isRivetErrorLike(error) &&
107
+ error.group === "actor" &&
108
+ error.code === "aborted"
109
+ );
110
+ }
111
+
101
112
  function isActorSpecifier(value: unknown): value is ActorSpecifier {
102
113
  return (
103
114
  typeof value === "object" &&
@@ -37,6 +37,7 @@ import { z } from "zod";
37
37
  // `defineActor({ inspector: { tabs: [...] } })`.
38
38
  // ============================================================================
39
39
 
40
+ export type { ActorInspectorConfig } from "../actor/config";
40
41
  export {
41
42
  ActorInspectorConfigSchema,
42
43
  BUILTIN_INSPECTOR_TAB_IDS,
@@ -45,7 +46,6 @@ export {
45
46
  HideInspectorTabEntrySchema,
46
47
  InspectorTabEntrySchema,
47
48
  } from "../actor/config";
48
- export type { ActorInspectorConfig } from "../actor/config";
49
49
 
50
50
  import type {
51
51
  CustomInspectorTabEntrySchema,
@@ -1,8 +1,11 @@
1
- import { Hono } from "hono";
2
1
  import { isLocalEngineEndpoint } from "@/common/engine";
3
2
  import { configureServerlessPool } from "@/serverless/configure";
4
- import { detectRuntime, VERSION } from "@/utils";
5
- import { crossPlatformServe, loadRuntimeServeStatic } from "@/utils/serve";
3
+ import { VERSION } from "@/utils";
4
+ import {
5
+ getRivetkitPublicDir,
6
+ getRivetkitRuntimeMode,
7
+ parsePortEnv,
8
+ } from "@/utils/env-vars";
6
9
  import {
7
10
  type RegistryActors,
8
11
  type RegistryConfig,
@@ -89,6 +92,12 @@ export class Registry<A extends RegistryActors> {
89
92
  };
90
93
  }
91
94
 
95
+ /**
96
+ * Fires `configureServerlessPool` once per process when the registry
97
+ * config opts into it. Cached on the instance so repeated calls (from
98
+ * `handler()` and `listen()`) only run the upsert once. The retry loop
99
+ * inside `configureServerlessPool` tolerates the engine still warming up.
100
+ */
92
101
  #ensureServerlessPoolConfigured(
93
102
  config: RegistryConfig,
94
103
  ): Promise<void> | undefined {
@@ -322,13 +331,15 @@ export class Registry<A extends RegistryActors> {
322
331
  }
323
332
 
324
333
  /**
325
- * Starts an HTTP server that dispatches every request through the
326
- * serverless handler. Uses `crossPlatformServe` to pick the right
327
- * runtime (Node, Bun, Deno).
334
+ * Bind an HTTP listener provided by the native (Rust) runtime and serve
335
+ * the registry's serverless endpoints over it. Resolves only after the
336
+ * registry is shut down (SIGINT/SIGTERM or `nativeRegistry.shutdown()`).
328
337
  *
329
- * @param opts.port Port to listen on. Defaults to 3000.
338
+ * @param opts.port Port to listen on. Defaults to `process.env.RIVET_PORT`
339
+ * if set, otherwise 3000.
340
+ * @param opts.host Address to bind. Defaults to `0.0.0.0`.
330
341
  * @param opts.publicDir If set, serves static files from this directory
331
- * before falling through to the registry handler.
342
+ * as a fallback below the framework routes.
332
343
  *
333
344
  * @example
334
345
  * ```ts
@@ -337,18 +348,34 @@ export class Registry<A extends RegistryActors> {
337
348
  * ```
338
349
  */
339
350
  public async listen(
340
- opts: { port?: number; publicDir?: string } = {},
351
+ opts: { port?: number; host?: string; publicDir?: string } = {},
341
352
  ): Promise<void> {
342
- const port = opts.port ?? 3000;
353
+ const port = opts.port ?? parsePortEnv(process.env.RIVET_PORT) ?? 3000;
354
+ const publicDir = opts.publicDir ?? getRivetkitPublicDir();
343
355
  const config = this.parseConfig();
344
- const runtime = detectRuntime();
345
- const app = new Hono();
346
- if (opts.publicDir) {
347
- const serveStatic = await loadRuntimeServeStatic(runtime);
348
- app.use("*", serveStatic({ root: opts.publicDir }));
349
- }
350
- app.all("*", (c) => this.handler(c.req.raw));
351
- await crossPlatformServe(config, port, app, runtime);
356
+
357
+ // Cache on both promise fields so the shutdown drain sees Mode A and B.
358
+ const configuredRegistryPromise = buildConfiguredRegistry(config);
359
+ this.#runtimeServeConfiguredPromise = configuredRegistryPromise;
360
+ this.#runtimeServerlessPromise = configuredRegistryPromise;
361
+ this.#installSignalHandlers(config);
362
+
363
+ this.#printWelcome(config, "serverless", {
364
+ port,
365
+ host: opts.host,
366
+ publicDir,
367
+ });
368
+
369
+ // Background fire; the retry loop tolerates engine warm-up.
370
+ this.#ensureServerlessPoolConfigured(config);
371
+
372
+ const { runtime, registry, serveConfig } =
373
+ await configuredRegistryPromise;
374
+ await runtime.serveListener(
375
+ registry,
376
+ { port, host: opts.host, publicDir },
377
+ serveConfig,
378
+ );
352
379
  }
353
380
 
354
381
  /**
@@ -666,6 +693,10 @@ export class Registry<A extends RegistryActors> {
666
693
  /**
667
694
  * Starts the actor envoy for standalone server deployments.
668
695
  *
696
+ * Set `RIVETKIT_RUNTIME_MODE=serverless` to instead bind an HTTP listener
697
+ * via `listen()` (Mode B). Mode A (envoy) and Mode B (listener) are
698
+ * mutually exclusive per registry instance.
699
+ *
669
700
  * @example
670
701
  * ```ts
671
702
  * const registry = setup({ use: { counter } });
@@ -673,6 +704,21 @@ export class Registry<A extends RegistryActors> {
673
704
  * ```
674
705
  */
675
706
  public start() {
707
+ if (getRivetkitRuntimeMode() === "serverless") {
708
+ // start() defaults publicDir to "/public" unless overridden by env.
709
+ const publicDir = getRivetkitPublicDir() ?? "/public";
710
+ // Detached listener; bind failures are fatal so exit hard.
711
+ this.listen({ publicDir }).catch((error) => {
712
+ logger().error({ error }, "auto-listen failed; exiting");
713
+ if (
714
+ typeof process !== "undefined" &&
715
+ typeof process.exit === "function"
716
+ ) {
717
+ process.exit(1);
718
+ }
719
+ });
720
+ return;
721
+ }
676
722
  const config = this.parseConfig();
677
723
  this.#startEnvoy(config, true);
678
724
  }
@@ -680,6 +726,7 @@ export class Registry<A extends RegistryActors> {
680
726
  #printWelcome(
681
727
  config: RegistryConfig,
682
728
  kind: "serverless" | "serverful",
729
+ listener?: { port: number; host?: string; publicDir?: string },
683
730
  ): void {
684
731
  if (config.noWelcome || this.#welcomePrinted) return;
685
732
  this.#welcomePrinted = true;
@@ -711,6 +758,15 @@ export class Registry<A extends RegistryActors> {
711
758
  }
712
759
 
713
760
  logLine("Actors", Object.keys(config.use).length.toString());
761
+
762
+ if (listener) {
763
+ const host = listener.host ?? "0.0.0.0";
764
+ logLine("Listening", `http://${host}:${listener.port}`);
765
+ if (listener.publicDir) {
766
+ logLine("Public Dir", listener.publicDir);
767
+ }
768
+ }
769
+
714
770
  console.log();
715
771
  }
716
772
  }
@@ -18,6 +18,7 @@ import type {
18
18
  RuntimeHttpRequest,
19
19
  RuntimeKvEntry,
20
20
  RuntimeKvListOptions,
21
+ RuntimeListenerConfig,
21
22
  RuntimeQueueEnqueueAndWaitOptions,
22
23
  RuntimeQueueMessage,
23
24
  RuntimeQueueNextBatchOptions,
@@ -259,6 +260,21 @@ export class NapiCoreRuntime implements CoreRuntime {
259
260
  );
260
261
  }
261
262
 
263
+ async serveListener(
264
+ registry: RegistryHandle,
265
+ listener: RuntimeListenerConfig,
266
+ config: RuntimeServeConfig,
267
+ ): Promise<void> {
268
+ await asNativeRegistry(registry).serveListener(
269
+ {
270
+ port: listener.port,
271
+ host: listener.host,
272
+ publicDir: listener.publicDir,
273
+ },
274
+ config,
275
+ );
276
+ }
277
+
262
278
  createActorFactory(
263
279
  callbacks: object,
264
280
  config?: RuntimeActorConfig | undefined | null,