rivetkit 2.3.0-rc.6 → 2.3.0-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/browser/client.d.ts +37 -8
  2. package/dist/browser/client.js +64 -34
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +4 -3
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/tsup/actor/errors.cjs +2 -2
  7. package/dist/tsup/actor/errors.js +1 -1
  8. package/dist/tsup/agent-os/index.cjs +7 -5
  9. package/dist/tsup/agent-os/index.cjs.map +1 -1
  10. package/dist/tsup/agent-os/index.d.cts +26 -5
  11. package/dist/tsup/agent-os/index.d.ts +26 -5
  12. package/dist/tsup/agent-os/index.js +7 -5
  13. package/dist/tsup/agent-os/index.js.map +1 -1
  14. package/dist/tsup/{chunk-2G64KSZQ.cjs → chunk-2H4ISA4Y.cjs} +10 -10
  15. package/dist/tsup/chunk-2H4ISA4Y.cjs.map +1 -0
  16. package/dist/tsup/{chunk-ZI5QJMKO.js → chunk-4DJMFOSU.js} +2 -2
  17. package/dist/tsup/{chunk-RTC2AZGB.js → chunk-4LTY5TOO.js} +132 -4
  18. package/dist/tsup/chunk-4LTY5TOO.js.map +1 -0
  19. package/dist/tsup/{chunk-DEO7MMWQ.js → chunk-52TPEKEC.js} +2 -2
  20. package/dist/tsup/{chunk-HTR4YLNT.cjs → chunk-55E7IR6D.cjs} +4 -4
  21. package/dist/tsup/{chunk-HTR4YLNT.cjs.map → chunk-55E7IR6D.cjs.map} +1 -1
  22. package/dist/tsup/{chunk-QAZLM4WT.cjs → chunk-63WNTDRC.cjs} +3 -3
  23. package/dist/tsup/{chunk-QAZLM4WT.cjs.map → chunk-63WNTDRC.cjs.map} +1 -1
  24. package/dist/tsup/{chunk-EMO6E3PJ.js → chunk-CMV6N5OX.js} +3 -3
  25. package/dist/tsup/{chunk-T6YVRM4K.js → chunk-D5G75T7J.js} +3 -1
  26. package/dist/tsup/chunk-D5G75T7J.js.map +1 -0
  27. package/dist/tsup/{chunk-LIXXFXVR.cjs → chunk-FEOG44WH.cjs} +137 -9
  28. package/dist/tsup/chunk-FEOG44WH.cjs.map +1 -0
  29. package/dist/tsup/{chunk-M5C7YNI5.cjs → chunk-G5HUSWP4.cjs} +8 -8
  30. package/dist/tsup/{chunk-M5C7YNI5.cjs.map → chunk-G5HUSWP4.cjs.map} +1 -1
  31. package/dist/tsup/{chunk-6S25NVAP.js → chunk-HERL2VQ2.js} +7 -5
  32. package/dist/tsup/chunk-HERL2VQ2.js.map +1 -0
  33. package/dist/tsup/{chunk-JALSAX7Z.cjs → chunk-SJLPZEA3.cjs} +3 -3
  34. package/dist/tsup/{chunk-JALSAX7Z.cjs.map → chunk-SJLPZEA3.cjs.map} +1 -1
  35. package/dist/tsup/{chunk-WQ4HNA4W.cjs → chunk-SRNOPUC6.cjs} +4 -2
  36. package/dist/tsup/chunk-SRNOPUC6.cjs.map +1 -0
  37. package/dist/tsup/{chunk-KIWH5H3K.js → chunk-TMLOKTRB.js} +3 -3
  38. package/dist/tsup/chunk-TMLOKTRB.js.map +1 -0
  39. package/dist/tsup/{chunk-CAF6JDJE.js → chunk-VFIY6GWO.js} +4 -4
  40. package/dist/tsup/chunk-VFIY6GWO.js.map +1 -0
  41. package/dist/tsup/{chunk-FLODVLYW.js → chunk-VJ4Y4WBT.js} +10 -34
  42. package/dist/tsup/chunk-VJ4Y4WBT.js.map +1 -0
  43. package/dist/tsup/{chunk-K5BA2LEO.cjs → chunk-X6HIFXNK.cjs} +14 -12
  44. package/dist/tsup/chunk-X6HIFXNK.cjs.map +1 -0
  45. package/dist/tsup/{chunk-ENK7C66G.cjs → chunk-ZGPX6KAH.cjs} +169 -193
  46. package/dist/tsup/chunk-ZGPX6KAH.cjs.map +1 -0
  47. package/dist/tsup/client/mod.cjs +7 -7
  48. package/dist/tsup/client/mod.d.cts +2 -2
  49. package/dist/tsup/client/mod.d.ts +2 -2
  50. package/dist/tsup/client/mod.js +6 -6
  51. package/dist/tsup/common/log.cjs +3 -3
  52. package/dist/tsup/common/log.js +2 -2
  53. package/dist/tsup/common/websocket.cjs +4 -4
  54. package/dist/tsup/common/websocket.js +3 -3
  55. package/dist/tsup/{config-0Ta55UV0.d.ts → config-Ak1lv4gF.d.ts} +27 -6
  56. package/dist/tsup/{config-Ca8dN4cS.d.cts → config-DU_xj4qZ.d.cts} +27 -6
  57. package/dist/tsup/{context-B_IWbWne.d.ts → context-DAAp4Lpg.d.ts} +1 -1
  58. package/dist/tsup/{context-CUrQ9MHc.d.cts → context-Dt_L55q8.d.cts} +1 -1
  59. package/dist/tsup/inspector/mod.cjs +6 -6
  60. package/dist/tsup/inspector/mod.js +5 -5
  61. package/dist/tsup/mod.cjs +470 -316
  62. package/dist/tsup/mod.cjs.map +1 -1
  63. package/dist/tsup/mod.d.cts +3 -3
  64. package/dist/tsup/mod.d.ts +3 -3
  65. package/dist/tsup/mod.js +391 -237
  66. package/dist/tsup/mod.js.map +1 -1
  67. package/dist/tsup/process-metrics-NW754INA.js +118 -0
  68. package/dist/tsup/process-metrics-NW754INA.js.map +1 -0
  69. package/dist/tsup/process-metrics-TYAGKCEJ.cjs +118 -0
  70. package/dist/tsup/process-metrics-TYAGKCEJ.cjs.map +1 -0
  71. package/dist/tsup/test/mod.cjs +10 -10
  72. package/dist/tsup/test/mod.d.cts +1 -1
  73. package/dist/tsup/test/mod.d.ts +1 -1
  74. package/dist/tsup/test/mod.js +6 -6
  75. package/dist/tsup/utils.cjs +3 -3
  76. package/dist/tsup/utils.js +2 -2
  77. package/dist/tsup/workflow/mod.cjs +41 -16
  78. package/dist/tsup/workflow/mod.cjs.map +1 -1
  79. package/dist/tsup/workflow/mod.d.cts +3 -3
  80. package/dist/tsup/workflow/mod.d.ts +3 -3
  81. package/dist/tsup/workflow/mod.js +35 -10
  82. package/dist/tsup/workflow/mod.js.map +1 -1
  83. package/package.json +11 -10
  84. package/src/actor/config.ts +3 -0
  85. package/src/actor/errors.ts +2 -2
  86. package/src/agent-os/actor/session.ts +2 -2
  87. package/src/client/actor-conn.ts +6 -34
  88. package/src/client/actor-handle.ts +2 -1
  89. package/src/client/queue.ts +2 -1
  90. package/src/client/utils.ts +0 -1
  91. package/src/common/encoding.ts +243 -5
  92. package/src/common/inline-websocket-adapter.ts +12 -12
  93. package/src/common/log.ts +1 -0
  94. package/src/common/router.ts +2 -2
  95. package/src/common/utils.ts +0 -148
  96. package/src/drivers/engine/actor-driver.ts +11 -11
  97. package/src/engine-client/actor-websocket-client.ts +2 -1
  98. package/src/engine-client/mod.ts +3 -2
  99. package/src/registry/index.ts +46 -109
  100. package/src/registry/napi-runtime.ts +11 -34
  101. package/src/registry/native.ts +193 -104
  102. package/src/registry/process-metrics.ts +183 -0
  103. package/src/registry/runtime.ts +5 -12
  104. package/src/registry/wasm-runtime.ts +2 -13
  105. package/src/registry/write-through-proxy.ts +40 -0
  106. package/src/serde.ts +2 -2
  107. package/src/workflow/context.ts +32 -5
  108. package/src/workflow/inspector.ts +2 -1
  109. package/dist/tsup/chunk-2G64KSZQ.cjs.map +0 -1
  110. package/dist/tsup/chunk-6S25NVAP.js.map +0 -1
  111. package/dist/tsup/chunk-CAF6JDJE.js.map +0 -1
  112. package/dist/tsup/chunk-ENK7C66G.cjs.map +0 -1
  113. package/dist/tsup/chunk-FLODVLYW.js.map +0 -1
  114. package/dist/tsup/chunk-K5BA2LEO.cjs.map +0 -1
  115. package/dist/tsup/chunk-KIWH5H3K.js.map +0 -1
  116. package/dist/tsup/chunk-LIXXFXVR.cjs.map +0 -1
  117. package/dist/tsup/chunk-RTC2AZGB.js.map +0 -1
  118. package/dist/tsup/chunk-T6YVRM4K.js.map +0 -1
  119. package/dist/tsup/chunk-WQ4HNA4W.cjs.map +0 -1
  120. /package/dist/tsup/{chunk-ZI5QJMKO.js.map → chunk-4DJMFOSU.js.map} +0 -0
  121. /package/dist/tsup/{chunk-DEO7MMWQ.js.map → chunk-52TPEKEC.js.map} +0 -0
  122. /package/dist/tsup/{chunk-EMO6E3PJ.js.map → chunk-CMV6N5OX.js.map} +0 -0
package/dist/tsup/mod.cjs CHANGED
@@ -1,15 +1,15 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } var _class; var _class2;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } var _class; var _class2; var _class3;
2
2
 
3
3
 
4
4
 
5
5
 
6
6
 
7
7
 
8
- var _chunkWQ4HNA4Wcjs = require('./chunk-WQ4HNA4W.cjs');
9
8
 
9
+ var _chunkSRNOPUC6cjs = require('./chunk-SRNOPUC6.cjs');
10
10
 
11
- var _chunkHTR4YLNTcjs = require('./chunk-HTR4YLNT.cjs');
12
11
 
12
+ var _chunk55E7IR6Dcjs = require('./chunk-55E7IR6D.cjs');
13
13
 
14
14
 
15
15
 
@@ -18,7 +18,8 @@ var _chunkHTR4YLNTcjs = require('./chunk-HTR4YLNT.cjs');
18
18
 
19
19
 
20
20
 
21
- var _chunkENK7C66Gcjs = require('./chunk-ENK7C66G.cjs');
21
+
22
+ var _chunkZGPX6KAHcjs = require('./chunk-ZGPX6KAH.cjs');
22
23
 
23
24
 
24
25
 
@@ -31,9 +32,11 @@ var _chunkLD5YASJUcjs = require('./chunk-LD5YASJU.cjs');
31
32
 
32
33
 
33
34
 
34
- var _chunkLIXXFXVRcjs = require('./chunk-LIXXFXVR.cjs');
35
+
36
+ var _chunkFEOG44WHcjs = require('./chunk-FEOG44WH.cjs');
35
37
  require('./chunk-2NDZ7JCR.cjs');
