rivetkit 2.1.2 → 2.1.4

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 (117) hide show
  1. package/dist/browser/client.d.ts +11 -0
  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-MNS5LY6M.cjs → chunk-3B6PCYJB.cjs} +280 -115
  8. package/dist/tsup/chunk-3B6PCYJB.cjs.map +1 -0
  9. package/dist/tsup/{chunk-YQ5P6KMN.js → chunk-3GTO6H3E.js} +12 -5
  10. package/dist/tsup/chunk-3GTO6H3E.js.map +1 -0
  11. package/dist/tsup/{chunk-RMJJE43B.cjs → chunk-4KSHPFXF.cjs} +2 -2
  12. package/dist/tsup/{chunk-RMJJE43B.cjs.map → chunk-4KSHPFXF.cjs.map} +1 -1
  13. package/dist/tsup/{chunk-PW3YONDJ.js → chunk-5UEFNG7P.js} +2 -2
  14. package/dist/tsup/{chunk-PSUVV4HM.js → chunk-ANKZ2FS6.js} +2 -4
  15. package/dist/tsup/chunk-ANKZ2FS6.js.map +1 -0
  16. package/dist/tsup/{chunk-GVQAVU7R.cjs → chunk-AQD4CBZ2.cjs} +4 -4
  17. package/dist/tsup/{chunk-GVQAVU7R.cjs.map → chunk-AQD4CBZ2.cjs.map} +1 -1
  18. package/dist/tsup/{chunk-WUXR722E.js → chunk-DZXDUGLL.js} +2 -2
  19. package/dist/tsup/{chunk-WUXR722E.js.map → chunk-DZXDUGLL.js.map} +1 -1
  20. package/dist/tsup/{chunk-NXEHFUDB.cjs → chunk-GXRVSSVD.cjs} +28 -21
  21. package/dist/tsup/chunk-GXRVSSVD.cjs.map +1 -0
  22. package/dist/tsup/{chunk-UZV7NXC6.cjs → chunk-H5TSEPN4.cjs} +30 -30
  23. package/dist/tsup/{chunk-UZV7NXC6.cjs.map → chunk-H5TSEPN4.cjs.map} +1 -1
  24. package/dist/tsup/{chunk-TDFDR7AO.js → chunk-HBYEYBIC.js} +2 -2
  25. package/dist/tsup/{chunk-772NPMTY.cjs → chunk-HKOSZKKZ.cjs} +263 -299
  26. package/dist/tsup/chunk-HKOSZKKZ.cjs.map +1 -0
  27. package/dist/tsup/{chunk-HB4RGGMC.js → chunk-I6PL6QIY.js} +5 -5
  28. package/dist/tsup/{chunk-RHUII57M.js → chunk-KTWY3K6Z.js} +23 -12
  29. package/dist/tsup/chunk-KTWY3K6Z.js.map +1 -0
  30. package/dist/tsup/{chunk-HFWRHT5T.cjs → chunk-LK36OGGO.cjs} +3 -5
  31. package/dist/tsup/chunk-LK36OGGO.cjs.map +1 -0
  32. package/dist/tsup/{chunk-BSIJG3LG.js → chunk-M6H4XIF4.js} +179 -215
  33. package/dist/tsup/chunk-M6H4XIF4.js.map +1 -0
  34. package/dist/tsup/{chunk-ZHQDRRMY.cjs → chunk-QPADHLDU.cjs} +3 -3
  35. package/dist/tsup/{chunk-ZHQDRRMY.cjs.map → chunk-QPADHLDU.cjs.map} +1 -1
  36. package/dist/tsup/{chunk-BFI4LYS2.js → chunk-TEFYRRAK.js} +4 -4
  37. package/dist/tsup/{chunk-PZAV6PP2.cjs → chunk-TEUL4UYN.cjs} +152 -152
  38. package/dist/tsup/{chunk-PZAV6PP2.cjs.map → chunk-TEUL4UYN.cjs.map} +1 -1
  39. package/dist/tsup/{chunk-VMX4I4MP.js → chunk-UDMRZR6A.js} +212 -47
  40. package/dist/tsup/chunk-UDMRZR6A.js.map +1 -0
  41. package/dist/tsup/{chunk-QABDKI3W.cjs → chunk-UWAGLDT6.cjs} +263 -252
  42. package/dist/tsup/chunk-UWAGLDT6.cjs.map +1 -0
  43. package/dist/tsup/client/mod.cjs +6 -6
  44. package/dist/tsup/client/mod.d.cts +2 -2
  45. package/dist/tsup/client/mod.d.ts +2 -2
  46. package/dist/tsup/client/mod.js +5 -5
  47. package/dist/tsup/common/log.cjs +2 -2
  48. package/dist/tsup/common/log.js +1 -1
  49. package/dist/tsup/common/websocket.cjs +3 -3
  50. package/dist/tsup/common/websocket.js +2 -2
  51. package/dist/tsup/{config-P3XujgRr.d.ts → config-Qj-zLJPc.d.ts} +11 -0
  52. package/dist/tsup/{config-_gfywqqI.d.cts → config-iPj5l1bL.d.cts} +11 -0
  53. package/dist/tsup/{context-uNA4TRn3.d.ts → context-CQCMuHND.d.ts} +1 -1
  54. package/dist/tsup/{context-Bxd8Cx4H.d.cts → context-DzvH1PBK.d.cts} +1 -1
  55. package/dist/tsup/{driver-CPGHKXyh.d.ts → driver-Jo8v-kbU.d.ts} +1 -1
  56. package/dist/tsup/driver-helpers/mod.cjs +4 -4
  57. package/dist/tsup/driver-helpers/mod.d.cts +4 -4
  58. package/dist/tsup/driver-helpers/mod.d.ts +4 -4
  59. package/dist/tsup/driver-helpers/mod.js +3 -3
  60. package/dist/tsup/{driver-BcLvZcKl.d.cts → driver-iV8J-WMv.d.cts} +1 -1
  61. package/dist/tsup/driver-test-suite/mod.cjs +556 -333
  62. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  63. package/dist/tsup/driver-test-suite/mod.d.cts +2 -2
  64. package/dist/tsup/driver-test-suite/mod.d.ts +2 -2
  65. package/dist/tsup/driver-test-suite/mod.js +1332 -1109
  66. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  67. package/dist/tsup/inspector/mod.cjs +3 -3
  68. package/dist/tsup/inspector/mod.js +2 -2
  69. package/dist/tsup/mod.cjs +8 -8
  70. package/dist/tsup/mod.d.cts +5 -5
  71. package/dist/tsup/mod.d.ts +5 -5
  72. package/dist/tsup/mod.js +7 -7
  73. package/dist/tsup/serve-test-suite/mod.cjs +194 -100
  74. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  75. package/dist/tsup/serve-test-suite/mod.js +105 -11
  76. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  77. package/dist/tsup/test/mod.cjs +10 -10
  78. package/dist/tsup/test/mod.d.cts +1 -1
  79. package/dist/tsup/test/mod.d.ts +1 -1
  80. package/dist/tsup/test/mod.js +6 -6
  81. package/dist/tsup/utils.cjs +2 -2
  82. package/dist/tsup/utils.js +1 -1
  83. package/dist/tsup/workflow/mod.cjs +5 -5
  84. package/dist/tsup/workflow/mod.d.cts +3 -3
  85. package/dist/tsup/workflow/mod.d.ts +3 -3
  86. package/dist/tsup/workflow/mod.js +4 -4
  87. package/package.json +5 -5
  88. package/src/actor/config.ts +0 -2
  89. package/src/actor/instance/mod.ts +30 -6
  90. package/src/actor/router.ts +9 -6
  91. package/src/driver-test-suite/mod.ts +3 -0
  92. package/src/driver-test-suite/tests/actor-db.ts +299 -216
  93. package/src/driver-test-suite/tests/actor-driver.ts +4 -0
  94. package/src/driver-test-suite/tests/actor-lifecycle.ts +157 -0
  95. package/src/driver-test-suite/tests/actor-queue.ts +10 -9
  96. package/src/driver-test-suite/tests/actor-workflow.ts +12 -2
  97. package/src/driver-test-suite/tests/conn-error-serialization.ts +64 -0
  98. package/src/driver-test-suite/utils.ts +8 -8
  99. package/src/drivers/engine/actor-driver.ts +113 -11
  100. package/src/manager/router.ts +20 -6
  101. package/src/{registry → utils}/serve.ts +38 -4
  102. package/src/workflow/context.ts +4 -0
  103. package/src/workflow/driver.ts +4 -1
  104. package/dist/tsup/chunk-772NPMTY.cjs.map +0 -1
  105. package/dist/tsup/chunk-BSIJG3LG.js.map +0 -1
  106. package/dist/tsup/chunk-HFWRHT5T.cjs.map +0 -1
  107. package/dist/tsup/chunk-MNS5LY6M.cjs.map +0 -1
  108. package/dist/tsup/chunk-NXEHFUDB.cjs.map +0 -1
  109. package/dist/tsup/chunk-PSUVV4HM.js.map +0 -1
  110. package/dist/tsup/chunk-QABDKI3W.cjs.map +0 -1
  111. package/dist/tsup/chunk-RHUII57M.js.map +0 -1
  112. package/dist/tsup/chunk-VMX4I4MP.js.map +0 -1
  113. package/dist/tsup/chunk-YQ5P6KMN.js.map +0 -1
  114. /package/dist/tsup/{chunk-PW3YONDJ.js.map → chunk-5UEFNG7P.js.map} +0 -0
  115. /package/dist/tsup/{chunk-TDFDR7AO.js.map → chunk-HBYEYBIC.js.map} +0 -0
  116. /package/dist/tsup/{chunk-HB4RGGMC.js.map → chunk-I6PL6QIY.js.map} +0 -0
  117. /package/dist/tsup/{chunk-BFI4LYS2.js.map → chunk-TEFYRRAK.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  ensureDirectoryExists,
6
6
  getStoragePath,
7
7
  lookupInRegistry
8
- } from "./chunk-RHUII57M.js";
8
+ } from "./chunk-KTWY3K6Z.js";
9
9
  import {
10
10
  ClientConfigSchemaBase,
11
11
  RemoteManagerDriver,
@@ -16,7 +16,7 @@ import {
16
16
  getEndpoint,
17
17
  transformClientConfig,
18
18
  updateRunnerConfig
19
- } from "./chunk-HB4RGGMC.js";
19
+ } from "./chunk-I6PL6QIY.js";
20
20
  import {
21
21
  CONN_STATE_MANAGER_SYMBOL,
22
22
  ENGINE_ENDPOINT,
@@ -30,7 +30,9 @@ import {
30
30
  buildActorNames,
31
31
  buildManagerRouter,
32
32
  createRouter,
33
+ crossPlatformServe,
33
34
  deserializeActorKey,
35
+ findFreePort,
34
36
  getInitialActorKvState,
35
37
  getNodeChildProcess,
36
38
  getNodeCrypto,
@@ -42,17 +44,18 @@ import {
42
44
  handleHealthRequest,
43
45
  handleMetadataRequest,
44
46
  importNodeDependencies,
47
+ logger,
45
48
  parseWebSocketProtocols,
46
49
  routeWebSocket,
47
50
  truncateRawWebSocketPathPrefix
48
- } from "./chunk-VMX4I4MP.js";
51
+ } from "./chunk-UDMRZR6A.js";
49
52
  import {
50
53
  ActorConfigSchema,
51
54
  KEYS,
52
55
  event,
53
56
  loggerWithoutContext,
54
57
  queue
55
- } from "./chunk-PSUVV4HM.js";
58
+ } from "./chunk-ANKZ2FS6.js";
56
59
  import {
57
60
  LogLevelSchema,
58
61
  VERSION,
@@ -71,7 +74,7 @@ import {
71
74
  promiseWithResolvers,
72
75
  setLongTimeout,
73
76
  stringifyError
74
- } from "./chunk-WUXR722E.js";
77
+ } from "./chunk-DZXDUGLL.js";
75
78
  import {
76
79
  EndpointMismatch,
77
80
  InvalidRequest,
@@ -95,12 +98,13 @@ import { WSContext } from "hono/ws";
95
98
  import invariant from "invariant";
96
99
 
97
100
  // src/drivers/engine/log.ts
98
- function logger() {
101
+ function logger2() {
99
102
  return getLogger("driver-engine");
100
103
  }
101
104
 
102
105
  // src/drivers/engine/actor-driver.ts
103
106
  var RUNNER_SSE_PING_INTERVAL = 1e3;
107
+ var RUNNER_STOP_WAIT_MS = 15e3;
104
108
  var CONN_MESSAGE_ACK_DEADLINE = 5e3;
105
109
  var CONN_BUFFERED_MESSAGE_SIZE_THRESHOLD = 5e5;
106
110
  var EngineActorDriver = class {
@@ -110,8 +114,8 @@ var EngineActorDriver = class {
110
114
  #runner;
111
115
  #actors = /* @__PURE__ */ new Map();
112
116
  #actorRouter;
113
- #runnerStarted = promiseWithResolvers((reason) => logger().warn({ msg: "unhandled runner started promise rejection", reason }));
114
- #runnerStopped = promiseWithResolvers((reason) => logger().warn({ msg: "unhandled runner stopped promise rejection", reason }));
117
+ #runnerStarted = promiseWithResolvers((reason) => logger2().warn({ msg: "unhandled runner started promise rejection", reason }));
118
+ #runnerStopped = promiseWithResolvers((reason) => logger2().warn({ msg: "unhandled runner stopped promise rejection", reason }));
115
119
  #isRunnerStopped = false;
116
120
  // HACK: Track actor stop intent locally since the runner protocol doesn't
117
121
  // pass the stop reason to onActorStop. This will be fixed when the runner
@@ -173,7 +177,7 @@ var EngineActorDriver = class {
173
177
  };
174
178
  this.#runner = new Runner(engineRunnerConfig);
175
179
  this.#runner.start();
176
- logger().debug({
180
+ logger2().debug({
177
181
  msg: "engine runner started",
178
182
  endpoint: config.endpoint,
179
183
  namespace: config.namespace,
@@ -188,6 +192,7 @@ var EngineActorDriver = class {
188
192
  if (!handler)
189
193
  throw new Error(`Actor handler does not exist ${actorId}`);
190
194
  if (handler.actorStartPromise) await handler.actorStartPromise.promise;
195
+ if (handler.actorStartError) throw handler.actorStartError;
191
196
  if (!handler.actor) throw new Error("Actor should be loaded");
192
197
  return handler;
193
198
  }
@@ -197,7 +202,7 @@ var EngineActorDriver = class {
197
202
  async setAlarm(actor2, timestamp) {
198
203
  const handler = this.#actors.get(actor2.id);
199
204
  if (!handler) {
200
- logger().warn({
205
+ logger2().warn({
201
206
  msg: "no handler for actor to set alarm"
202
207
  });
203
208
  return;
@@ -230,7 +235,7 @@ var EngineActorDriver = class {
230
235
  new Uint8Array()
231
236
  );
232
237
  const keys = entries.map(([key]) => key);
233
- logger().info({
238
+ logger2().info({
234
239
  msg: "kvList called",
235
240
  actorId,
236
241
  keysCount: keys.length,
@@ -240,7 +245,7 @@ var EngineActorDriver = class {
240
245
  }
241
246
  async kvListPrefix(actorId, prefix) {
242
247
  const result = await this.#runner.kvListPrefix(actorId, prefix);
243
- logger().info({
248
+ logger2().info({
244
249
  msg: "kvListPrefix called",
245
250
  actorId,
246
251
  prefixStr: new TextDecoder().decode(prefix),
@@ -249,6 +254,12 @@ var EngineActorDriver = class {
249
254
  });
250
255
  return result;
251
256
  }
257
+ /** Creates a SQLite VFS instance for creating KV-backed databases */
258
+ async createSqliteVfs() {
259
+ const specifier = "@rivetkit/sqlite-vfs";
260
+ const { SqliteVfs } = await import(specifier);
261
+ return new SqliteVfs();
262
+ }
252
263
  // MARK: - Actor Lifecycle
253
264
  async loadActor(actorId) {
254
265
  const handler = await this.#loadActorHandler(actorId);
@@ -264,8 +275,8 @@ var EngineActorDriver = class {
264
275
  this.#runner.stopActor(actorId);
265
276
  }
266
277
  async shutdownRunner(immediate) {
267
- logger().info({ msg: "stopping engine actor driver", immediate });
268
- logger().debug({
278
+ logger2().info({ msg: "stopping engine actor driver", immediate });
279
+ logger2().debug({
269
280
  msg: "stopping all actors before shutdown",
270
281
  actorCount: this.#actors.size
271
282
  });
@@ -284,15 +295,39 @@ var EngineActorDriver = class {
284
295
  }
285
296
  }
286
297
  await Promise.all(stopPromises);
287
- logger().debug({ msg: "all actors stopped" });
288
- await this.#runner.shutdown(immediate);
298
+ logger2().debug({ msg: "all actors stopped" });
299
+ try {
300
+ await this.#runner.shutdown(immediate);
301
+ } catch (error) {
302
+ const message = error instanceof Error ? error.message : String(error);
303
+ if (message.includes("WebSocket connection closed during shutdown")) {
304
+ logger2().debug({
305
+ msg: "ignoring shutdown websocket close race",
306
+ error: message
307
+ });
308
+ } else {
309
+ throw error;
310
+ }
311
+ }
312
+ const stopped = await Promise.race([
313
+ this.#runnerStopped.promise.then(() => true),
314
+ new Promise(
315
+ (resolve) => setTimeout(() => resolve(false), RUNNER_STOP_WAIT_MS)
316
+ )
317
+ ]);
318
+ if (!stopped) {
319
+ logger2().warn({
320
+ msg: "timed out waiting for runner shutdown",
321
+ waitMs: RUNNER_STOP_WAIT_MS
322
+ });
323
+ }
289
324
  }
290
325
  async serverlessHandleStart(c) {
291
326
  return streamSSE(c, async (stream) => {
292
327
  stream.onAbort(() => {
293
328
  });
294
329
  c.req.raw.signal.addEventListener("abort", () => {
295
- logger().debug("SSE aborted, shutting down runner");
330
+ logger2().debug("SSE aborted, shutting down runner");
296
331
  this.shutdownRunner(false);
297
332
  });
298
333
  await this.#runnerStarted.promise;
@@ -301,13 +336,13 @@ var EngineActorDriver = class {
301
336
  await stream.writeSSE({ data: payload });
302
337
  while (true) {
303
338
  if (this.#isRunnerStopped) {
304
- logger().debug({
339
+ logger2().debug({
305
340
  msg: "runner is stopped"
306
341
  });
307
342
  break;
308
343
  }
309
344
  if (stream.closed || stream.aborted) {
310
- logger().debug({
345
+ logger2().debug({
311
346
  msg: "runner sse stream closed",
312
347
  closed: stream.closed,
313
348
  aborted: stream.aborted
@@ -322,7 +357,7 @@ var EngineActorDriver = class {
322
357
  }
323
358
  async #runnerOnActorStart(actorId, generation, actorConfig) {
324
359
  var _a;
325
- logger().debug({
360
+ logger2().debug({
326
361
  msg: "runner actor starting",
327
362
  actorId,
328
363
  name: actorConfig.name,
@@ -336,10 +371,11 @@ var EngineActorDriver = class {
336
371
  let handler = this.#actors.get(actorId);
337
372
  if (!handler) {
338
373
  handler = {
339
- actorStartPromise: promiseWithResolvers((reason) => logger().warn({ msg: "unhandled actor start promise rejection", reason }))
374
+ actorStartPromise: promiseWithResolvers((reason) => logger2().warn({ msg: "unhandled actor start promise rejection", reason }))
340
375
  };
341
376
  this.#actors.set(actorId, handler);
342
377
  }
378
+ handler.actorStartError = void 0;
343
379
  const name = actorConfig.name;
344
380
  invariant(actorConfig.key, "actor should have a key");
345
381
  const key = deserializeActorKey(actorConfig.key);
@@ -350,12 +386,12 @@ var EngineActorDriver = class {
350
386
  if (persistDataBuffer === null) {
351
387
  const initialKvState = getInitialActorKvState(input);
352
388
  await this.#runner.kvPut(actorId, initialKvState);
353
- logger().debug({
389
+ logger2().debug({
354
390
  msg: "initialized persist data for new actor",
355
391
  actorId
356
392
  });
357
393
  } else {
358
- logger().debug({
394
+ logger2().debug({
359
395
  msg: "found existing persist data for actor",
360
396
  actorId,
361
397
  dataSize: persistDataBuffer.byteLength
@@ -363,6 +399,21 @@ var EngineActorDriver = class {
363
399
  }
364
400
  const definition = lookupInRegistry(this.#config, actorConfig.name);
365
401
  handler.actor = await definition.instantiate();
402
+ const protocolMetadata = this.#runner.getProtocolMetadata();
403
+ if (protocolMetadata) {
404
+ logger2().debug({
405
+ msg: "applying config limits from protocol",
406
+ protocolMetadata
407
+ });
408
+ const stopThresholdMax = Math.max(Number(protocolMetadata.actorStopThreshold) - 1e3, 0);
409
+ handler.actor.overrides.onSleepTimeout = stopThresholdMax;
410
+ handler.actor.overrides.onDestroyTimeout = stopThresholdMax;
411
+ if (protocolMetadata.serverlessDrainGracePeriod) {
412
+ const drainMax = Math.max(Number(protocolMetadata.serverlessDrainGracePeriod) - 1e3, 0);
413
+ handler.actor.overrides.runStopTimeout = drainMax;
414
+ handler.actor.overrides.waitUntilTimeout = drainMax;
415
+ }
416
+ }
366
417
  await handler.actor.start(
367
418
  this,
368
419
  this.#inlineClient,
@@ -372,38 +423,71 @@ var EngineActorDriver = class {
372
423
  "unknown"
373
424
  // TODO: Add regions
374
425
  );
375
- logger().debug({ msg: "runner actor started", actorId, name, key });
426
+ logger2().debug({ msg: "runner actor started", actorId, name, key });
376
427
  } catch (innerError) {
377
- const error = new Error(
378
- `Failed to start actor ${actorId}: ${innerError}`,
428
+ const error = innerError instanceof Error ? new Error(
429
+ `Failed to start actor ${actorId}: ${innerError.message}`,
379
430
  { cause: innerError }
380
- );
431
+ ) : new Error(`Failed to start actor ${actorId}: ${String(innerError)}`);
432
+ handler.actor = void 0;
433
+ handler.actorStartError = error;
381
434
  (_a = handler.actorStartPromise) == null ? void 0 : _a.reject(error);
382
435
  handler.actorStartPromise = void 0;
383
- throw error;
436
+ logger2().error({
437
+ msg: "runner actor failed to start",
438
+ actorId,
439
+ name,
440
+ key,
441
+ err: stringifyError(error)
442
+ });
443
+ try {
444
+ this.#runner.stopActor(actorId);
445
+ } catch (stopError) {
446
+ logger2().debug({
447
+ msg: "failed to stop actor after start failure",
448
+ actorId,
449
+ err: stringifyError(stopError)
450
+ });
451
+ }
384
452
  }
385
453
  }
386
454
  async #runnerOnActorStop(actorId, generation) {
387
- logger().debug({ msg: "runner actor stopping", actorId, generation });
455
+ logger2().debug({ msg: "runner actor stopping", actorId, generation });
388
456
  const reason = this.#actorStopIntent.get(actorId) ?? "sleep";
389
457
  this.#actorStopIntent.delete(actorId);
390
458
  const handler = this.#actors.get(actorId);
391
- if (handler == null ? void 0 : handler.actor) {
459
+ if (!handler) {
460
+ logger2().debug({ msg: "no runner actor handler to stop", actorId, reason });
461
+ return;
462
+ }
463
+ if (handler.actorStartPromise) {
464
+ try {
465
+ logger2().debug({ msg: "runner actor stopping before it started, waiting", actorId, generation });
466
+ await handler.actorStartPromise.promise;
467
+ } catch (err) {
468
+ logger2().debug({
469
+ msg: "actor start failed during stop, cleaning up handler",
470
+ actorId,
471
+ err: stringifyError(err)
472
+ });
473
+ }
474
+ }
475
+ if (handler.actor) {
392
476
  try {
393
477
  await handler.actor.onStop(reason);
394
478
  } catch (err) {
395
- logger().error({
479
+ logger2().error({
396
480
  msg: "error in onStop, proceeding with removing actor",
397
481
  err: stringifyError(err)
398
482
  });
399
483
  }
400
- this.#actors.delete(actorId);
401
484
  }
402
- logger().debug({ msg: "runner actor stopped", actorId, reason });
485
+ this.#actors.delete(actorId);
486
+ logger2().debug({ msg: "runner actor stopped", actorId, reason });
403
487
  }
404
488
  // MARK: - Runner Networking
405
489
  async #runnerFetch(_runner, actorId, _gatewayIdBuf, _requestIdBuf, request) {
406
- logger().debug({
490
+ logger2().debug({
407
491
  msg: "runner fetch",
408
492
  actorId,
409
493
  url: request.url,
@@ -416,7 +500,7 @@ var EngineActorDriver = class {
416
500
  const websocket = websocketRaw;
417
501
  const wsUniqueId = `ws_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
418
502
  websocket.__rivet_ws_id = wsUniqueId;
419
- logger().debug({
503
+ logger2().debug({
420
504
  msg: "runner websocket",
421
505
  actorId,
422
506
  url: request.url,
@@ -445,7 +529,7 @@ var EngineActorDriver = class {
445
529
  isRestoringHibernatable
446
530
  );
447
531
  } catch (err) {
448
- logger().error({ msg: "building websocket handlers errored", err });
532
+ logger2().error({ msg: "building websocket handlers errored", err });
449
533
  websocketRaw.close(1011, "ws.route_error");
450
534
  return;
451
535
  }
@@ -454,7 +538,7 @@ var EngineActorDriver = class {
454
538
  const conn = wsHandler.conn;
455
539
  const actor2 = wsHandler.actor;
456
540
  const connStateManager = conn == null ? void 0 : conn[CONN_STATE_MANAGER_SYMBOL];
457
- logger().debug({
541
+ logger2().debug({
458
542
  msg: "attaching websocket event listeners",
459
543
  actorId,
460
544
  connId: conn == null ? void 0 : conn.id,
@@ -470,7 +554,7 @@ var EngineActorDriver = class {
470
554
  });
471
555
  websocket.addEventListener("message", (event3) => {
472
556
  var _a2, _b2;
473
- logger().debug({
557
+ logger2().debug({
474
558
  msg: "websocket message event listener triggered",
475
559
  connId: conn == null ? void 0 : conn.id,
476
560
  actorId: actor2 == null ? void 0 : actor2.id,
@@ -483,7 +567,7 @@ var EngineActorDriver = class {
483
567
  eventTargetWsId: (_b2 = event3.target) == null ? void 0 : _b2.__rivet_ws_id
484
568
  });
485
569
  if (actor2 == null ? void 0 : actor2.isStopping) {
486
- logger().debug({
570
+ logger2().debug({
487
571
  msg: "ignoring ws message, actor is stopping",
488
572
  connId: conn == null ? void 0 : conn.id,
489
573
  actorId: actor2 == null ? void 0 : actor2.id,
@@ -491,7 +575,7 @@ var EngineActorDriver = class {
491
575
  });
492
576
  return;
493
577
  }
494
- logger().debug({
578
+ logger2().debug({
495
579
  msg: "calling wsHandler.onMessage",
496
580
  connId: conn == null ? void 0 : conn.id,
497
581
  messageIndex: event3.rivetMessageIndex
@@ -505,7 +589,7 @@ var EngineActorDriver = class {
505
589
  );
506
590
  const previousMsgIndex = hibernate.serverMessageIndex;
507
591
  hibernate.serverMessageIndex = event3.rivetMessageIndex;
508
- logger().info({
592
+ logger2().info({
509
593
  msg: "persisting message index",
510
594
  connId: conn.id,
511
595
  previousMsgIndex,
@@ -540,7 +624,7 @@ var EngineActorDriver = class {
540
624
  wsHandler.onError(event3, wsContext);
541
625
  });
542
626
  if (isRestoringHibernatable) {
543
- logger().info({
627
+ logger2().info({
544
628
  msg: "event listeners attached to restored websocket",
545
629
  actorId,
546
630
  connId: conn == null ? void 0 : conn.id,
@@ -558,7 +642,7 @@ var EngineActorDriver = class {
558
642
  const path = url.pathname;
559
643
  const actorInstance = this.#runner.getActor(actorId);
560
644
  if (!actorInstance) {
561
- logger().warn({
645
+ logger2().warn({
562
646
  msg: "actor not found in #hwsCanHibernate",
563
647
  actorId
564
648
  });
@@ -566,20 +650,20 @@ var EngineActorDriver = class {
566
650
  }
567
651
  const handler = this.#actors.get(actorId);
568
652
  if (!handler) {
569
- logger().warn({
653
+ logger2().warn({
570
654
  msg: "actor handler not found in #hwsCanHibernate",
571
655
  actorId
572
656
  });
573
657
  return false;
574
658
  }
575
659
  if (!handler.actor) {
576
- logger().warn({
660
+ logger2().warn({
577
661
  msg: "actor not found in #hwsCanHibernate",
578
662
  actorId
579
663
  });
580
664
  return false;
581
665
  }
582
- logger().debug({
666
+ logger2().debug({
583
667
  msg: "no existing hibernatable websocket found",
584
668
  gatewayId: idToStr(gatewayId),
585
669
  requestId: idToStr(requestId)
@@ -606,7 +690,7 @@ var EngineActorDriver = class {
606
690
  const canHibernate = canHibernateWebSocket(truncatedRequest);
607
691
  return canHibernate;
608
692
  } catch (error) {
609
- logger().error({
693
+ logger2().error({
610
694
  msg: "error calling canHibernateWebSocket",
611
695
  error
612
696
  });
@@ -618,7 +702,7 @@ var EngineActorDriver = class {
618
702
  } else if (path === PATH_INSPECTOR_CONNECT) {
619
703
  return false;
620
704
  } else {
621
- logger().warn({
705
+ logger2().warn({
622
706
  msg: "unexpected path for getActorHibernationConfig",
623
707
  path
624
708
  });
@@ -645,6 +729,7 @@ var EngineActorDriver = class {
645
729
  var _a;
646
730
  const handler = this.#actors.get(actor2.id);
647
731
  invariant(handler, "missing actor handler in onBeforeActorReady");
732
+ handler.actorStartError = void 0;
648
733
  (_a = handler.actorStartPromise) == null ? void 0 : _a.resolve();
649
734
  handler.actorStartPromise = void 0;
650
735
  const metaEntries = await this.#hwsLoadAll(actor2.id);
@@ -659,7 +744,7 @@ var EngineActorDriver = class {
659
744
  pendingAckFromMessageIndex: false,
660
745
  pendingAckFromBufferSize: false
661
746
  });
662
- logger().debug({
747
+ logger2().debug({
663
748
  msg: "created #hwsMessageIndex entry",
664
749
  connId: conn.id,
665
750
  serverMessageIndex: hibernatable.serverMessageIndex
@@ -667,7 +752,7 @@ var EngineActorDriver = class {
667
752
  }
668
753
  onDestroyConn(conn) {
669
754
  this.#hwsMessageIndex.delete(conn.id);
670
- logger().debug({
755
+ logger2().debug({
671
756
  msg: "removed #hwsMessageIndex entry",
672
757
  connId: conn.id
673
758
  });
@@ -677,7 +762,7 @@ var EngineActorDriver = class {
677
762
  const hibernatable = stateManager.hibernatableDataOrError();
678
763
  const entry = this.#hwsMessageIndex.get(conn.id);
679
764
  if (!entry) {
680
- logger().warn({
765
+ logger2().warn({
681
766
  msg: "missing EngineActorDriver.#hwsMessageIndex entry for conn",
682
767
  connId: conn.id
683
768
  });
@@ -691,7 +776,7 @@ var EngineActorDriver = class {
691
776
  const hibernatable = stateManager.hibernatableDataOrError();
692
777
  const entry = this.#hwsMessageIndex.get(conn.id);
693
778
  if (!entry) {
694
- logger().warn({
779
+ logger2().warn({
695
780
  msg: "missing EngineActorDriver.#hwsMessageIndex entry for conn",
696
781
  connId: conn.id
697
782
  });
@@ -876,7 +961,7 @@ function chooseDefaultDriver(config) {
876
961
  }
877
962
 
878
963
  // src/engine-process/log.ts
879
- function logger2() {
964
+ function logger3() {
880
965
  return getLogger("engine-process");
881
966
  }
882
967
 
@@ -885,7 +970,7 @@ var ENGINE_BASE_URL = "https://releases.rivet.dev/rivet";
885
970
  var ENGINE_BINARY_NAME = "rivet-engine";
886
971
  async function ensureEngineProcess(options) {
887
972
  importNodeDependencies();
888
- logger2().debug({
973
+ logger3().debug({
889
974
  msg: "ensuring engine process",
890
975
  version: options.version
891
976
  });
@@ -900,13 +985,13 @@ async function ensureEngineProcess(options) {
900
985
  if (await isEngineRunning()) {
901
986
  try {
902
987
  const health = await waitForEngineHealth();
903
- logger2().debug({
988
+ logger3().debug({
904
989
  msg: "engine already running and healthy",
905
990
  version: health.version
906
991
  });
907
992
  return;
908
993
  } catch (error) {
909
- logger2().warn({
994
+ logger3().warn({
910
995
  msg: "existing engine process not healthy, cannot restart automatically",
911
996
  error
912
997
  });
@@ -928,7 +1013,7 @@ async function ensureEngineProcess(options) {
928
1013
  const stderrStream = fsSync.createWriteStream(stderrLogPath, {
929
1014
  flags: "a"
930
1015
  });
931
- logger2().debug({
1016
+ logger3().debug({
932
1017
  msg: "creating engine log files",
933
1018
  stdout: stdoutLogPath,
934
1019
  stderr: stderrLogPath
@@ -985,7 +1070,7 @@ async function ensureEngineProcess(options) {
985
1070
  });
986
1071
  child.stderr.pipe(stderrStream);
987
1072
  }
988
- logger2().debug({
1073
+ logger3().debug({
989
1074
  msg: "spawned engine process",
990
1075
  pid: child.pid,
991
1076
  cwd: path.dirname(binaryPath)
@@ -993,7 +1078,7 @@ async function ensureEngineProcess(options) {
993
1078
  child.once("exit", (code, signal) => {
994
1079
  const stderrOutput = Buffer.concat(stderrChunks).toString("utf-8");
995
1080
  if (stderrOutput.includes("LOCK: Resource temporarily unavailable")) {
996
- logger2().error({
1081
+ logger3().error({
997
1082
  msg: "another instance of rivet engine is unexpectedly running, this is an internal error",
998
1083
  code,
999
1084
  signal,
@@ -1003,7 +1088,7 @@ async function ensureEngineProcess(options) {
1003
1088
  support: "https://rivet.dev/discord"
1004
1089
  });
1005
1090
  } else if (stderrOutput.includes("Rivet Engine has been rolled back to a previous version")) {
1006
- logger2().error({
1091
+ logger3().error({
1007
1092
  msg: "rivet engine version downgrade detected",
1008
1093
  hint: `You attempted to downgrade the RivetKit version in development. To fix this, nuke the database by running: '${binaryPath}' database nuke --yes`,
1009
1094
  code,
@@ -1012,7 +1097,7 @@ async function ensureEngineProcess(options) {
1012
1097
  stderrLog: stderrLogPath
1013
1098
  });
1014
1099
  } else {
1015
- logger2().warn({
1100
+ logger3().warn({
1016
1101
  msg: "engine process exited, please report this error",
1017
1102
  code,
1018
1103
  signal,
@@ -1026,7 +1111,7 @@ async function ensureEngineProcess(options) {
1026
1111
  stderrStream.end();
1027
1112
  });
1028
1113
  child.once("error", (error) => {
1029
- logger2().error({
1114
+ logger3().error({
1030
1115
  msg: "engine process failed",
1031
1116
  error
1032
1117
  });
@@ -1034,7 +1119,7 @@ async function ensureEngineProcess(options) {
1034
1119
  stderrStream.end();
1035
1120
  });
1036
1121
  await waitForEngineHealth();
1037
- logger2().info({
1122
+ logger3().info({
1038
1123
  msg: "engine process started",
1039
1124
  pid: child.pid,
1040
1125
  version: options.version,
@@ -1047,7 +1132,7 @@ async function ensureEngineProcess(options) {
1047
1132
  async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
1048
1133
  const binaryExists = await fileExists(binaryPath);
1049
1134
  if (binaryExists) {
1050
- logger2().debug({
1135
+ logger3().debug({
1051
1136
  msg: "engine binary already cached",
1052
1137
  version,
1053
1138
  path: binaryPath
@@ -1057,7 +1142,7 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
1057
1142
  const { targetTriplet, extension } = resolveTargetTriplet();
1058
1143
  const remoteFile = `${ENGINE_BINARY_NAME}-${targetTriplet}${extension}`;
1059
1144
  const downloadUrl = `${ENGINE_BASE_URL}/${version}/engine/${remoteFile}`;
1060
- logger2().info({
1145
+ logger3().info({
1061
1146
  msg: "downloading engine binary",
1062
1147
  url: downloadUrl,
1063
1148
  path: binaryPath,
@@ -1072,13 +1157,13 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
1072
1157
  const crypto2 = getNodeCrypto();
1073
1158
  const tempPath = `${binaryPath}.${crypto2.randomUUID()}.tmp`;
1074
1159
  const startTime = Date.now();
1075
- logger2().debug({
1160
+ logger3().debug({
1076
1161
  msg: "starting binary download",
1077
1162
  tempPath,
1078
1163
  contentLength: response.headers.get("content-length")
1079
1164
  });
1080
1165
  const slowDownloadWarning = setTimeout(() => {
1081
- logger2().warn({
1166
+ logger3().warn({
1082
1167
  msg: "engine binary download is taking longer than expected, please be patient",
1083
1168
  version
1084
1169
  });
@@ -1098,21 +1183,21 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
1098
1183
  await fs.chmod(tempPath, 493);
1099
1184
  }
1100
1185
  await fs.rename(tempPath, binaryPath);
1101
- logger2().debug({
1186
+ logger3().debug({
1102
1187
  msg: "engine binary download complete",
1103
1188
  version,
1104
1189
  path: binaryPath,
1105
1190
  size: stats.size,
1106
1191
  durationMs: downloadDuration
1107
1192
  });
1108
- logger2().info({
1193
+ logger3().info({
1109
1194
  msg: "engine binary downloaded",
1110
1195
  version,
1111
1196
  path: binaryPath
1112
1197
  });
1113
1198
  } catch (error) {
1114
1199
  clearTimeout(slowDownloadWarning);
1115
- logger2().warn({
1200
+ logger3().warn({
1116
1201
  msg: "engine download failed, please report this error",
1117
1202
  tempPath,
1118
1203
  error,
@@ -1174,13 +1259,13 @@ async function checkIfEngineAlreadyRunningOnPort(port) {
1174
1259
  if (response.ok) {
1175
1260
  const health = await response.json();
1176
1261
  if (health.runtime === "engine") {
1177
- logger2().debug({
1262
+ logger3().debug({
1178
1263
  msg: "rivet engine already running on port",
1179
1264
  port
1180
1265
  });
1181
1266
  return true;
1182
1267
  } else if (health.runtime === "rivetkit") {
1183
- logger2().error({
1268
+ logger3().error({
1184
1269
  msg: "another rivetkit process is already running on port",
1185
1270
  port
1186
1271
  });
@@ -1208,7 +1293,7 @@ var HEALTH_MAX_WAIT = 1e4;
1208
1293
  var HEALTH_INTERVAL = 100;
1209
1294
  async function waitForEngineHealth() {
1210
1295
  const maxRetries = Math.ceil(HEALTH_MAX_WAIT / HEALTH_INTERVAL);
1211
- logger2().debug({ msg: "waiting for engine health check" });
1296
+ logger3().debug({ msg: "waiting for engine health check" });
1212
1297
  for (let i = 0; i < maxRetries; i++) {
1213
1298
  try {
1214
1299
  const response = await fetch(`${ENGINE_ENDPOINT}/health`, {
@@ -1216,11 +1301,11 @@ async function waitForEngineHealth() {
1216
1301
  });
1217
1302
  if (response.ok) {
1218
1303
  const health = await response.json();
1219
- logger2().debug({ msg: "engine health check passed" });
1304
+ logger3().debug({ msg: "engine health check passed" });
1220
1305
  return health;
1221
1306
  }
1222
1307
  } catch (error) {
1223
- logger2().debug({ msg: "engine health check failed", error });
1308
+ logger3().debug({ msg: "engine health check failed", error });
1224
1309
  if (i === maxRetries - 1) {
1225
1310
  throw new Error(
1226
1311
  `engine health check failed after ${maxRetries} retries: ${error}`
@@ -1228,7 +1313,7 @@ async function waitForEngineHealth() {
1228
1313
  }
1229
1314
  }
1230
1315
  if (i < maxRetries - 1) {
1231
- logger2().trace({
1316
+ logger3().trace({
1232
1317
  msg: "engine not ready, retrying",
1233
1318
  attempt: i + 1,
1234
1319
  maxRetries
@@ -1250,14 +1335,14 @@ function getInspectorUrl(config, managerPort) {
1250
1335
  }
1251
1336
 
1252
1337
  // src/serverless/log.ts
1253
- function logger3() {
1338
+ function logger4() {
1254
1339
  return getLogger("serverless");
1255
1340
  }
1256
1341
 
1257
1342
  // src/serverless/configure.ts
1258
1343
  import invariant2 from "invariant";
1259
1344
  async function configureServerlessRunner(config) {
1260
- logger3().debug("configuring serverless runner");
1345
+ logger4().debug("configuring serverless runner");
1261
1346
  try {
1262
1347
  if (!config.namespace) {
1263
1348
  throw new Error(
@@ -1272,13 +1357,13 @@ async function configureServerlessRunner(config) {
1272
1357
  const customConfig = config.serverless.configureRunnerPool;
1273
1358
  invariant2(customConfig, "configureRunnerPool should exist");
1274
1359
  const clientConfig = convertRegistryConfigToClientConfig(config);
1275
- logger3().debug({
1360
+ logger4().debug({
1276
1361
  msg: "fetching datacenters",
1277
1362
  endpoint: config.endpoint
1278
1363
  });
1279
1364
  const dcsRes = await getDatacenters(clientConfig);
1280
1365
  const runnerName = customConfig.name ?? "default";
1281
- logger3().debug({
1366
+ logger4().debug({
1282
1367
  msg: "configuring serverless runner",
1283
1368
  runnerName,
1284
1369
  namespace: config.namespace
@@ -1303,143 +1388,19 @@ async function configureServerlessRunner(config) {
1303
1388
  dcsRes.datacenters.map((dc) => [dc.name, serverlessConfig])
1304
1389
  )
1305
1390
  });
1306
- logger3().info({
1391
+ logger4().info({
1307
1392
  msg: "serverless runner configured successfully",
1308
1393
  runnerName,
1309
1394
  namespace: config.namespace
1310
1395
  });
1311
1396
  } catch (error) {
1312
- logger3().error({
1397
+ logger4().error({
1313
1398
  msg: "failed to configure serverless runner, validate endpoint is configured correctly then restart this process",
1314
1399
  error
1315
1400
  });
1316
1401
  }
1317
1402
  }
1318
1403
 
1319
- // src/registry/log.ts
1320
- function logger4() {
1321
- return getLogger("registry");
1322
- }
1323
-
1324
- // src/registry/serve.ts
1325
- import getPort from "get-port";
1326
- var DEFAULT_PORT = 6420;
1327
- async function findFreePort(startPort = DEFAULT_PORT) {
1328
- function* portRange(start, count = 100) {
1329
- for (let i = 0; i < count; i++) {
1330
- yield start + i;
1331
- }
1332
- }
1333
- return getPort({ port: portRange(startPort) });
1334
- }
1335
- async function crossPlatformServe(config, managerPort, app) {
1336
- const runtime = detectRuntime();
1337
- logger4().debug({ msg: "detected runtime for serve", runtime });
1338
- switch (runtime) {
1339
- case "deno":
1340
- return serveDeno(config, managerPort, app);
1341
- case "bun":
1342
- return serveBun(config, managerPort, app);
1343
- case "node":
1344
- return serveNode(config, managerPort, app);
1345
- default:
1346
- return serveNode(config, managerPort, app);
1347
- }
1348
- }
1349
- async function serveNode(config, managerPort, app) {
1350
- const nodeServerModule = "@hono/node-server";
1351
- let serve;
1352
- try {
1353
- const dep = await import(
1354
- /* webpackIgnore: true */
1355
- nodeServerModule
1356
- );
1357
- serve = dep.serve;
1358
- } catch (err) {
1359
- logger4().error({
1360
- msg: "failed to import @hono/node-server. please run 'npm install @hono/node-server @hono/node-ws'",
1361
- error: stringifyError(err)
1362
- });
1363
- process.exit(1);
1364
- }
1365
- const nodeWsModule = "@hono/node-ws";
1366
- let createNodeWebSocket;
1367
- try {
1368
- const dep = await import(
1369
- /* webpackIgnore: true */
1370
- nodeWsModule
1371
- );
1372
- createNodeWebSocket = dep.createNodeWebSocket;
1373
- } catch (err) {
1374
- logger4().error({
1375
- msg: "failed to import @hono/node-ws. please run 'npm install @hono/node-server @hono/node-ws'",
1376
- error: stringifyError(err)
1377
- });
1378
- process.exit(1);
1379
- }
1380
- const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({
1381
- app
1382
- });
1383
- const port = managerPort;
1384
- const hostname = config.managerHost;
1385
- const server = serve(
1386
- { fetch: app.fetch, port, hostname },
1387
- () => logger4().info({ msg: "server listening", port, hostname })
1388
- );
1389
- injectWebSocket(server);
1390
- return { upgradeWebSocket };
1391
- }
1392
- async function serveDeno(config, managerPort, app) {
1393
- const honoDenoModule = "hono/deno";
1394
- let upgradeWebSocket;
1395
- try {
1396
- const dep = await import(
1397
- /* webpackIgnore: true */
1398
- honoDenoModule
1399
- );
1400
- upgradeWebSocket = dep.upgradeWebSocket;
1401
- } catch (err) {
1402
- logger4().error({
1403
- msg: "failed to import hono/deno",
1404
- error: stringifyError(err)
1405
- });
1406
- process.exit(1);
1407
- }
1408
- const port = config.managerPort;
1409
- const hostname = config.managerHost;
1410
- Deno.serve({ port, hostname }, app.fetch);
1411
- logger4().info({ msg: "server listening", port, hostname });
1412
- return { upgradeWebSocket };
1413
- }
1414
- async function serveBun(config, managerPort, app) {
1415
- const honoBunModule = "hono/bun";
1416
- let createBunWebSocket;
1417
- try {
1418
- const dep = await import(
1419
- /* webpackIgnore: true */
1420
- honoBunModule
1421
- );
1422
- createBunWebSocket = dep.createBunWebSocket;
1423
- } catch (err) {
1424
- logger4().error({
1425
- msg: "failed to import hono/bun",
1426
- error: stringifyError(err)
1427
- });
1428
- process.exit(1);
1429
- }
1430
- const { websocket, upgradeWebSocket } = createBunWebSocket();
1431
- const port = config.managerPort;
1432
- const hostname = config.managerHost;
1433
- Bun.serve({
1434
- fetch: app.fetch,
1435
- port,
1436
- hostname,
1437
- websocket
1438
- });
1439
- logger4().info({ msg: "server listening", port, hostname });
1440
- return { upgradeWebSocket };
1441
- }
1442
-
1443
1404
  // src/serverless/router.ts
1444
1405
  import invariant3 from "invariant";
1445
1406
 
@@ -1484,7 +1445,7 @@ function buildServerlessRouter(driverConfig, config) {
1484
1445
  );
1485
1446
  }
1486
1447
  const { endpoint, token, totalSlots, runnerName, namespace } = parseResult.data;
1487
- logger3().debug({
1448
+ logger4().debug({
1488
1449
  msg: "received serverless runner start request",
1489
1450
  endpoint,
1490
1451
  totalSlots,
@@ -1612,7 +1573,7 @@ var Runtime = class _Runtime {
1612
1573
  }
1613
1574
  static async create(registry) {
1614
1575
  var _a, _b, _c;
1615
- logger4().info("rivetkit starting");
1576
+ logger().info("rivetkit starting");
1616
1577
  const config = registry.parseConfig();
1617
1578
  if ((_a = config.logging) == null ? void 0 : _a.baseLogger) {
1618
1579
  configureBaseLogger(config.logging.baseLogger);
@@ -1628,7 +1589,7 @@ var Runtime = class _Runtime {
1628
1589
  let managerPort;
1629
1590
  if (config.serverless.spawnEngine) {
1630
1591
  managerPort = ENGINE_PORT;
1631
- logger4().debug({
1592
+ logger().debug({
1632
1593
  msg: "spawning engine",
1633
1594
  version: config.serverless.engineVersion
1634
1595
  });
@@ -1637,16 +1598,18 @@ var Runtime = class _Runtime {
1637
1598
  });
1638
1599
  } else if (config.serveManager) {
1639
1600
  const configuredManagerPort = config.managerPort;
1601
+ const serveRuntime = detectRuntime();
1640
1602
  let upgradeWebSocket;
1641
1603
  const getUpgradeWebSocket = () => upgradeWebSocket;
1642
1604
  managerDriver.setGetUpgradeWebSocket(getUpgradeWebSocket);
1643
1605
  const { router: managerRouter } = buildManagerRouter(
1644
1606
  config,
1645
1607
  managerDriver,
1646
- getUpgradeWebSocket
1608
+ getUpgradeWebSocket,
1609
+ serveRuntime
1647
1610
  );
1648
1611
  managerPort = await findFreePort(config.managerPort);
1649
- logger4().debug({
1612
+ logger().debug({
1650
1613
  msg: "serving manager",
1651
1614
  port: managerPort
1652
1615
  });
@@ -1658,7 +1621,8 @@ var Runtime = class _Runtime {
1658
1621
  const out = await crossPlatformServe(
1659
1622
  config,
1660
1623
  managerPort,
1661
- managerRouter
1624
+ managerRouter,
1625
+ serveRuntime
1662
1626
  );
1663
1627
  upgradeWebSocket = out.upgradeWebSocket;
1664
1628
  }
@@ -1670,7 +1634,7 @@ var Runtime = class _Runtime {
1670
1634
  managerPort
1671
1635
  );
1672
1636
  const driverLog = ((_c = managerDriver.extraStartupLog) == null ? void 0 : _c.call(managerDriver)) ?? {};
1673
- logger4().info({
1637
+ logger().info({
1674
1638
  msg: "rivetkit ready",
1675
1639
  driver: driver.name,
1676
1640
  definitions: Object.keys(config.use).length,
@@ -1696,7 +1660,7 @@ var Runtime = class _Runtime {
1696
1660
  invariant4(!this.#startKind, "Runtime already started as serverless");
1697
1661
  this.#startKind = "runner";
1698
1662
  if (this.#config.runner && this.#driver.autoStartActorDriver) {
1699
- logger4().debug("starting actor driver");
1663
+ logger().debug("starting actor driver");
1700
1664
  const inlineClient = createClientWithDriver(
1701
1665
  this.#managerDriver
1702
1666
  );
@@ -1868,4 +1832,4 @@ export {
1868
1832
  Registry,
1869
1833
  setup
1870
1834
  };
1871
- //# sourceMappingURL=chunk-BSIJG3LG.js.map
1835
+ //# sourceMappingURL=chunk-M6H4XIF4.js.map