rivetkit 2.3.0-rc.8 → 2.3.0-rc.9

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 (122) hide show
  1. package/dist/browser/client.d.ts +8 -37
  2. package/dist/browser/client.js +34 -64
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +3 -4
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/tsup/actor/errors.cjs +2 -2
  7. package/dist/tsup/actor/errors.js +1 -1
  8. package/dist/tsup/agent-os/index.cjs +5 -7
  9. package/dist/tsup/agent-os/index.cjs.map +1 -1
  10. package/dist/tsup/agent-os/index.d.cts +5 -26
  11. package/dist/tsup/agent-os/index.d.ts +5 -26
  12. package/dist/tsup/agent-os/index.js +5 -7
  13. package/dist/tsup/agent-os/index.js.map +1 -1
  14. package/dist/tsup/{chunk-OT7FF6GB.cjs → chunk-4CGA6QJO.cjs} +4 -4
  15. package/dist/tsup/{chunk-OT7FF6GB.cjs.map → chunk-4CGA6QJO.cjs.map} +1 -1
  16. package/dist/tsup/{chunk-4BPKKZJO.cjs → chunk-4WPEZBK4.cjs} +8 -8
  17. package/dist/tsup/{chunk-4BPKKZJO.cjs.map → chunk-4WPEZBK4.cjs.map} +1 -1
  18. package/dist/tsup/{chunk-AWTPTUQ7.cjs → chunk-CPA4Y3RG.cjs} +10 -10
  19. package/dist/tsup/chunk-CPA4Y3RG.cjs.map +1 -0
  20. package/dist/tsup/{chunk-EMFKMVJR.js → chunk-F3Q5BFQ6.js} +34 -10
  21. package/dist/tsup/chunk-F3Q5BFQ6.js.map +1 -0
  22. package/dist/tsup/{chunk-7HLFSAJP.cjs → chunk-GVTOE34S.cjs} +193 -169
  23. package/dist/tsup/chunk-GVTOE34S.cjs.map +1 -0
  24. package/dist/tsup/{chunk-D3T3ZBSY.js → chunk-H37XQU3I.js} +2 -2
  25. package/dist/tsup/{chunk-4JU3IPG2.js → chunk-H7P7WR2Y.js} +3 -3
  26. package/dist/tsup/{chunk-TMLOKTRB.js → chunk-KIWH5H3K.js} +3 -3
  27. package/dist/tsup/chunk-KIWH5H3K.js.map +1 -0
  28. package/dist/tsup/{chunk-VUGENVIK.js → chunk-KJTA3ATT.js} +2 -2
  29. package/dist/tsup/{chunk-6TQSSJ4F.cjs → chunk-MALSPBAF.cjs} +3 -3
  30. package/dist/tsup/{chunk-6TQSSJ4F.cjs.map → chunk-MALSPBAF.cjs.map} +1 -1
  31. package/dist/tsup/{chunk-UZXQEGVJ.js → chunk-MMMEZM5J.js} +4 -4
  32. package/dist/tsup/chunk-MMMEZM5J.js.map +1 -0
  33. package/dist/tsup/{chunk-63WNTDRC.cjs → chunk-QAZLM4WT.cjs} +3 -3
  34. package/dist/tsup/{chunk-63WNTDRC.cjs.map → chunk-QAZLM4WT.cjs.map} +1 -1
  35. package/dist/tsup/{chunk-D5G75T7J.js → chunk-T6YVRM4K.js} +1 -3
  36. package/dist/tsup/chunk-T6YVRM4K.js.map +1 -0
  37. package/dist/tsup/{chunk-HGW6PBWR.cjs → chunk-VJFRBJVQ.cjs} +9 -137
  38. package/dist/tsup/chunk-VJFRBJVQ.cjs.map +1 -0
  39. package/dist/tsup/{chunk-GBG63SUG.js → chunk-VRCIXJRN.js} +5 -7
  40. package/dist/tsup/chunk-VRCIXJRN.js.map +1 -0
  41. package/dist/tsup/{chunk-KY3CERZR.js → chunk-W7EYSYVI.js} +4 -132
  42. package/dist/tsup/chunk-W7EYSYVI.js.map +1 -0
  43. package/dist/tsup/{chunk-SRNOPUC6.cjs → chunk-WQ4HNA4W.cjs} +2 -4
  44. package/dist/tsup/chunk-WQ4HNA4W.cjs.map +1 -0
  45. package/dist/tsup/{chunk-BATTOVHF.cjs → chunk-Y5NSCZA2.cjs} +12 -14
  46. package/dist/tsup/chunk-Y5NSCZA2.cjs.map +1 -0
  47. package/dist/tsup/client/mod.cjs +7 -7
  48. package/dist/tsup/client/mod.d.cts +2 -2
  49. package/dist/tsup/client/mod.d.ts +2 -2
  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-Ak1lv4gF.d.ts → config-0Ta55UV0.d.ts} +6 -27
  56. package/dist/tsup/{config-DU_xj4qZ.d.cts → config-Ca8dN4cS.d.cts} +6 -27
  57. package/dist/tsup/{context-DAAp4Lpg.d.ts → context-B_IWbWne.d.ts} +1 -1
  58. package/dist/tsup/{context-Dt_L55q8.d.cts → context-CUrQ9MHc.d.cts} +1 -1
  59. package/dist/tsup/inspector/mod.cjs +6 -6
  60. package/dist/tsup/inspector/mod.js +5 -5
  61. package/dist/tsup/mod.cjs +355 -482
  62. package/dist/tsup/mod.cjs.map +1 -1
  63. package/dist/tsup/mod.d.cts +3 -3
  64. package/dist/tsup/mod.d.ts +3 -3
  65. package/dist/tsup/mod.js +276 -403
  66. package/dist/tsup/mod.js.map +1 -1
  67. package/dist/tsup/test/mod.cjs +10 -10
  68. package/dist/tsup/test/mod.d.cts +1 -1
  69. package/dist/tsup/test/mod.d.ts +1 -1
  70. package/dist/tsup/test/mod.js +6 -6
  71. package/dist/tsup/utils.cjs +3 -3
  72. package/dist/tsup/utils.js +2 -2
  73. package/dist/tsup/workflow/mod.cjs +16 -41
  74. package/dist/tsup/workflow/mod.cjs.map +1 -1
  75. package/dist/tsup/workflow/mod.d.cts +3 -3
  76. package/dist/tsup/workflow/mod.d.ts +3 -3
  77. package/dist/tsup/workflow/mod.js +10 -35
  78. package/dist/tsup/workflow/mod.js.map +1 -1
  79. package/package.json +10 -11
  80. package/src/actor/config.ts +0 -3
  81. package/src/actor/errors.ts +2 -2
  82. package/src/agent-os/actor/session.ts +2 -2
  83. package/src/client/actor-conn.ts +34 -6
  84. package/src/client/actor-handle.ts +1 -2
  85. package/src/client/queue.ts +1 -2
  86. package/src/client/utils.ts +1 -0
  87. package/src/common/encoding.ts +5 -243
  88. package/src/common/inline-websocket-adapter.ts +12 -12
  89. package/src/common/log.ts +0 -1
  90. package/src/common/router.ts +2 -2
  91. package/src/common/utils.ts +148 -0
  92. package/src/drivers/engine/actor-driver.ts +11 -11
  93. package/src/engine-client/actor-websocket-client.ts +1 -2
  94. package/src/engine-client/mod.ts +2 -3
  95. package/src/registry/index.ts +109 -46
  96. package/src/registry/napi-runtime.ts +34 -11
  97. package/src/registry/native.ts +162 -205
  98. package/src/registry/runtime.ts +12 -5
  99. package/src/registry/wasm-runtime.ts +13 -2
  100. package/src/serde.ts +2 -2
  101. package/src/workflow/context.ts +5 -32
  102. package/src/workflow/inspector.ts +1 -2
  103. package/dist/tsup/chunk-7HLFSAJP.cjs.map +0 -1
  104. package/dist/tsup/chunk-AWTPTUQ7.cjs.map +0 -1
  105. package/dist/tsup/chunk-BATTOVHF.cjs.map +0 -1
  106. package/dist/tsup/chunk-D5G75T7J.js.map +0 -1
  107. package/dist/tsup/chunk-EMFKMVJR.js.map +0 -1
  108. package/dist/tsup/chunk-GBG63SUG.js.map +0 -1
  109. package/dist/tsup/chunk-HGW6PBWR.cjs.map +0 -1
  110. package/dist/tsup/chunk-KY3CERZR.js.map +0 -1
  111. package/dist/tsup/chunk-SRNOPUC6.cjs.map +0 -1
  112. package/dist/tsup/chunk-TMLOKTRB.js.map +0 -1
  113. package/dist/tsup/chunk-UZXQEGVJ.js.map +0 -1
  114. package/dist/tsup/process-metrics-NW754INA.js +0 -118
  115. package/dist/tsup/process-metrics-NW754INA.js.map +0 -1
  116. package/dist/tsup/process-metrics-TYAGKCEJ.cjs +0 -118
  117. package/dist/tsup/process-metrics-TYAGKCEJ.cjs.map +0 -1
  118. package/src/registry/process-metrics.ts +0 -183
  119. package/src/registry/write-through-proxy.ts +0 -40
  120. /package/dist/tsup/{chunk-D3T3ZBSY.js.map → chunk-H37XQU3I.js.map} +0 -0
  121. /package/dist/tsup/{chunk-4JU3IPG2.js.map → chunk-H7P7WR2Y.js.map} +0 -0
  122. /package/dist/tsup/{chunk-VUGENVIK.js.map → chunk-KJTA3ATT.js.map} +0 -0