36
- require('./chunk-JALSAX7Z.cjs');
38
+ require('./chunk-SJLPZEA3.cjs');
39
+
37
40
 
38
41
 
39
42
 
@@ -57,7 +60,7 @@ require('./chunk-JALSAX7Z.cjs');
57
60
 
58
61
 
59
62
 
60
- var _chunkK5BA2LEOcjs = require('./chunk-K5BA2LEO.cjs');
63
+ var _chunkX6HIFXNKcjs = require('./chunk-X6HIFXNK.cjs');
61
64
 
62
65
 
63
66
 
@@ -68,11 +71,11 @@ var _chunkK5BA2LEOcjs = require('./chunk-K5BA2LEO.cjs');
68
71
 
69
72
 
70
73
 
71
- var _chunkQAZLM4WTcjs = require('./chunk-QAZLM4WT.cjs');
74
+ var _chunk63WNTDRCcjs = require('./chunk-63WNTDRC.cjs');
72
75
 
73
76
  // src/actor/log.ts
74
77
  function loggerWithoutContext() {
75
- return _chunkK5BA2LEOcjs.getLogger.call(void 0, "actor-runtime");
78
+ return _chunkX6HIFXNKcjs.getLogger.call(void 0, "actor-runtime");
76
79
  }
77
80
 
78
81
  // src/actor/definition.ts
@@ -105,7 +108,7 @@ function actor(input) {
105
108
  warnDeprecatedShutdownTimeoutKeys(
106
109
  input == null ? void 0 : input.options
107
110
  );
108
- const config = _chunkWQ4HNA4Wcjs.ActorConfigSchema.parse(input);
111
+ const config = _chunkSRNOPUC6cjs.ActorConfigSchema.parse(input);
109
112
  return new ActorDefinition(config);
110
113
  }
111
114
  function isStaticActorDefinition(definition) {
@@ -187,7 +190,7 @@ function validateSchemaSync(schemas, key, data) {
187
190
  if (isStandardSchema(schema)) {
188
191
  const result = schema["~standard"].validate(data);
189
192
  if (isPromiseLike(result)) {
190
- throw _chunkQAZLM4WTcjs.unsupportedFeature.call(void 0, "async schema validation");
193
+ throw _chunk63WNTDRCcjs.unsupportedFeature.call(void 0, "async schema validation");
191
194
  }
192
195
  if (result.issues) {
193
196
  return { success: false, issues: [...result.issues] };
@@ -204,7 +207,7 @@ function validateSchemaSync(schemas, key, data) {
204
207
  var _ws = require('hono/ws');
205
208
  var _virtualwebsocket = require('@rivetkit/virtual-websocket');
206
209
  function logger() {
207
- return _chunkK5BA2LEOcjs.getLogger.call(void 0, "inline-websocket-adapter");
210
+ return _chunkX6HIFXNKcjs.getLogger.call(void 0, "inline-websocket-adapter");
208
211
  }
209
212
  var InlineWebSocketAdapter = class {
210
213
  #handler;
@@ -314,24 +317,24 @@ var InlineWebSocketAdapter = class {
314
317
  this.#close(1011, "Internal error during initialization");
315
318
  }
316
319
  }
317
- #handleError(err) {
318
- console.error("INLINE_WEBSOCKET_ADAPTER_ERROR", err);
320
+ #handleError(error) {
321
+ console.error("INLINE_WEBSOCKET_ADAPTER_ERROR", error);
319
322
  logger().error({
320
323
  msg: "error in websocket",
321
- error: err,
322
- errorMessage: err instanceof Error ? err.message : String(err),
323
- stack: err instanceof Error ? err.stack : void 0
324
+ error,
325
+ errorMessage: error instanceof Error ? error.message : String(error),
326
+ stack: error instanceof Error ? error.stack : void 0
324
327
  });
325
328
  try {
326
- this.#handler.onError(err, this.#wsContext);
327
- } catch (handlerErr) {
329
+ this.#handler.onError(error, this.#wsContext);
330
+ } catch (error2) {
328
331
  logger().error({
329
332
  msg: "error in onError handler",
330
- error: handlerErr
333
+ error: error2
331
334
  });
332
335
  }
333
- this.#clientWs.triggerError(err);
334
- this.#actorWs.triggerError(err);
336
+ this.#clientWs.triggerError(error);
337
+ this.#actorWs.triggerError(error);
335
338
  }
336
339
  #close(code, reason) {
337
340
  if (this.#readyState === 3 || this.#readyState === 2) {
@@ -344,8 +347,8 @@ var InlineWebSocketAdapter = class {
344
347
  { code, reason, wasClean: true },
345
348
  this.#wsContext
346
349
  );
347
- } catch (err) {
348
- logger().error({ msg: "error closing websocket", error: err });
350
+ } catch (error) {
351
+ logger().error({ msg: "error closing websocket", error });
349
352
  } finally {
350
353
  this.#readyState = 3;
351
354
  this.#clientWs.triggerClose(code, reason);
@@ -354,13 +357,16 @@ var InlineWebSocketAdapter = class {
354
357
  }
355
358
  };
356
359
 
360
+ // src/registry/index.ts
361
+ var _hono = require('hono');
362
+
357
363
  // src/common/engine.ts
358
364
  var ENGINE_PORT = 6420;
359
365
  var ENGINE_ENDPOINT = `http://127.0.0.1:${ENGINE_PORT}`;
360
366
 
361
367
  // src/registry/log.ts
362
368
  function logger2() {
363
- return _chunkK5BA2LEOcjs.getLogger.call(void 0, "registry");
369
+ return _chunkX6HIFXNKcjs.getLogger.call(void 0, "registry");
364
370
  }
365
371
 
366
372
  // src/serverless/configure.ts
@@ -397,8 +403,8 @@ async function configureServerlessPool(config) {
397
403
  throw new Error("configurePool is required for serverless configuration");
398
404
  }
399
405
  const customConfig = config.configurePool;
400
- const clientConfig = _chunkENK7C66Gcjs.convertRegistryConfigToClientConfig.call(void 0, config);
401
- const dcsRes = await _chunkENK7C66Gcjs.getDatacenters.call(void 0, clientConfig);
406
+ const clientConfig = _chunkZGPX6KAHcjs.convertRegistryConfigToClientConfig.call(void 0, config);
407
+ const dcsRes = await _chunkZGPX6KAHcjs.getDatacenters.call(void 0, clientConfig);
402
408
  const poolName = _nullishCoalesce(customConfig.name, () => ( "default"));
403
409
  const serverlessToken = _nullishCoalesce(config.token, () => ( config.publicToken));
404
410
  const headers = {
@@ -420,7 +426,7 @@ async function configureServerlessPool(config) {
420
426
  metadata: _nullishCoalesce(customConfig.metadata, () => ( {})),
421
427
  drain_on_version_upgrade: _nullishCoalesce(customConfig.drainOnVersionUpgrade, () => ( true))
422
428
  };
423
- await _chunkENK7C66Gcjs.updateRunnerConfig.call(void 0, clientConfig, poolName, {
429
+ await _chunkZGPX6KAHcjs.updateRunnerConfig.call(void 0, clientConfig, poolName, {
424
430
  datacenters: Object.fromEntries(
425
431
  dcsRes.datacenters.map((dc) => [dc.name, serverlessConfig])
426
432
  )
@@ -437,7 +443,7 @@ async function configureServerlessPool(config) {
437
443
  logger2().warn({
438
444
  msg: "serverless pool configuration attempt failed",
439
445
  attempts,
440
- error: _chunkK5BA2LEOcjs.stringifyError.call(void 0, error)
446
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, error)
441
447
  });
442
448
  await sleep(CONFIGURE_RETRY_DELAY_MS);
443
449
  }
@@ -445,11 +451,150 @@ async function configureServerlessPool(config) {
445
451
  logger2().error({
446
452
  msg: "failed to configure serverless pool, validate endpoint is configured correctly then restart this process",
447
453
  attempts,
448
- error: _chunkK5BA2LEOcjs.stringifyError.call(void 0, lastError)
454
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, lastError)
449
455
  });
450
456
  throw lastError;
451
457
  }
452
458
 
459
+ // src/utils/serve.ts
460
+ var _getport = require('get-port'); var _getport2 = _interopRequireDefault(_getport);
461
+ var serveStaticLoaderPromises = {};
462
+ async function crossPlatformServe(config, httpPort, app, runtime = _chunkX6HIFXNKcjs.detectRuntime.call(void 0, )) {
463
+ logger2().debug({ msg: "detected runtime for serve", runtime });
464
+ switch (runtime) {
465
+ case "deno":
466
+ return serveDeno(config, httpPort, app);
467
+ case "bun":
468
+ return serveBun(config, httpPort, app);
469
+ case "node":
470
+ return serveNode(config, httpPort, app);
471
+ default:
472
+ return serveNode(config, httpPort, app);
473
+ }
474
+ }
475
+ async function loadRuntimeServeStatic(runtime) {
476
+ if (!serveStaticLoaderPromises[runtime]) {
477
+ if (runtime === "node") {
478
+ const nodeServeStaticModule = "@hono/node-server/serve-static";
479
+ serveStaticLoaderPromises[runtime] = Promise.resolve().then(() => _interopRequireWildcard(require(
480
+ /* webpackIgnore: true */
481
+ nodeServeStaticModule
482
+ ))).then((x) => x.serveStatic);
483
+ } else if (runtime === "bun") {
484
+ const bunModule = "hono/bun";
485
+ serveStaticLoaderPromises[runtime] = Promise.resolve().then(() => _interopRequireWildcard(require(
486
+ /* webpackIgnore: true */
487
+ bunModule
488
+ ))).then((x) => x.serveStatic);
489
+ } else if (runtime === "deno") {
490
+ const denoModule = "hono/deno";
491
+ serveStaticLoaderPromises[runtime] = Promise.resolve().then(() => _interopRequireWildcard(require(
492
+ /* webpackIgnore: true */
493
+ denoModule
494
+ ))).then((x) => x.serveStatic);
495
+ } else {
496
+ throw new Error(`unsupported runtime: ${runtime}`);
497
+ }
498
+ }
499
+ return await serveStaticLoaderPromises[runtime];
500
+ }
501
+ async function serveNode(config, httpPort, app) {
502
+ const nodeServerModule = "@hono/node-server";
503
+ let serve;
504
+ try {
505
+ const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
506
+ /* webpackIgnore: true */
507
+ nodeServerModule
508
+ )));
509
+ serve = dep.serve;
510
+ } catch (err) {
511
+ logger2().error({
512
+ msg: "failed to import @hono/node-server. please run 'npm install @hono/node-server @hono/node-ws'",
513
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, err)
514
+ });
515
+ process.exit(1);
516
+ }
517
+ const nodeWsModule = "@hono/node-ws";
518
+ let createNodeWebSocket;
519
+ try {
520
+ const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
521
+ /* webpackIgnore: true */
522
+ nodeWsModule
523
+ )));
524
+ createNodeWebSocket = dep.createNodeWebSocket;
525
+ } catch (err) {
526
+ logger2().error({
527
+ msg: "failed to import @hono/node-ws. please run 'npm install @hono/node-server @hono/node-ws'",
528
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, err)
529
+ });
530
+ process.exit(1);
531
+ }
532
+ const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({
533
+ app
534
+ });
535
+ const port = httpPort;
536
+ const hostname = config.httpHost;
537
+ const server = serve(
538
+ { fetch: app.fetch, port, hostname },
539
+ () => logger2().info({ msg: "server listening", port, hostname })
540
+ );
541
+ injectWebSocket(server);
542
+ const closeServer = () => {
543
+ server.close();
544
+ };
545
+ return { upgradeWebSocket, closeServer };
546
+ }
547
+ async function serveDeno(config, httpPort, app) {
548
+ const honoDenoModule = "hono/deno";
549
+ let upgradeWebSocket;
550
+ try {
551
+ const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
552
+ /* webpackIgnore: true */
553
+ honoDenoModule
554
+ )));
555
+ upgradeWebSocket = dep.upgradeWebSocket;
556
+ } catch (err) {
557
+ logger2().error({
558
+ msg: "failed to import hono/deno",
559
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, err)
560
+ });
561
+ process.exit(1);
562
+ }
563
+ const port = httpPort;
564
+ const hostname = config.httpHost;
565
+ Deno.serve({ port, hostname }, app.fetch);
566
+ logger2().info({ msg: "server listening", port, hostname });
567
+ return { upgradeWebSocket };
568
+ }
569
+ async function serveBun(config, httpPort, app) {
570
+ const honoBunModule = "hono/bun";
571
+ let createBunWebSocket;
572
+ try {
573
+ const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
574
+ /* webpackIgnore: true */
575
+ honoBunModule
576
+ )));
577
+ createBunWebSocket = dep.createBunWebSocket;
578
+ } catch (err) {
579
+ logger2().error({
580
+ msg: "failed to import hono/bun",
581
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, err)
582
+ });
583
+ process.exit(1);
584
+ }
585
+ const { websocket, upgradeWebSocket } = createBunWebSocket();
586
+ const port = httpPort;
587
+ const hostname = config.httpHost;
588
+ Bun.serve({
589
+ fetch: app.fetch,
590
+ port,
591
+ hostname,
592
+ websocket
593
+ });
594
+ logger2().info({ msg: "server listening", port, hostname });
595
+ return { upgradeWebSocket };
596
+ }
597
+
453
598
  // src/registry/config/index.ts
