rivetkit 2.1.1 → 2.1.2

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 (108) hide show
  1. package/dist/browser/client.d.ts +22 -2
  2. package/dist/browser/client.js +1 -1
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +1 -1
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/inspector.tar.gz +0 -0
  7. package/dist/tsup/{chunk-65RINRXE.cjs → chunk-772NPMTY.cjs} +98 -98
  8. package/dist/tsup/{chunk-65RINRXE.cjs.map → chunk-772NPMTY.cjs.map} +1 -1
  9. package/dist/tsup/{chunk-NAM3D5W5.js → chunk-BFI4LYS2.js} +5 -6
  10. package/dist/tsup/chunk-BFI4LYS2.js.map +1 -0
  11. package/dist/tsup/{chunk-OONQLPOH.js → chunk-BSIJG3LG.js} +7 -7
  12. package/dist/tsup/chunk-BSIJG3LG.js.map +1 -0
  13. package/dist/tsup/{chunk-WPDQXB7R.cjs → chunk-GVQAVU7R.cjs} +4 -4
  14. package/dist/tsup/{chunk-WPDQXB7R.cjs.map → chunk-GVQAVU7R.cjs.map} +1 -1
  15. package/dist/tsup/{chunk-AWJU3AZB.js → chunk-HB4RGGMC.js} +5 -5
  16. package/dist/tsup/{chunk-LNDVGTPQ.cjs → chunk-HFWRHT5T.cjs} +24 -10
  17. package/dist/tsup/chunk-HFWRHT5T.cjs.map +1 -0
  18. package/dist/tsup/{chunk-Q5CW77IT.cjs → chunk-MNS5LY6M.cjs} +81 -75
  19. package/dist/tsup/chunk-MNS5LY6M.cjs.map +1 -0
  20. package/dist/tsup/{chunk-ZR76ZGYS.cjs → chunk-NXEHFUDB.cjs} +20 -20
  21. package/dist/tsup/chunk-NXEHFUDB.cjs.map +1 -0
  22. package/dist/tsup/{chunk-XQWBEBLD.js → chunk-PSUVV4HM.js} +23 -9
  23. package/dist/tsup/{chunk-XQWBEBLD.js.map → chunk-PSUVV4HM.js.map} +1 -1
  24. package/dist/tsup/{chunk-VBU4P2IX.js → chunk-PW3YONDJ.js} +2 -2
  25. package/dist/tsup/{chunk-AGERRJ32.cjs → chunk-PZAV6PP2.cjs} +152 -152
  26. package/dist/tsup/{chunk-AGERRJ32.cjs.map → chunk-PZAV6PP2.cjs.map} +1 -1
  27. package/dist/tsup/{chunk-LPXB254R.cjs → chunk-QABDKI3W.cjs} +236 -237
  28. package/dist/tsup/chunk-QABDKI3W.cjs.map +1 -0
  29. package/dist/tsup/{chunk-T4PQK4WA.js → chunk-RHUII57M.js} +7 -8
  30. package/dist/tsup/chunk-RHUII57M.js.map +1 -0
  31. package/dist/tsup/{chunk-MMUXNMJF.cjs → chunk-RMJJE43B.cjs} +2 -2
  32. package/dist/tsup/{chunk-MMUXNMJF.cjs.map → chunk-RMJJE43B.cjs.map} +1 -1
  33. package/dist/tsup/{chunk-WTRB56DR.js → chunk-TDFDR7AO.js} +2 -2
  34. package/dist/tsup/{chunk-F5B36GL7.cjs → chunk-UZV7NXC6.cjs} +31 -32
  35. package/dist/tsup/chunk-UZV7NXC6.cjs.map +1 -0
  36. package/dist/tsup/{chunk-MICYEINX.js → chunk-VMX4I4MP.js} +10 -4
  37. package/dist/tsup/{chunk-MICYEINX.js.map → chunk-VMX4I4MP.js.map} +1 -1
  38. package/dist/tsup/{chunk-IZ4M5TJU.js → chunk-WUXR722E.js} +2 -2
  39. package/dist/tsup/{chunk-IZ4M5TJU.js.map → chunk-WUXR722E.js.map} +1 -1
  40. package/dist/tsup/{chunk-74ER4FEE.js → chunk-YQ5P6KMN.js} +4 -4
  41. package/dist/tsup/chunk-YQ5P6KMN.js.map +1 -0
  42. package/dist/tsup/{chunk-FUBHHHK5.cjs → chunk-ZHQDRRMY.cjs} +3 -3
  43. package/dist/tsup/{chunk-FUBHHHK5.cjs.map → chunk-ZHQDRRMY.cjs.map} +1 -1
  44. package/dist/tsup/client/mod.cjs +6 -6
  45. package/dist/tsup/client/mod.d.cts +2 -2
  46. package/dist/tsup/client/mod.d.ts +2 -2
  47. package/dist/tsup/client/mod.js +5 -5
  48. package/dist/tsup/common/log.cjs +2 -2
  49. package/dist/tsup/common/log.js +1 -1
  50. package/dist/tsup/common/websocket.cjs +3 -3
  51. package/dist/tsup/common/websocket.js +2 -2
  52. package/dist/tsup/{config-BFqid9Gr.d.ts → config-P3XujgRr.d.ts} +23 -3
  53. package/dist/tsup/{config-CAZphOS1.d.cts → config-_gfywqqI.d.cts} +23 -3
  54. package/dist/tsup/{context-7X-Dm6_f.d.cts → context-Bxd8Cx4H.d.cts} +5 -5
  55. package/dist/tsup/{context-x9zKhx5T.d.ts → context-uNA4TRn3.d.ts} +5 -5
  56. package/dist/tsup/{driver-DYXwJR5D.d.cts → driver-BcLvZcKl.d.cts} +1 -1
  57. package/dist/tsup/{driver-Bxv62E2p.d.ts → driver-CPGHKXyh.d.ts} +1 -1
  58. package/dist/tsup/driver-helpers/mod.cjs +6 -4
  59. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  60. package/dist/tsup/driver-helpers/mod.d.cts +16 -4
  61. package/dist/tsup/driver-helpers/mod.d.ts +16 -4
  62. package/dist/tsup/driver-helpers/mod.js +6 -4
  63. package/dist/tsup/driver-test-suite/mod.cjs +64 -64
  64. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  65. package/dist/tsup/driver-test-suite/mod.d.cts +2 -2
  66. package/dist/tsup/driver-test-suite/mod.d.ts +2 -2
  67. package/dist/tsup/driver-test-suite/mod.js +14 -14
  68. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  69. package/dist/tsup/inspector/mod.cjs +3 -3
  70. package/dist/tsup/inspector/mod.js +2 -2
  71. package/dist/tsup/mod.cjs +8 -8
  72. package/dist/tsup/mod.d.cts +5 -5
  73. package/dist/tsup/mod.d.ts +5 -5
  74. package/dist/tsup/mod.js +7 -7
  75. package/dist/tsup/serve-test-suite/mod.cjs +126 -118
  76. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  77. package/dist/tsup/serve-test-suite/mod.js +37 -29
  78. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  79. package/dist/tsup/test/mod.cjs +10 -10
  80. package/dist/tsup/test/mod.d.cts +1 -1
  81. package/dist/tsup/test/mod.d.ts +1 -1
  82. package/dist/tsup/test/mod.js +6 -6
  83. package/dist/tsup/utils.cjs +2 -2
  84. package/dist/tsup/utils.js +1 -1
  85. package/dist/tsup/workflow/mod.cjs +5 -5
  86. package/dist/tsup/workflow/mod.d.cts +3 -3
  87. package/dist/tsup/workflow/mod.d.ts +3 -3
  88. package/dist/tsup/workflow/mod.js +4 -4
  89. package/package.json +5 -5
  90. package/src/actor/instance/queue.ts +67 -9
  91. package/src/driver-helpers/mod.ts +1 -1
  92. package/src/driver-helpers/utils.ts +18 -0
  93. package/src/driver-test-suite/tests/actor-queue.ts +4 -4
  94. package/src/drivers/file-system/actor.ts +6 -16
  95. package/src/engine-process/mod.ts +1 -1
  96. package/src/workflow/context.ts +5 -4
  97. package/dist/tsup/chunk-74ER4FEE.js.map +0 -1
  98. package/dist/tsup/chunk-F5B36GL7.cjs.map +0 -1
  99. package/dist/tsup/chunk-LNDVGTPQ.cjs.map +0 -1
  100. package/dist/tsup/chunk-LPXB254R.cjs.map +0 -1
  101. package/dist/tsup/chunk-NAM3D5W5.js.map +0 -1
  102. package/dist/tsup/chunk-OONQLPOH.js.map +0 -1
  103. package/dist/tsup/chunk-Q5CW77IT.cjs.map +0 -1
  104. package/dist/tsup/chunk-T4PQK4WA.js.map +0 -1
  105. package/dist/tsup/chunk-ZR76ZGYS.cjs.map +0 -1
  106. /package/dist/tsup/{chunk-AWJU3AZB.js.map → chunk-HB4RGGMC.js.map} +0 -0
  107. /package/dist/tsup/{chunk-VBU4P2IX.js.map → chunk-PW3YONDJ.js.map} +0 -0
  108. /package/dist/tsup/{chunk-WTRB56DR.js.map → chunk-TDFDR7AO.js.map} +0 -0