@@ -1,23 +1,22 @@
1
1
  import {
2
2
  createWorkflowInspectorAdapter
3
- } from "../chunk-UZXQEGVJ.js";
3
+ } from "../chunk-MMMEZM5J.js";
4
4
  import {
5
5
  ACTOR_CONTEXT_INTERNAL_SYMBOL,
6
- RAW_STATE_SYMBOL,
7
6
  RUN_FUNCTION_CONFIG_SYMBOL
8
- } from "../chunk-D5G75T7J.js";
9
- import "../chunk-VUGENVIK.js";
7
+ } from "../chunk-T6YVRM4K.js";
8
+ import "../chunk-KJTA3ATT.js";
10
9
  import {
11
10
  makeWorkflowKey,
12
11
  workflowStoragePrefix
13
12
  } from "../chunk-3YY5S6TV.js";
14
- import "../chunk-KY3CERZR.js";
13
+ import "../chunk-W7EYSYVI.js";
15
14
  import {
16
15
  stringifyError
17
- } from "../chunk-GBG63SUG.js";
16
+ } from "../chunk-VRCIXJRN.js";
18
17
  import {
19
18
  RivetError
20
- } from "../chunk-TMLOKTRB.js";
19
+ } from "../chunk-KIWH5H3K.js";
21
20
 