454
599
  var _zod = require('zod');
455
600
 
@@ -457,20 +602,20 @@ var _zod = require('zod');
457
602
  var _v4 = require('zod/v4');
458
603
  var warnedMissingVersion = false;
459
604
  var EnvoyConfigSchema = _v4.z.object({
460
- poolName: _v4.z.string().default(() => _nullishCoalesce(_chunkK5BA2LEOcjs.getRivetPool.call(void 0, ), () => ( "default"))),
605
+ poolName: _v4.z.string().default(() => _nullishCoalesce(_chunkX6HIFXNKcjs.getRivetPool.call(void 0, ), () => ( "default"))),
461
606
  version: _v4.z.number().default(() => {
462
- const version = _chunkK5BA2LEOcjs.getRivetEnvoyVersion.call(void 0, );
607
+ const version = _chunkX6HIFXNKcjs.getRivetEnvoyVersion.call(void 0, );
463
608
  if (version !== void 0) return version;
464
- if (_chunkK5BA2LEOcjs.getNodeEnv.call(void 0, ) === "production" && !warnedMissingVersion) {
609
+ if (_chunkX6HIFXNKcjs.getNodeEnv.call(void 0, ) === "production" && !warnedMissingVersion) {
465
610
  warnedMissingVersion = true;
466
- _chunkK5BA2LEOcjs.getLogger.call(void 0, "rivetkit").error(
611
+ _chunkX6HIFXNKcjs.getLogger.call(void 0, "rivetkit").error(
467
612
  "RIVET_ENVOY_VERSION is not set. Actors will not be versioned, which means they won't be drained on deploy. This is only needed when self-hosting or using a custom envoy (not needed for Rivet Compute). Set this as a build arg in your Dockerfile. See https://rivet.dev/docs/actors/versions"
468
613
  );
469
614
  }
470
615
  return 1;
471
616
  }),
472
617
  // Deprecated.
473
- totalSlots: _v4.z.number().default(() => _nullishCoalesce(_chunkK5BA2LEOcjs.getRivetTotalSlots.call(void 0, ), () => ( 1e5))),
618
+ totalSlots: _v4.z.number().default(() => _nullishCoalesce(_chunkX6HIFXNKcjs.getRivetTotalSlots.call(void 0, ), () => ( 1e5))),
474
619
  envoyKey: _v4.z.string().optional()
475
620
  });
476
621
 
@@ -508,7 +653,7 @@ var ServerlessConfigSchema = _v4.z.object({
508
653
  *
509
654
  * Can also be set via RIVET_PUBLIC_ENDPOINT environment variable.
510
655
  */
511
- publicEndpoint: _v4.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkK5BA2LEOcjs.getRivetPublicEndpoint.call(void 0, )))),
656
+ publicEndpoint: _v4.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkX6HIFXNKcjs.getRivetPublicEndpoint.call(void 0, )))),
512
657
  /**
513
658
  * Token that clients should use when connecting via the public endpoint.
514
659
  *
@@ -516,7 +661,7 @@ var ServerlessConfigSchema = _v4.z.object({
516
661
  *
517
662
  * Can also be specified in the publicEndpoint URL as `https://namespace:token@host`.
518
663
  */
519
- publicToken: _v4.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkK5BA2LEOcjs.getRivetPublicToken.call(void 0, ))))
664
+ publicToken: _v4.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkX6HIFXNKcjs.getRivetPublicToken.call(void 0, ))))
520
665
  // There is no publicNamespace config option because the frontend and backend
521
666
  // cannot use different namespaces. The namespace is extracted from the
522
667
  // publicEndpoint URL auth syntax if provided.
@@ -570,7 +715,7 @@ var RegistryConfigSchema = _zod.z.object({
570
715
  * Runtime binding to use for RivetKit core.
571
716
  * */
572
717
  runtime: RuntimeKindSchema.optional().transform((val, ctx) => {
573
- const rawRuntime = _nullishCoalesce(val, () => ( _chunkK5BA2LEOcjs.getRivetkitRuntime.call(void 0, )));
718
+ const rawRuntime = _nullishCoalesce(val, () => ( _chunkX6HIFXNKcjs.getRivetkitRuntime.call(void 0, )));
574
719
  if (rawRuntime === void 0) {
575
720
  return "auto";
576
721
  }
@@ -607,7 +752,7 @@ var RegistryConfigSchema = _zod.z.object({
607
752
  * */
608
753
  logging: _zod.z.object({
609
754
  baseLogger: _zod.z.custom().optional(),
610
- level: _chunkK5BA2LEOcjs.LogLevelSchema.optional()
755
+ level: _chunkX6HIFXNKcjs.LogLevelSchema.optional()
611
756
  }).optional().default(() => ({})),
612
757
  // MARK: Routing
613
758
  // // This is a function to allow for lazy configuration of upgradeWebSocket on the
@@ -625,9 +770,9 @@ var RegistryConfigSchema = _zod.z.object({
625
770
  *
626
771
  * Can also be set via RIVET_ENDPOINT environment variables.
627
772
  */
628
- endpoint: _zod.z.string().optional().transform((val) => _nullishCoalesce(_nullishCoalesce(val, () => ( _chunkK5BA2LEOcjs.getRivetEngine.call(void 0, ))), () => ( _chunkK5BA2LEOcjs.getRivetEndpoint.call(void 0, )))),
629
- token: _zod.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkK5BA2LEOcjs.getRivetToken.call(void 0, )))),
630
- namespace: _zod.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkK5BA2LEOcjs.getRivetNamespace.call(void 0, )))),
773
+ endpoint: _zod.z.string().optional().transform((val) => _nullishCoalesce(_nullishCoalesce(val, () => ( _chunkX6HIFXNKcjs.getRivetEngine.call(void 0, ))), () => ( _chunkX6HIFXNKcjs.getRivetEndpoint.call(void 0, )))),
774
+ token: _zod.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkX6HIFXNKcjs.getRivetToken.call(void 0, )))),
775
+ namespace: _zod.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkX6HIFXNKcjs.getRivetNamespace.call(void 0, )))),
631
776
  headers: _zod.z.record(_zod.z.string(), _zod.z.string()).optional().default({}),
632
777
  // MARK: Client
633
778
  // TODO:
@@ -667,9 +812,9 @@ var RegistryConfigSchema = _zod.z.object({
667
812
  *
668
813
  * Starts the full Rust engine process locally.
669
814
  */
670
- startEngine: _zod.z.boolean().default(() => _chunkK5BA2LEOcjs.getRivetRunEngine.call(void 0, )),
815
+ startEngine: _zod.z.boolean().default(() => _chunkX6HIFXNKcjs.getRivetRunEngine.call(void 0, )),
671
816
  /** @experimental */
672
- engineVersion: _zod.z.string().optional().default(() => _nullishCoalesce(_chunkK5BA2LEOcjs.getRivetRunEngineVersion.call(void 0, ), () => ( _chunkK5BA2LEOcjs.VERSION))),
817
+ engineVersion: _zod.z.string().optional().default(() => _nullishCoalesce(_chunkX6HIFXNKcjs.getRivetRunEngineVersion.call(void 0, ), () => ( _chunkX6HIFXNKcjs.VERSION))),
673
818
  /**
674
819
  * @experimental
675
820
  *
@@ -717,7 +862,7 @@ var RegistryConfigSchema = _zod.z.object({
717
862
  }))
718
863
  }).transform((config, ctx) => {
719
864
  var _a, _b, _c;
720
- const isDevEnv = _chunkK5BA2LEOcjs.isDev.call(void 0, );
865
+ const isDevEnv = _chunkX6HIFXNKcjs.isDev.call(void 0, );
721
866
  const sqliteBackend = _nullishCoalesce(((_a = config.sqlite) == null ? void 0 : _a.backend), () => ( ((_b = config.test) == null ? void 0 : _b.sqliteBackend)));
722
867
  if (config.runtime === "wasm" && sqliteBackend === "local") {
723
868
  ctx.addIssue({
@@ -727,7 +872,7 @@ var RegistryConfigSchema = _zod.z.object({
727
872
  });
728
873
  }
729
874
  const sqlite = config.runtime === "wasm" && config.sqlite === void 0 ? { backend: "remote" } : config.sqlite;
730
- const parsedEndpoint = config.endpoint ? _chunkENK7C66Gcjs.tryParseEndpoint.call(void 0, ctx, {
875
+ const parsedEndpoint = config.endpoint ? _chunkZGPX6KAHcjs.tryParseEndpoint.call(void 0, ctx, {
731
876
  endpoint: config.endpoint,
732
877
  path: ["endpoint"],
733
878
  namespace: config.namespace,
@@ -751,7 +896,7 @@ var RegistryConfigSchema = _zod.z.object({
751
896
  );
752
897
  const namespace = _nullishCoalesce(_nullishCoalesce((parsedEndpoint == null ? void 0 : parsedEndpoint.namespace), () => ( config.namespace)), () => ( "default"));
753
898
  const token = _nullishCoalesce((parsedEndpoint == null ? void 0 : parsedEndpoint.token), () => ( config.token));
754
- const parsedPublicEndpoint = config.serverless.publicEndpoint ? _chunkENK7C66Gcjs.tryParseEndpoint.call(void 0, ctx, {
899
+ const parsedPublicEndpoint = config.serverless.publicEndpoint ? _chunkZGPX6KAHcjs.tryParseEndpoint.call(void 0, ctx, {
755
900
  endpoint: config.serverless.publicEndpoint,
756
901
  path: ["serverless", "publicEndpoint"]
757
902
  }) : void 0;
@@ -786,7 +931,7 @@ function buildActorNames(config) {
786
931
  Object.keys(config.use).map((actorName) => {
787
932
  const definition = config.use[actorName];
788
933
  const options = _nullishCoalesce(definition.config.options, () => ( {}));
789
- const runMeta = _chunkWQ4HNA4Wcjs.getRunMetadata.call(void 0, definition.config.run);
934
+ const runMeta = _chunkSRNOPUC6cjs.getRunMetadata.call(void 0, definition.config.run);
790
935
  const metadata = {};
791
936
  metadata.icon = _nullishCoalesce(options.icon, () => ( runMeta.icon));
792
937
  metadata.name = _nullishCoalesce(options.name, () => ( runMeta.name));
@@ -879,7 +1024,7 @@ var DocRegistryConfigSchema = _zod.z.object({
879
1024
  noWelcome: _zod.z.boolean().optional().describe("Disable the welcome message on startup. Default: false"),
880
1025
  sqlite: DocSqliteConfigSchema,
881
1026
  logging: _zod.z.object({
882
- level: _chunkK5BA2LEOcjs.LogLevelSchema.optional().describe(
1027
+ level: _chunkX6HIFXNKcjs.LogLevelSchema.optional().describe(
883
1028
  "Log level for RivetKit. Default: 'warn'"
884
1029
  )
885
1030
  }).optional().describe("Logging configuration."),
@@ -924,7 +1069,7 @@ function shouldAttachNativeKvError(message) {
924
1069
  function enrichNativeDatabaseError(database, error) {
925
1070
  var _a;
926
1071
  const bridgeReason = typeof error === "string" ? error : error instanceof Error ? error.message : void 0;
927
- const bridged = bridgeReason === void 0 ? void 0 : _chunkQAZLM4WTcjs.decodeBridgeRivetError.call(void 0, bridgeReason);
1072
+ const bridged = bridgeReason === void 0 ? void 0 : _chunk63WNTDRCcjs.decodeBridgeRivetError.call(void 0, bridgeReason);
928
1073
  if (bridged) {
929
1074
  throw bridged;
930
1075
  }
@@ -1154,6 +1299,29 @@ function lastInsertRowIdColumnName(sql) {
1154
1299
  return alias;
1155
1300
  }
1156
1301
 
1302
+ // src/registry/write-through-proxy.ts
1303
+ var _onchange = require('@rivetkit/on-change'); var _onchange2 = _interopRequireDefault(_onchange);
1304
+ function createWriteThroughProxy(value, commit, beforeChange) {
1305
+ if (!value || typeof value !== "object") {
1306
+ return value;
1307
+ }
1308
+ return _onchange2.default.call(void 0,
1309
+ value,
1310
+ () => {
1311
+ commit(value);
1312
+ },
1313
+ {
1314
+ // Rejection is throw-based: beforeChange throws to prevent the
1315
+ // mutation. We always return true so on-change applies the change
1316
+ // if beforeChange did not throw.
1317
+ onValidate(_path, newValue) {
1318
+ beforeChange == null ? void 0 : beforeChange(newValue);
1319
+ return true;
1320
+ }
1321
+ }
1322
+ );
1323
+ }
1324
+
1157
1325
  // src/registry/runtime.ts
1158
1326
  function normalizeRuntimeSqlExecuteResult(result) {
1159
1327
  return result;
@@ -1274,32 +1442,15 @@ var NapiCoreRuntime = (_class = class {
1274
1442
  async shutdownRegistry(registry) {
1275
1443
  await asNativeRegistry(registry).shutdown();
1276
1444
  }
1277
- async registryActorStopThresholdMs(registry) {
1278
- return await _asyncNullishCoalesce(await asNativeRegistry(registry).actorStopThresholdMs(), async () => ( void 0));
1279
- }
1280
- async registryHealth(registry) {
1281
- const response = await asNativeRegistry(registry).health();
1445
+ async registryDiagnostics(registry) {
1446
+ const diagnostics = await asNativeRegistry(registry).diagnostics();
1282
1447
  return {
1283
- status: response.status,
1284
- headers: response.headers,
1285
- body: response.body
1448
+ mode: diagnostics.mode,
1449
+ envoyActiveActorCount: diagnostics.envoyActiveActorCount
1286
1450
  };
1287
1451
  }
1288
- async registryMetadata(registry) {
1289
- const response = asNativeRegistry(registry).metadata();
1290
- return {
1291
- status: response.status,
1292
- headers: response.headers,
1293
- body: response.body
1294
- };
1295
- }
1296
- async registryMetrics(registry) {
1297
- const response = asNativeRegistry(registry).metrics();
1298
- return {
1299
- status: response.status,
1300
- headers: response.headers,
1301
- body: response.body
1302
- };
1452
+ async registryActorStopThresholdMs(registry) {
1453
+ return await _asyncNullishCoalesce(await asNativeRegistry(registry).actorStopThresholdMs(), async () => ( void 0));
1303
1454
  }
1304
1455
  async handleServerlessRequest(registry, req, onStreamEvent, cancelToken, config) {
1305
1456
  return await asNativeRegistry(registry).handleServerlessRequest(
@@ -1675,7 +1826,7 @@ function validateQueueComplete(schemas, name, response) {
1675
1826
  return result.data;
1676
1827
  }
1677
1828
  function validationError(target, issues) {
1678
- return new (0, _chunkQAZLM4WTcjs.RivetError)(
1829
+ return new (0, _chunk63WNTDRCcjs.RivetError)(
1679
1830
  "actor",
1680
1831
  "validation_error",
1681
1832
  `Invalid ${target}`,
@@ -1749,16 +1900,16 @@ function normalizeQueueMessage(message) {
1749
1900
  }
1750
1901
  function normalizeWasmBridgeError(error) {
1751
1902
  if (typeof error === "string") {
1752
- return _nullishCoalesce(_chunkQAZLM4WTcjs.decodeBridgeRivetError.call(void 0, error), () => ( error));
1903
+ return _nullishCoalesce(_chunk63WNTDRCcjs.decodeBridgeRivetError.call(void 0, error), () => ( error));
1753
1904
  }
1754
1905
  if (error instanceof Error) {
1755
- const bridged = _chunkQAZLM4WTcjs.decodeBridgeRivetError.call(void 0, error.message);
1906
+ const bridged = _chunk63WNTDRCcjs.decodeBridgeRivetError.call(void 0, error.message);
1756
1907
  if (bridged) {
1757
1908
  return bridged;
1758
1909
  }
1759
1910
  }
1760
1911
  if (typeof error === "object" && error !== null && "reason" in error && typeof error.reason === "string") {
1761
- const bridged = _chunkQAZLM4WTcjs.decodeBridgeRivetError.call(void 0, error.reason);
1912
+ const bridged = _chunk63WNTDRCcjs.decodeBridgeRivetError.call(void 0, error.reason);
1762
1913
  if (bridged) {
1763
1914
  return bridged;
1764
1915
  }
@@ -1780,7 +1931,7 @@ function callWasmSync(invoke) {
1780
1931
  }
1781
1932
  }
1782
1933
  function unsupportedWasmMethod(method2) {
1783
- throw new (0, _chunkQAZLM4WTcjs.RivetError)(
1934
+ throw new (0, _chunk63WNTDRCcjs.RivetError)(
1784
1935
  "runtime",
1785
1936
  "unsupported",
1786
1937
  `Unsupported wasm runtime method: ${method2}`,
@@ -1841,18 +1992,8 @@ var WasmCoreRuntime = (_class2 = class {
1841
1992
  async shutdownRegistry(registry) {
1842
1993
  await callWasm(() => asWasmRegistry(registry).shutdown());
1843
1994
  }
1844
- async registryHealth() {
1845
- return {
1846
- status: 200,
1847
- headers: { "content-type": "application/json" },
1848
- body: new TextEncoder().encode(
1849
- JSON.stringify({
1850
- status: "ok",
1851
- runtime: "rivetkit",
1852
- version: "wasm"
1853
- })
1854
- )
1855
- };
1995
+ async registryDiagnostics() {
1996
+ return { mode: "wasm", envoyActiveActorCount: null };
1856
1997
  }
1857
1998
  async handleServerlessRequest(registry, req, onStreamEvent, cancelToken, config) {
1858
1999
  return await callHandleAsync(
@@ -2281,7 +2422,7 @@ function loadedRuntimeKind(runtime) {
2281
2422
  case "wasm":
2282
2423
  return "wasm";
2283
2424
  }
2284
- throw new (0, _chunkQAZLM4WTcjs.RivetError)(
2425
+ throw new (0, _chunk63WNTDRCcjs.RivetError)(
2285
2426
  "config",
2286
2427
  "unknown_runtime",
2287
2428
  "RivetKit runtime must be NAPI or wasm.",
@@ -2321,7 +2462,7 @@ function normalizeRuntimeConfigForKind(config, runtimeKind) {
2321
2462
  return config;
2322
2463
  }
2323
2464
  if (sqliteBackendForConfig(config) === "local") {
2324
- throw new (0, _chunkQAZLM4WTcjs.RivetError)(
2465
+ throw new (0, _chunk63WNTDRCcjs.RivetError)(
2325
2466
  "config",
2326
2467
  "wasm_local_sqlite",
2327
2468
  "WebAssembly runtime cannot use local SQLite. Use remote SQLite instead.",
@@ -2387,22 +2528,30 @@ function getNativeConnPersistState(runtime, ctx, conn) {
2387
2528
  return connState;
2388
2529
  }
2389
2530
  function stateMutationReentrantError() {
2390
- return new (0, _chunkQAZLM4WTcjs.RivetError)(
2531
+ return new (0, _chunk63WNTDRCcjs.RivetError)(
2391
2532
  "actor",
2392
2533
  "state_mutation_reentrant",
2393
2534
  "State mutations are not allowed inside onStateChange."
2394
2535
  );
2395
2536
  }
2396
2537
  function databaseNotConfiguredError() {
2397
- return new (0, _chunkQAZLM4WTcjs.RivetError)(
2538
+ return new (0, _chunk63WNTDRCcjs.RivetError)(
2398
2539
  "actor",
2399
2540
  "database_not_configured",
2400
2541
  "database is not configured for this actor",
2401
2542
  { public: true }
2402
2543
  );
2403
2544
  }
2545
+ function databaseClientNotReadyError() {
2546
+ return new (0, _chunk63WNTDRCcjs.RivetError)(
2547
+ "actor",
2548
+ "database_client_not_ready",
2549
+ "actor database client was not initialized before user code ran. this is an internal lifecycle error; the migration callback should have pre-warmed the client. file an issue if you can reproduce.",
2550
+ { public: true }
2551
+ );
2552
+ }
2404
2553
  function stateNotEnabledError() {
2405
- return new (0, _chunkQAZLM4WTcjs.RivetError)(
2554
+ return new (0, _chunk63WNTDRCcjs.RivetError)(
2406
2555
  "actor",
2407
2556
  "state_not_enabled",
2408
2557
  "State not enabled. Must implement `createState` or `state` to use state. (https://www.rivet.dev/docs/actors/state/#initializing-state)",
@@ -2410,7 +2559,7 @@ function stateNotEnabledError() {
2410
2559
  );
2411
2560
  }
2412
2561
  function nativeClientNotConfiguredError() {
2413
- return new (0, _chunkQAZLM4WTcjs.RivetError)(
2562
+ return new (0, _chunk63WNTDRCcjs.RivetError)(
2414
2563
  "native",
2415
2564
  "client_not_configured",
2416
2565
  "native actor client is not configured",
@@ -2418,7 +2567,7 @@ function nativeClientNotConfiguredError() {
2418
2567
  );
2419
2568
  }
2420
2569
  function nativeEndpointNotConfiguredError() {
2421
- return new (0, _chunkQAZLM4WTcjs.RivetError)(
2570
+ return new (0, _chunk63WNTDRCcjs.RivetError)(
2422
2571
  "native",
2423
2572
  "endpoint_not_configured",
2424
2573
  "registry endpoint is required for native envoy startup",
@@ -2453,7 +2602,20 @@ function clearNativeRuntimeState(runtime, ctx) {
2453
2602
  callNativeSync(() => runtime.actorClearRuntimeState(ctx));
2454
2603
  }
2455
2604
  async function cleanupNativeSleepRuntimeState(runtime, ctx) {
2456
- await runtime.actorWaitForTrackedShutdownWork(ctx);
2605
+ const waitStarted = Date.now();
2606
+ const drained = await runtime.actorWaitForTrackedShutdownWork(ctx);
2607
+ const waitMs = Date.now() - waitStarted;
2608
+ if (drained) {
2609
+ logger2().debug({
2610
+ msg: "sleep cleanup: tracked shutdown work drained",
2611
+ waitMs
2612
+ });
2613
+ } else {
2614
+ logger2().warn({
2615
+ msg: "sleep cleanup: shutdown deadline reached before tracked work drained; closing DB anyway",
2616
+ waitMs
2617
+ });
2618
+ }
2457
2619
  await closeNativeDatabaseClient(runtime, ctx);
2458
2620
  await closeNativeSqlDatabase(runtime, ctx);
2459
2621
  clearNativeRuntimeState(runtime, ctx);
@@ -2558,10 +2720,10 @@ function decodeValue(value) {
2558
2720
  if (!value || value.length === 0) {
2559
2721
  return void 0;
2560
2722
  }
2561
- return _chunkLIXXFXVRcjs.decodeCborJsonCompat.call(void 0, value);
2723
+ return _chunkFEOG44WHcjs.decodeCborJsonCompat.call(void 0, value);
2562
2724
  }
2563
2725
  function encodeValue(value) {
2564
- return _chunkLIXXFXVRcjs.encodeCborCompat.call(void 0, value);
2726
+ return _chunkFEOG44WHcjs.encodeCborCompat.call(void 0, value);
2565
2727
  }
2566
2728
  function unwrapTsfnPayload(error, payload) {
2567
2729
  if (error !== null && error !== void 0) {
@@ -2571,16 +2733,16 @@ function unwrapTsfnPayload(error, payload) {
2571
2733
  }
2572
2734
  function normalizeNativeBridgeError(error) {
2573
2735
  if (typeof error === "string") {
2574
- return _nullishCoalesce(_chunkQAZLM4WTcjs.decodeBridgeRivetError.call(void 0, error), () => ( error));
2736
+ return _nullishCoalesce(_chunk63WNTDRCcjs.decodeBridgeRivetError.call(void 0, error), () => ( error));
2575
2737
  }
2576
2738
  if (error instanceof Error) {
2577
- const bridged = _chunkQAZLM4WTcjs.decodeBridgeRivetError.call(void 0, error.message);
2739
+ const bridged = _chunk63WNTDRCcjs.decodeBridgeRivetError.call(void 0, error.message);
2578
2740
  if (bridged) {
2579
2741
  return bridged;
2580
2742
  }
2581
2743
  }
2582
2744
  if (typeof error === "object" && error !== null && "reason" in error && typeof error.reason === "string") {
2583
- const bridged = _chunkQAZLM4WTcjs.decodeBridgeRivetError.call(void 0, error.reason);
2745
+ const bridged = _chunk63WNTDRCcjs.decodeBridgeRivetError.call(void 0, error.reason);
2584
2746
  if (bridged) {
2585
2747
  return bridged;
2586
2748
  }
@@ -2588,14 +2750,14 @@ function normalizeNativeBridgeError(error) {
2588
2750
  return error;
2589
2751
  }
2590
2752
  function isStructuredBridgeError(error) {
2591
- if (error instanceof _chunkQAZLM4WTcjs.RivetError) {
2753
+ if (error instanceof _chunk63WNTDRCcjs.RivetError) {
2592
2754
  return true;
2593
2755
  }
2594
- return _chunkQAZLM4WTcjs.isRivetErrorLike.call(void 0, error) && "__type" in error && (error.__type === "RivetError" || error.__type === "ActorError");
2756
+ return _chunk63WNTDRCcjs.isRivetErrorLike.call(void 0, error) && "__type" in error && (error.__type === "RivetError" || error.__type === "ActorError");
2595
2757
  }
2596
2758
  function encodeNativeCallbackError(error) {
2597
- const structuredError = isStructuredBridgeError(error) ? error : _chunkK5BA2LEOcjs.deconstructError.call(void 0, error, true);
2598
- const bridgeError = new Error(_chunkQAZLM4WTcjs.encodeBridgeRivetError.call(void 0, structuredError), {
2759
+ const structuredError = isStructuredBridgeError(error) ? error : _chunkX6HIFXNKcjs.deconstructError.call(void 0, error, true);
2760
+ const bridgeError = new Error(_chunk63WNTDRCcjs.encodeBridgeRivetError.call(void 0, structuredError), {
2599
2761
  cause: error instanceof Error ? error : void 0
2600
2762
  });
2601
2763
  return Object.assign(bridgeError, {
@@ -2625,9 +2787,9 @@ function actorAbortedError() {
2625
2787
  });
2626
2788
  }
2627
2789
  function isClosedTaskRegistrationError(error) {
2628
- const metadata = error instanceof _chunkQAZLM4WTcjs.RivetError ? error.metadata : void 0;
2790
+ const metadata = error instanceof _chunk63WNTDRCcjs.RivetError ? error.metadata : void 0;
2629
2791
  const metadataError = metadata && typeof metadata === "object" && "error" in metadata ? metadata.error : void 0;
2630
- return error instanceof _chunkQAZLM4WTcjs.RivetError && error.group === "core" && error.code === _chunkQAZLM4WTcjs.INTERNAL_ERROR_CODE && typeof metadataError === "string" && /actor task registration is (closed|not configured)/.test(metadataError);
2792
+ return error instanceof _chunk63WNTDRCcjs.RivetError && error.group === "core" && error.code === _chunk63WNTDRCcjs.INTERNAL_ERROR_CODE && typeof metadataError === "string" && /actor task registration is (closed|not configured)/.test(metadataError);
2631
2793
  }
2632
2794
  async function createCancellationTokenHandle(runtime, signal) {
2633
2795
  if (!signal) {
@@ -2650,7 +2812,7 @@ function decodeWorkflowCbor(data) {
2650
2812
  return null;
2651
2813
  }
2652
2814
  try {
2653
- return _chunkLIXXFXVRcjs.decodeCborCompat.call(void 0, new Uint8Array(data));
2815
+ return _chunkFEOG44WHcjs.decodeCborCompat.call(void 0, new Uint8Array(data));
2654
2816
  } catch (e3) {
2655
2817
  return null;
2656
2818
  }
@@ -2755,7 +2917,7 @@ function serializeWorkflowHistoryForJson(data) {
2755
2917
  if (data === null) {
2756
2918
  return null;
2757
2919
  }
2758
- const history = _chunkHTR4YLNTcjs.decodeWorkflowHistoryTransport.call(void 0, data);
2920
+ const history = _chunk55E7IR6Dcjs.decodeWorkflowHistoryTransport.call(void 0, data);
2759
2921
  return {
2760
2922
  nameRegistry: [...history.nameRegistry],
2761
2923
  entries: history.entries.map((entry) => ({
@@ -2833,44 +2995,6 @@ function decodeArgs(value) {
2833
2995
  const decoded = decodeValue(value);
2834
2996
  return Array.isArray(decoded) ? decoded : decoded === void 0 ? [] : [decoded];
2835
2997
  }
2836
- function createWriteThroughProxy(value, commit, beforeChange) {
2837
- if (!value || typeof value !== "object") {
2838
- return value;
2839
- }
2840
- const proxies = /* @__PURE__ */ new WeakMap();
2841
- const wrap = (target) => {
2842
- const cached = proxies.get(target);
2843
- if (cached) {
2844
- return cached;
2845
- }
2846
- const proxy = new Proxy(target, {
2847
- get(innerTarget, property, receiver) {
2848
- const result = Reflect.get(innerTarget, property, receiver);
2849
- return result && typeof result === "object" ? wrap(result) : result;
2850
- },
2851
- set(innerTarget, property, nextValue, receiver) {
2852
- beforeChange == null ? void 0 : beforeChange();
2853
- const updated = Reflect.set(
2854
- innerTarget,
2855
- property,
2856
- nextValue,
2857
- receiver
2858
- );
2859
- commit(value);
2860
- return updated;
2861
- },
2862
- deleteProperty(innerTarget, property) {
2863
- beforeChange == null ? void 0 : beforeChange();
2864
- const updated = Reflect.deleteProperty(innerTarget, property);
2865
- commit(value);
2866
- return updated;
2867
- }
2868
- });
2869
- proxies.set(target, proxy);
2870
- return proxy;
2871
- };
2872
- return wrap(value);
2873
- }
2874
2998
  function buildRequest(init) {
2875
2999
  const url = init.uri.startsWith("http") ? init.uri : new URL(init.uri, "http://127.0.0.1").toString();
2876
3000
  const body = init.body && init.body.length > 0 ? runtimeBytesToArrayBuffer(init.body) : void 0;
@@ -2906,7 +3030,7 @@ var NativeConnAdapter = class {
2906
3030
  this.#schemas = schemas;
2907
3031
  this.#ctx = ctx;
2908
3032
  this.#queueHibernationRemoval = queueHibernationRemoval;
2909
- this[_chunkWQ4HNA4Wcjs.CONN_STATE_MANAGER_SYMBOL] = {
3033
+ this[_chunkSRNOPUC6cjs.CONN_STATE_MANAGER_SYMBOL] = {
2910
3034
  stateEnabled: true,
2911
3035
  get state() {
2912
3036
  return thisConn.state;
@@ -2923,13 +3047,19 @@ var NativeConnAdapter = class {
2923
3047
  decodeValue(this.#runtime.connParams(this.#conn))
2924
3048
  );
2925
3049
  }
3050
+ [_chunkSRNOPUC6cjs.RAW_STATE_SYMBOL]() {
3051
+ return this.#readState();
3052
+ }
2926
3053
  get state() {
2927
3054
  const nextState = this.#readState();
2928
3055
  return createWriteThroughProxy(nextState, (nextValue) => {
2929
3056
  this.#writeState(nextValue, { writeNative: true });
3057
+ }, (newValue) => {
3058
+ _chunkFEOG44WHcjs.assertJsonCompatValue.call(void 0, newValue);
2930
3059
  });
2931
3060
  }
2932
3061
  set state(value) {
3062
+ _chunkFEOG44WHcjs.assertJsonCompatValue.call(void 0, value);
2933
3063
  this.#writeState(value, { writeNative: true });
2934
3064
  }
2935
3065
  initializeState(value) {
@@ -3219,7 +3349,7 @@ var NativeQueueAdapter = class {
3219
3349
  async nextBatch(options) {
3220
3350
  const completable = (options == null ? void 0 : options.completable) === true;
3221
3351
  if (this.#pendingCompletableMessageIds.size > 0) {
3222
- throw new (0, _chunkQAZLM4WTcjs.RivetError)(
3352
+ throw new (0, _chunk63WNTDRCcjs.RivetError)(
3223
3353
  "queue",
3224
3354
  "previous_message_not_completed",
3225
3355
  "Previous completable queue message is not completed. Call `message.complete(...)` before receiving the next message.",
@@ -3388,7 +3518,7 @@ var NativeQueueAdapter = class {
3388
3518
  }
3389
3519
  yield message;
3390
3520
  } catch (error) {
3391
- if (_chunkQAZLM4WTcjs.isRivetErrorLike.call(void 0, error) && error.group === "actor" && error.code === "aborted") {
3521
+ if (_chunk63WNTDRCcjs.isRivetErrorLike.call(void 0, error) && error.group === "actor" && error.code === "aborted") {
3392
3522
  return;
3393
3523
  }
3394
3524
  throw error;
@@ -3409,7 +3539,7 @@ var NativeQueueAdapter = class {
3409
3539
  ...message,
3410
3540
  complete: async (response) => {
3411
3541
  if (typeof message.complete !== "function") {
3412
- throw new (0, _chunkQAZLM4WTcjs.RivetError)(
3542
+ throw new (0, _chunk63WNTDRCcjs.RivetError)(
3413
3543
  "queue",
3414
3544
  "complete_not_configured",
3415
3545
  `Queue '${message.name}' does not support completion responses.`,
@@ -3421,7 +3551,7 @@ var NativeQueueAdapter = class {
3421
3551
  );
3422
3552
  }
3423
3553
  if (completed) {
3424
- throw new (0, _chunkQAZLM4WTcjs.RivetError)(
3554
+ throw new (0, _chunk63WNTDRCcjs.RivetError)(
3425
3555
  "queue",
3426
3556
  "already_completed",
3427
3557
  "Queue message was already completed.",
@@ -3753,6 +3883,70 @@ var TrackedWebSocketHandleAdapter = class {
3753
3883
  return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
3754
3884
  }
3755
3885
  };
3886
+ var NativeConnectionMap = (_class3 = class {
3887
+ #runtime;
3888
+ #ctx;
3889
+ #schemas;
3890
+ constructor(runtime, ctx, schemas) {;_class3.prototype.__init3.call(this);
3891
+ this.#runtime = runtime;
3892
+ this.#ctx = ctx;
3893
+ this.#schemas = schemas;
3894
+ }
3895
+ #connToAdapter(conn) {
3896
+ return new NativeConnAdapter(
3897
+ this.#runtime,
3898
+ conn,
3899
+ this.#schemas,
3900
+ this.#ctx,
3901
+ (connId) => callNativeSync(
3902
+ () => this.#runtime.actorQueueHibernationRemoval(
3903
+ this.#ctx,
3904
+ connId
3905
+ )
3906
+ )
3907
+ );
3908
+ }
3909
+ get size() {
3910
+ return callNativeSync(() => this.#runtime.actorConns(this.#ctx)).length;
3911
+ }
3912
+ get(key) {
3913
+ const conns = callNativeSync(() => this.#runtime.actorConns(this.#ctx));
3914
+ const conn = conns.find(
3915
+ (c) => this.#runtime.connId(c) === key
3916
+ );
3917
+ if (!conn) return void 0;
3918
+ return this.#connToAdapter(conn);
3919
+ }
3920
+ has(key) {
3921
+ const conns = callNativeSync(() => this.#runtime.actorConns(this.#ctx));
3922
+ return conns.some((c) => this.#runtime.connId(c) === key);
3923
+ }
3924
+ keys() {
3925
+ const conns = callNativeSync(() => this.#runtime.actorConns(this.#ctx));
3926
+ return conns.map((c) => this.#runtime.connId(c))[Symbol.iterator]();
3927
+ }
3928
+ values() {
3929
+ const conns = callNativeSync(() => this.#runtime.actorConns(this.#ctx));
3930
+ return conns.map((c) => this.#connToAdapter(c))[Symbol.iterator]();
3931
+ }
3932
+ entries() {
3933
+ const conns = callNativeSync(() => this.#runtime.actorConns(this.#ctx));
3934
+ return conns.map(
3935
+ (c) => [this.#runtime.connId(c), this.#connToAdapter(c)]
3936
+ )[Symbol.iterator]();
3937
+ }
3938
+ forEach(callback, thisArg) {
3939
+ const conns = callNativeSync(() => this.#runtime.actorConns(this.#ctx));
3940
+ for (const conn of conns) {
3941
+ const id = this.#runtime.connId(conn);
3942
+ callback.call(thisArg, this.#connToAdapter(conn), id, this);
3943
+ }
3944
+ }
3945
+ [Symbol.iterator]() {
3946
+ return this.entries();
3947
+ }
3948
+ __init3() {this[Symbol.toStringTag] = "NativeConnectionMap"}
3949
+ }, _class3);
3756
3950
  var ActorContextHandleAdapter = class {
3757
3951
  #runtime;
3758
3952
  #ctx;
@@ -3761,9 +3955,9 @@ var ActorContextHandleAdapter = class {
3761
3955
  #abortSignalCleanup;
3762
3956
  #client;
3763
3957
  #clientFactory;
3958
+ #connMap;
3764
3959
  #databaseProvider;
3765
3960
  #db;
3766
- #dbProxy;
3767
3961
  #dispatchCancelToken;
3768
3962
  #kv;
3769
3963
  #queue;
@@ -3786,7 +3980,7 @@ var ActorContextHandleAdapter = class {
3786
3980
  this.#databaseProvider = databaseProvider;
3787
3981
  }
3788
3982
  this.#request = request;
3789
- this[_chunkWQ4HNA4Wcjs.ACTOR_CONTEXT_INTERNAL_SYMBOL] = new NativeWorkflowRuntimeAdapter(
3983
+ this[_chunkSRNOPUC6cjs.ACTOR_CONTEXT_INTERNAL_SYMBOL] = new NativeWorkflowRuntimeAdapter(
3790
3984
  this
3791
3985
  );
3792
3986
  }
@@ -3806,30 +4000,22 @@ var ActorContextHandleAdapter = class {
3806
4000
  if (!this.#databaseProvider) {
3807
4001
  throw databaseNotConfiguredError();
3808
4002
  }
3809
- if (!this.#dbProxy) {
3810
- this.#dbProxy = new Proxy(
3811
- {},
3812
- {
3813
- get: (_target, property) => {
3814
- if (property === "then") {
3815
- return void 0;
3816
- }
3817
- return async (...args) => {
3818
- const client = await this.ensureDatabaseClient();
3819
- const value = Reflect.get(
3820
- client,
3821
- property
3822
- );
3823
- if (typeof value !== "function") {
3824
- return value;
3825
- }
3826
- return await value.apply(client, args);
3827
- };
3828
- }
3829
- }
3830
- );
4003
+ if (this.#db) {
4004
+ return this.#db;
3831
4005
  }
3832
- return this.#dbProxy;
4006
+ const runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);
4007
+ const cachedClient = runtimeState.databaseClient;
4008
+ if (cachedClient) {
4009
+ this.#db = cachedClient.client;
4010
+ return this.#db;
4011
+ }
4012
+ throw databaseClientNotReadyError();
4013
+ }
4014
+ [_chunkSRNOPUC6cjs.RAW_STATE_SYMBOL]() {
4015
+ if (!this.#stateEnabled) {
4016
+ throw stateNotEnabledError();
4017
+ }
4018
+ return this.#readState();
3833
4019
  }
3834
4020
  get state() {
3835
4021
  if (!this.#stateEnabled) {
@@ -3841,8 +4027,9 @@ var ActorContextHandleAdapter = class {
3841
4027
  (nextValue) => {
3842
4028
  this.#writeState(nextValue, { scheduleSave: true });
3843
4029
  },
3844
- () => {
4030
+ (newValue) => {
3845
4031
  this.#assertCanMutateState();
4032
+ _chunkFEOG44WHcjs.assertJsonCompatValue.call(void 0, newValue);
3846
4033
  }
3847
4034
  );
3848
4035
  }
@@ -3851,6 +4038,7 @@ var ActorContextHandleAdapter = class {
3851
4038
  throw stateNotEnabledError();
3852
4039
  }
3853
4040
  this.#assertCanMutateState();
4041
+ _chunkFEOG44WHcjs.assertJsonCompatValue.call(void 0, value);
3854
4042
  this.#writeState(value, { scheduleSave: true });
3855
4043
  }
3856
4044
  initializeState(value) {
@@ -3907,25 +4095,10 @@ var ActorContextHandleAdapter = class {
3907
4095
  return callNativeSync(() => this.#runtime.actorRegion(this.#ctx));
3908
4096
  }
3909
4097
  get conns() {
3910
- return new Map(
3911
- callNativeSync(() => this.#runtime.actorConns(this.#ctx)).map(
3912
- (conn) => [
3913
- this.#runtime.connId(conn),
3914
- new NativeConnAdapter(
3915
- this.#runtime,
3916
- conn,
3917
- this.#schemas,
3918
- this.#ctx,
3919
- (connId) => callNativeSync(
3920
- () => this.#runtime.actorQueueHibernationRemoval(
3921
- this.#ctx,
3922
- connId
3923
- )
3924
- )
3925
- )
3926
- ]
3927
- )
3928
- );
4098
+ if (!this.#connMap) {
4099
+ this.#connMap = new NativeConnectionMap(this.#runtime, this.#ctx, this.#schemas);
4100
+ }
4101
+ return this.#connMap;
3929
4102
  }
3930
4103
  get log() {
3931
4104
  return logger2();
@@ -4123,20 +4296,39 @@ var ActorContextHandleAdapter = class {
4123
4296
  });
4124
4297
  }
4125
4298
  keepAwake(promise) {
4126
- const trackedPromise = Promise.resolve(promise).catch((error) => {
4127
- logger2().warn({
4128
- msg: "keepAwake promise rejected",
4129
- error: _chunkK5BA2LEOcjs.stringifyError.call(void 0, error)
4130
- });
4131
- }).then(() => null);
4299
+ const startedAt = Date.now();
4300
+ logger2().debug({
4301
+ msg: "keepAwake registered",
4302
+ at: startedAt
4303
+ });
4304
+ const trackedPromise = Promise.resolve(promise).then(
4305
+ () => {
4306
+ logger2().debug({
4307
+ msg: "keepAwake promise resolved",
4308
+ durationMs: Date.now() - startedAt
4309
+ });
4310
+ },
4311
+ (error) => {
4312
+ logger2().warn({
4313
+ msg: "keepAwake promise rejected",
4314
+ durationMs: Date.now() - startedAt,
4315
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, error)
4316
+ });
4317
+ }
4318
+ ).then(() => null);
4132
4319
  try {
4133
4320
  callNativeSync(
4134
4321
  () => this.#runtime.actorKeepAwake(this.#ctx, trackedPromise)
4135
4322
  );
4136
4323
  } catch (error) {
4137
- if (!isClosedTaskRegistrationError(error)) {
4138
- throw error;
4324
+ if (isClosedTaskRegistrationError(error)) {
4325
+ logger2().warn({
4326
+ msg: "keepAwake registration dropped (teardown already started); promise will not delay grace",
4327
+ error: _chunkX6HIFXNKcjs.stringifyError.call(void 0, error)
4328
+ });
4329
+ return promise;
4139
4330
  }
4331
+ throw error;
4140
4332
  }
4141
4333
  return promise;
4142
4334
  }
@@ -4485,9 +4677,9 @@ function buildNativeFactory(runtime, registryConfig, definition) {
4485
4677
  const actionHandlers = Object.fromEntries(
4486
4678
  Object.entries(_nullishCoalesce(config.actions, () => ( {}))).map(([name, handler]) => [name, handler])
4487
4679
  );
4488
- const createClient = () => _chunkENK7C66Gcjs.createClientWithDriver.call(void 0,
4489
- new (0, _chunkENK7C66Gcjs.RemoteEngineControlClient)(
4490
- _chunkENK7C66Gcjs.convertRegistryConfigToClientConfig.call(void 0, registryConfig)
4680
+ const createClient = () => _chunkZGPX6KAHcjs.createClientWithDriver.call(void 0,
4681
+ new (0, _chunkZGPX6KAHcjs.RemoteEngineControlClient)(
4682
+ _chunkZGPX6KAHcjs.convertRegistryConfigToClientConfig.call(void 0, registryConfig)
4491
4683
  ),
4492
4684
  { encoding: "bare" }
4493
4685
  );
@@ -4497,7 +4689,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
4497
4689
  ), () => ( false));
4498
4690
  const getNativeWorkflowInspector = (ctx) => {
4499
4691
  var _a2;
4500
- return (_a2 = _chunkWQ4HNA4Wcjs.getRunInspectorConfig.call(void 0,
4692
+ return (_a2 = _chunkSRNOPUC6cjs.getRunInspectorConfig.call(void 0,
4501
4693
  config.run,
4502
4694
  callNativeSync(() => runtime.actorId(ctx))
4503
4695
  )) == null ? void 0 : _a2.workflow;
@@ -4550,7 +4742,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
4550
4742
  }
4551
4743
  });
4552
4744
  const errorResponse = (error, status) => {
4553
- const rivetError = _chunkQAZLM4WTcjs.toRivetError.call(void 0, error);
4745
+ const rivetError = _chunk63WNTDRCcjs.toRivetError.call(void 0, error);
4554
4746
  return jsonResponse(
4555
4747
  {
4556
4748
  group: rivetError.group,
@@ -4660,6 +4852,10 @@ function buildNativeFactory(runtime, registryConfig, definition) {
4660
4852
  isWorkflowEnabled: getNativeWorkflowInspector(ctx) !== void 0
4661
4853
  });
4662
4854
  } catch (error) {
4855
+ logger2().error({
4856
+ msg: "error replaying workflow history",
4857
+ error
4858
+ });
4663
4859
  return errorResponse(error);
4664
4860
  }
4665
4861
  }
@@ -4791,7 +4987,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
4791
4987
  const action = actionHandlers[actionName];
4792
4988
  if (!action) {
4793
4989
  return errorResponse(
4794
- new (0, _chunkQAZLM4WTcjs.RivetError)(
4990
+ new (0, _chunk63WNTDRCcjs.RivetError)(
4795
4991
  "action",
4796
4992
  "action_not_found",
4797
4993
  `Action ${actionName} not found`
@@ -4811,6 +5007,10 @@ function buildNativeFactory(runtime, registryConfig, definition) {
4811
5007
  );
4812
5008
  return jsonResponse({ output });
4813
5009
  } catch (error) {
5010
+ logger2().error({
5011
+ msg: "Error handling inspector action request",
5012
+ error
5013
+ });
4814
5014
  return errorResponse(error);
4815
5015
  }
4816
5016
  }
@@ -4824,6 +5024,10 @@ function buildNativeFactory(runtime, registryConfig, definition) {
4824
5024
  { status: 404 }
4825
5025
  );
4826
5026
  } catch (error) {
5027
+ logger2().error({
5028
+ msg: "Error handling inspector request",
5029
+ error
5030
+ });
4827
5031
  return errorResponse(error);
4828
5032
  } finally {
4829
5033
  await actorCtx.dispose();
@@ -5128,7 +5332,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
5128
5332
  );
5129
5333
  }
5130
5334
  if (!result) {
5131
- throw _chunkQAZLM4WTcjs.forbiddenError.call(void 0, );
5335
+ throw _chunk63WNTDRCcjs.forbiddenError.call(void 0, );
5132
5336
  }
5133
5337
  } finally {
5134
5338
  await actorCtx.dispose();
@@ -5174,7 +5378,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
5174
5378
  new Response(null, { status: 404 })
5175
5379
  );
5176
5380
  }
5177
- const rawConnParams = jsRequest.headers.get(_chunkENK7C66Gcjs.HEADER_CONN_PARAMS);
5381
+ const rawConnParams = jsRequest.headers.get(_chunkZGPX6KAHcjs.HEADER_CONN_PARAMS);
5178
5382
  let requestCtx;
5179
5383
  let conn;
5180
5384
  try {
@@ -5239,7 +5443,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
5239
5443
  }
5240
5444
  ) : void 0,
5241
5445
  run: (() => {
5242
- const run = _chunkWQ4HNA4Wcjs.getRunFunction.call(void 0, config.run);
5446
+ const run = _chunkSRNOPUC6cjs.getRunFunction.call(void 0, config.run);
5243
5447
  if (!run) {
5244
5448
  return void 0;
5245
5449
  }
@@ -5258,7 +5462,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
5258
5462
  }
5259
5463
  );
5260
5464
  })(),
5261
- getWorkflowHistory: _chunkWQ4HNA4Wcjs.getRunInspectorConfig.call(void 0, config.run) !== void 0 ? wrapNativeCallback(
5465
+ getWorkflowHistory: _chunkSRNOPUC6cjs.getRunInspectorConfig.call(void 0, config.run) !== void 0 ? wrapNativeCallback(
5262
5466
  async (error, payload) => {
5263
5467
  var _a2;
5264
5468
  const { ctx } = unwrapTsfnPayload(error, payload);
@@ -5266,7 +5470,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
5266
5470
  return history == null ? void 0 : encodeValue(history);
5267
5471
  }
5268
5472
  ) : void 0,
5269
- replayWorkflow: _chunkWQ4HNA4Wcjs.getRunInspectorConfig.call(void 0, config.run) !== void 0 ? wrapNativeCallback(
5473
+ replayWorkflow: _chunkSRNOPUC6cjs.getRunInspectorConfig.call(void 0, config.run) !== void 0 ? wrapNativeCallback(
5270
5474
  async (error, payload) => {
5271
5475
  const { ctx, entryId } = unwrapTsfnPayload(
5272
5476
  error,
@@ -5341,7 +5545,7 @@ function buildNativeFactory(runtime, registryConfig, definition) {
5341
5545
  name
5342
5546
  );
5343
5547
  if (canPublish && !await canPublish(actorCtx)) {
5344
- throw _chunkQAZLM4WTcjs.forbiddenError.call(void 0, );
5548
+ throw _chunk63WNTDRCcjs.forbiddenError.call(void 0, );
5345
5549
  }
5346
5550
  const decodedBody = decodeValue(body);
5347
5551
  if (wait) {
@@ -5401,7 +5605,7 @@ async function buildServeConfig(config) {
5401
5605
  poolName: config.envoy.poolName,
5402
5606
  handleInspectorHttpInRuntime: true,
5403
5607
  serverlessBasePath: config.serverless.basePath,
5404
- serverlessPackageVersion: _chunkK5BA2LEOcjs.VERSION,
5608
+ serverlessPackageVersion: _chunkX6HIFXNKcjs.VERSION,
5405
5609
  serverlessClientEndpoint: config.publicEndpoint,
5406
5610
  serverlessClientNamespace: config.publicNamespace,
5407
5611
  serverlessClientToken: config.publicToken,
@@ -5413,13 +5617,13 @@ async function buildServeConfig(config) {
5413
5617
  serveConfig.engineBinaryPath = getEnginePath();
5414
5618
  }
5415
5619
  if ((_a = config.test) == null ? void 0 : _a.enabled) {
5416
- serveConfig.inspectorTestToken = _nullishCoalesce(_chunkK5BA2LEOcjs.getEnvUniversal.call(void 0, "_RIVET_TEST_INSPECTOR_TOKEN"), () => ( "token"));
5620
+ serveConfig.inspectorTestToken = _nullishCoalesce(_chunkX6HIFXNKcjs.getEnvUniversal.call(void 0, "_RIVET_TEST_INSPECTOR_TOKEN"), () => ( "token"));
5417
5621
  }
5418
5622
  return serveConfig;
5419
5623
  }
5420
5624
  async function buildRegistryWithRuntime(config, runtime) {
5421
5625
  var _a;
5422
- if (((_a = config.test) == null ? void 0 : _a.enabled) && _chunkK5BA2LEOcjs.getEnvUniversal.call(void 0, "_RIVET_TEST_INSPECTOR_TOKEN") === void 0) {
5626
+ if (((_a = config.test) == null ? void 0 : _a.enabled) && _chunkX6HIFXNKcjs.getEnvUniversal.call(void 0, "_RIVET_TEST_INSPECTOR_TOKEN") === void 0) {
5423
5627
  trySetProcessEnv("_RIVET_TEST_INSPECTOR_TOKEN", "token");
5424
5628
  }
5425
5629
  const registry = runtime.createRegistry();
@@ -5438,6 +5642,10 @@ async function buildRegistryWithRuntime(config, runtime) {
5438
5642
  }
5439
5643
  async function buildConfiguredRegistry(config) {
5440
5644
  const runtime = await loadConfiguredRuntime(config);
5645
+ if (runtime.kind === "napi") {
5646
+ const { startProcessMetrics } = await Promise.resolve().then(() => _interopRequireWildcard(require("./process-metrics-TYAGKCEJ.cjs")));
5647
+ startProcessMetrics();
5648
+ }
5441
5649
  return buildRegistryWithRuntime(
5442
5650
  normalizeRuntimeConfig(config, runtime),
5443
5651
  runtime
@@ -5461,7 +5669,6 @@ function finishShutdownSignal(signal) {
5461
5669
  }
5462
5670
  var Registry = class {
5463
5671
  #config;
5464
-
5465
5672
  get config() {
5466
5673
  return this.#config;
5467
5674
  }
@@ -5478,11 +5685,6 @@ var Registry = class {
5478
5685
  #signalHandlers = {};
5479
5686
  constructor(config) {
5480
5687
  this.#config = config;
5481
- this.routes = {
5482
- health: () => this.#healthRoute(),
5483
- metadata: () => this.#metadataRoute(),
5484
- prometheusMetrics: (request) => this.#prometheusMetricsRoute(request)
5485
- };
5486
5688
  }
5487
5689
  #ensureServerlessPoolConfigured(config) {
5488
5690
  if (!config.configurePool) return void 0;
@@ -5676,88 +5878,46 @@ var Registry = class {
5676
5878
  };
5677
5879
  }
5678
5880
  /**
5679
- * Returns a health response suitable for mounting in a user-owned router.
5680
- */
5681
- async #healthRoute() {
5682
- const configured = await this.#activeConfiguredRegistry();
5683
- if (!configured) {
5684
- return jsonRouteResponse(503, {
5685
- status: "not_started",
5686
- runtime: "rivetkit",
5687
- version: _chunkK5BA2LEOcjs.VERSION
5688
- });
5689
- }
5690
- const { runtime, registry } = configured;
5691
- if (!runtime.registryHealth) {
5692
- return jsonRouteResponse(501, {
5693
- status: "unsupported",
5694
- runtime: "rivetkit",
5695
- version: _chunkK5BA2LEOcjs.VERSION
5696
- });
5697
- }
5698
- const response = await runtime.registryHealth(registry);
5699
- return new Response(new Uint8Array(response.body), {
5700
- status: response.status,
5701
- headers: response.headers
5702
- });
5703
- }
5704
- /**
5705
- * Returns serverless metadata suitable for mounting in a user-owned router.
5706
- */
5707
- async #metadataRoute() {
5708
- const configured = await this.#activeConfiguredRegistry();
5709
- if (!configured) {
5710
- return new Response("registry not started\n", {
5711
- status: 503,
5712
- headers: { "content-type": "text/plain; charset=utf-8" }
5713
- });
5714
- }
5715
- const { runtime, registry } = configured;
5716
- if (!runtime.registryMetadata) {
5717
- return new Response("metadata is not supported by this runtime\n", {
5718
- status: 501,
5719
- headers: { "content-type": "text/plain; charset=utf-8" }
5720
- });
5721
- }
5722
- const response = await runtime.registryMetadata(registry);
5723
- return new Response(new Uint8Array(response.body), {
5724
- status: response.status,
5725
- headers: response.headers
5726
- });
5727
- }
5728
- /**
5729
- * Returns a Prometheus metrics response suitable for mounting in a user-owned router.
5881
+ * Starts an HTTP server that dispatches every request through the
5882
+ * serverless handler. Uses `crossPlatformServe` to pick the right
5883
+ * runtime (Node, Bun, Deno).
5884
+ *
5885
+ * @param opts.port Port to listen on. Defaults to 3000.
5886
+ * @param opts.publicDir If set, serves static files from this directory
5887
+ * before falling through to the registry handler.
5888
+ *
5889
+ * @example
5890
+ * ```ts
5891
+ * await registry.listen();
5892
+ * await registry.listen({ port: 8080, publicDir: "./public" });
5893
+ * ```
5730
5894
  */
5731
- async #prometheusMetricsRoute(_request) {
5732
- const configured = await this.#activeConfiguredRegistry();
5733
- if (!configured) {
5734
- return new Response("registry not started\n", {
5735
- status: 503,
5736
- headers: { "content-type": "text/plain; charset=utf-8" }
5737
- });
5738
- }
5739
- const { runtime, registry } = configured;
5740
- if (!runtime.registryMetrics) {
5741
- return new Response("metrics are not supported by this runtime\n", {
5742
- status: 501,
5743
- headers: { "content-type": "text/plain; charset=utf-8" }
5744
- });
5895
+ async listen(opts = {}) {
5896
+ const port = _nullishCoalesce(opts.port, () => ( 3e3));
5897
+ const config = this.parseConfig();
5898
+ const runtime = _chunkX6HIFXNKcjs.detectRuntime.call(void 0, );
5899
+ const app = new (0, _hono.Hono)();
5900
+ if (opts.publicDir) {
5901
+ const serveStatic = await loadRuntimeServeStatic(runtime);
5902
+ app.use("*", serveStatic({ root: opts.publicDir }));
5745
5903
  }
5746
- const response = await runtime.registryMetrics(registry);
5747
- return new Response(new Uint8Array(response.body), {
5748
- status: response.status,
5749
- headers: response.headers
5750
- });
5904
+ app.all("*", (c) => this.handler(c.req.raw));
5905
+ await crossPlatformServe(config, port, app, runtime);
5751
5906
  }
5752
- async #activeConfiguredRegistry() {
5907
+ async diagnostics() {
5908
+ var _a;
5753
5909
  const candidates = [
5754
5910
  this.#runtimeServerlessPromise,
5755
5911
  this.#runtimeServeConfiguredPromise
5756
5912
  ].filter(
5757
5913
  (candidate) => candidate !== void 0
5758
5914
  );
5759
- if (candidates.length === 0) return void 0;
5760
- return await candidates[0];
5915
+ for (const candidate of candidates) {
5916
+ const { runtime, registry } = await candidate;
5917
+ const diagnostics = await ((_a = runtime.registryDiagnostics) == null ? void 0 : _a.call(runtime, registry));
5918
+ if (diagnostics) return diagnostics;
5919
+ }
5920
+ return { mode: "not_started", envoyActiveActorCount: null };
5761
5921
  }
5762
5922
  /**
5763
5923
  * Starts an actor envoy for standalone server deployments.
@@ -5768,8 +5928,8 @@ var Registry = class {
5768
5928
  this.#runtimeServeConfiguredPromise = configuredRegistryPromise;
5769
5929
  this.#runtimeServePromise = configuredRegistryPromise.then(async ({ runtime, registry, serveConfig }) => {
5770
5930
  await runtime.serveRegistry(registry, serveConfig);
5771
- }).catch((err) => {
5772
- logger2().warn({ err }, "runtime registry serve errored");
5931
+ }).catch((error) => {
5932
+ logger2().warn({ error }, "runtime registry serve errored");
5773
5933
  });
5774
5934
  this.#installSignalHandlers(config, configuredRegistryPromise);
5775
5935
  }
@@ -5807,8 +5967,8 @@ var Registry = class {
5807
5967
  signal,
5808
5968
  config,
5809
5969
  configuredRegistryPromise
5810
- ).catch((err) => {
5811
- logger2().warn({ err }, "shutdown error");
5970
+ ).catch((error) => {
5971
+ logger2().warn({ error }, "shutdown error");
5812
5972
  });
5813
5973
  }
5814
5974
  async #runShutdown(signal, config, configuredRegistryPromise) {
@@ -5820,9 +5980,9 @@ var Registry = class {
5820
5980
  try {
5821
5981
  const { runtime, registry } = await configuredRegistryPromise;
5822
5982
  await runtime.shutdownRegistry(registry);
5823
- } catch (err) {
5983
+ } catch (error) {
5824
5984
  logger2().warn(
5825
- { err },
5985
+ { error },
5826
5986
  "runtime registry shutdown errored (mode A)"
5827
5987
  );
5828
5988
  }
@@ -5837,7 +5997,7 @@ var Registry = class {
5837
5997
  await runtime.shutdownRegistry(registry);
5838
5998
  } catch (err) {
5839
5999
  logger2().warn(
5840
- { err },
6000
+ { error: err },
5841
6001
  "runtime registry shutdown errored (mode B)"
5842
6002
  );
5843
6003
  }
@@ -5911,7 +6071,7 @@ var Registry = class {
5911
6071
  };
5912
6072
  console.log();
5913
6073
  console.log(
5914
- ` RivetKit ${_chunkK5BA2LEOcjs.VERSION} (Engine - ${kind === "serverless" ? "Serverless" : "Serverful"})`
6074
+ ` RivetKit ${_chunkX6HIFXNKcjs.VERSION} (Engine - ${kind === "serverless" ? "Serverless" : "Serverful"})`
5915
6075
  );
5916
6076
  if (config.namespace !== "default") {
5917
6077
  logLine("Namespace", config.namespace);
@@ -5939,12 +6099,6 @@ function isServerlessMetadataRequest(request, basePath) {
5939
6099
  const normalizedBase = basePath === "/" ? "" : `/${basePath.replace(/^\/+|\/+$/g, "")}`;
5940
6100
  return parsed.pathname === `${normalizedBase}/metadata`;
5941
6101
  }
5942
- function jsonRouteResponse(status, body) {
5943
- return new Response(JSON.stringify(body), {
5944
- status,
5945
- headers: { "content-type": "application/json" }
5946
- });
5947
- }
5948
6102
  function setup(input) {
5949
6103
  return new Registry(input);
5950
6104
  }
@@ -5979,5 +6133,5 @@ function setup(input) {
5979
6133
 
5980
6134
 
5981
6135
 
5982
- exports.ALLOWED_PUBLIC_HEADERS = _chunkENK7C66Gcjs.ALLOWED_PUBLIC_HEADERS; exports.ActorDefinition = ActorDefinition; exports.ActorError = _chunkQAZLM4WTcjs.RivetError; exports.ActorsSchema = ActorsSchema; exports.DocConfigurePoolSchema = DocConfigurePoolSchema; exports.DocEnvoyConfigSchema = DocEnvoyConfigSchema; exports.DocRegistryConfigSchema = DocRegistryConfigSchema; exports.DocServerlessConfigSchema = DocServerlessConfigSchema; exports.DocSqliteConfigSchema = DocSqliteConfigSchema; exports.InlineWebSocketAdapter = InlineWebSocketAdapter; exports.Registry = Registry; exports.RegistryConfigSchema = RegistryConfigSchema; exports.RivetError = _chunkQAZLM4WTcjs.RivetError; exports.RuntimeKindSchema = RuntimeKindSchema; exports.SqliteBackendSchema = SqliteBackendSchema; exports.SqliteConfigSchema = SqliteConfigSchema; exports.TestConfigSchema = TestConfigSchema; exports.UserError = _chunkQAZLM4WTcjs.UserError; exports.WasmRuntimeConfigSchema = WasmRuntimeConfigSchema; exports.actor = actor; exports.buildActorNames = buildActorNames; exports.createClientWithDriver = _chunkENK7C66Gcjs.createClientWithDriver; exports.event = event; exports.isStaticActorDefinition = isStaticActorDefinition; exports.isStaticActorInstance = isStaticActorInstance; exports.lookupInRegistry = lookupInRegistry; exports.noopNext = _chunkK5BA2LEOcjs.noopNext; exports.queue = queue; exports.setup = setup; exports.toUint8Array = _chunkK5BA2LEOcjs.toUint8Array;
6136
+ exports.ALLOWED_PUBLIC_HEADERS = _chunkZGPX6KAHcjs.ALLOWED_PUBLIC_HEADERS; exports.ActorDefinition = ActorDefinition; exports.ActorError = _chunk63WNTDRCcjs.RivetError; exports.ActorsSchema = ActorsSchema; exports.DocConfigurePoolSchema = DocConfigurePoolSchema; exports.DocEnvoyConfigSchema = DocEnvoyConfigSchema; exports.DocRegistryConfigSchema = DocRegistryConfigSchema; exports.DocServerlessConfigSchema = DocServerlessConfigSchema; exports.DocSqliteConfigSchema = DocSqliteConfigSchema; exports.InlineWebSocketAdapter = InlineWebSocketAdapter; exports.Registry = Registry; exports.RegistryConfigSchema = RegistryConfigSchema; exports.RivetError = _chunk63WNTDRCcjs.RivetError; exports.RuntimeKindSchema = RuntimeKindSchema; exports.SqliteBackendSchema = SqliteBackendSchema; exports.SqliteConfigSchema = SqliteConfigSchema; exports.TestConfigSchema = TestConfigSchema; exports.UserError = _chunk63WNTDRCcjs.UserError; exports.WasmRuntimeConfigSchema = WasmRuntimeConfigSchema; exports.actor = actor; exports.buildActorNames = buildActorNames; exports.createClientWithDriver = _chunkZGPX6KAHcjs.createClientWithDriver; exports.event = event; exports.isStaticActorDefinition = isStaticActorDefinition; exports.isStaticActorInstance = isStaticActorInstance; exports.lookupInRegistry = lookupInRegistry; exports.noopNext = _chunkX6HIFXNKcjs.noopNext; exports.queue = queue; exports.setup = setup; exports.toUint8Array = _chunkX6HIFXNKcjs.toUint8Array;
5983
6137
  //# sourceMappingURL=mod.cjs.map