@@ -1,18 +1,18 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
2
 
3
- var _chunkLPXB254Rcjs = require('../chunk-LPXB254R.cjs');
3
+ var _chunkQABDKI3Wcjs = require('../chunk-QABDKI3W.cjs');
4
4
 
5
5
 
6
- var _chunkAGERRJ32cjs = require('../chunk-AGERRJ32.cjs');
7
- require('../chunk-FUBHHHK5.cjs');
6
+ var _chunkPZAV6PP2cjs = require('../chunk-PZAV6PP2.cjs');
7
+ require('../chunk-ZHQDRRMY.cjs');
8
8
 
9
9
 
10
- var _chunkQ5CW77ITcjs = require('../chunk-Q5CW77IT.cjs');
10
+ var _chunkMNS5LY6Mcjs = require('../chunk-MNS5LY6M.cjs');
11
11
  require('../chunk-NIYZDWMW.cjs');
12
- require('../chunk-LNDVGTPQ.cjs');
12
+ require('../chunk-HFWRHT5T.cjs');
13
13
 
14
14
 
15
- var _chunkMMUXNMJFcjs = require('../chunk-MMUXNMJF.cjs');
15
+ var _chunkRMJJE43Bcjs = require('../chunk-RMJJE43B.cjs');
16
16
  require('../chunk-L47L3ZWJ.cjs');
17
17
  require('../chunk-HDQ2JUQT.cjs');
18
18
 