22
21
  // src/workflow/mod.ts
23
22
  import {
@@ -347,14 +346,14 @@ var ActorWorkflowContext = class _ActorWorkflowContext {
347
346
  return await this.#wrapActive(
348
347
  () => this.#inner.step(
349
348
  nameOrConfig,
350
- () => this.#withActorAccessAndStateRollback(run)
349
+ () => this.#withActorAccess(run)
351
350
  )
352
351
  );
353
352
  }
354
353
  const stepConfig = nameOrConfig;
355
354
  const config = {
356
355
  ...stepConfig,
357
- run: () => this.#withActorAccessAndStateRollback(stepConfig.run)
356
+ run: () => this.#withActorAccess(stepConfig.run)
358
357
  };
359
358
  return await this.#wrapActive(() => this.#inner.step(config));
360
359
  }
@@ -366,14 +365,14 @@ var ActorWorkflowContext = class _ActorWorkflowContext {
366
365
  return await this.#wrapActive(
367
366
  () => this.#inner.tryStep(
368
367
  nameOrConfig,
369
- () => this.#withActorAccessAndStateRollback(run)
368
+ () => this.#withActorAccess(run)
370
369
  )
371
370
  );
372
371
  }
373
372
  const stepConfig = nameOrConfig;
374
373
  const config = {
375
374
  ...stepConfig,
376
- run: () => this.#withActorAccessAndStateRollback(stepConfig.run)
375
+ run: () => this.#withActorAccess(stepConfig.run)
377
376
  };
