rivetkit 2.0.7 → 2.0.8

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 (98) hide show
  1. package/dist/tsup/{chunk-B6N6VM37.js → chunk-2FAWAPRT.js} +2 -2
  2. package/dist/tsup/{chunk-7OOBMCQI.cjs → chunk-3WRAGTDC.cjs} +23 -22
  3. package/dist/tsup/chunk-3WRAGTDC.cjs.map +1 -0
  4. package/dist/tsup/{chunk-DIHKN7NM.js → chunk-3ZMJUIL3.js} +3 -3
  5. package/dist/tsup/{chunk-3ALZ7EGX.cjs → chunk-6INXQCH7.cjs} +11 -11
  6. package/dist/tsup/{chunk-3ALZ7EGX.cjs.map → chunk-6INXQCH7.cjs.map} +1 -1
  7. package/dist/tsup/{chunk-RLBM6D4L.js → chunk-A6TV3QU6.js} +3 -3
  8. package/dist/tsup/chunk-A6TV3QU6.js.map +1 -0
  9. package/dist/tsup/{chunk-F7YL5G7Q.cjs → chunk-CKSA7NOS.cjs} +232 -203
  10. package/dist/tsup/chunk-CKSA7NOS.cjs.map +1 -0
  11. package/dist/tsup/{chunk-54MAHBLL.js → chunk-DOZBWJRI.js} +2 -2
  12. package/dist/tsup/{chunk-LXAVET4A.cjs → chunk-DQVVH5ZK.cjs} +3 -3
  13. package/dist/tsup/{chunk-LXAVET4A.cjs.map → chunk-DQVVH5ZK.cjs.map} +1 -1
  14. package/dist/tsup/{chunk-KHRZPP5T.js → chunk-E77RVI3P.js} +68 -39
  15. package/dist/tsup/chunk-E77RVI3P.js.map +1 -0
  16. package/dist/tsup/{chunk-VAF63BEI.cjs → chunk-ESD2JX3L.cjs} +3 -3
  17. package/dist/tsup/{chunk-VAF63BEI.cjs.map → chunk-ESD2JX3L.cjs.map} +1 -1
  18. package/dist/tsup/{chunk-NDCVQZBS.cjs → chunk-FGOZELKN.cjs} +8 -8
  19. package/dist/tsup/{chunk-NDCVQZBS.cjs.map → chunk-FGOZELKN.cjs.map} +1 -1
  20. package/dist/tsup/{chunk-NUA6LOOJ.cjs → chunk-KDNB2BQX.cjs} +211 -200
  21. package/dist/tsup/chunk-KDNB2BQX.cjs.map +1 -0
  22. package/dist/tsup/{chunk-GWJTWY3G.cjs → chunk-KYEEAVJO.cjs} +6 -6
  23. package/dist/tsup/{chunk-GWJTWY3G.cjs.map → chunk-KYEEAVJO.cjs.map} +1 -1
  24. package/dist/tsup/{chunk-OSK2VSJF.cjs → chunk-L5MHM6JJ.cjs} +12 -12
  25. package/dist/tsup/{chunk-OSK2VSJF.cjs.map → chunk-L5MHM6JJ.cjs.map} +1 -1
  26. package/dist/tsup/{chunk-NII4KKHD.js → chunk-N7OVEOMU.js} +22 -11
  27. package/dist/tsup/chunk-N7OVEOMU.js.map +1 -0
  28. package/dist/tsup/{chunk-2NL3KGJ7.js → chunk-PVKV2O2E.js} +5 -4
  29. package/dist/tsup/chunk-PVKV2O2E.js.map +1 -0
  30. package/dist/tsup/{chunk-4EXJ4ITR.cjs → chunk-QGUQB3NC.cjs} +3 -3
  31. package/dist/tsup/{chunk-4EXJ4ITR.cjs.map → chunk-QGUQB3NC.cjs.map} +1 -1
  32. package/dist/tsup/{chunk-WAT5AE7S.js → chunk-RM2V2IRK.js} +5 -5
  33. package/dist/tsup/{chunk-NRELKXIX.js → chunk-S6EAEZQA.js} +3 -3
  34. package/dist/tsup/{chunk-YL4VZMMT.js → chunk-SFRRXLRM.js} +2 -2
  35. package/dist/tsup/{chunk-ETDWYT2P.cjs → chunk-TPJNKVFB.cjs} +7 -7
  36. package/dist/tsup/{chunk-ETDWYT2P.cjs.map → chunk-TPJNKVFB.cjs.map} +1 -1
  37. package/dist/tsup/{chunk-PD6HCAJE.js → chunk-WP7YG7S5.js} +2 -2
  38. package/dist/tsup/client/mod.cjs +9 -9
  39. package/dist/tsup/client/mod.d.cts +2 -2
  40. package/dist/tsup/client/mod.d.ts +2 -2
  41. package/dist/tsup/client/mod.js +8 -8
  42. package/dist/tsup/common/log.cjs +3 -3
  43. package/dist/tsup/common/log.js +2 -2
  44. package/dist/tsup/common/websocket.cjs +4 -4
  45. package/dist/tsup/common/websocket.js +3 -3
  46. package/dist/tsup/{conn-DdzHTm2E.d.cts → conn-ChAuuTr0.d.cts} +13 -1
  47. package/dist/tsup/{conn-DCSQgIlw.d.ts → conn-CjUkMEcm.d.ts} +13 -1
  48. package/dist/tsup/driver-helpers/mod.cjs +5 -5
  49. package/dist/tsup/driver-helpers/mod.d.cts +1 -1
  50. package/dist/tsup/driver-helpers/mod.d.ts +1 -1
  51. package/dist/tsup/driver-helpers/mod.js +4 -4
  52. package/dist/tsup/driver-test-suite/mod.cjs +103 -113
  53. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  54. package/dist/tsup/driver-test-suite/mod.d.cts +3 -1
  55. package/dist/tsup/driver-test-suite/mod.d.ts +3 -1
  56. package/dist/tsup/driver-test-suite/mod.js +45 -55
  57. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  58. package/dist/tsup/inspector/mod.cjs +6 -6
  59. package/dist/tsup/inspector/mod.d.cts +2 -2
  60. package/dist/tsup/inspector/mod.d.ts +2 -2
  61. package/dist/tsup/inspector/mod.js +5 -5
  62. package/dist/tsup/mod.cjs +10 -10
  63. package/dist/tsup/mod.d.cts +5 -5
  64. package/dist/tsup/mod.d.ts +5 -5
  65. package/dist/tsup/mod.js +9 -9
  66. package/dist/tsup/test/mod.cjs +11 -11
  67. package/dist/tsup/test/mod.d.cts +1 -1
  68. package/dist/tsup/test/mod.d.ts +1 -1
  69. package/dist/tsup/test/mod.js +10 -10
  70. package/dist/tsup/utils.cjs +2 -2
  71. package/dist/tsup/utils.js +1 -1
  72. package/package.json +2 -2
  73. package/src/actor/instance.ts +16 -3
  74. package/src/actor/router-endpoints.ts +2 -1
  75. package/src/actor/router.ts +27 -24
  76. package/src/client/actor-conn.ts +5 -1
  77. package/src/client/config.ts +2 -0
  78. package/src/driver-test-suite/mod.ts +11 -2
  79. package/src/driver-test-suite/tests/actor-schedule.ts +14 -37
  80. package/src/driver-test-suite/tests/actor-sleep.ts +18 -18
  81. package/src/drivers/engine/actor-driver.ts +39 -10
  82. package/src/drivers/file-system/manager.ts +5 -1
  83. package/src/manager/router.ts +11 -2
  84. package/src/registry/mod.ts +10 -1
  85. package/dist/tsup/chunk-2NL3KGJ7.js.map +0 -1
  86. package/dist/tsup/chunk-7OOBMCQI.cjs.map +0 -1
  87. package/dist/tsup/chunk-F7YL5G7Q.cjs.map +0 -1
  88. package/dist/tsup/chunk-KHRZPP5T.js.map +0 -1
  89. package/dist/tsup/chunk-NII4KKHD.js.map +0 -1
  90. package/dist/tsup/chunk-NUA6LOOJ.cjs.map +0 -1
  91. package/dist/tsup/chunk-RLBM6D4L.js.map +0 -1
  92. /package/dist/tsup/{chunk-B6N6VM37.js.map → chunk-2FAWAPRT.js.map} +0 -0
  93. /package/dist/tsup/{chunk-DIHKN7NM.js.map → chunk-3ZMJUIL3.js.map} +0 -0
  94. /package/dist/tsup/{chunk-54MAHBLL.js.map → chunk-DOZBWJRI.js.map} +0 -0
  95. /package/dist/tsup/{chunk-WAT5AE7S.js.map → chunk-RM2V2IRK.js.map} +0 -0
  96. /package/dist/tsup/{chunk-NRELKXIX.js.map → chunk-S6EAEZQA.js.map} +0 -0
  97. /package/dist/tsup/{chunk-YL4VZMMT.js.map → chunk-SFRRXLRM.js.map} +0 -0
  98. /package/dist/tsup/{chunk-PD6HCAJE.js.map → chunk-WP7YG7S5.js.map} +0 -0