@@ -23,14 +23,14 @@ var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(
23
23
 
24
24
  // src/test/log.ts
25
25
  function logger() {
26
- return _chunkMMUXNMJFcjs.getLogger.call(void 0, "test");
26
+ return _chunkRMJJE43Bcjs.getLogger.call(void 0, "test");
27
27
  }
28
28
 
29
29
  // src/test/mod.ts
30
30
  async function setupTest(c, registry) {
31
31
  var _a;
32
32
  registry.config.test = { ...registry.config.test, enabled: true };
33
- const driver = _chunkLPXB254Rcjs.createFileSystemOrMemoryDriver.call(void 0,
33
+ const driver = _chunkQABDKI3Wcjs.createFileSystemOrMemoryDriver.call(void 0,
34
34
  true,
35
35
  { path: `/tmp/rivetkit-test-${crypto.randomUUID()}` }
36
36
  );
@@ -45,7 +45,7 @@ async function setupTest(c, registry) {
45
45
  _invariant2.default.call(void 0, managerDriver, "missing manager driver");
46
46
  const getUpgradeWebSocket = () => upgradeWebSocket;
47
47
  managerDriver.setGetUpgradeWebSocket(getUpgradeWebSocket);
48
- const { router } = _chunkQ5CW77ITcjs.buildManagerRouter.call(void 0,
48
+ const { router } = _chunkMNS5LY6Mcjs.buildManagerRouter.call(void 0,
49
49
  parsedConfig,
50
50
  managerDriver,
51
51
  getUpgradeWebSocket
@@ -75,7 +75,7 @@ async function setupTest(c, registry) {
75
75
  c.onTestFinished(async () => {
76
76
  await new Promise((resolve) => server.close(() => resolve(void 0)));
77
77
  });
78
- const client = _chunkAGERRJ32cjs.createClient.call(void 0, {
78
+ const client = _chunkPZAV6PP2cjs.createClient.call(void 0, {
79
79
  endpoint,
80
80
  namespace: "default",
81
81
  runnerName: "default",
@@ -1,5 +1,5 @@
1
1
  import { TestContext } from 'vitest';
2
- import { a5 as Registry, C as Client } from '../config-CAZphOS1.cjs';
2
+ import { a5 as Registry, C as Client } from '../config-_gfywqqI.cjs';
3
3
  import 'zod/v4';
4
4
  import '@rivetkit/virtual-websocket';
5
5
  import '../config-BiNoIHRs.cjs';
@@ -1,5 +1,5 @@
1
1
  import { TestContext } from 'vitest';
2
- import { a5 as Registry, C as Client } from '../config-BFqid9Gr.js';
2
+ import { a5 as Registry, C as Client } from '../config-P3XujgRr.js';
3
3
  import 'zod/v4';
4
4
  import '@rivetkit/virtual-websocket';
5
5
  import '../config-BiNoIHRs.js';
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  createFileSystemOrMemoryDriver
3
- } from "../chunk-T4PQK4WA.js";
3
+ } from "../chunk-RHUII57M.js";
4
4
  import {
5
5
  createClient
6
- } from "../chunk-AWJU3AZB.js";
7
- import "../chunk-VBU4P2IX.js";
6
+ } from "../chunk-HB4RGGMC.js";
7
+ import "../chunk-PW3YONDJ.js";
8
8
  import {
9
9
  buildManagerRouter
10
- } from "../chunk-MICYEINX.js";
10
+ } from "../chunk-VMX4I4MP.js";
11
11
  import "../chunk-LXUQ667X.js";
12
- import "../chunk-XQWBEBLD.js";
12
+ import "../chunk-PSUVV4HM.js";
13
13
  import {
14
14
  getLogger
15
- } from "../chunk-IZ4M5TJU.js";
15
+ } from "../chunk-WUXR722E.js";
16
16
  import "../chunk-7HTNH26M.js";
17
17
  import "../chunk-424PT5DM.js";
18
18
 
@@ -17,7 +17,7 @@
17
17
 
18
18
 
19
19
 
20
- var _chunkMMUXNMJFcjs = require('./chunk-MMUXNMJF.cjs');
20
+ var _chunkRMJJE43Bcjs = require('./chunk-RMJJE43B.cjs');
21
21
  require('./chunk-L47L3ZWJ.cjs');
22
22
  require('./chunk-HDQ2JUQT.cjs');
23
23
 
@@ -39,5 +39,5 @@ require('./chunk-HDQ2JUQT.cjs');
39
39
 
40
40
 
41
41
 
42
- exports.EXTRA_ERROR_LOG = _chunkMMUXNMJFcjs.EXTRA_ERROR_LOG; exports.SinglePromiseQueue = _chunkMMUXNMJFcjs.SinglePromiseQueue; exports.VERSION = _chunkMMUXNMJFcjs.VERSION; exports.arrayBuffersEqual = _chunkMMUXNMJFcjs.arrayBuffersEqual; exports.assertUnreachable = _chunkMMUXNMJFcjs.assertUnreachable; exports.bufferToArrayBuffer = _chunkMMUXNMJFcjs.bufferToArrayBuffer; exports.combineUrlPath = _chunkMMUXNMJFcjs.combineUrlPath; exports.dbg = _chunkMMUXNMJFcjs.dbg; exports.detectRuntime = _chunkMMUXNMJFcjs.detectRuntime; exports.getEnvUniversal = _chunkMMUXNMJFcjs.getEnvUniversal; exports.httpUserAgent = _chunkMMUXNMJFcjs.httpUserAgent; exports.interval = _chunkMMUXNMJFcjs.interval; exports.joinSignals = _chunkMMUXNMJFcjs.joinSignals; exports.promiseWithResolvers = _chunkMMUXNMJFcjs.promiseWithResolvers; exports.setLongTimeout = _chunkMMUXNMJFcjs.setLongTimeout; exports.sleep = _chunkMMUXNMJFcjs.sleep; exports.stringifyError = _chunkMMUXNMJFcjs.stringifyError; exports.toUint8Array = _chunkMMUXNMJFcjs.toUint8Array;
42
+ exports.EXTRA_ERROR_LOG = _chunkRMJJE43Bcjs.EXTRA_ERROR_LOG; exports.SinglePromiseQueue = _chunkRMJJE43Bcjs.SinglePromiseQueue; exports.VERSION = _chunkRMJJE43Bcjs.VERSION; exports.arrayBuffersEqual = _chunkRMJJE43Bcjs.arrayBuffersEqual; exports.assertUnreachable = _chunkRMJJE43Bcjs.assertUnreachable; exports.bufferToArrayBuffer = _chunkRMJJE43Bcjs.bufferToArrayBuffer; exports.combineUrlPath = _chunkRMJJE43Bcjs.combineUrlPath; exports.dbg = _chunkRMJJE43Bcjs.dbg; exports.detectRuntime = _chunkRMJJE43Bcjs.detectRuntime; exports.getEnvUniversal = _chunkRMJJE43Bcjs.getEnvUniversal; exports.httpUserAgent = _chunkRMJJE43Bcjs.httpUserAgent; exports.interval = _chunkRMJJE43Bcjs.interval; exports.joinSignals = _chunkRMJJE43Bcjs.joinSignals; exports.promiseWithResolvers = _chunkRMJJE43Bcjs.promiseWithResolvers; exports.setLongTimeout = _chunkRMJJE43Bcjs.setLongTimeout; exports.sleep = _chunkRMJJE43Bcjs.sleep; exports.stringifyError = _chunkRMJJE43Bcjs.stringifyError; exports.toUint8Array = _chunkRMJJE43Bcjs.toUint8Array;
43
43
  //# sourceMappingURL=utils.cjs.map
@@ -17,7 +17,7 @@ import {
17
17
  sleep,
18
18
  stringifyError,
19
19
  toUint8Array
20
- } from "./chunk-IZ4M5TJU.js";
20
+ } from "./chunk-WUXR722E.js";
21
21
  import "./chunk-7HTNH26M.js";
22
22
  import "./chunk-424PT5DM.js";
23
23
  export {
@@ -2,15 +2,15 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkZR76ZGYScjs = require('../chunk-ZR76ZGYS.cjs');
6
- require('../chunk-WPDQXB7R.cjs');
7
- require('../chunk-LNDVGTPQ.cjs');
8
- require('../chunk-MMUXNMJF.cjs');
5
+ var _chunkNXEHFUDBcjs = require('../chunk-NXEHFUDB.cjs');
6
+ require('../chunk-GVQAVU7R.cjs');
7
+ require('../chunk-HFWRHT5T.cjs');
8
+ require('../chunk-RMJJE43B.cjs');
9
9
  require('../chunk-L47L3ZWJ.cjs');
10
10
  require('../chunk-HDQ2JUQT.cjs');
11
11
 
12
12
 
13
13
 
14
14
 
15
- exports.ActorWorkflowContext = _chunkZR76ZGYScjs.ActorWorkflowContext; exports.Loop = _chunkZR76ZGYScjs.Loop; exports.workflow = _chunkZR76ZGYScjs.workflow;
15
+ exports.ActorWorkflowContext = _chunkNXEHFUDBcjs.ActorWorkflowContext; exports.Loop = _chunkNXEHFUDBcjs.Loop; exports.workflow = _chunkNXEHFUDBcjs.workflow;
16
16
  //# sourceMappingURL=mod.cjs.map
@@ -1,7 +1,7 @@
1
- import { c as EventSchemaConfig, Q as QueueSchemaConfig, ad as RunContext } from '../config-CAZphOS1.cjs';
1
+ import { c as EventSchemaConfig, Q as QueueSchemaConfig, ad as RunContext } from '../config-_gfywqqI.cjs';
2
2
  import { A as AnyDatabaseProvider } from '../config-BiNoIHRs.cjs';
3
- import { A as ActorWorkflowContext } from '../context-7X-Dm6_f.cjs';
4
- export { W as WorkflowBranchContextOf, a as WorkflowContextOf, b as WorkflowLoopContextOf, c as WorkflowStepContextOf } from '../context-7X-Dm6_f.cjs';
3
+ import { A as ActorWorkflowContext } from '../context-Bxd8Cx4H.cjs';
4
+ export { W as WorkflowBranchContextOf, a as WorkflowContextOf, b as WorkflowLoopContextOf, c as WorkflowStepContextOf } from '../context-Bxd8Cx4H.cjs';
5
5
  export { Loop } from '@rivetkit/workflow-engine';
6
6
  import 'zod/v4';
7
7
  import '@rivetkit/virtual-websocket';
@@ -1,7 +1,7 @@
1
- import { c as EventSchemaConfig, Q as QueueSchemaConfig, ad as RunContext } from '../config-BFqid9Gr.js';
1
+ import { c as EventSchemaConfig, Q as QueueSchemaConfig, ad as RunContext } from '../config-P3XujgRr.js';
2
2
  import { A as AnyDatabaseProvider } from '../config-BiNoIHRs.js';
3
- import { A as ActorWorkflowContext } from '../context-x9zKhx5T.js';
4
- export { W as WorkflowBranchContextOf, a as WorkflowContextOf, b as WorkflowLoopContextOf, c as WorkflowStepContextOf } from '../context-x9zKhx5T.js';
3
+ import { A as ActorWorkflowContext } from '../context-uNA4TRn3.js';
4
+ export { W as WorkflowBranchContextOf, a as WorkflowContextOf, b as WorkflowLoopContextOf, c as WorkflowStepContextOf } from '../context-uNA4TRn3.js';
5
5
  export { Loop } from '@rivetkit/workflow-engine';
6
6
  import 'zod/v4';
7
7
  import '@rivetkit/virtual-websocket';
@@ -2,10 +2,10 @@ import {
2
2
  ActorWorkflowContext,
3
3
  Loop,
4
4
  workflow
5
- } from "../chunk-74ER4FEE.js";
6
- import "../chunk-WTRB56DR.js";
7
- import "../chunk-XQWBEBLD.js";
8
- import "../chunk-IZ4M5TJU.js";
5
+ } from "../chunk-YQ5P6KMN.js";
6
+ import "../chunk-TDFDR7AO.js";
7
+ import "../chunk-PSUVV4HM.js";
8
+ import "../chunk-WUXR722E.js";
9
9
  import "../chunk-7HTNH26M.js";
10
10
  import "../chunk-424PT5DM.js";
11
11
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rivetkit",
3
- "version": "2.1.1",
3
+ "version": "2.1.2",
4
4
  "description": "Lightweight libraries for building stateful actors on edge platforms",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -219,11 +219,11 @@
219
219
  "vbare": "^0.0.4",
220
220
  "@rivetkit/sqlite": "^0.1.1",
221
221
  "zod": "^4.1.0",
222
- "@rivetkit/engine-runner": "2.1.1",
223
- "@rivetkit/traces": "2.1.1",
224
- "@rivetkit/sqlite-vfs": "2.1.1",
222
+ "@rivetkit/engine-runner": "2.1.2",
223
+ "@rivetkit/traces": "2.1.2",
225
224
  "@rivetkit/virtual-websocket": "2.0.33",
226
- "@rivetkit/workflow-engine": "2.1.1"
225
+ "@rivetkit/sqlite-vfs": "2.1.2",
226
+ "@rivetkit/workflow-engine": "2.1.2"
227
227
  },
228
228
  "devDependencies": {
229
229
  "@bare-ts/tools": "^0.13.0",
@@ -66,6 +66,21 @@ export type QueueResultMessageForName<
66
66
  export interface QueueNextOptions<
67
67
  TName extends string = string,
68
68
  TCompletable extends boolean = boolean,
69
+ > {
70
+ /** Queue names to receive from. If omitted, reads from all queue names. */
71
+ names?: readonly TName[];
72
+ /** Timeout in milliseconds. Omit to wait indefinitely. */
73
+ timeout?: number;
74
+ /** Optional abort signal for this receive call. */
75
+ signal?: AbortSignal;
76
+ /** Whether to return completable messages. */
77
+ completable?: TCompletable;
78
+ }
79
+
80
+ /** Options for receiving queue message batches. */
81
+ export interface QueueNextBatchOptions<
82
+ TName extends string = string,
83
+ TCompletable extends boolean = boolean,
69
84
  > {
70
85
  /** Queue names to receive from. If omitted, reads from all queue names. */
71
86
  names?: readonly TName[];
@@ -83,6 +98,17 @@ export interface QueueNextOptions<
83
98
  export interface QueueTryNextOptions<
84
99
  TName extends string = string,
85
100
  TCompletable extends boolean = boolean,
101
+ > {
102
+ /** Queue names to receive from. If omitted, reads from all queue names. */
103
+ names?: readonly TName[];
104
+ /** Whether to return completable messages. */
105
+ completable?: TCompletable;
106
+ }
107
+
108
+ /** Options for non-blocking queue batch reads. */
109
+ export interface QueueTryNextBatchOptions<
110
+ TName extends string = string,
111
+ TCompletable extends boolean = boolean,
86
112
  > {
87
113
  /** Queue names to receive from. If omitted, reads from all queue names. */
88
114
  names?: readonly TName[];
@@ -133,11 +159,28 @@ export class ActorQueue<
133
159
  const TCompletable extends boolean = false,
134
160
  >(
135
161
  opts?: QueueNextOptions<TName, TCompletable>,
136
- ): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {
162
+ ): Promise<QueueResultMessageForName<TQueues, TName, TCompletable> | undefined> {
137
163
  const resolvedOpts = (opts ?? {}) as QueueNextOptions<
138
164
  TName,
139
165
  TCompletable
140
166
  >;
167
+ const messages = await this.nextBatch<TName, TCompletable>({
168
+ ...(resolvedOpts as QueueNextBatchOptions<TName, TCompletable>),
169
+ count: 1,
170
+ });
171
+ return messages[0];
172
+ }
173
+
174
+ async nextBatch<
175
+ const TName extends QueueFilterName<TQueues>,
176
+ const TCompletable extends boolean = false,
177
+ >(
178
+ opts?: QueueNextBatchOptions<TName, TCompletable>,
179
+ ): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {
180
+ const resolvedOpts = (opts ?? {}) as QueueNextBatchOptions<
181
+ TName,
182
+ TCompletable
183
+ >;
141
184
  const completable = resolvedOpts.completable === true;
142
185
 
143
186
  if (this.#pendingCompletableMessageIds.size > 0) {
@@ -174,20 +217,37 @@ export class ActorQueue<
174
217
  const TCompletable extends boolean = false,
175
218
  >(
176
219
  opts?: QueueTryNextOptions<TName, TCompletable>,
177
- ): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {
220
+ ): Promise<QueueResultMessageForName<TQueues, TName, TCompletable> | undefined> {
178
221
  const resolvedOpts = (opts ?? {}) as QueueTryNextOptions<
179
222
  TName,
180
223
  TCompletable
181
224
  >;
225
+ const messages = await this.tryNextBatch<TName, TCompletable>({
226
+ ...(resolvedOpts as QueueTryNextBatchOptions<TName, TCompletable>),
227
+ count: 1,
228
+ });
229
+ return messages[0];
230
+ }
231
+
232
+ async tryNextBatch<
233
+ const TName extends QueueFilterName<TQueues>,
234
+ const TCompletable extends boolean = false,
235
+ >(
236
+ opts?: QueueTryNextBatchOptions<TName, TCompletable>,
237
+ ): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {
238
+ const resolvedOpts = (opts ?? {}) as QueueTryNextBatchOptions<
239
+ TName,
240
+ TCompletable
241
+ >;
182
242
  if (resolvedOpts.completable === true) {
183
- return (await this.next<TName, true>({
243
+ return (await this.nextBatch<TName, true>({
184
244
  names: resolvedOpts.names,
185
245
  count: resolvedOpts.count,
186
246
  timeout: 0,
187
247
  completable: true,
188
248
  })) as Array<QueueResultMessageForName<TQueues, TName, TCompletable>>;
189
249
  }
190
- return (await this.next<TName, false>({
250
+ return (await this.nextBatch<TName, false>({
191
251
  names: resolvedOpts.names,
192
252
  count: resolvedOpts.count,
193
253
  timeout: 0,
@@ -208,22 +268,20 @@ export class ActorQueue<
208
268
  >;
209
269
  while (!this.#abortSignal.aborted) {
210
270
  try {
211
- const messages = resolvedOpts.completable === true
271
+ const message = resolvedOpts.completable === true
212
272
  ? await this.next<TName, true>({
213
273
  names: resolvedOpts.names,
214
- count: 1,
215
274
  signal: resolvedOpts.signal,
216
275
  completable: true,
217
276
  })
218
277
  : await this.next<TName, false>({
219
278
  names: resolvedOpts.names,
220
- count: 1,
221
279
  signal: resolvedOpts.signal,
222
280
  });
223
- if (messages.length === 0) {
281
+ if (!message) {
224
282
  continue;
225
283
  }
226
- yield messages[0] as QueueResultMessageForName<
284
+ yield message as QueueResultMessageForName<
227
285
  TQueues,
228
286
  TName,
229
287
  TCompletable
@@ -30,4 +30,4 @@ export type {
30
30
  ManagerDriver,
31
31
  } from "@/manager/driver";
32
32
  export { buildManagerRouter } from "@/manager/router";
33
- export { getInitialActorKvState } from "./utils";
33
+ export { getInitialActorKvState, importSqliteVfs } from "./utils";
@@ -7,6 +7,7 @@ import {
7
7
  } from "@/schemas/actor-persist/versioned";
8
8
  import { bufferToArrayBuffer } from "@/utils";
9
9
  import type { ActorDriver } from "./mod";
10
+ import type { SqliteVfs } from "@rivetkit/sqlite-vfs";
10
11
 
11
12
  function serializeEmptyPersistData(input: unknown | undefined): Uint8Array {
12
13
  const persistData: persistSchema.Actor = {
@@ -34,3 +35,20 @@ export function getInitialActorKvState(
34
35
  const persistData = serializeEmptyPersistData(input);
35
36
  return [[KEYS.PERSIST_DATA, persistData]];
36
37
  }
38
+
39
+ /**
40
+ * Dynamically import @rivetkit/sqlite-vfs and return a fresh SqliteVfs instance.
41
+ *
42
+ * The module specifier is built with Array.join() so that bundlers (esbuild, tsup,
43
+ * Turbopack) cannot statically analyze or constant-fold the import path. This
44
+ * prevents them from tracing into the WASM dependency tree, which would cause
45
+ * errors in environments that don't support .wasm imports (e.g. Turbopack).
46
+ *
47
+ * Each call returns a new instance so that actors get independent SQLite modules,
48
+ * avoiding cross-actor re-entry on the non-reentrant async build.
49
+ */
50
+ export async function importSqliteVfs(): Promise<SqliteVfs> {
51
+ const specifier = ["@rivetkit", "sqlite-vfs"].join("/");
52
+ const { SqliteVfs } = await import(specifier);
53
+ return new SqliteVfs();
54
+ }
@@ -28,7 +28,7 @@ export function runActorQueueTests(driverTestConfig: DriverTestConfig) {
28
28
  expect(message).toEqual({ name: "self", body: { value: 42 } });
29
29
  });
30
30
 
31
- test("next supports name arrays and counts", async (c) => {
31
+ test("nextBatch supports name arrays and counts", async (c) => {
32
32
  const { client } = await setupDriverTest(c, driverTestConfig);
33
33
  const handle = client.queueActor.getOrCreate(["receive-array"]);
34
34
 
@@ -43,7 +43,7 @@ export function runActorQueueTests(driverTestConfig: DriverTestConfig) {
43
43
  ]);
44
44
  });
45
45
 
46
- test("next supports request objects", async (c) => {
46
+ test("nextBatch supports request objects", async (c) => {
47
47
  const { client } = await setupDriverTest(c, driverTestConfig);
48
48
  const handle = client.queueActor.getOrCreate(["receive-request"]);
49
49
 
@@ -60,7 +60,7 @@ export function runActorQueueTests(driverTestConfig: DriverTestConfig) {
60
60
  ]);
61
61
  });
62
62
 
63
- test("next defaults to all names when names is omitted", async (c) => {
63
+ test("nextBatch defaults to all names when names is omitted", async (c) => {
64
64
  const { client } = await setupDriverTest(c, driverTestConfig);
65
65
  const handle = client.queueActor.getOrCreate([
66
66
  "receive-request-all",
@@ -86,7 +86,7 @@ export function runActorQueueTests(driverTestConfig: DriverTestConfig) {
86
86
  expect(messages).toEqual([]);
87
87
  });
88
88
 
89
- test("tryNext does not wait and returns empty array", async (c) => {
89
+ test("tryNextBatch does not wait and returns empty array", async (c) => {
90
90
  const { client } = await setupDriverTest(c, driverTestConfig);
91
91
  const handle = client.queueActor.getOrCreate(["try-next-empty"]);
92
92
 
@@ -1,10 +1,11 @@
1
1
  import type { AnyClient } from "@/client/client";
2
2
  import type { RawDatabaseClient } from "@/db/config";
3
3
  import type { SqliteVfs } from "@rivetkit/sqlite-vfs";
4
- import type {
5
- ActorDriver,
6
- AnyActorInstance,
7
- ManagerDriver,
4
+ import {
5
+ importSqliteVfs,
6
+ type ActorDriver,
7
+ type AnyActorInstance,
8
+ type ManagerDriver,
8
9
  } from "@/driver-helpers/mod";
9
10
  import type { FileSystemGlobalState } from "./global-state";
10
11
  import { RegistryConfig } from "@/registry/config";
@@ -83,18 +84,7 @@ export class FileSystemActorDriver implements ActorDriver {
83
84
 
84
85
  /** Creates a SQLite VFS instance for creating KV-backed databases */
85
86
  async createSqliteVfs(): Promise<SqliteVfs> {
86
- // Dynamic import keeps @rivetkit/sqlite out of the main entrypoint bundle,
87
- // preserving tree-shakeability for environments that don't use SQLite.
88
- // The async @rivetkit/sqlite build is not re-entrant per module instance.
89
- // Returning a fresh SqliteVfs here gives each actor its own module,
90
- // allowing actor-level parallelism without cross-actor re-entry.
91
- //
92
- // The specifier is built via concatenation so that bundlers like
93
- // wrangler's esbuild cannot statically analyze and attempt to
94
- // bundle the module (it is never used on Cloudflare Workers).
95
- const specifier = "@rivetkit/" + "sqlite-vfs";
96
- const { SqliteVfs } = await import(specifier);
97
- return new SqliteVfs();
87
+ return await importSqliteVfs();
98
88
  }
99
89
 
100
90
  startSleep(actorId: string): void {
@@ -123,7 +123,7 @@ export async function ensureEngineProcess(
123
123
  // Allow faster metadata polling for hot-reload in development (in milliseconds)
124
124
  RIVET__PEGBOARD__MIN_METADATA_POLL_INTERVAL: "1000",
125
125
  // Reduce shutdown durations for faster development iteration (in seconds)
126
- RIVET__RUNTIME__WORKER_SHUTDOWN_DURATION: "1",
126
+ RIVET__RUNTIME__WORKER__SHUTDOWN_DURATION: "1",
127
127
  RIVET__RUNTIME__GUARD_SHUTDOWN_DURATION: "1",
128
128
  // Force exit after this duration (must be > worker and guard shutdown durations)
129
129
  RIVET__RUNTIME__FORCE_SHUTDOWN_DURATION: "2",
@@ -5,6 +5,7 @@ import type { ActorDefinition, AnyActorDefinition } from "@/actor/definition";
5
5
  import type { AnyDatabaseProvider, InferDatabaseClient } from "@/actor/database";
6
6
  import type {
7
7
  QueueFilterName,
8
+ QueueNextBatchOptions,
8
9
  QueueNextOptions,
9
10
  QueueResultMessageForName,
10
11
  } from "@/actor/instance/queue";
@@ -29,21 +30,21 @@ import { WORKFLOW_GUARD_KV_KEY } from "./constants";
29
30
  type WorkflowActorQueueNextOptions<
30
31
  TName extends string,
31
32
  TCompletable extends boolean,
32
- > = Omit<QueueNextOptions<TName, TCompletable>, "signal" | "count">;
33
+ > = Omit<QueueNextOptions<TName, TCompletable>, "signal">;
33
34
 
34
35
  type WorkflowActorQueueNextOptionsFallback<TCompletable extends boolean> = Omit<
35
36
  QueueNextOptions<string, TCompletable>,
36
- "signal" | "count"
37
+ "signal"
37
38
  >;
38
39
 
39
40
  type WorkflowActorQueueNextBatchOptions<
40
41
  TName extends string,
41
42
  TCompletable extends boolean,
42
- > = Omit<QueueNextOptions<TName, TCompletable>, "signal">;
43
+ > = Omit<QueueNextBatchOptions<TName, TCompletable>, "signal">;
43
44
 
44
45
  type WorkflowActorQueueNextBatchOptionsFallback<
45
46
  TCompletable extends boolean,
46
- > = Omit<QueueNextOptions<string, TCompletable>, "signal">;
47
+ > = Omit<QueueNextBatchOptions<string, TCompletable>, "signal">;
47
48
 
48
49
  type ActorWorkflowLoopConfig<
49
50
  S,
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/workflow/mod.ts","../../src/workflow/constants.ts","../../src/workflow/context.ts","../../src/workflow/driver.ts","../../src/workflow/inspector.ts"],"sourcesContent":["import { ACTOR_CONTEXT_INTERNAL_SYMBOL } from \"@/actor/contexts/base/actor\";\nimport type { RunContext } from \"@/actor/contexts/run\";\nimport type { AnyDatabaseProvider } from \"@/actor/database\";\nimport type { AnyActorInstance } from \"@/actor/instance/mod\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"@/actor/schema\";\nimport { RUN_FUNCTION_CONFIG_SYMBOL } from \"@/actor/config\";\nimport { stringifyError } from \"@/utils\";\nimport { runWorkflow } from \"@rivetkit/workflow-engine\";\nimport invariant from \"invariant\";\nimport { ActorWorkflowContext } from \"./context\";\nimport { ActorWorkflowDriver } from \"./driver\";\nimport { createWorkflowInspectorAdapter } from \"./inspector\";\n\nexport { Loop } from \"@rivetkit/workflow-engine\";\nexport {\n\tActorWorkflowContext,\n\ttype WorkflowBranchContextOf,\n\ttype WorkflowContextOf,\n\ttype WorkflowLoopContextOf,\n\ttype WorkflowStepContextOf,\n} from \"./context\";\n\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): (\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 workflowInspector = createWorkflowInspectorAdapter();\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]?: AnyActorInstance;\n\t\t\t}\n\t\t)[ACTOR_CONTEXT_INTERNAL_SYMBOL];\n\t\tinvariant(actor, \"workflow() requires an actor instance\");\n\n\t\tconst driver = new ActorWorkflowDriver(actor, runCtx);\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},\n\t\t);\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\trunCtx.log.error({\n\t\t\t\tmsg: \"workflow run failed\",\n\t\t\t\terror: stringifyError(error),\n\t\t\t});\n\t\t\tthrow error;\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\tinspector?: { workflow: typeof workflowInspector.adapter };\n\t\t};\n\t};\n\trunWithConfig[RUN_FUNCTION_CONFIG_SYMBOL] = {\n\t\ticon: \"diagram-project\",\n\t\tinspector: { workflow: workflowInspector.adapter },\n\t};\n\n\treturn runWithConfig;\n}\n","export const WORKFLOW_GUARD_KV_KEY =\n\t\"__rivet_actor_workflow_guard_triggered\";\n","import type { RunContext } from \"@/actor/contexts/run\";\nimport type { Client } from \"@/client/client\";\nimport type { Registry } from \"@/registry\";\nimport type { ActorDefinition, AnyActorDefinition } from \"@/actor/definition\";\nimport type { AnyDatabaseProvider, InferDatabaseClient } from \"@/actor/database\";\nimport type {\n\tQueueFilterName,\n\tQueueNextOptions,\n\tQueueResultMessageForName,\n} from \"@/actor/instance/queue\";\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\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\" | \"count\">;\n\ntype WorkflowActorQueueNextOptionsFallback<TCompletable extends boolean> = Omit<\n\tQueueNextOptions<string, TCompletable>,\n\t\"signal\" | \"count\"\n>;\n\ntype WorkflowActorQueueNextBatchOptions<\n\tTName extends string,\n\tTCompletable extends boolean,\n> = Omit<QueueNextOptions<TName, TCompletable>, \"signal\">;\n\ntype WorkflowActorQueueNextBatchOptionsFallback<\n\tTCompletable extends boolean,\n> = Omit<QueueNextOptions<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<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>>;\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) => self.#toActorQueueMessage(message));\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\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, () => this.#withActorAccess(run)),\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 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\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>>(): 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\tkeepAwake<T>(promise: Promise<T>): Promise<T> {\n\t\treturn this.#runCtx.keepAwake(promise);\n\t}\n\n\twaitUntil(promise: Promise<void>): void {\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.#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.keepAwake(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 ActorDefinition<\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","import type { RunContext } from \"@/actor/contexts/run\";\nimport type { AnyActorInstance } from \"@/actor/instance/mod\";\nimport { makeWorkflowKey, workflowStoragePrefix } from \"@/actor/instance/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\nclass ActorWorkflowMessageDriver implements WorkflowMessageDriver {\n\t#actor: AnyActorInstance;\n\t#runCtx: RunContext<any, any, any, any, any, any, any, any>;\n\n\tconstructor(\n\t\tactor: AnyActorInstance,\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.keepAwake(\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.keepAwake(\n\t\t\tthis.#actor.queueManager.receive(\n\t\t\t\topts.names && opts.names.length > 0 ? [...opts.names] : 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.keepAwake(\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(messageId: string, response?: unknown): 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.keepAwake(\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: AnyActorInstance;\n\t#runCtx: RunContext<any, any, any, any, any, any, any, any>;\n\n\tconstructor(\n\t\tactor: AnyActorInstance,\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.keepAwake(\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.keepAwake(\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.keepAwake(\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 entries = await this.#runCtx.keepAwake(\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\tif (entries.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tawait this.#runCtx.keepAwake(\n\t\t\tthis.#actor.driver.kvBatchDelete(\n\t\t\t\tthis.#actor.id,\n\t\t\t\tentries.map(([key]) => key),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync list(prefix: Uint8Array): Promise<KVEntry[]> {\n\t\tconst entries = await this.#runCtx.keepAwake(\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.keepAwake(\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 }) => [makeWorkflowKey(key), value]),\n\t\t\t\t),\n\t\t\t\tthis.#actor.stateManager.saveState({ immediate: true }),\n\t\t\t]),\n\t\t);\n\t}\n\n\tasync setAlarm(_workflowId: string, wakeAt: number): Promise<void> {\n\t\tawait this.#runCtx.keepAwake(\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","import * as cbor from \"cbor-x\";\nimport { createNanoEvents } from \"nanoevents\";\nimport type {\n\tBranchStatus,\n\tBranchStatusType,\n\tEntryKind,\n\tEntryStatus,\n\tLocation,\n\tSleepState,\n\tWorkflowHistoryEntry,\n\tWorkflowHistorySnapshot,\n\tWorkflowEntryMetadataSnapshot,\n} from \"@rivetkit/workflow-engine\";\nimport { encodeWorkflowHistoryTransport } from \"@/inspector/transport\";\nimport type * as inspectorSchema from \"@/schemas/actor-inspector/mod\";\nimport * as transport from \"@/schemas/transport/mod\";\nimport { assertUnreachable, bufferToArrayBuffer } from \"@/utils\";\n\nexport interface WorkflowInspectorAdapter {\n\tgetHistory: () => inspectorSchema.WorkflowHistory | null;\n\tonHistoryUpdated: (\n\t\tlistener: (history: inspectorSchema.WorkflowHistory) => void,\n\t) => () => void;\n}\n\nexport function createWorkflowInspectorAdapter(): {\n\tadapter: WorkflowInspectorAdapter;\n\tupdate: (snapshot: WorkflowHistorySnapshot) => void;\n} {\n\tconst emitter = createNanoEvents<{\n\t\tupdated: (history: inspectorSchema.WorkflowHistory) => void;\n\t}>();\n\tlet history: inspectorSchema.WorkflowHistory | null = null;\n\n\tconst adapter: WorkflowInspectorAdapter = {\n\t\tgetHistory: () => history,\n\t\tonHistoryUpdated: (listener) => emitter.on(\"updated\", listener),\n\t};\n\n\tconst update = (snapshot: WorkflowHistorySnapshot) => {\n\t\tconst transportHistory = toWorkflowHistory(snapshot);\n\t\tconst next = encodeWorkflowHistoryTransport(transportHistory);\n\t\thistory = next;\n\t\temitter.emit(\"updated\", next);\n\t};\n\n\treturn { adapter, update };\n}\n\nfunction encodeCbor(value: unknown): ArrayBuffer {\n\treturn bufferToArrayBuffer(cbor.encode(value));\n}\n\nfunction encodeOptionalCbor(value: unknown): ArrayBuffer | null {\n\tif (value === undefined) {\n\t\treturn null;\n\t}\n\treturn encodeCbor(value);\n}\n\nfunction toU64(value: number): bigint {\n\treturn BigInt(Math.max(0, Math.floor(value)));\n}\n\nfunction toWorkflowLocation(\n\tlocation: Location,\n): transport.WorkflowLocation {\n\treturn location.map((segment) => {\n\t\tif (typeof segment === \"number\") {\n\t\t\treturn { tag: \"WorkflowNameIndex\", val: segment };\n\t\t}\n\t\treturn {\n\t\t\ttag: \"WorkflowLoopIterationMarker\",\n\t\t\tval: {\n\t\t\t\tloop: segment.loop,\n\t\t\t\titeration: segment.iteration,\n\t\t\t},\n\t\t};\n\t});\n}\n\nfunction toWorkflowEntryKind(\n\tkind: EntryKind,\n): transport.WorkflowEntryKind {\n\tswitch (kind.type) {\n\t\tcase \"step\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowStepEntry\",\n\t\t\t\tval: {\n\t\t\t\t\toutput: encodeOptionalCbor(kind.data.output),\n\t\t\t\t\terror: kind.data.error ?? null,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"loop\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowLoopEntry\",\n\t\t\t\tval: {\n\t\t\t\t\tstate: encodeCbor(kind.data.state),\n\t\t\t\t\titeration: kind.data.iteration,\n\t\t\t\t\toutput: encodeOptionalCbor(kind.data.output),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"sleep\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowSleepEntry\",\n\t\t\t\tval: {\n\t\t\t\t\tdeadline: toU64(kind.data.deadline),\n\t\t\t\t\tstate: toWorkflowSleepState(kind.data.state),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"message\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowMessageEntry\",\n\t\t\t\tval: {\n\t\t\t\t\tname: kind.data.name,\n\t\t\t\t\tmessageData: encodeCbor(kind.data.data),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"rollback_checkpoint\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowRollbackCheckpointEntry\",\n\t\t\t\tval: { name: kind.data.name },\n\t\t\t};\n\t\tcase \"join\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowJoinEntry\",\n\t\t\t\tval: { branches: toWorkflowBranchStatusMap(kind.data.branches) },\n\t\t\t};\n\t\tcase \"race\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowRaceEntry\",\n\t\t\t\tval: {\n\t\t\t\t\twinner: kind.data.winner ?? null,\n\t\t\t\t\tbranches: toWorkflowBranchStatusMap(kind.data.branches),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"removed\":\n\t\t\treturn {\n\t\t\t\ttag: \"WorkflowRemovedEntry\",\n\t\t\t\tval: {\n\t\t\t\t\toriginalType: kind.data.originalType,\n\t\t\t\t\toriginalName: kind.data.originalName ?? null,\n\t\t\t\t},\n\t\t\t};\n\t\tdefault:\n\t\t\tassertUnreachable(kind as never);\n\t}\n}\n\nfunction toWorkflowEntry(\n\tentry: WorkflowHistoryEntry,\n): transport.WorkflowEntry {\n\treturn {\n\t\tid: entry.id,\n\t\tlocation: toWorkflowLocation(entry.location),\n\t\tkind: toWorkflowEntryKind(entry.kind),\n\t};\n}\n\nfunction toWorkflowEntryStatus(\n\tstatus: EntryStatus,\n): transport.WorkflowEntryStatus {\n\tswitch (status) {\n\t\tcase \"pending\":\n\t\t\treturn transport.WorkflowEntryStatus.PENDING;\n\t\tcase \"running\":\n\t\t\treturn transport.WorkflowEntryStatus.RUNNING;\n\t\tcase \"completed\":\n\t\t\treturn transport.WorkflowEntryStatus.COMPLETED;\n\t\tcase \"failed\":\n\t\t\treturn transport.WorkflowEntryStatus.FAILED;\n\t\tcase \"exhausted\":\n\t\t\treturn transport.WorkflowEntryStatus.EXHAUSTED;\n\t\tdefault:\n\t\t\tassertUnreachable(status as never);\n\t}\n}\n\nfunction toWorkflowSleepState(\n\tstate: SleepState,\n): transport.WorkflowSleepState {\n\tswitch (state) {\n\t\tcase \"pending\":\n\t\t\treturn transport.WorkflowSleepState.PENDING;\n\t\tcase \"completed\":\n\t\t\treturn transport.WorkflowSleepState.COMPLETED;\n\t\tcase \"interrupted\":\n\t\t\treturn transport.WorkflowSleepState.INTERRUPTED;\n\t\tdefault:\n\t\t\tassertUnreachable(state as never);\n\t}\n}\n\nfunction toWorkflowBranchStatusType(\n\tstatus: BranchStatusType,\n): transport.WorkflowBranchStatusType {\n\tswitch (status) {\n\t\tcase \"pending\":\n\t\t\treturn transport.WorkflowBranchStatusType.PENDING;\n\t\tcase \"running\":\n\t\t\treturn transport.WorkflowBranchStatusType.RUNNING;\n\t\tcase \"completed\":\n\t\t\treturn transport.WorkflowBranchStatusType.COMPLETED;\n\t\tcase \"failed\":\n\t\t\treturn transport.WorkflowBranchStatusType.FAILED;\n\t\tcase \"cancelled\":\n\t\t\treturn transport.WorkflowBranchStatusType.CANCELLED;\n\t\tdefault:\n\t\t\tassertUnreachable(status as never);\n\t}\n}\n\nfunction toWorkflowBranchStatus(\n\tstatus: BranchStatus,\n): transport.WorkflowBranchStatus {\n\treturn {\n\t\tstatus: toWorkflowBranchStatusType(status.status),\n\t\toutput: encodeOptionalCbor(status.output),\n\t\terror: status.error ?? null,\n\t};\n}\n\nfunction toWorkflowBranchStatusMap(\n\tbranches: Record<string, BranchStatus>,\n): ReadonlyMap<string, transport.WorkflowBranchStatus> {\n\treturn new Map(\n\t\tObject.entries(branches).map(([name, status]) => [\n\t\t\tname,\n\t\t\ttoWorkflowBranchStatus(status),\n\t\t]),\n\t);\n}\n\nfunction toWorkflowEntryMetadata(\n\tmetadata: WorkflowEntryMetadataSnapshot,\n): transport.WorkflowEntryMetadata {\n\treturn {\n\t\tstatus: toWorkflowEntryStatus(metadata.status),\n\t\terror: metadata.error ?? null,\n\t\tattempts: metadata.attempts,\n\t\tlastAttemptAt: toU64(metadata.lastAttemptAt),\n\t\tcreatedAt: toU64(metadata.createdAt),\n\t\tcompletedAt:\n\t\t\tmetadata.completedAt === undefined\n\t\t\t\t? null\n\t\t\t\t: toU64(metadata.completedAt),\n\t\trollbackCompletedAt:\n\t\t\tmetadata.rollbackCompletedAt === undefined\n\t\t\t\t? null\n\t\t\t\t: toU64(metadata.rollbackCompletedAt),\n\t\trollbackError: metadata.rollbackError ?? null,\n\t};\n}\n\nfunction toWorkflowHistory(\n\tsnapshot: WorkflowHistorySnapshot,\n): transport.WorkflowHistory {\n\tconst entryMetadata = new Map<string, transport.WorkflowEntryMetadata>();\n\tfor (const [id, metadata] of snapshot.entryMetadata) {\n\t\tentryMetadata.set(id, toWorkflowEntryMetadata(metadata));\n\t}\n\n\treturn {\n\t\tnameRegistry: snapshot.nameRegistry,\n\t\tentries: snapshot.entries.map((entry) => toWorkflowEntry(entry)),\n\t\tentryMetadata,\n\t};\n}\n"],"mappings":"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","names":[]}