378
377
  return await this.#wrapActive(() => this.#inner.tryStep(config));
379
378
  }
@@ -544,30 +543,6 @@ var ActorWorkflowContext = class _ActorWorkflowContext {
544
543
  }
545
544
  }
546
545
  }
547
- async #withActorAccessAndStateRollback(run) {
548
- let stateSnapshot = null;
549
- try {
550
- stateSnapshot = { state: this.#runCtx[RAW_STATE_SYMBOL]() };
551
- } catch (error) {
552
- this.#runCtx.log.debug({
553
- msg: "failed to get state, likely due to being stateless workflow",
554
- error
555
- });
556
- }
557
- if (stateSnapshot) {
558
- stateSnapshot.state = structuredClone(stateSnapshot.state);
559
- }
560
- const varsSnapshot = structuredClone(this.#runCtx.vars);
561
- try {
562
- return await this.#withActorAccess(run);
563
- } catch (error) {
564
- if (stateSnapshot) {
565
- this.#runCtx.state = stateSnapshot.state;
566
- }
567
- this.#runCtx.vars = varsSnapshot;
568
- throw error;
569
- }
570
- }
571
546
  #ensureActorAccess(feature) {
572
547
  if (!this.#allowActorAccess) {
573
548
  this.#guardViolation = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/workflow/mod.ts","../../../src/workflow/driver.ts","../../../src/workflow/constants.ts","../../../src/workflow/context.ts"],"sourcesContent":["// @ts-nocheck\nimport {\n\tACTOR_CONTEXT_INTERNAL_SYMBOL,\n\tRUN_FUNCTION_CONFIG_SYMBOL,\n} from \"@/actor/config\";\nimport type { RunContext } from \"@/actor/config\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport type { AnyStaticActorInstance } from \"@/actor/definition\";\nimport { RivetError } from \"@/actor/errors\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"@/actor/schema\";\nimport { stringifyError } from \"@/utils\";\nimport {\n\tCriticalError,\n\tEntryInProgressError,\n\tHistoryDivergedError,\n\tJoinError,\n\tRaceError,\n\treplayWorkflowFromStep,\n\tRollbackCheckpointError,\n\tRollbackError,\n\trunWorkflow,\n\tStepExhaustedError,\n\ttype WorkflowErrorEvent,\n} from \"@rivetkit/workflow-engine\";\nimport invariant from \"invariant\";\nimport { ActorWorkflowControlDriver, ActorWorkflowDriver } from \"./driver\";\nimport { ActorWorkflowContext } from \"./context\";\nimport { createWorkflowInspectorAdapter } from \"./inspector\";\n\nexport { Loop } from \"@rivetkit/workflow-engine\";\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 {\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 (\n\t\ttypeof candidate.actorId === \"string\" &&\n\t\tcandidate.actorId.length > 0\n\t) {\n\t\treturn candidate.actorId;\n\t}\n\n\treturn undefined;\n}\n","// @ts-nocheck\nimport type { RunContext } from \"@/actor/config\";\nimport type {\n\tAnyActorInstance,\n\tAnyStaticActorInstance,\n} from \"@/actor/definition\";\nimport { makeWorkflowKey, workflowStoragePrefix } from \"@/actor/keys\";\nimport type {\n\tEngineDriver,\n\tKVEntry,\n\tKVWrite,\n\tMessage,\n\tWorkflowMessageDriver,\n} from \"@rivetkit/workflow-engine\";\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","export const WORKFLOW_GUARD_KV_KEY = \"__rivet_actor_workflow_guard_triggered\";\n","// @ts-nocheck\nimport { RAW_STATE_SYMBOL, type RunContext } from \"@/actor/config\";\nimport type {\n\tQueueFilterName,\n\tQueueNextBatchOptions,\n\tQueueNextOptions,\n\tQueueResultMessageForName,\n} from \"@/actor/config\";\nimport type { Client } from \"@/client/client\";\nimport type { Registry } from \"@/registry\";\nimport type {\n\tBaseActorDefinition,\n\tAnyActorDefinition,\n} from \"@/actor/definition\";\nimport type {\n\tAnyDatabaseProvider,\n\tInferDatabaseClient,\n} from \"@/common/database/config\";\nimport type {\n\tEventSchemaConfig,\n\tInferEventArgs,\n\tInferSchemaMap,\n\tQueueSchemaConfig,\n} from \"@/actor/schema\";\nimport type { WorkflowContextInterface } from \"@rivetkit/workflow-engine\";\nimport type {\n\tBranchConfig,\n\tBranchOutput,\n\tEntryKindType,\n\tLoopConfig,\n\tLoopResult,\n\tStepConfig,\n\tTryBlockConfig,\n\tTryBlockResult,\n\tTryStepConfig,\n\tTryStepResult,\n\tWorkflowQueueMessage,\n} from \"@rivetkit/workflow-engine\";\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<LoopResult<S, T> | (S extends undefined ? void : never)>;\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 | Parameters<WorkflowContextInterface[\"step\"]>[0],\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:\n\t\t\t| string\n\t\t\t| Parameters<WorkflowContextInterface[\"tryStep\"]>[0],\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> | 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> | 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> | 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"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/workflow/mod.ts","../../../src/workflow/driver.ts","../../../src/workflow/constants.ts","../../../src/workflow/context.ts"],"sourcesContent":["// @ts-nocheck\nimport {\n\tACTOR_CONTEXT_INTERNAL_SYMBOL,\n\tRUN_FUNCTION_CONFIG_SYMBOL,\n} from \"@/actor/config\";\nimport type { RunContext } from \"@/actor/config\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport type { AnyStaticActorInstance } from \"@/actor/definition\";\nimport { RivetError } from \"@/actor/errors\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"@/actor/schema\";\nimport { stringifyError } from \"@/utils\";\nimport {\n\tCriticalError,\n\tEntryInProgressError,\n\tHistoryDivergedError,\n\tJoinError,\n\tRaceError,\n\treplayWorkflowFromStep,\n\tRollbackCheckpointError,\n\tRollbackError,\n\trunWorkflow,\n\tStepExhaustedError,\n\ttype WorkflowErrorEvent,\n} from \"@rivetkit/workflow-engine\";\nimport invariant from \"invariant\";\nimport { ActorWorkflowControlDriver, ActorWorkflowDriver } from \"./driver\";\nimport { ActorWorkflowContext } from \"./context\";\nimport { createWorkflowInspectorAdapter } from \"./inspector\";\n\nexport { Loop } from \"@rivetkit/workflow-engine\";\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 {\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 (\n\t\ttypeof candidate.actorId === \"string\" &&\n\t\tcandidate.actorId.length > 0\n\t) {\n\t\treturn candidate.actorId;\n\t}\n\n\treturn undefined;\n}\n","// @ts-nocheck\nimport type { RunContext } from \"@/actor/config\";\nimport type {\n\tAnyActorInstance,\n\tAnyStaticActorInstance,\n} from \"@/actor/definition\";\nimport { makeWorkflowKey, workflowStoragePrefix } from \"@/actor/keys\";\nimport type {\n\tEngineDriver,\n\tKVEntry,\n\tKVWrite,\n\tMessage,\n\tWorkflowMessageDriver,\n} from \"@rivetkit/workflow-engine\";\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","export const WORKFLOW_GUARD_KV_KEY = \"__rivet_actor_workflow_guard_triggered\";\n","// @ts-nocheck\nimport type { RunContext } from \"@/actor/config\";\nimport type {\n\tQueueFilterName,\n\tQueueNextBatchOptions,\n\tQueueNextOptions,\n\tQueueResultMessageForName,\n} from \"@/actor/config\";\nimport type { Client } from \"@/client/client\";\nimport type { Registry } from \"@/registry\";\nimport type {\n\tBaseActorDefinition,\n\tAnyActorDefinition,\n} from \"@/actor/definition\";\nimport type {\n\tAnyDatabaseProvider,\n\tInferDatabaseClient,\n} from \"@/common/database/config\";\nimport type {\n\tEventSchemaConfig,\n\tInferEventArgs,\n\tInferSchemaMap,\n\tQueueSchemaConfig,\n} from \"@/actor/schema\";\nimport type { WorkflowContextInterface } from \"@rivetkit/workflow-engine\";\nimport type {\n\tBranchConfig,\n\tBranchOutput,\n\tEntryKindType,\n\tLoopConfig,\n\tLoopResult,\n\tStepConfig,\n\tTryBlockConfig,\n\tTryBlockResult,\n\tTryStepConfig,\n\tTryStepResult,\n\tWorkflowQueueMessage,\n} from \"@rivetkit/workflow-engine\";\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<LoopResult<S, T> | (S extends undefined ? void : never)>;\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 | Parameters<WorkflowContextInterface[\"step\"]>[0],\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.#withActorAccess(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.#withActorAccess(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:\n\t\t\t| string\n\t\t\t| Parameters<WorkflowContextInterface[\"tryStep\"]>[0],\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.#withActorAccess(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.#withActorAccess(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> | 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> | 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> | 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\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"],"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-rc.8",
3
+ "version": "2.3.0-rc.9",
4
4
  "description": "Lightweight libraries for building stateful actors on edge platforms",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -168,19 +168,18 @@
168
168
  "actor-config-schema-gen": "tsx scripts/actor-config-schema-gen.ts"
169
169
  },