@@ -6,6 +6,8 @@ export function runActorScheduleTests(driverTestConfig: DriverTestConfig) {
6
6
  describe.skipIf(driverTestConfig.skip?.schedule)(
7
7
  "Actor Schedule Tests",
8
8
  () => {
9
+ // See alarm + actor sleeping test in actor-sleep.ts
10
+
9
11
  describe("Scheduled Alarms", () => {
10
12
  test("executes c.schedule.at() with specific timestamp", async (c) => {
11
13
  const { client } = await setupDriverTest(c, driverTestConfig);
@@ -13,12 +15,12 @@ export function runActorScheduleTests(driverTestConfig: DriverTestConfig) {
13
15
  // Create instance
14
16
  const scheduled = client.scheduled.getOrCreate();
15
17
 
16
- // Schedule a task to run in 100ms using timestamp
17
- const timestamp = Date.now() + 100;
18
+ // Schedule a task to run using timestamp
19
+ const timestamp = Date.now() + 250;
18
20
  await scheduled.scheduleTaskAt(timestamp);
19
21
 
20
22
  // Wait for longer than the scheduled time
21
- await waitFor(driverTestConfig, 200);
23
+ await waitFor(driverTestConfig, 500);
22
24
 
23
25
  // Verify the scheduled task ran
24
26
  const lastRun = await scheduled.getLastRun();
@@ -34,11 +36,11 @@ export function runActorScheduleTests(driverTestConfig: DriverTestConfig) {
34
36
  // Create instance
35
37
  const scheduled = client.scheduled.getOrCreate();
36
38
 
37
- // Schedule a task to run in 100ms using delay
38
- await scheduled.scheduleTaskAfter(100);
39
+ // Schedule a task to run using delay
40
+ await scheduled.scheduleTaskAfter(250);
39
41
 
40
42
  // Wait for longer than the scheduled time
41
- await waitFor(driverTestConfig, 200);
43
+ await waitFor(driverTestConfig, 500);
42
44
 
43
45
  // Verify the scheduled task ran
44
46
  const lastRun = await scheduled.getLastRun();
@@ -48,31 +50,6 @@ export function runActorScheduleTests(driverTestConfig: DriverTestConfig) {
48
50
  expect(scheduledCount).toBe(1);
49
51
  });
50
52
 
51
- test("scheduled tasks persist across actor restarts", async (c) => {
52
- const { client } = await setupDriverTest(c, driverTestConfig);
53
-
54
- // Create instance and schedule
55
- const scheduled = client.scheduled.getOrCreate();
56
- await scheduled.scheduleTaskAfter(200);
57
-
58
- // Wait a little so the schedule is stored but hasn't triggered yet
59
- await waitFor(driverTestConfig, 100);
60
-
61
- // Get a new reference to simulate actor restart
62
- const newInstance = client.scheduled.getOrCreate();
63
-
64
- // Verify the schedule still exists but hasn't run yet
65
- const initialCount = await newInstance.getScheduledCount();
66
- expect(initialCount).toBe(0);
67
-
68
- // Wait for the scheduled task to execute
69
- await waitFor(driverTestConfig, 200);
70
-
71
- // Verify the scheduled task ran after "restart"
72
- const scheduledCount = await newInstance.getScheduledCount();
73
- expect(scheduledCount).toBe(1);
74
- });
75
-
76
53
  test("multiple scheduled tasks execute in order", async (c) => {
77
54
  const { client } = await setupDriverTest(c, driverTestConfig);
78
55
 
@@ -83,22 +60,22 @@ export function runActorScheduleTests(driverTestConfig: DriverTestConfig) {
83
60
  await scheduled.clearHistory();
84
61
 
85
62
  // Schedule multiple tasks with different delays
86
- await scheduled.scheduleTaskAfterWithId("first", 100);
87
- await scheduled.scheduleTaskAfterWithId("second", 300);
88
- await scheduled.scheduleTaskAfterWithId("third", 500);
63
+ await scheduled.scheduleTaskAfterWithId("first", 250);
64
+ await scheduled.scheduleTaskAfterWithId("second", 750);
65
+ await scheduled.scheduleTaskAfterWithId("third", 1250);
89
66
 
90
67
  // Wait for first task only
91
- await waitFor(driverTestConfig, 200);
68
+ await waitFor(driverTestConfig, 500);
92
69
  const history1 = await scheduled.getTaskHistory();
93
70
  expect(history1).toEqual(["first"]);
94
71
 
95
72
  // Wait for second task
96
- await waitFor(driverTestConfig, 200);
73
+ await waitFor(driverTestConfig, 500);
97
74
  const history2 = await scheduled.getTaskHistory();
98
75
  expect(history2).toEqual(["first", "second"]);
99
76
 
100
77
  // Wait for third task
101
- await waitFor(driverTestConfig, 200);
78
+ await waitFor(driverTestConfig, 500);
102
79
  const history3 = await scheduled.getTaskHistory();
103
80
  expect(history3).toEqual(["first", "second", "third"]);
104
81
  });
@@ -29,7 +29,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
29
29
  await sleepActor.triggerSleep();
30
30
 
31
31
  // HACK: Wait for sleep to finish in background
32
- await waitFor(driverTestConfig, 100);
32
+ await waitFor(driverTestConfig, 250);
33
33
 
34
34
  // Get sleep count after restore
35
35
  {
@@ -59,7 +59,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
59
59
  await sleepActor.dispose();
60
60
 
61
61
  // HACK: Wait for sleep to finish in background
62
- await waitFor(driverTestConfig, 100);
62
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
63
63
 
64
64
  // Reconnect to get sleep count after restore
65
65
  const sleepActor2 = client.sleep.getOrCreate();
@@ -84,7 +84,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
84
84
  }
85
85
 
86
86
  // Wait for sleep
87
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
87
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
88
88
 
89
89
  // Get sleep count after restore
90
90
  {
@@ -111,7 +111,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
111
111
  await sleepActor.dispose();
112
112
 
113
113
  // Wait for sleep
114
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
114
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
115
115
 
116
116
  // Reconnect to get sleep count after restore
117
117
  const sleepActor2 = client.sleep.getOrCreate();
@@ -136,7 +136,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
136
136
  }
137
137
 
138
138
  // Wait almost until sleep timeout, then make RPC call
139
- await waitFor(driverTestConfig, SLEEP_TIMEOUT - 100);
139
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT - 250);
140
140
 
141
141
  // RPC call should reset the sleep timer
142
142
  {
@@ -146,7 +146,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
146
146
  }
147
147
 
148
148
  // Wait another partial timeout period - actor should still be awake
149
- await waitFor(driverTestConfig, SLEEP_TIMEOUT - 100);
149
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT - 250);
150
150
 
151
151
  // Actor should still be awake
152
152
  {
@@ -156,7 +156,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
156
156
  }
157
157
 
158
158
  // Now wait for full timeout without any RPC calls
159
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
159
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
160
160
 
161
161
  // Actor should have slept and restarted
162
162
  {
@@ -180,10 +180,10 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
180
180
  }
181
181
 
182
182
  // Set an alarm to keep the actor awake
183
- await sleepActor.setAlarm(SLEEP_TIMEOUT - 100);
183
+ await sleepActor.setAlarm(SLEEP_TIMEOUT - 250);
184
184
 
185
185
  // Wait until after SLEEPT_IMEOUT to validate the actor did not sleep
186
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
186
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
187
187
 
188
188
  // Actor should not have slept
189
189
  {
@@ -207,7 +207,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
207
207
  }
208
208
 
209
209
  // Set an alarm to keep the actor awake
210
- await sleepActor.setAlarm(SLEEP_TIMEOUT + 100);
210
+ await sleepActor.setAlarm(SLEEP_TIMEOUT + 250);
211
211
 
212
212
  // Wait until after SLEEPT_IMEOUT to validate the actor did not sleep
213
213
  await waitFor(driverTestConfig, SLEEP_TIMEOUT + 200);
@@ -239,7 +239,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
239
239
  );
240
240
  const longRunningPromise = sleepActor.longRunningRpc();
241
241
  await waitPromise;
242
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
242
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
243
243
  await sleepActor.finishLongRunningRpc();
244
244
  await longRunningPromise;
245
245
 
@@ -252,7 +252,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
252
252
  await sleepActor.dispose();
253
253
 
254
254
  // Now wait for the sleep timeout
255
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
255
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
256
256
 
257
257
  // Actor should have slept after the timeout
258
258
  const sleepActor2 = client.sleepWithLongRpc.getOrCreate();
@@ -298,7 +298,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
298
298
  });
299
299
 
300
300
  // Wait longer than sleep timeout while keeping WebSocket connected
301
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
301
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
302
302
 
303
303
  // Send a message to check if actor is still alive
304
304
  ws.send(JSON.stringify({ type: "getCounts" }));
@@ -320,7 +320,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
320
320
  ws.close();
321
321
 
322
322
  // Wait for sleep timeout after WebSocket closed
323
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
323
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
324
324
 
325
325
  // Actor should have slept after WebSocket closed
326
326
  {
@@ -347,7 +347,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
347
347
  }
348
348
 
349
349
  // Start a long-running fetch request
350
- const fetchDuration = SLEEP_TIMEOUT + 100;
350
+ const fetchDuration = SLEEP_TIMEOUT + 250;
351
351
  const fetchPromise = sleepActor.fetch(
352
352
  `long-request?duration=${fetchDuration}`,
353
353
  );
@@ -365,7 +365,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
365
365
  }
366
366
 
367
367
  // Wait for sleep timeout
368
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
368
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
369
369
 
370
370
  // Actor should have slept after timeout
371
371
  {
@@ -389,7 +389,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
389
389
  }
390
390
 
391
391
  // Wait longer than sleep timeout
392
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
392
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
393
393
 
394
394
  // Actor should NOT have slept due to noSleep option
395
395
  {
@@ -399,7 +399,7 @@ export function runActorSleepTests(driverTestConfig: DriverTestConfig) {
399
399
  }
400
400
 
401
401
  // Wait even longer to be sure
402
- await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
402
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 250);
403
403
 
404
404
  // Actor should still not have slept
405
405
  {
@@ -35,7 +35,11 @@ import {
35
35
  } from "@/driver-helpers/mod";
36
36
  import type { RegistryConfig } from "@/registry/config";
37
37
  import type { RunConfig } from "@/registry/run-config";
38
- import { promiseWithResolvers } from "@/utils";
38
+ import {
39
+ type LongTimeoutHandle,
40
+ promiseWithResolvers,
41
+ setLongTimeout,
42
+ } from "@/utils";
39
43
  import type { Config } from "./config";
40
44
  import { KEYS } from "./kv";
41
45
  import { logger } from "./log";
@@ -58,6 +62,7 @@ export class EngineActorDriver implements ActorDriver {
58
62
  #actors: Map<string, ActorHandler> = new Map();
59
63
  #actorRouter: ActorRouter;
60
64
  #version: number = 1; // Version for the runner protocol
65
+ #alarmTimeout?: LongTimeoutHandle;
61
66
 
62
67
  #runnerStarted: PromiseWithResolvers<undefined> = Promise.withResolvers();
63
68
  #runnerStopped: PromiseWithResolvers<undefined> = Promise.withResolvers();
@@ -74,17 +79,21 @@ export class EngineActorDriver implements ActorDriver {
74
79
  this.#managerDriver = managerDriver;
75
80
  this.#inlineClient = inlineClient;
76
81
  this.#config = config;
77
- this.#actorRouter = createActorRouter(runConfig, this);
82
+ this.#actorRouter = createActorRouter(
83
+ runConfig,
84
+ this,
85
+ registryConfig.test.enabled,
86
+ );
78
87
 
79
88
  // Create runner configuration
80
89
  let hasDisconnected = false;
81
90
  const runnerConfig: RunnerConfig = {
82
91
  version: this.#version,
83
92
  endpoint: config.endpoint,
84
- token: config.token,
93
+ token: runConfig.token ?? config.token,
85
94
  pegboardEndpoint: config.pegboardEndpoint,
86
95
  namespace: config.namespace,
87
- totalSlots: config.totalSlots,
96
+ totalSlots: runConfig.totalSlots ?? config.totalSlots,
88
97
  runnerName: config.runnerName,
89
98
  runnerKey: config.runnerKey,
90
99
  metadata: {
@@ -186,9 +195,29 @@ export class EngineActorDriver implements ActorDriver {
186
195
  }
187
196
 
188
197
  async setAlarm(actor: AnyActorInstance, timestamp: number): Promise<void> {
189
- // TODO: Set timeout
190
- // TODO: Use alarm on sleep
191
- // TODO: Send alarm to runner
198
+ // Clear prev timeout
199
+ if (this.#alarmTimeout) {
200
+ this.#alarmTimeout.abort();
201
+ this.#alarmTimeout = undefined;
202
+ }
203
+
204
+ // Set alarm
205
+ const delay = Math.max(0, timestamp - Date.now());
206
+ this.#alarmTimeout = setLongTimeout(() => {
207
+ actor._onAlarm();
208
+ this.#alarmTimeout = undefined;
209
+ }, delay);
210
+
211
+ // TODO: This call may not be needed on ActorInstance.start, but it does help ensure that the local state is synced with the alarm state
212
+ // Set alarm on Rivet
213
+ //
214
+ // This does not call an "alarm" event like Durable Objects.
215
+ // Instead, it just wakes the actor on the alarm (if not
216
+ // already awake).
217
+ //
218
+ // _onAlarm is automatically called on `ActorInstance.start` when waking
219
+ // again.
220
+ this.#runner.setAlarm(actor.id, timestamp);
192
221
  }
193
222
 
194
223
  async getDatabase(_actorId: string): Promise<unknown | undefined> {
@@ -382,9 +411,9 @@ export class EngineActorDriver implements ActorDriver {
382
411
 
383
412
  return streamSSE(c, async (stream) => {
384
413
  // Runner id should be set if the runner started
385
- const runnerId = this.#runner.runnerId;
386
- invariant(runnerId, "runnerId not set");
387
- stream.writeSSE({ data: runnerId });
414
+ const payload = this.#runner.getServerlessInitPacket();
415
+ invariant(payload, "runnerId not set");
416
+ stream.writeSSE({ data: payload });
388
417
 
389
418
  return this.#runnerStopped.promise;
390
419
  });
@@ -123,7 +123,11 @@ export class FileSystemManagerDriver implements ManagerDriver {
123
123
  this,
124
124
  inlineClient,
125
125
  );
126
- this.#actorRouter = createActorRouter(this.#runConfig, this.#actorDriver);
126
+ this.#actorRouter = createActorRouter(
127
+ this.#runConfig,
128
+ this.#actorDriver,
129
+ registryConfig.test.enabled,
130
+ );
127
131
  }
128
132
 
129
133
  async sendRequest(actorId: string, actorRequest: Request): Promise<Response> {
@@ -105,7 +105,10 @@ export function createManagerRouter(
105
105
  }
106
106
 
107
107
  function addServerlessRoutes(
108
- serverlessActorDriverBuilder: () => ActorDriver,
108
+ serverlessActorDriverBuilder: (
109
+ token: string | undefined,
110
+ totalSlots: number | undefined,
111
+ ) => ActorDriver,
109
112
  router: OpenAPIHono,
110
113
  cors: MiddlewareHandler,
111
114
  ) {
@@ -118,7 +121,13 @@ function addServerlessRoutes(
118
121
 
119
122
  // Serverless start endpoint
120
123
  router.get("/start", cors, async (c) => {
121
- const actorDriver = serverlessActorDriverBuilder();
124
+ const token = c.req.header("x-rivet-token");
125
+ let totalSlots: number | undefined = parseInt(
126
+ c.req.header("x-rivetkit-total-slots") as any,
127
+ );
128
+ if (isNaN(totalSlots)) totalSlots = undefined;
129
+
130
+ const actorDriver = serverlessActorDriverBuilder(token, totalSlots);
122
131
  invariant(
123
132
  actorDriver.serverlessHandleStart,
124
133
  "missing serverlessHandleStart on ActorDriver",
@@ -215,7 +215,16 @@ export class Registry<A extends RegistryActors> {
215
215
  console.log();
216
216
  }
217
217
 
218
- let serverlessActorDriverBuilder: (() => ActorDriver) | undefined = () => {
218
+ let serverlessActorDriverBuilder:
219
+ | ((token?: string, totalSlots?: number) => ActorDriver)
220
+ | undefined = (
221
+ token: string | undefined,
222
+ totalSlots: number | undefined,
223
+ ) => {
224
+ // Override config
225
+ if (token) config.token = token;
226
+ if (totalSlots) config.totalSlots = totalSlots;
227
+
219
228
  return driver.actor(this.#config, config, managerDriver, client);
220
229
  };
221
230
 
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/registry/run-config.ts","../../src/client/config.ts","../../src/actor/protocol/old.ts","../../src/common/versioned-data.ts","../schemas/client-protocol/v1.ts","../../src/schemas/client-protocol/versioned.ts","../../src/actor/action.ts","../../src/inspector/config.ts","../../src/driver-helpers/utils.ts","../schemas/actor-persist/v1.ts","../../src/schemas/actor-persist/versioned.ts"],"sourcesContent":["import type { cors } from \"hono/cors\";\nimport type { Logger } from \"pino\";\nimport { z } from \"zod\";\nimport type { ActorDriverBuilder } from \"@/actor/driver\";\nimport { ClientConfigSchema } from \"@/client/config\";\nimport { LogLevelSchema } from \"@/common/log\";\nimport { InspectorConfigSchema } from \"@/inspector/config\";\nimport type { ManagerDriverBuilder } from \"@/manager/driver\";\n\ntype CorsOptions = NonNullable<Parameters<typeof cors>[0]>;\n\nexport const DriverConfigSchema = z.object({\n\t/** Machine-readable name to identify this driver by. */\n\tname: z.string(),\n\tmanager: z.custom<ManagerDriverBuilder>(),\n\tactor: z.custom<ActorDriverBuilder>(),\n});\n\nexport type DriverConfig = z.infer<typeof DriverConfigSchema>;\n\n/** Base config used for the actor config across all platforms. */\nexport const RunConfigSchema = ClientConfigSchema.extend({\n\tdriver: DriverConfigSchema.optional(),\n\n\t/** CORS configuration for the router. Uses Hono's CORS middleware options. */\n\tcors: z.custom<CorsOptions>().optional(),\n\n\tmaxIncomingMessageSize: z.number().optional().default(65_536),\n\n\tinspector: InspectorConfigSchema,\n\n\t/** @experimental */\n\tdisableServer: z.boolean().optional().default(false),\n\n\t/** @experimental */\n\tdisableActorDriver: z.boolean().optional().default(false),\n\n\t/**\n\t * @experimental\n\t *\n\t * Base path for the router. This is used to prefix all routes.\n\t * For example, if the base path is `/api`, then the route `/actors` will be\n\t * available at `/api/actors`.\n\t */\n\tbasePath: z.string().optional().default(\"/\"),\n\n\t/**\n\t * @experimental\n\t *\n\t * Disable welcome message.\n\t * */\n\tnoWelcome: z.boolean().optional().default(false),\n\n\t/**\n\t * @experimental\n\t * */\n\tlogging: z\n\t\t.object({\n\t\t\tbaseLogger: z.custom<Logger>().optional(),\n\t\t\tlevel: LogLevelSchema.optional(),\n\t\t})\n\t\t.optional()\n\t\t.default({}),\n}).default({});\n\nexport type RunConfig = z.infer<typeof RunConfigSchema>;\nexport type RunConfigInput = z.input<typeof RunConfigSchema>;\n","import z from \"zod\";\nimport { TransportSchema } from \"@/actor/protocol/old\";\nimport { EncodingSchema } from \"@/actor/protocol/serde\";\nimport { getEnvUniversal, type UpgradeWebSocket } from \"@/utils\";\n\nexport type GetUpgradeWebSocket = () => UpgradeWebSocket;\n\nexport const ClientConfigSchema = z.object({\n\t/** Configure serving the API */\n\tapi: z\n\t\t.object({\n\t\t\thost: z.string().default(\"127.0.0.1\"),\n\t\t\tport: z.number().default(6420),\n\t\t})\n\t\t.default({}),\n\n\ttoken: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((x) => x ?? getEnvUniversal(\"RIVET_TOKEN\")),\n\n\theaders: z.record(z.string()).optional().default({}),\n\n\t/** Endpoint to connect to the Rivet engine. Can be configured via RIVET_ENGINE env var. */\n\tendpoint: z\n\t\t.string()\n\t\t.nullable()\n\t\t.default(() => getEnvUniversal(\"RIVET_ENGINE\") ?? null),\n\n\tnamespace: z\n\t\t.string()\n\t\t.default(() => getEnvUniversal(\"RIVET_NAMESPACE\") ?? \"default\"),\n\n\trunnerName: z\n\t\t.string()\n\t\t.default(() => getEnvUniversal(\"RIVET_RUNNER\") ?? \"rivetkit\"),\n\n\tencoding: EncodingSchema.default(\"bare\"),\n\n\ttransport: TransportSchema.default(\"websocket\"),\n\n\t// This is a function to allow for lazy configuration of upgradeWebSocket on the\n\t// fly. This is required since the dependencies that upgradeWebSocket\n\t// (specifically Node.js) can sometimes only be specified after the router is\n\t// created or must be imported async using `await import(...)`\n\tgetUpgradeWebSocket: z.custom<GetUpgradeWebSocket>().optional(),\n});\n\nexport type ClientConfig = z.infer<typeof ClientConfigSchema>;\n\nexport type ClientConfigInput = z.input<typeof ClientConfigSchema>;\n","import * as cbor from \"cbor-x\";\nimport { z } from \"zod\";\nimport type { AnyDatabaseProvider } from \"@/actor/database\";\nimport * as errors from \"@/actor/errors\";\nimport {\n\tCachedSerializer,\n\ttype Encoding,\n\ttype InputData,\n} from \"@/actor/protocol/serde\";\nimport { deconstructError } from \"@/common/utils\";\nimport type * as protocol from \"@/schemas/client-protocol/mod\";\nimport {\n\tTO_CLIENT_VERSIONED,\n\tTO_SERVER_VERSIONED,\n} from \"@/schemas/client-protocol/versioned\";\nimport { deserializeWithEncoding } from \"@/serde\";\nimport { assertUnreachable, bufferToArrayBuffer } from \"../../utils\";\nimport { ActionContext } from \"../action\";\nimport type { Conn } from \"../conn\";\nimport type { ActorInstance } from \"../instance\";\n\nexport const TransportSchema = z.enum([\"websocket\", \"sse\"]);\n\n/**\n * Transport mechanism used to communicate between client & actor.\n */\nexport type Transport = z.infer<typeof TransportSchema>;\n\ninterface MessageEventOpts {\n\tencoding: Encoding;\n\tmaxIncomingMessageSize: number;\n}\n\nfunction getValueLength(value: InputData): number {\n\tif (typeof value === \"string\") {\n\t\treturn value.length;\n\t} else if (value instanceof Blob) {\n\t\treturn value.size;\n\t} else if (\n\t\tvalue instanceof ArrayBuffer ||\n\t\tvalue instanceof SharedArrayBuffer ||\n\t\tvalue instanceof Uint8Array\n\t) {\n\t\treturn value.byteLength;\n\t} else {\n\t\tassertUnreachable(value);\n\t}\n}\n\nexport async function inputDataToBuffer(\n\tdata: InputData,\n): Promise<Uint8Array | string> {\n\tif (typeof data === \"string\") {\n\t\treturn data;\n\t} else if (data instanceof Blob) {\n\t\tconst arrayBuffer = await data.arrayBuffer();\n\t\treturn new Uint8Array(arrayBuffer);\n\t} else if (data instanceof Uint8Array) {\n\t\treturn data;\n\t} else if (data instanceof ArrayBuffer || data instanceof SharedArrayBuffer) {\n\t\treturn new Uint8Array(data);\n\t} else {\n\t\tthrow new errors.MalformedMessage();\n\t}\n}\n\nexport async function parseMessage(\n\tvalue: InputData,\n\topts: MessageEventOpts,\n): Promise<protocol.ToServer> {\n\t// Validate value length\n\tconst length = getValueLength(value);\n\tif (length > opts.maxIncomingMessageSize) {\n\t\tthrow new errors.MessageTooLong();\n\t}\n\n\t// Convert value\n\tlet buffer = await inputDataToBuffer(value);\n\n\t// HACK: For some reason, the output buffer needs to be cloned when using BARE encoding\n\t//\n\t// THis is likely because the input data is of type `Buffer` and there is an inconsistency in implementation that I am not aware of\n\tif (buffer instanceof Buffer) {\n\t\tbuffer = new Uint8Array(buffer);\n\t}\n\n\t// Deserialize message\n\treturn deserializeWithEncoding(opts.encoding, buffer, TO_SERVER_VERSIONED);\n}\n\nexport interface ProcessMessageHandler<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n> {\n\tonExecuteAction?: (\n\t\tctx: ActionContext<S, CP, CS, V, I, DB>,\n\t\tname: string,\n\t\targs: unknown[],\n\t) => Promise<unknown>;\n\tonSubscribe?: (\n\t\teventName: string,\n\t\tconn: Conn<S, CP, CS, V, I, DB>,\n\t) => Promise<void>;\n\tonUnsubscribe?: (\n\t\teventName: string,\n\t\tconn: Conn<S, CP, CS, V, I, DB>,\n\t) => Promise<void>;\n}\n\nexport async function processMessage<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n>(\n\tmessage: protocol.ToServer,\n\tactor: ActorInstance<S, CP, CS, V, I, DB>,\n\tconn: Conn<S, CP, CS, V, I, DB>,\n\thandler: ProcessMessageHandler<S, CP, CS, V, I, DB>,\n) {\n\tlet actionId: bigint | undefined;\n\tlet actionName: string | undefined;\n\n\ttry {\n\t\tif (message.body.tag === \"ActionRequest\") {\n\t\t\t// Action request\n\n\t\t\tif (handler.onExecuteAction === undefined) {\n\t\t\t\tthrow new errors.Unsupported(\"Action\");\n\t\t\t}\n\n\t\t\tconst { id, name, args: argsRaw } = message.body.val;\n\t\t\tactionId = id;\n\t\t\tactionName = name;\n\t\t\tconst args = cbor.decode(new Uint8Array(argsRaw));\n\n\t\t\tactor.rLog.debug({\n\t\t\t\tmsg: \"processing action request\",\n\t\t\t\tactionId: id,\n\t\t\t\tactionName: name,\n\t\t\t});\n\n\t\t\tconst ctx = new ActionContext<S, CP, CS, V, I, DB>(\n\t\t\t\tactor.actorContext,\n\t\t\t\tconn,\n\t\t\t);\n\n\t\t\t// Process the action request and wait for the result\n\t\t\t// This will wait for async actions to complete\n\t\t\tconst output = await handler.onExecuteAction(ctx, name, args);\n\n\t\t\tactor.rLog.debug({\n\t\t\t\tmsg: \"sending action response\",\n\t\t\t\tactionId: id,\n\t\t\t\tactionName: name,\n\t\t\t\toutputType: typeof output,\n\t\t\t\tisPromise: output instanceof Promise,\n\t\t\t});\n\n\t\t\t// Send the response back to the client\n\t\t\tconn._sendMessage(\n\t\t\t\tnew CachedSerializer<protocol.ToClient>(\n\t\t\t\t\t{\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\ttag: \"ActionResponse\",\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t\t\toutput: bufferToArrayBuffer(cbor.encode(output)),\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\tTO_CLIENT_VERSIONED,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tactor.rLog.debug({ msg: \"action response sent\", id, name: name });\n\t\t} else if (message.body.tag === \"SubscriptionRequest\") {\n\t\t\t// Subscription request\n\n\t\t\tif (\n\t\t\t\thandler.onSubscribe === undefined ||\n\t\t\t\thandler.onUnsubscribe === undefined\n\t\t\t) {\n\t\t\t\tthrow new errors.Unsupported(\"Subscriptions\");\n\t\t\t}\n\n\t\t\tconst { eventName, subscribe } = message.body.val;\n\t\t\tactor.rLog.debug({\n\t\t\t\tmsg: \"processing subscription request\",\n\t\t\t\teventName,\n\t\t\t\tsubscribe,\n\t\t\t});\n\n\t\t\tif (subscribe) {\n\t\t\t\tawait handler.onSubscribe(eventName, conn);\n\t\t\t} else {\n\t\t\t\tawait handler.onUnsubscribe(eventName, conn);\n\t\t\t}\n\n\t\t\tactor.rLog.debug({\n\t\t\t\tmsg: \"subscription request completed\",\n\t\t\t\teventName,\n\t\t\t\tsubscribe,\n\t\t\t});\n\t\t} else {\n\t\t\tassertUnreachable(message.body);\n\t\t}\n\t} catch (error) {\n\t\tconst { group, code, message, metadata } = deconstructError(\n\t\t\terror,\n\t\t\tactor.rLog,\n\t\t\t{\n\t\t\t\tconnectionId: conn.id,\n\t\t\t\tactionId,\n\t\t\t\tactionName,\n\t\t\t},\n\t\t);\n\n\t\tactor.rLog.debug({\n\t\t\tmsg: \"sending error response\",\n\t\t\tactionId,\n\t\t\tactionName,\n\t\t\tcode,\n\t\t\tmessage,\n\t\t});\n\n\t\t// Build response\n\t\tconn._sendMessage(\n\t\t\tnew CachedSerializer<protocol.ToClient>(\n\t\t\t\t{\n\t\t\t\t\tbody: {\n\t\t\t\t\t\ttag: \"Error\",\n\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\tmetadata: bufferToArrayBuffer(cbor.encode(metadata)),\n\t\t\t\t\t\t\tactionId: actionId ?? null,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTO_CLIENT_VERSIONED,\n\t\t\t),\n\t\t);\n\n\t\tactor.rLog.debug({ msg: \"error response sent\", actionId, actionName });\n\t}\n}\n\n///**\n// * Use `CachedSerializer` if serializing the same data repeatedly.\n// */\n//export function serialize<T>(value: T, encoding: Encoding): OutputData {\n//\tif (encoding === \"json\") {\n//\t\treturn JSON.stringify(value);\n//\t} else if (encoding === \"cbor\") {\n//\t\t// TODO: Remove this hack, but cbor-x can't handle anything extra in data structures\n//\t\tconst cleanValue = JSON.parse(JSON.stringify(value));\n//\t\treturn cbor.encode(cleanValue);\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n//\n//export async function deserialize(data: InputData, encoding: Encoding) {\n//\tif (encoding === \"json\") {\n//\t\tif (typeof data !== \"string\") {\n//\t\t\tactor.rLog.warn(\"received non-string for json parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t} else {\n//\t\t\treturn JSON.parse(data);\n//\t\t}\n//\t} else if (encoding === \"cbor\") {\n//\t\tif (data instanceof Blob) {\n//\t\t\tconst arrayBuffer = await data.arrayBuffer();\n//\t\t\treturn cbor.decode(new Uint8Array(arrayBuffer));\n//\t\t} else if (data instanceof Uint8Array) {\n//\t\t\treturn cbor.decode(data);\n//\t\t} else if (\n//\t\t\tdata instanceof ArrayBuffer ||\n//\t\t\tdata instanceof SharedArrayBuffer\n//\t\t) {\n//\t\t\treturn cbor.decode(new Uint8Array(data));\n//\t\t} else {\n//\t\t\tactor.rLog.warn(\"received non-binary type for cbor parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t}\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n","export interface VersionedData<T> {\n\tversion: number;\n\tdata: T;\n}\n\nexport type MigrationFn<TFrom, TTo> = (data: TFrom) => TTo;\n\nexport interface VersionedDataConfig<T> {\n\tcurrentVersion: number;\n\tmigrations: Map<number, MigrationFn<any, any>>;\n\tserializeVersion: (data: T) => Uint8Array;\n\tdeserializeVersion: (bytes: Uint8Array) => T;\n}\n\nexport class VersionedDataHandler<T> {\n\tconstructor(private config: VersionedDataConfig<T>) {}\n\n\tserializeWithEmbeddedVersion(data: T): Uint8Array {\n\t\tconst versioned: VersionedData<Uint8Array> = {\n\t\t\tversion: this.config.currentVersion,\n\t\t\tdata: this.config.serializeVersion(data),\n\t\t};\n\n\t\treturn this.embedVersion(versioned);\n\t}\n\n\tdeserializeWithEmbeddedVersion(bytes: Uint8Array): T {\n\t\tconst versioned = this.extractVersion(bytes);\n\t\treturn this.deserialize(versioned.data, versioned.version);\n\t}\n\n\tserialize(data: T, version: number): Uint8Array {\n\t\treturn this.config.serializeVersion(data);\n\t}\n\n\tdeserialize(bytes: Uint8Array, version: number): T {\n\t\tif (version === this.config.currentVersion) {\n\t\t\treturn this.config.deserializeVersion(bytes);\n\t\t}\n\n\t\tif (version > this.config.currentVersion) {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot decode data from version ${version}, current version is ${this.config.currentVersion}`,\n\t\t\t);\n\t\t}\n\n\t\tlet currentData: any = this.config.deserializeVersion(bytes);\n\t\tlet currentVersion = version;\n\n\t\twhile (currentVersion < this.config.currentVersion) {\n\t\t\tconst migration = this.config.migrations.get(currentVersion);\n\t\t\tif (!migration) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No migration found from version ${currentVersion} to ${currentVersion + 1}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcurrentData = migration(currentData);\n\t\t\tcurrentVersion++;\n\t\t}\n\n\t\treturn currentData;\n\t}\n\n\tprivate embedVersion(data: VersionedData<Uint8Array>): Uint8Array {\n\t\tconst versionBytes = new Uint8Array(2);\n\t\tnew DataView(versionBytes.buffer).setUint16(0, data.version, true);\n\n\t\tconst result = new Uint8Array(versionBytes.length + data.data.length);\n\t\tresult.set(versionBytes);\n\t\tresult.set(data.data, versionBytes.length);\n\n\t\treturn result;\n\t}\n\n\tprivate extractVersion(bytes: Uint8Array): VersionedData<Uint8Array> {\n\t\tif (bytes.length < 2) {\n\t\t\tthrow new Error(\"Invalid versioned data: too short\");\n\t\t}\n\n\t\tconst version = new DataView(bytes.buffer, bytes.byteOffset).getUint16(\n\t\t\t0,\n\t\t\ttrue,\n\t\t);\n\t\tconst data = bytes.slice(2);\n\n\t\treturn { version, data };\n\t}\n}\n\nexport function createVersionedDataHandler<T>(\n\tconfig: VersionedDataConfig<T>,\n): VersionedDataHandler<T> {\n\treturn new VersionedDataHandler(config);\n}\n","import * as bare from \"@bare-ts/lib\"\n\nconst config = /* @__PURE__ */ bare.Config({})\n\nexport type uint = bigint\n\nexport type Init = {\n readonly actorId: string,\n readonly connectionId: string,\n readonly connectionToken: string,\n}\n\nexport function readInit(bc: bare.ByteCursor): Init {\n return {\n actorId: bare.readString(bc),\n connectionId: bare.readString(bc),\n connectionToken: bare.readString(bc),\n }\n}\n\nexport function writeInit(bc: bare.ByteCursor, x: Init): void {\n bare.writeString(bc, x.actorId)\n bare.writeString(bc, x.connectionId)\n bare.writeString(bc, x.connectionToken)\n}\n\nfunction read0(bc: bare.ByteCursor): ArrayBuffer | null {\n return bare.readBool(bc)\n ? bare.readData(bc)\n : null\n}\n\nfunction write0(bc: bare.ByteCursor, x: ArrayBuffer | null): void {\n bare.writeBool(bc, x !== null)\n if (x !== null) {\n bare.writeData(bc, x)\n }\n}\n\nfunction read1(bc: bare.ByteCursor): uint | null {\n return bare.readBool(bc)\n ? bare.readUint(bc)\n : null\n}\n\nfunction write1(bc: bare.ByteCursor, x: uint | null): void {\n bare.writeBool(bc, x !== null)\n if (x !== null) {\n bare.writeUint(bc, x)\n }\n}\n\nexport type Error = {\n readonly group: string,\n readonly code: string,\n readonly message: string,\n readonly metadata: ArrayBuffer | null,\n readonly actionId: uint | null,\n}\n\nexport function readError(bc: bare.ByteCursor): Error {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n actionId: read1(bc),\n }\n}\n\nexport function writeError(bc: bare.ByteCursor, x: Error): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n write1(bc, x.actionId)\n}\n\nexport type ActionResponse = {\n readonly id: uint,\n readonly output: ArrayBuffer,\n}\n\nexport function readActionResponse(bc: bare.ByteCursor): ActionResponse {\n return {\n id: bare.readUint(bc),\n output: bare.readData(bc),\n }\n}\n\nexport function writeActionResponse(bc: bare.ByteCursor, x: ActionResponse): void {\n bare.writeUint(bc, x.id)\n bare.writeData(bc, x.output)\n}\n\nexport type Event = {\n readonly name: string,\n readonly args: ArrayBuffer,\n}\n\nexport function readEvent(bc: bare.ByteCursor): Event {\n return {\n name: bare.readString(bc),\n args: bare.readData(bc),\n }\n}\n\nexport function writeEvent(bc: bare.ByteCursor, x: Event): void {\n bare.writeString(bc, x.name)\n bare.writeData(bc, x.args)\n}\n\nexport type ToClientBody =\n | { readonly tag: \"Init\", readonly val: Init }\n | { readonly tag: \"Error\", readonly val: Error }\n | { readonly tag: \"ActionResponse\", readonly val: ActionResponse }\n | { readonly tag: \"Event\", readonly val: Event }\n\nexport function readToClientBody(bc: bare.ByteCursor): ToClientBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"Init\", val: readInit(bc) }\n case 1:\n return { tag: \"Error\", val: readError(bc) }\n case 2:\n return { tag: \"ActionResponse\", val: readActionResponse(bc) }\n case 3:\n return { tag: \"Event\", val: readEvent(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToClientBody(bc: bare.ByteCursor, x: ToClientBody): void {\n switch (x.tag) {\n case \"Init\": {\n bare.writeU8(bc, 0)\n writeInit(bc, x.val)\n break\n }\n case \"Error\": {\n bare.writeU8(bc, 1)\n writeError(bc, x.val)\n break\n }\n case \"ActionResponse\": {\n bare.writeU8(bc, 2)\n writeActionResponse(bc, x.val)\n break\n }\n case \"Event\": {\n bare.writeU8(bc, 3)\n writeEvent(bc, x.val)\n break\n }\n }\n}\n\nexport type ToClient = {\n readonly body: ToClientBody,\n}\n\nexport function readToClient(bc: bare.ByteCursor): ToClient {\n return {\n body: readToClientBody(bc),\n }\n}\n\nexport function writeToClient(bc: bare.ByteCursor, x: ToClient): void {\n writeToClientBody(bc, x.body)\n}\n\nexport function encodeToClient(x: ToClient): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writeToClient(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToClient(bytes: Uint8Array): ToClient {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readToClient(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type ActionRequest = {\n readonly id: uint,\n readonly name: string,\n readonly args: ArrayBuffer,\n}\n\nexport function readActionRequest(bc: bare.ByteCursor): ActionRequest {\n return {\n id: bare.readUint(bc),\n name: bare.readString(bc),\n args: bare.readData(bc),\n }\n}\n\nexport function writeActionRequest(bc: bare.ByteCursor, x: ActionRequest): void {\n bare.writeUint(bc, x.id)\n bare.writeString(bc, x.name)\n bare.writeData(bc, x.args)\n}\n\nexport type SubscriptionRequest = {\n readonly eventName: string,\n readonly subscribe: boolean,\n}\n\nexport function readSubscriptionRequest(bc: bare.ByteCursor): SubscriptionRequest {\n return {\n eventName: bare.readString(bc),\n subscribe: bare.readBool(bc),\n }\n}\n\nexport function writeSubscriptionRequest(bc: bare.ByteCursor, x: SubscriptionRequest): void {\n bare.writeString(bc, x.eventName)\n bare.writeBool(bc, x.subscribe)\n}\n\nexport type ToServerBody =\n | { readonly tag: \"ActionRequest\", readonly val: ActionRequest }\n | { readonly tag: \"SubscriptionRequest\", readonly val: SubscriptionRequest }\n\nexport function readToServerBody(bc: bare.ByteCursor): ToServerBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"ActionRequest\", val: readActionRequest(bc) }\n case 1:\n return { tag: \"SubscriptionRequest\", val: readSubscriptionRequest(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToServerBody(bc: bare.ByteCursor, x: ToServerBody): void {\n switch (x.tag) {\n case \"ActionRequest\": {\n bare.writeU8(bc, 0)\n writeActionRequest(bc, x.val)\n break\n }\n case \"SubscriptionRequest\": {\n bare.writeU8(bc, 1)\n writeSubscriptionRequest(bc, x.val)\n break\n }\n }\n}\n\nexport type ToServer = {\n readonly body: ToServerBody,\n}\n\nexport function readToServer(bc: bare.ByteCursor): ToServer {\n return {\n body: readToServerBody(bc),\n }\n}\n\nexport function writeToServer(bc: bare.ByteCursor, x: ToServer): void {\n writeToServerBody(bc, x.body)\n}\n\nexport function encodeToServer(x: ToServer): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writeToServer(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToServer(bytes: Uint8Array): ToServer {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readToServer(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionRequest = {\n readonly args: ArrayBuffer,\n}\n\nexport function readHttpActionRequest(bc: bare.ByteCursor): HttpActionRequest {\n return {\n args: bare.readData(bc),\n }\n}\n\nexport function writeHttpActionRequest(bc: bare.ByteCursor, x: HttpActionRequest): void {\n bare.writeData(bc, x.args)\n}\n\nexport function encodeHttpActionRequest(x: HttpActionRequest): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writeHttpActionRequest(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionRequest(bytes: Uint8Array): HttpActionRequest {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readHttpActionRequest(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionResponse = {\n readonly output: ArrayBuffer,\n}\n\nexport function readHttpActionResponse(bc: bare.ByteCursor): HttpActionResponse {\n return {\n output: bare.readData(bc),\n }\n}\n\nexport function writeHttpActionResponse(bc: bare.ByteCursor, x: HttpActionResponse): void {\n bare.writeData(bc, x.output)\n}\n\nexport function encodeHttpActionResponse(x: HttpActionResponse): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writeHttpActionResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionResponse(bytes: Uint8Array): HttpActionResponse {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readHttpActionResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResponseError = {\n readonly group: string,\n readonly code: string,\n readonly message: string,\n readonly metadata: ArrayBuffer | null,\n}\n\nexport function readHttpResponseError(bc: bare.ByteCursor): HttpResponseError {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n }\n}\n\nexport function writeHttpResponseError(bc: bare.ByteCursor, x: HttpResponseError): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n}\n\nexport function encodeHttpResponseError(x: HttpResponseError): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writeHttpResponseError(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResponseError(bytes: Uint8Array): HttpResponseError {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readHttpResponseError(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResolveRequest = null\n\nexport type HttpResolveResponse = {\n readonly actorId: string,\n}\n\nexport function readHttpResolveResponse(bc: bare.ByteCursor): HttpResolveResponse {\n return {\n actorId: bare.readString(bc),\n }\n}\n\nexport function writeHttpResolveResponse(bc: bare.ByteCursor, x: HttpResolveResponse): void {\n bare.writeString(bc, x.actorId)\n}\n\nexport function encodeHttpResolveResponse(x: HttpResolveResponse): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writeHttpResolveResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResolveResponse(bytes: Uint8Array): HttpResolveResponse {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readHttpResolveResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n","import {\n\tcreateVersionedDataHandler,\n\ttype MigrationFn,\n} from \"@/common/versioned-data\";\nimport * as v1 from \"../../../dist/schemas/client-protocol/v1\";\n\nexport const CURRENT_VERSION = 1;\n\nconst migrations = new Map<number, MigrationFn<any, any>>();\n\nexport const TO_SERVER_VERSIONED = createVersionedDataHandler<v1.ToServer>({\n\tcurrentVersion: CURRENT_VERSION,\n\tmigrations,\n\tserializeVersion: (data) => v1.encodeToServer(data),\n\tdeserializeVersion: (bytes) => v1.decodeToServer(bytes),\n});\n\nexport const TO_CLIENT_VERSIONED = createVersionedDataHandler<v1.ToClient>({\n\tcurrentVersion: CURRENT_VERSION,\n\tmigrations,\n\tserializeVersion: (data) => v1.encodeToClient(data),\n\tdeserializeVersion: (bytes) => v1.decodeToClient(bytes),\n});\n\nexport const HTTP_ACTION_REQUEST_VERSIONED =\n\tcreateVersionedDataHandler<v1.HttpActionRequest>({\n\t\tcurrentVersion: CURRENT_VERSION,\n\t\tmigrations,\n\t\tserializeVersion: (data) => v1.encodeHttpActionRequest(data),\n\t\tdeserializeVersion: (bytes) => v1.decodeHttpActionRequest(bytes),\n\t});\n\nexport const HTTP_ACTION_RESPONSE_VERSIONED =\n\tcreateVersionedDataHandler<v1.HttpActionResponse>({\n\t\tcurrentVersion: CURRENT_VERSION,\n\t\tmigrations,\n\t\tserializeVersion: (data) => v1.encodeHttpActionResponse(data),\n\t\tdeserializeVersion: (bytes) => v1.decodeHttpActionResponse(bytes),\n\t});\n\nexport const HTTP_RESPONSE_ERROR_VERSIONED =\n\tcreateVersionedDataHandler<v1.HttpResponseError>({\n\t\tcurrentVersion: CURRENT_VERSION,\n\t\tmigrations,\n\t\tserializeVersion: (data) => v1.encodeHttpResponseError(data),\n\t\tdeserializeVersion: (bytes) => v1.decodeHttpResponseError(bytes),\n\t});\n\nexport const HTTP_RESOLVE_REQUEST_VERSIONED =\n\tcreateVersionedDataHandler<v1.HttpResolveRequest>({\n\t\tcurrentVersion: CURRENT_VERSION,\n\t\tmigrations,\n\t\tserializeVersion: (_) => new Uint8Array(),\n\t\tdeserializeVersion: (bytes) => null,\n\t});\n\nexport const HTTP_RESOLVE_RESPONSE_VERSIONED =\n\tcreateVersionedDataHandler<v1.HttpResolveResponse>({\n\t\tcurrentVersion: CURRENT_VERSION,\n\t\tmigrations,\n\t\tserializeVersion: (data) => v1.encodeHttpResolveResponse(data),\n\t\tdeserializeVersion: (bytes) => v1.decodeHttpResolveResponse(bytes),\n\t});\n","import type { ActorKey } from \"@/actor/mod\";\nimport type { Client } from \"@/client/client\";\nimport type { Logger } from \"@/common/log\";\nimport type { Registry } from \"@/registry/mod\";\nimport type { Conn, ConnId } from \"./conn\";\nimport type { ActorContext } from \"./context\";\nimport type { AnyDatabaseProvider, InferDatabaseClient } from \"./database\";\nimport type { SaveStateOptions } from \"./instance\";\nimport type { Schedule } from \"./schedule\";\n\n/**\n * Context for a remote procedure call.\n *\n * @typeParam A Actor this action belongs to\n */\nexport class ActionContext<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n> {\n\t#actorContext: ActorContext<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase\n\t>;\n\n\t/**\n\t * Should not be called directly.\n\t *\n\t * @param actorContext - The actor context\n\t * @param conn - The connection associated with the action\n\t */\n\tconstructor(\n\t\tactorContext: ActorContext<\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>,\n\t\tpublic readonly conn: Conn<\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>,\n\t) {\n\t\tthis.#actorContext = actorContext;\n\t}\n\n\t/**\n\t * Get the actor state\n\t */\n\tget state(): TState {\n\t\treturn this.#actorContext.state;\n\t}\n\n\t/**\n\t * Get the actor variables\n\t */\n\tget vars(): TVars {\n\t\treturn this.#actorContext.vars;\n\t}\n\n\t/**\n\t * Broadcasts an event to all connected clients.\n\t */\n\tbroadcast(name: string, ...args: any[]): void {\n\t\tthis.#actorContext.broadcast(name, ...args);\n\t}\n\n\t/**\n\t * Gets the logger instance.\n\t */\n\tget log(): Logger {\n\t\treturn this.#actorContext.log;\n\t}\n\n\t/**\n\t * Gets actor ID.\n\t */\n\tget actorId(): string {\n\t\treturn this.#actorContext.actorId;\n\t}\n\n\t/**\n\t * Gets the actor name.\n\t */\n\tget name(): string {\n\t\treturn this.#actorContext.name;\n\t}\n\n\t/**\n\t * Gets the actor key.\n\t */\n\tget key(): ActorKey {\n\t\treturn this.#actorContext.key;\n\t}\n\n\t/**\n\t * Gets the region.\n\t */\n\tget region(): string {\n\t\treturn this.#actorContext.region;\n\t}\n\n\t/**\n\t * Gets the scheduler.\n\t */\n\tget schedule(): Schedule {\n\t\treturn this.#actorContext.schedule;\n\t}\n\n\t/**\n\t * Gets the map of connections.\n\t */\n\tget conns(): Map<\n\t\tConnId,\n\t\tConn<TState, TConnParams, TConnState, TVars, TInput, TDatabase>\n\t> {\n\t\treturn this.#actorContext.conns;\n\t}\n\n\t/**\n\t * Returns the client for the given registry.\n\t */\n\tclient<R extends Registry<any>>(): Client<R> {\n\t\treturn this.#actorContext.client<R>();\n\t}\n\n\t/**\n\t * @experimental\n\t */\n\tget db(): InferDatabaseClient<TDatabase> {\n\t\treturn this.#actorContext.db;\n\t}\n\n\t/**\n\t * Forces the state to get saved.\n\t */\n\tasync saveState(opts: SaveStateOptions): Promise<void> {\n\t\treturn this.#actorContext.saveState(opts);\n\t}\n\n\t/**\n\t * Prevents the actor from sleeping until promise is complete.\n\t */\n\twaitUntil(promise: Promise<void>): void {\n\t\tthis.#actorContext.waitUntil(promise);\n\t}\n\n\t/**\n\t * AbortSignal that fires when the actor is stopping.\n\t */\n\tget abortSignal(): AbortSignal {\n\t\treturn this.#actorContext.abortSignal;\n\t}\n\n\t/**\n\t * Forces the actor to sleep.\n\t *\n\t * Not supported on all drivers.\n\t *\n\t * @experimental\n\t */\n\tsleep() {\n\t\tthis.#actorContext.sleep();\n\t}\n}\n","import type { cors } from \"hono/cors\";\nimport { z } from \"zod\";\nimport { HEADER_ACTOR_QUERY } from \"@/driver-helpers/mod\";\nimport { getEnvUniversal } from \"@/utils\";\n\ntype CorsOptions = NonNullable<Parameters<typeof cors>[0]>;\n\nconst defaultTokenFn = () => {\n\tconst envToken = getEnvUniversal(\"RIVETKIT_INSPECTOR_TOKEN\");\n\n\tif (envToken) {\n\t\treturn envToken;\n\t}\n\n\treturn \"\";\n};\n\nconst defaultEnabled = () => {\n\treturn (\n\t\tgetEnvUniversal(\"NODE_ENV\") !== \"production\" ||\n\t\t!getEnvUniversal(\"RIVETKIT_INSPECTOR_DISABLE\")\n\t);\n};\n\nconst defaultInspectorOrigins = [\n\t\"http://localhost:43708\",\n\t\"http://localhost:43709\",\n\t\"https://studio.rivet.gg\",\n\t\"https://inspect.rivet.dev\",\n];\n\nconst defaultCors: CorsOptions = {\n\torigin: (origin) => {\n\t\tif (\n\t\t\tdefaultInspectorOrigins.includes(origin) ||\n\t\t\t(origin.startsWith(\"https://\") && origin.endsWith(\"rivet-dev.vercel.app\"))\n\t\t) {\n\t\t\treturn origin;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\tallowMethods: [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"],\n\tallowHeaders: [\n\t\t\"Authorization\",\n\t\t\"Content-Type\",\n\t\t\"User-Agent\",\n\t\t\"baggage\",\n\t\t\"sentry-trace\",\n\t\t\"x-rivet-actor\",\n\t\t\"x-rivet-target\",\n\t],\n\tmaxAge: 3600,\n\tcredentials: true,\n};\n\nexport const InspectorConfigSchema = z\n\t.object({\n\t\tenabled: z\n\t\t\t.boolean()\n\t\t\t.or(\n\t\t\t\tz.object({\n\t\t\t\t\tactor: z.boolean().optional().default(true),\n\t\t\t\t\tmanager: z.boolean().optional().default(true),\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.optional()\n\t\t\t.default(defaultEnabled),\n\t\t/** CORS configuration for the router. Uses Hono's CORS middleware options. */\n\t\tcors: z\n\t\t\t.custom<CorsOptions>()\n\t\t\t.optional()\n\t\t\t.default(() => defaultCors),\n\n\t\t/**\n\t\t * Token used to access the Inspector.\n\t\t */\n\t\ttoken: z\n\t\t\t.function()\n\t\t\t.returns(z.string())\n\t\t\t.optional()\n\t\t\t.default(() => defaultTokenFn),\n\n\t\t/**\n\t\t * Default RivetKit server endpoint for Rivet Inspector to connect to. This should be the same endpoint as what you use for your Rivet client to connect to RivetKit.\n\t\t *\n\t\t * This is a convenience property just for printing out the inspector URL.\n\t\t */\n\t\tdefaultEndpoint: z.string().optional(),\n\t})\n\t.optional()\n\t.default(() => ({\n\t\tenabled: defaultEnabled(),\n\t\ttoken: defaultTokenFn,\n\t\tcors: defaultCors,\n\t}));\nexport type InspectorConfig = z.infer<typeof InspectorConfigSchema>;\n","import * as cbor from \"cbor-x\";\nimport type * as schema from \"@/schemas/actor-persist/mod\";\nimport { PERSISTED_ACTOR_VERSIONED } from \"@/schemas/actor-persist/versioned\";\nimport { bufferToArrayBuffer } from \"@/utils\";\n\nexport function serializeEmptyPersistData(\n\tinput: unknown | undefined,\n): Uint8Array {\n\tconst persistData: schema.PersistedActor = {\n\t\tinput: input !== undefined ? bufferToArrayBuffer(cbor.encode(input)) : null,\n\t\thasInitialized: false,\n\t\tstate: bufferToArrayBuffer(cbor.encode(undefined)),\n\t\tconnections: [],\n\t\tscheduledEvents: [],\n\t};\n\treturn PERSISTED_ACTOR_VERSIONED.serializeWithEmbeddedVersion(persistData);\n}\n","import * as bare from \"@bare-ts/lib\"\n\nconst config = /* @__PURE__ */ bare.Config({})\n\nexport type u64 = bigint\n\nexport type PersistedSubscription = {\n readonly eventName: string,\n}\n\nexport function readPersistedSubscription(bc: bare.ByteCursor): PersistedSubscription {\n return {\n eventName: bare.readString(bc),\n }\n}\n\nexport function writePersistedSubscription(bc: bare.ByteCursor, x: PersistedSubscription): void {\n bare.writeString(bc, x.eventName)\n}\n\nfunction read0(bc: bare.ByteCursor): readonly PersistedSubscription[] {\n const len = bare.readUintSafe(bc)\n if (len === 0) { return [] }\n const result = [readPersistedSubscription(bc)]\n for (let i = 1; i < len; i++) {\n result[i] = readPersistedSubscription(bc)\n }\n return result\n}\n\nfunction write0(bc: bare.ByteCursor, x: readonly PersistedSubscription[]): void {\n bare.writeUintSafe(bc, x.length)\n for (let i = 0; i < x.length; i++) {\n writePersistedSubscription(bc, x[i])\n }\n}\n\nexport type PersistedConnection = {\n readonly id: string,\n readonly token: string,\n readonly parameters: ArrayBuffer,\n readonly state: ArrayBuffer,\n readonly subscriptions: readonly PersistedSubscription[],\n readonly lastSeen: u64,\n}\n\nexport function readPersistedConnection(bc: bare.ByteCursor): PersistedConnection {\n return {\n id: bare.readString(bc),\n token: bare.readString(bc),\n parameters: bare.readData(bc),\n state: bare.readData(bc),\n subscriptions: read0(bc),\n lastSeen: bare.readU64(bc),\n }\n}\n\nexport function writePersistedConnection(bc: bare.ByteCursor, x: PersistedConnection): void {\n bare.writeString(bc, x.id)\n bare.writeString(bc, x.token)\n bare.writeData(bc, x.parameters)\n bare.writeData(bc, x.state)\n write0(bc, x.subscriptions)\n bare.writeU64(bc, x.lastSeen)\n}\n\nfunction read1(bc: bare.ByteCursor): ArrayBuffer | null {\n return bare.readBool(bc)\n ? bare.readData(bc)\n : null\n}\n\nfunction write1(bc: bare.ByteCursor, x: ArrayBuffer | null): void {\n bare.writeBool(bc, x !== null)\n if (x !== null) {\n bare.writeData(bc, x)\n }\n}\n\nexport type GenericPersistedScheduleEvent = {\n readonly action: string,\n readonly args: ArrayBuffer | null,\n}\n\nexport function readGenericPersistedScheduleEvent(bc: bare.ByteCursor): GenericPersistedScheduleEvent {\n return {\n action: bare.readString(bc),\n args: read1(bc),\n }\n}\n\nexport function writeGenericPersistedScheduleEvent(bc: bare.ByteCursor, x: GenericPersistedScheduleEvent): void {\n bare.writeString(bc, x.action)\n write1(bc, x.args)\n}\n\nexport type PersistedScheduleEventKind =\n | { readonly tag: \"GenericPersistedScheduleEvent\", readonly val: GenericPersistedScheduleEvent }\n\nexport function readPersistedScheduleEventKind(bc: bare.ByteCursor): PersistedScheduleEventKind {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"GenericPersistedScheduleEvent\", val: readGenericPersistedScheduleEvent(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writePersistedScheduleEventKind(bc: bare.ByteCursor, x: PersistedScheduleEventKind): void {\n switch (x.tag) {\n case \"GenericPersistedScheduleEvent\": {\n bare.writeU8(bc, 0)\n writeGenericPersistedScheduleEvent(bc, x.val)\n break\n }\n }\n}\n\nexport type PersistedScheduleEvent = {\n readonly eventId: string,\n readonly timestamp: u64,\n readonly kind: PersistedScheduleEventKind,\n}\n\nexport function readPersistedScheduleEvent(bc: bare.ByteCursor): PersistedScheduleEvent {\n return {\n eventId: bare.readString(bc),\n timestamp: bare.readU64(bc),\n kind: readPersistedScheduleEventKind(bc),\n }\n}\n\nexport function writePersistedScheduleEvent(bc: bare.ByteCursor, x: PersistedScheduleEvent): void {\n bare.writeString(bc, x.eventId)\n bare.writeU64(bc, x.timestamp)\n writePersistedScheduleEventKind(bc, x.kind)\n}\n\nfunction read2(bc: bare.ByteCursor): readonly PersistedConnection[] {\n const len = bare.readUintSafe(bc)\n if (len === 0) { return [] }\n const result = [readPersistedConnection(bc)]\n for (let i = 1; i < len; i++) {\n result[i] = readPersistedConnection(bc)\n }\n return result\n}\n\nfunction write2(bc: bare.ByteCursor, x: readonly PersistedConnection[]): void {\n bare.writeUintSafe(bc, x.length)\n for (let i = 0; i < x.length; i++) {\n writePersistedConnection(bc, x[i])\n }\n}\n\nfunction read3(bc: bare.ByteCursor): readonly PersistedScheduleEvent[] {\n const len = bare.readUintSafe(bc)\n if (len === 0) { return [] }\n const result = [readPersistedScheduleEvent(bc)]\n for (let i = 1; i < len; i++) {\n result[i] = readPersistedScheduleEvent(bc)\n }\n return result\n}\n\nfunction write3(bc: bare.ByteCursor, x: readonly PersistedScheduleEvent[]): void {\n bare.writeUintSafe(bc, x.length)\n for (let i = 0; i < x.length; i++) {\n writePersistedScheduleEvent(bc, x[i])\n }\n}\n\nexport type PersistedActor = {\n readonly input: ArrayBuffer | null,\n readonly hasInitialized: boolean,\n readonly state: ArrayBuffer,\n readonly connections: readonly PersistedConnection[],\n readonly scheduledEvents: readonly PersistedScheduleEvent[],\n}\n\nexport function readPersistedActor(bc: bare.ByteCursor): PersistedActor {\n return {\n input: read1(bc),\n hasInitialized: bare.readBool(bc),\n state: bare.readData(bc),\n connections: read2(bc),\n scheduledEvents: read3(bc),\n }\n}\n\nexport function writePersistedActor(bc: bare.ByteCursor, x: PersistedActor): void {\n write1(bc, x.input)\n bare.writeBool(bc, x.hasInitialized)\n bare.writeData(bc, x.state)\n write2(bc, x.connections)\n write3(bc, x.scheduledEvents)\n}\n\nexport function encodePersistedActor(x: PersistedActor): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writePersistedActor(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodePersistedActor(bytes: Uint8Array): PersistedActor {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readPersistedActor(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n","import {\n\tcreateVersionedDataHandler,\n\ttype MigrationFn,\n} from \"@/common/versioned-data\";\nimport * as v1 from \"../../../dist/schemas/actor-persist/v1\";\n\nexport const CURRENT_VERSION = 1;\n\nexport type CurrentPersistedActor = v1.PersistedActor;\nexport type CurrentPersistedConnection = v1.PersistedConnection;\nexport type CurrentPersistedSubscription = v1.PersistedSubscription;\nexport type CurrentGenericPersistedScheduleEvent =\n\tv1.GenericPersistedScheduleEvent;\nexport type CurrentPersistedScheduleEventKind = v1.PersistedScheduleEventKind;\nexport type CurrentPersistedScheduleEvent = v1.PersistedScheduleEvent;\n\nconst migrations = new Map<number, MigrationFn<any, any>>();\n\nexport const PERSISTED_ACTOR_VERSIONED =\n\tcreateVersionedDataHandler<CurrentPersistedActor>({\n\t\tcurrentVersion: CURRENT_VERSION,\n\t\tmigrations,\n\t\tserializeVersion: (data) => v1.encodePersistedActor(data),\n\t\tdeserializeVersion: (bytes) => v1.decodePersistedActor(bytes),\n\t});\n"],"mappings":"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","names":["z","z","config","message","z","z","z","z","cbor","bare","config","read0","write0","read1","write1","CURRENT_VERSION","migrations"]}