170
170
  "dependencies": {
171
+ "@rivet-dev/agent-os-core": "^0.1.1",
171
172
  "@hono/node-server": "^1.18.2",
172
173
  "@hono/node-ws": "^1.1.1",
173
174
  "@hono/zod-openapi": "^1.1.5",
174
- "@rivet-dev/agent-os-core": "^0.1.1",
175
175
  "@rivetkit/bare-ts": "^0.6.2",
176
- "@rivetkit/engine-cli": "2.3.0-rc.8",
177
- "@rivetkit/engine-envoy-protocol": "2.3.0-rc.8",
178
- "@rivetkit/on-change": "6.0.1",
179
- "@rivetkit/rivetkit-napi": "2.3.0-rc.8",
180
- "@rivetkit/rivetkit-wasm": "2.3.0-rc.8",
181
- "@rivetkit/traces": "2.3.0-rc.8",
182
- "@rivetkit/virtual-websocket": "2.3.0-rc.8",
183
- "@rivetkit/workflow-engine": "2.3.0-rc.8",
176
+ "@rivetkit/engine-cli": "2.3.0-rc.9",
177
+ "@rivetkit/engine-envoy-protocol": "2.3.0-rc.9",
178
+ "@rivetkit/rivetkit-napi": "2.3.0-rc.9",
179
+ "@rivetkit/rivetkit-wasm": "2.3.0-rc.9",
180
+ "@rivetkit/traces": "2.3.0-rc.9",
181
+ "@rivetkit/virtual-websocket": "2.3.0-rc.9",
182
+ "@rivetkit/workflow-engine": "2.3.0-rc.9",
184
183
  "cbor-x": "^1.6.0",
185
184
  "drizzle-orm": "^0.44.2",
186
185
  "get-port": "^7.1.0",
@@ -193,10 +192,10 @@
193
192
  "zod": "^4.1.0"
194
193
  },
195
194
  "devDependencies": {
196
- "@biomejs/biome": "^2.3",
197
195
  "@copilotkit/llmock": "^1.6.0",
198
196
  "@rivet-dev/agent-os-common": "*",
199
197
  "@rivet-dev/agent-os-pi": "^0.1.1",
198
+ "@biomejs/biome": "^2.3",
200
199
  "@standard-schema/spec": "^1.0.0",
201
200
  "@types/invariant": "^2",
202
201
  "@types/node": "^22.13.1",
@@ -26,7 +26,6 @@ export const DEFAULT_SLEEP_GRACE_PERIOD = 15_000;
26
26
  export const ACTOR_CONTEXT_INTERNAL_SYMBOL = Symbol(
27
27
  "rivetkit.actor_context_internal",
28
28
  );
29
- export const RAW_STATE_SYMBOL = Symbol("rivetkit.raw_state");
30
29
  export const CONN_DRIVER_SYMBOL = Symbol("rivetkit.conn_driver");
31
30
  export const CONN_STATE_MANAGER_SYMBOL = Symbol("rivetkit.conn_state_manager");
32
31
 
@@ -311,8 +310,6 @@ export interface ActorContext<
311
310
  TQueues extends QueueSchemaConfig = Record<never, never>,
312
311
  > {
313
312
  [ACTOR_CONTEXT_INTERNAL_SYMBOL]?: unknown;
314
- /** Returns the raw unwrapped state without the write-through proxy. */
315
- [RAW_STATE_SYMBOL](): TState;
316
313
  state: TState;
317
314
  vars: TVars;
318
315
  readonly kv: ActorKv;
@@ -237,7 +237,7 @@ export function decodeBridgeRivetErrorPayload(
237
237
  if (!isRivetErrorLike(payload)) {
238
238
  return undefined;
239
239
  }
240
- if (payload.actor !== undefined && payload.actor !== null && !isActorSpecifier(payload.actor)) {
240
+ if (payload.actor !== undefined && !isActorSpecifier(payload.actor)) {
241
241
  return undefined;
242
242
  }
243
243
 
@@ -257,7 +257,7 @@ export function decodeBridgeRivetError(value: string): RivetError | undefined {
257
257
  metadata: payload.metadata,
258
258
  public: payload.public,
259
259
  statusCode: payload.statusCode,
260
- actor: payload.actor ?? undefined,
260
+ actor: payload.actor,
261
261
  });
262
262
  }
263
263
 
@@ -140,11 +140,11 @@ export function subscribeToSession<TConnParams>(
140
140
  );
141
141
 
142
142
  // Persist event to SQLite for sleep/wake recovery.
143
- persistSessionEvent(c, sessionId, event).catch((error) =>
143
+ persistSessionEvent(c, sessionId, event).catch((err) =>
144
144
  c.log.error({
145
145
  msg: "agent-os failed to persist session event",
146
146
  sessionId,
147
- error,
147
+ error: err,
148
148
  }),
149
149
  );
150
150
 
@@ -22,7 +22,6 @@ import {
22
22
  import { assertUnreachable, stringifyError } from "@/common/utils";
23
23
  import type { UniversalWebSocket } from "@/common/websocket-interface";
24
24
  import type { EngineControlClient } from "@/engine-client/driver";
25
- import type { JsonCompatValue } from "@/common/encoding";
26
25
  import {
27
26
  decodeCborCompat,
28
27
  deserializeWithEncoding,
@@ -94,6 +93,8 @@ interface EventSubscriptions<Args extends Array<unknown>> {
94
93
  once: boolean;
95
94
  }
96
95
 
96
+ const DEFAULT_MAX_INCOMING_MESSAGE_SIZE = 65_536;
97
+
97
98
  /**
98
99
  * A function that unsubscribes from an event.
99
100
  *
@@ -215,6 +216,9 @@ export class ActorConnRaw {
215
216
  this.#encoding = encoding;
216
217
  this.#actorResolutionState = actorResolutionState;
217
218
  this.#gatewayOptions = resolveActorGatewayOptions(gatewayOptions);
219
+ if ("getForId" in actorResolutionState) {
220
+ this.#actorId = actorResolutionState.getForId.actorId;
221
+ }
218
222
  this.#readyPromise = promiseWithResolvers((reason) =>
219
223
  logger().warn({
220
224
  msg: "unhandled ready promise rejection",
@@ -235,9 +239,7 @@ export class ActorConnRaw {
235
239
  },
236
240
  });
237
241
 
238
- // Keep the Node event loop alive while this connection is active without blocking exit.
239
- this.#keepNodeAliveInterval = setInterval(() => {}, 60_000);
240
- this.#keepNodeAliveInterval.unref?.();
242
+ this.#keepNodeAliveInterval = setInterval(() => 60_000);
241
243
  }
242
244
 
243
245
  #clearResolvedActorIdentity() {
@@ -1270,7 +1272,7 @@ export class ActorConnRaw {
1270
1272
  name: msg.body.val.name,
1271
1273
  args: bufferToArrayBuffer(
1272
1274
  encodeCborCompat(
1273
- msg.body.val.args as JsonCompatValue,
1275
+ msg.body.val.args,
1274
1276
  ),
1275
1277
  ),
1276
1278
  },
@@ -1281,8 +1283,34 @@ export class ActorConnRaw {
1281
1283
  }
1282
1284
  },
1283
1285
  );
1284
- this.#websocket.send(messageSerialized);
1285
1286
  const serializedLength = messageLength(messageSerialized);
1287
+ if (
1288
+ serializedLength > DEFAULT_MAX_INCOMING_MESSAGE_SIZE &&
1289
+ message.body.tag === "ActionRequest"
1290
+ ) {
1291
+ const actionId = Number(message.body.val.id);
1292
+ const inFlight = this.#takeActionInFlight(actionId);
1293
+ const error = new errors.ActorError(
1294
+ "message",
1295
+ "incoming_too_long",
1296
+ "Incoming message too long",
1297
+ {
1298
+ maxSize: DEFAULT_MAX_INCOMING_MESSAGE_SIZE,
1299
+ actualSize: serializedLength,
1300
+ },
1301
+ );
1302
+ logger().warn({
1303
+ msg: "rejecting oversized connection action request",
1304
+ actionId,
1305
+ actionName: inFlight.name,
1306
+ actualSize: serializedLength,
1307
+ maxSize: DEFAULT_MAX_INCOMING_MESSAGE_SIZE,
1308
+ });
1309
+ inFlight.reject(error);
1310
+ this.#dispatchActorError(error);
1311
+ return;
1312
+ }
1313
+ this.#websocket.send(messageSerialized);
1286
1314
  logger().trace({
1287
1315
  msg: "sent websocket message",
1288
1316
  len: serializedLength,
@@ -23,7 +23,6 @@ import {
23
23
  } from "@/common/client-protocol-zod";
24
24
  import { deconstructError } from "@/common/utils";
25
25
  import type { EngineControlClient } from "@/engine-client/driver";
26
- import type { JsonCompatValue } from "@/common/encoding";
27
26
  import { decodeCborCompat, deserializeWithEncoding, encodeCborCompat } from "@/serde";
28
27
  import { bufferToArrayBuffer } from "@/utils";
29
28
  import type {
@@ -333,7 +332,7 @@ export class ActorHandleRaw {
333
332
  args,
334
333
  }),
335
334
  requestToBare: (args): protocol.HttpActionRequest => ({
336
- args: bufferToArrayBuffer(encodeCborCompat(args as JsonCompatValue)),
335
+ args: bufferToArrayBuffer(encodeCborCompat(args)),
337
336
  }),
338
337
  responseFromJson: (json): Response => json.output as Response,
339
338
  responseFromBare: (bare): Response =>
@@ -12,7 +12,6 @@ import {
12
12
  type HttpQueueSendResponse as HttpQueueSendResponseJson,
13
13
  HttpQueueSendResponseSchema,
14
14
  } from "@/common/client-protocol-zod";
15
- import type { JsonCompatValue } from "@/common/encoding";
16
15
  import { decodeCborCompat, encodeCborCompat } from "@/serde";
17
16
  import { bufferToArrayBuffer } from "@/utils";
18
17
  import { sendHttpRequest } from "./utils";
@@ -112,7 +111,7 @@ export function createQueueSender(
112
111
  }),
113
112
  requestToBare: (value): protocol.HttpQueueSendRequest => ({
114
113
  name: value.name ?? name,
115
- body: bufferToArrayBuffer(encodeCborCompat(value.body as JsonCompatValue)),
114
+ body: bufferToArrayBuffer(encodeCborCompat(value.body)),
116
115
  wait: value.wait ?? false,
117
116
  timeout:
118
117
  value.timeout !== undefined ? BigInt(value.timeout) : null,
@@ -3,6 +3,7 @@ import type { VersionedDataHandler } from "vbare";
3
3
  import type { z } from "zod/v4";
4
4
  import type { Encoding } from "@/common/encoding";
5
5
  import { assertUnreachable } from "@/common/utils";
6
+ import type { HttpResponseError } from "@/common/client-protocol";
6
7
  import { HTTP_RESPONSE_ERROR_VERSIONED } from "@/common/client-protocol-versioned";
7
8
  import {
8
9
  type HttpResponseError as HttpResponseErrorJson,