rivetkit 2.0.3 → 2.0.5

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 (237) hide show
  1. package/README.md +11 -0
  2. package/dist/schemas/actor-persist/v1.ts +21 -24
  3. package/dist/schemas/client-protocol/v1.ts +6 -0
  4. package/dist/tsup/actor/errors.cjs +10 -2
  5. package/dist/tsup/actor/errors.cjs.map +1 -1
  6. package/dist/tsup/actor/errors.d.cts +17 -4
  7. package/dist/tsup/actor/errors.d.ts +17 -4
  8. package/dist/tsup/actor/errors.js +11 -3
  9. package/dist/tsup/{chunk-4NSUQZ2H.js → chunk-2MD57QF4.js} +119 -115
  10. package/dist/tsup/chunk-2MD57QF4.js.map +1 -0
  11. package/dist/tsup/{chunk-GIR3AFFI.cjs → chunk-5QGQK44L.cjs} +103 -44
  12. package/dist/tsup/chunk-5QGQK44L.cjs.map +1 -0
  13. package/dist/tsup/chunk-5YTI25C3.cjs +250 -0
  14. package/dist/tsup/chunk-5YTI25C3.cjs.map +1 -0
  15. package/dist/tsup/chunk-B2QGJGZQ.js +338 -0
  16. package/dist/tsup/chunk-B2QGJGZQ.js.map +1 -0
  17. package/dist/tsup/{chunk-3H7O2A7I.js → chunk-CFFKMUYH.js} +61 -22
  18. package/dist/tsup/chunk-CFFKMUYH.js.map +1 -0
  19. package/dist/tsup/{chunk-FLMTTN27.js → chunk-CKA54YQN.js} +15 -8
  20. package/dist/tsup/chunk-CKA54YQN.js.map +1 -0
  21. package/dist/tsup/chunk-D7NWUCRK.cjs +20 -0
  22. package/dist/tsup/chunk-D7NWUCRK.cjs.map +1 -0
  23. package/dist/tsup/{chunk-FCCPJNMA.cjs → chunk-FGFT4FVX.cjs} +12 -27
  24. package/dist/tsup/chunk-FGFT4FVX.cjs.map +1 -0
  25. package/dist/tsup/chunk-I5VTWPHW.js +20 -0
  26. package/dist/tsup/chunk-I5VTWPHW.js.map +1 -0
  27. package/dist/tsup/{chunk-6WKQDDUD.cjs → chunk-IRMBWX36.cjs} +146 -142
  28. package/dist/tsup/chunk-IRMBWX36.cjs.map +1 -0
  29. package/dist/tsup/chunk-L7QRXNWP.js +6562 -0
  30. package/dist/tsup/chunk-L7QRXNWP.js.map +1 -0
  31. package/dist/tsup/{chunk-R2OPSKIV.cjs → chunk-LZIBTLEY.cjs} +20 -13
  32. package/dist/tsup/chunk-LZIBTLEY.cjs.map +1 -0
  33. package/dist/tsup/chunk-MRZS2J4X.cjs +6562 -0
  34. package/dist/tsup/chunk-MRZS2J4X.cjs.map +1 -0
  35. package/dist/tsup/{chunk-PO4VLDWA.js → chunk-PG3K2LI7.js} +3 -5
  36. package/dist/tsup/chunk-PG3K2LI7.js.map +1 -0
  37. package/dist/tsup/{chunk-TZJKSBUQ.cjs → chunk-PHSQJ6QI.cjs} +3 -5
  38. package/dist/tsup/chunk-PHSQJ6QI.cjs.map +1 -0
  39. package/dist/tsup/chunk-RM2SVURR.cjs +338 -0
  40. package/dist/tsup/chunk-RM2SVURR.cjs.map +1 -0
  41. package/dist/tsup/{chunk-OGAPU3UG.cjs → chunk-WADSS5X4.cjs} +66 -27
  42. package/dist/tsup/chunk-WADSS5X4.cjs.map +1 -0
  43. package/dist/tsup/chunk-WNGOBAA7.js +250 -0
  44. package/dist/tsup/chunk-WNGOBAA7.js.map +1 -0
  45. package/dist/tsup/{chunk-INGJP237.js → chunk-YPZFLUO6.js} +103 -44
  46. package/dist/tsup/chunk-YPZFLUO6.js.map +1 -0
  47. package/dist/tsup/{chunk-6PDXBYI5.js → chunk-YW6Y6VNE.js} +8 -23
  48. package/dist/tsup/chunk-YW6Y6VNE.js.map +1 -0
  49. package/dist/tsup/client/mod.cjs +10 -10
  50. package/dist/tsup/client/mod.d.cts +7 -13
  51. package/dist/tsup/client/mod.d.ts +7 -13
  52. package/dist/tsup/client/mod.js +9 -9
  53. package/dist/tsup/common/log.cjs +12 -4
  54. package/dist/tsup/common/log.cjs.map +1 -1
  55. package/dist/tsup/common/log.d.cts +23 -17
  56. package/dist/tsup/common/log.d.ts +23 -17
  57. package/dist/tsup/common/log.js +15 -7
  58. package/dist/tsup/common/websocket.cjs +5 -5
  59. package/dist/tsup/common/websocket.js +4 -4
  60. package/dist/tsup/{common-CpqORuCq.d.cts → common-CXCe7s6i.d.cts} +2 -2
  61. package/dist/tsup/{common-CpqORuCq.d.ts → common-CXCe7s6i.d.ts} +2 -2
  62. package/dist/tsup/{connection-BwUMoe6n.d.ts → connection-BvE-Oq7t.d.ts} +215 -234
  63. package/dist/tsup/{connection-BR_Ve4ku.d.cts → connection-DTzmWwU5.d.cts} +215 -234
  64. package/dist/tsup/driver-helpers/mod.cjs +6 -9
  65. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  66. package/dist/tsup/driver-helpers/mod.d.cts +5 -6
  67. package/dist/tsup/driver-helpers/mod.d.ts +5 -6
  68. package/dist/tsup/driver-helpers/mod.js +6 -9
  69. package/dist/tsup/driver-test-suite/mod.cjs +615 -1357
  70. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  71. package/dist/tsup/driver-test-suite/mod.d.cts +12 -6
  72. package/dist/tsup/driver-test-suite/mod.d.ts +12 -6
  73. package/dist/tsup/driver-test-suite/mod.js +1334 -2076
  74. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  75. package/dist/tsup/inspector/mod.cjs +6 -8
  76. package/dist/tsup/inspector/mod.cjs.map +1 -1
  77. package/dist/tsup/inspector/mod.d.cts +3 -3
  78. package/dist/tsup/inspector/mod.d.ts +3 -3
  79. package/dist/tsup/inspector/mod.js +8 -10
  80. package/dist/tsup/mod.cjs +9 -15
  81. package/dist/tsup/mod.cjs.map +1 -1
  82. package/dist/tsup/mod.d.cts +47 -42
  83. package/dist/tsup/mod.d.ts +47 -42
  84. package/dist/tsup/mod.js +10 -16
  85. package/dist/tsup/{router-endpoints-DAbqVFx2.d.ts → router-endpoints-CctffZNL.d.cts} +2 -3
  86. package/dist/tsup/{router-endpoints-AYkXG8Tl.d.cts → router-endpoints-DFm1BglJ.d.ts} +2 -3
  87. package/dist/tsup/test/mod.cjs +10 -14
  88. package/dist/tsup/test/mod.cjs.map +1 -1
  89. package/dist/tsup/test/mod.d.cts +4 -5
  90. package/dist/tsup/test/mod.d.ts +4 -5
  91. package/dist/tsup/test/mod.js +9 -13
  92. package/dist/tsup/{utils-CT0cv4jd.d.ts → utils-fwx3o3K9.d.cts} +1 -0
  93. package/dist/tsup/{utils-CT0cv4jd.d.cts → utils-fwx3o3K9.d.ts} +1 -0
  94. package/dist/tsup/utils.cjs +5 -3
  95. package/dist/tsup/utils.cjs.map +1 -1
  96. package/dist/tsup/utils.d.cts +19 -2
  97. package/dist/tsup/utils.d.ts +19 -2
  98. package/dist/tsup/utils.js +4 -2
  99. package/package.json +6 -6
  100. package/src/actor/action.ts +1 -5
  101. package/src/actor/config.ts +27 -295
  102. package/src/actor/connection.ts +9 -12
  103. package/src/actor/context.ts +1 -4
  104. package/src/actor/definition.ts +7 -11
  105. package/src/actor/errors.ts +98 -36
  106. package/src/actor/generic-conn-driver.ts +28 -16
  107. package/src/actor/instance.ts +177 -133
  108. package/src/actor/log.ts +4 -13
  109. package/src/actor/mod.ts +0 -5
  110. package/src/actor/protocol/old.ts +42 -26
  111. package/src/actor/protocol/serde.ts +1 -1
  112. package/src/actor/router-endpoints.ts +47 -39
  113. package/src/actor/router.ts +22 -19
  114. package/src/actor/unstable-react.ts +1 -1
  115. package/src/actor/utils.ts +6 -2
  116. package/src/client/actor-common.ts +1 -1
  117. package/src/client/actor-conn.ts +152 -91
  118. package/src/client/actor-handle.ts +85 -25
  119. package/src/client/actor-query.ts +65 -0
  120. package/src/client/client.ts +29 -98
  121. package/src/client/config.ts +44 -0
  122. package/src/client/errors.ts +1 -0
  123. package/src/client/log.ts +2 -4
  124. package/src/client/mod.ts +16 -12
  125. package/src/client/raw-utils.ts +82 -25
  126. package/src/client/utils.ts +5 -3
  127. package/src/common/fake-event-source.ts +10 -9
  128. package/src/common/inline-websocket-adapter2.ts +39 -30
  129. package/src/common/log.ts +176 -101
  130. package/src/common/logfmt.ts +21 -30
  131. package/src/common/router.ts +12 -19
  132. package/src/common/utils.ts +27 -13
  133. package/src/common/websocket.ts +0 -1
  134. package/src/driver-helpers/mod.ts +1 -1
  135. package/src/driver-test-suite/log.ts +1 -3
  136. package/src/driver-test-suite/mod.ts +87 -61
  137. package/src/driver-test-suite/test-inline-client-driver.ts +441 -255
  138. package/src/driver-test-suite/tests/actor-error-handling.ts +4 -12
  139. package/src/driver-test-suite/tests/actor-handle.ts +33 -0
  140. package/src/driver-test-suite/tests/actor-inspector.ts +2 -1
  141. package/src/driver-test-suite/tests/manager-driver.ts +5 -3
  142. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -226
  143. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -392
  144. package/src/driver-test-suite/tests/request-access.ts +112 -126
  145. package/src/driver-test-suite/utils.ts +10 -6
  146. package/src/drivers/default.ts +7 -4
  147. package/src/drivers/engine/actor-driver.ts +22 -13
  148. package/src/drivers/engine/config.ts +2 -10
  149. package/src/drivers/engine/kv.ts +1 -1
  150. package/src/drivers/engine/log.ts +1 -3
  151. package/src/drivers/engine/mod.ts +2 -3
  152. package/src/drivers/file-system/actor.ts +1 -1
  153. package/src/drivers/file-system/global-state.ts +36 -21
  154. package/src/drivers/file-system/log.ts +1 -3
  155. package/src/drivers/file-system/manager.ts +33 -15
  156. package/src/inspector/config.ts +9 -4
  157. package/src/inspector/log.ts +1 -1
  158. package/src/inspector/manager.ts +2 -2
  159. package/src/inspector/utils.ts +1 -1
  160. package/src/manager/driver.ts +10 -2
  161. package/src/manager/hono-websocket-adapter.ts +21 -12
  162. package/src/manager/log.ts +2 -4
  163. package/src/manager/mod.ts +1 -1
  164. package/src/manager/router.ts +378 -1390
  165. package/src/manager-api/routes/actors-create.ts +16 -0
  166. package/src/manager-api/routes/actors-delete.ts +4 -0
  167. package/src/manager-api/routes/actors-get-by-id.ts +7 -0
  168. package/src/manager-api/routes/actors-get-or-create-by-id.ts +29 -0
  169. package/src/manager-api/routes/actors-get.ts +7 -0
  170. package/src/manager-api/routes/common.ts +18 -0
  171. package/src/mod.ts +0 -2
  172. package/src/registry/config.ts +1 -1
  173. package/src/registry/log.ts +2 -4
  174. package/src/registry/mod.ts +63 -34
  175. package/src/registry/run-config.ts +39 -26
  176. package/src/registry/serve.ts +4 -5
  177. package/src/remote-manager-driver/actor-http-client.ts +74 -0
  178. package/src/remote-manager-driver/actor-websocket-client.ts +64 -0
  179. package/src/remote-manager-driver/api-endpoints.ts +79 -0
  180. package/src/remote-manager-driver/api-utils.ts +46 -0
  181. package/src/remote-manager-driver/log.ts +5 -0
  182. package/src/remote-manager-driver/mod.ts +275 -0
  183. package/src/{drivers/engine → remote-manager-driver}/ws-proxy.ts +24 -14
  184. package/src/serde.ts +8 -2
  185. package/src/test/log.ts +1 -3
  186. package/src/test/mod.ts +17 -16
  187. package/src/utils.ts +53 -0
  188. package/dist/tsup/chunk-2CRLFV6Z.cjs +0 -202
  189. package/dist/tsup/chunk-2CRLFV6Z.cjs.map +0 -1
  190. package/dist/tsup/chunk-3H7O2A7I.js.map +0 -1
  191. package/dist/tsup/chunk-42I3OZ3Q.js +0 -15
  192. package/dist/tsup/chunk-42I3OZ3Q.js.map +0 -1
  193. package/dist/tsup/chunk-4NSUQZ2H.js.map +0 -1
  194. package/dist/tsup/chunk-6PDXBYI5.js.map +0 -1
  195. package/dist/tsup/chunk-6WKQDDUD.cjs.map +0 -1
  196. package/dist/tsup/chunk-CTBOSFUH.cjs +0 -116
  197. package/dist/tsup/chunk-CTBOSFUH.cjs.map +0 -1
  198. package/dist/tsup/chunk-EGVZZFE2.js +0 -2857
  199. package/dist/tsup/chunk-EGVZZFE2.js.map +0 -1
  200. package/dist/tsup/chunk-FCCPJNMA.cjs.map +0 -1
  201. package/dist/tsup/chunk-FLMTTN27.js.map +0 -1
  202. package/dist/tsup/chunk-GIR3AFFI.cjs.map +0 -1
  203. package/dist/tsup/chunk-INGJP237.js.map +0 -1
  204. package/dist/tsup/chunk-KJCJLKRM.js +0 -116
  205. package/dist/tsup/chunk-KJCJLKRM.js.map +0 -1
  206. package/dist/tsup/chunk-KUPQZYUQ.cjs +0 -15
  207. package/dist/tsup/chunk-KUPQZYUQ.cjs.map +0 -1
  208. package/dist/tsup/chunk-O2MBYIXO.cjs +0 -2857
  209. package/dist/tsup/chunk-O2MBYIXO.cjs.map +0 -1
  210. package/dist/tsup/chunk-OGAPU3UG.cjs.map +0 -1
  211. package/dist/tsup/chunk-OV6AYD4S.js +0 -4406
  212. package/dist/tsup/chunk-OV6AYD4S.js.map +0 -1
  213. package/dist/tsup/chunk-PO4VLDWA.js.map +0 -1
  214. package/dist/tsup/chunk-R2OPSKIV.cjs.map +0 -1
  215. package/dist/tsup/chunk-TZJKSBUQ.cjs.map +0 -1
  216. package/dist/tsup/chunk-UBUC5C3G.cjs +0 -189
  217. package/dist/tsup/chunk-UBUC5C3G.cjs.map +0 -1
  218. package/dist/tsup/chunk-UIM22YJL.cjs +0 -4406
  219. package/dist/tsup/chunk-UIM22YJL.cjs.map +0 -1
  220. package/dist/tsup/chunk-URVFQMYI.cjs +0 -230
  221. package/dist/tsup/chunk-URVFQMYI.cjs.map +0 -1
  222. package/dist/tsup/chunk-UVUPOS46.js +0 -230
  223. package/dist/tsup/chunk-UVUPOS46.js.map +0 -1
  224. package/dist/tsup/chunk-VRRHBNJC.js +0 -189
  225. package/dist/tsup/chunk-VRRHBNJC.js.map +0 -1
  226. package/dist/tsup/chunk-XFSS33EQ.js +0 -202
  227. package/dist/tsup/chunk-XFSS33EQ.js.map +0 -1
  228. package/src/client/http-client-driver.ts +0 -326
  229. package/src/driver-test-suite/tests/actor-auth.ts +0 -591
  230. package/src/drivers/engine/api-endpoints.ts +0 -128
  231. package/src/drivers/engine/api-utils.ts +0 -70
  232. package/src/drivers/engine/manager-driver.ts +0 -391
  233. package/src/inline-client-driver/log.ts +0 -7
  234. package/src/inline-client-driver/mod.ts +0 -385
  235. package/src/manager/auth.ts +0 -121
  236. /package/src/{drivers/engine → actor}/keys.test.ts +0 -0
  237. /package/src/{drivers/engine → actor}/keys.ts +0 -0
@@ -84,6 +84,10 @@ export class FileSystemGlobalState {
84
84
  actorDriver: ActorDriver;
85
85
  };
86
86
 
87
+ get persist(): boolean {
88
+ return this.#persist;
89
+ }
90
+
87
91
  get storagePath() {
88
92
  return this.#storagePath;
89
93
  }
@@ -109,10 +113,11 @@ export class FileSystemGlobalState {
109
113
  const actorIds = fsSync.readdirSync(this.#stateDir);
110
114
  this.#actorCountOnStartup = actorIds.length;
111
115
  } catch (error) {
112
- logger().error("failed to count actors", { error });
116
+ logger().error({ msg: "failed to count actors", error });
113
117
  }
114
118
 
115
- logger().debug("file system driver ready", {
119
+ logger().debug({
120
+ msg: "file system driver ready",
116
121
  dir: this.#storagePath,
117
122
  actorCount: this.#actorCountOnStartup,
118
123
  });
@@ -121,10 +126,10 @@ export class FileSystemGlobalState {
121
126
  try {
122
127
  this.#cleanupTempFilesSync();
123
128
  } catch (err) {
124
- logger().error("failed to cleanup temp files", { error: err });
129
+ logger().error({ msg: "failed to cleanup temp files", error: err });
125
130
  }
126
131
  } else {
127
- logger().debug("memory driver ready");
132
+ logger().debug({ msg: "memory driver ready" });
128
133
  }
129
134
  }
130
135
 
@@ -165,7 +170,7 @@ export class FileSystemGlobalState {
165
170
  const state = await this.loadActorStateOrError(actorId);
166
171
  yield state;
167
172
  } catch (error) {
168
- logger().error("failed to load actor state", { actorId, error });
173
+ logger().error({ msg: "failed to load actor state", actorId, error });
169
174
  }
170
175
  }
171
176
  }
@@ -353,7 +358,7 @@ export class FileSystemGlobalState {
353
358
  try {
354
359
  await fs.unlink(tempPath);
355
360
  } catch {}
356
- logger().error("failed to write alarm", { actorId, error });
361
+ logger().error({ msg: "failed to write alarm", actorId, error });
357
362
  throw new Error(`Failed to write alarm: ${error}`);
358
363
  }
359
364
  }
@@ -398,7 +403,7 @@ export class FileSystemGlobalState {
398
403
  } catch {
399
404
  // Ignore cleanup errors
400
405
  }
401
- logger().error("failed to save actor state", { actorId, error });
406
+ logger().error({ msg: "failed to save actor state", actorId, error });
402
407
  throw new Error(`Failed to save actor state: ${error}`);
403
408
  }
404
409
  }
@@ -417,7 +422,6 @@ export class FileSystemGlobalState {
417
422
  actorDriver: ActorDriver,
418
423
  ) {
419
424
  if (this.#runnerParams) {
420
- logger().warn("already called onRunnerStart");
421
425
  return;
422
426
  }
423
427
 
@@ -433,7 +437,7 @@ export class FileSystemGlobalState {
433
437
  try {
434
438
  this.#loadAlarmsSync();
435
439
  } catch (err) {
436
- logger().error("failed to load alarms on startup", { error: err });
440
+ logger().error({ msg: "failed to load alarms on startup", error: err });
437
441
  }
438
442
  }
439
443
 
@@ -447,7 +451,9 @@ export class FileSystemGlobalState {
447
451
  // Get the actor metadata
448
452
  const entry = await this.loadActor(actorId);
449
453
  if (!entry.state) {
450
- throw new Error(`Actor does exist and cannot be started: ${actorId}`);
454
+ throw new Error(
455
+ `Actor does not exist and cannot be started: "${actorId}"`,
456
+ );
451
457
  }
452
458
 
453
459
  // Actor already starting
@@ -538,17 +544,18 @@ export class FileSystemGlobalState {
538
544
  if (Number.isFinite(timestamp)) {
539
545
  this.#scheduleAlarmTimeout(alarmData.actorId, timestamp);
540
546
  } else {
541
- logger().debug("invalid alarm file contents", { file });
547
+ logger().debug({ msg: "invalid alarm file contents", file });
542
548
  }
543
549
  } catch (err) {
544
- logger().error("failed to read alarm file", {
550
+ logger().error({
551
+ msg: "failed to read alarm file",
545
552
  file,
546
553
  error: stringifyError(err),
547
554
  });
548
555
  }
549
556
  }
550
557
  } catch (err) {
551
- logger().error("failed to list alarms directory", { error: err });
558
+ logger().error({ msg: "failed to list alarms directory", error: err });
552
559
  }
553
560
  }
554
561
 
@@ -563,7 +570,8 @@ export class FileSystemGlobalState {
563
570
  entry.alarmTimestamp !== undefined &&
564
571
  timestamp >= entry.alarmTimestamp
565
572
  ) {
566
- logger().debug("skipping alarm schedule (later than existing)", {
573
+ logger().debug({
574
+ msg: "skipping alarm schedule (later than existing)",
567
575
  actorId,
568
576
  timestamp,
569
577
  current: entry.alarmTimestamp,
@@ -571,7 +579,7 @@ export class FileSystemGlobalState {
571
579
  return;
572
580
  }
573
581
 
574
- logger().debug("scheduling alarm", { actorId, timestamp });
582
+ logger().debug({ msg: "scheduling alarm", actorId, timestamp });
575
583
 
576
584
  // Cancel existing timeout and update the current scheduled timestamp
577
585
  entry.alarmTimeout?.abort();
@@ -587,7 +595,8 @@ export class FileSystemGlobalState {
587
595
  await fs.unlink(this.getActorAlarmPath(actorId));
588
596
  } catch (err: any) {
589
597
  if (err?.code !== "ENOENT") {
590
- logger().debug("failed to remove alarm file", {
598
+ logger().debug({
599
+ msg: "failed to remove alarm file",
591
600
  actorId,
592
601
  error: stringifyError(err),
593
602
  });
@@ -596,7 +605,7 @@ export class FileSystemGlobalState {
596
605
  }
597
606
 
598
607
  try {
599
- logger().debug("triggering alarm", { actorId, timestamp });
608
+ logger().debug({ msg: "triggering alarm", actorId, timestamp });
600
609
 
601
610
  // Ensure actor state exists and start actor if needed
602
611
  const loaded = await this.loadActor(actorId);
@@ -618,7 +627,8 @@ export class FileSystemGlobalState {
618
627
  invariant(loaded.actor, "actor should be loaded after wake");
619
628
  await loaded.actor._onAlarm();
620
629
  } catch (err) {
621
- logger().error("failed to handle alarm", {
630
+ logger().error({
631
+ msg: "failed to handle alarm",
622
632
  actorId,
623
633
  error: stringifyError(err),
624
634
  });
@@ -655,17 +665,22 @@ export class FileSystemGlobalState {
655
665
  // Remove if older than 1 hour
656
666
  if (stat.mtimeMs < oneHourAgo) {
657
667
  fsSync.unlinkSync(fullPath);
658
- logger().info("cleaned up stale temp file", { file: tempFile });
668
+ logger().info({
669
+ msg: "cleaned up stale temp file",
670
+ file: tempFile,
671
+ });
659
672
  }
660
673
  } catch (err) {
661
- logger().debug("failed to cleanup temp file", {
674
+ logger().debug({
675
+ msg: "failed to cleanup temp file",
662
676
  file: tempFile,
663
677
  error: err,
664
678
  });
665
679
  }
666
680
  }
667
681
  } catch (err) {
668
- logger().error("failed to read actors directory for cleanup", {
682
+ logger().error({
683
+ msg: "failed to read actors directory for cleanup",
669
684
  error: err,
670
685
  });
671
686
  }
@@ -1,7 +1,5 @@
1
1
  import { getLogger } from "@/common/log";
2
2
 
3
- export const LOGGER_NAME = "driver-fs";
4
-
5
3
  export function logger() {
6
- return getLogger(LOGGER_NAME);
4
+ return getLogger("driver-fs");
7
5
  }
@@ -17,9 +17,9 @@ import type {
17
17
  GetWithKeyInput,
18
18
  ManagerDriver,
19
19
  } from "@/driver-helpers/mod";
20
- import { createInlineClientDriver } from "@/inline-client-driver/mod";
21
20
  import { ManagerInspector } from "@/inspector/manager";
22
21
  import { type Actor, ActorFeature, type ActorId } from "@/inspector/mod";
22
+ import type { ManagerDisplayInformation } from "@/manager/driver";
23
23
  import {
24
24
  type DriverConfig,
25
25
  type Encoding,
@@ -27,6 +27,7 @@ import {
27
27
  PATH_RAW_WEBSOCKET_PREFIX,
28
28
  type RegistryConfig,
29
29
  type RunConfig,
30
+ type UniversalWebSocket,
30
31
  } from "@/mod";
31
32
  import type * as schema from "@/schemas/file-system-driver/mod";
32
33
  import type { FileSystemGlobalState } from "./global-state";
@@ -119,7 +120,7 @@ export class FileSystemManagerDriver implements ManagerDriver {
119
120
  }
120
121
 
121
122
  // Actors run on the same node as the manager, so we create a dummy actor router that we route requests to
122
- const inlineClient = createClientWithDriver(createInlineClientDriver(this));
123
+ const inlineClient = createClientWithDriver(this);
123
124
  this.#actorDriver = this.#driverConfig.actor(
124
125
  registryConfig,
125
126
  runConfig,
@@ -140,11 +141,11 @@ export class FileSystemManagerDriver implements ManagerDriver {
140
141
  actorId: string,
141
142
  encoding: Encoding,
142
143
  params: unknown,
143
- ): Promise<WebSocket> {
144
- // TODO:
145
-
144
+ ): Promise<UniversalWebSocket> {
146
145
  // Handle raw WebSocket paths
147
- if (path === PATH_CONNECT_WEBSOCKET) {
146
+ const pathOnly = path.split("?")[0];
147
+ const normalizedPath = pathOnly.startsWith("/") ? pathOnly : `/${pathOnly}`;
148
+ if (normalizedPath === PATH_CONNECT_WEBSOCKET) {
148
149
  // Handle standard connect
149
150
  const wsHandler = await handleWebSocketConnect(
150
151
  undefined,
@@ -156,8 +157,12 @@ export class FileSystemManagerDriver implements ManagerDriver {
156
157
  undefined,
157
158
  );
158
159
  return new InlineWebSocketAdapter2(wsHandler);
159
- } else if (path.startsWith(PATH_RAW_WEBSOCKET_PREFIX)) {
160
+ } else if (
161
+ normalizedPath.startsWith(PATH_RAW_WEBSOCKET_PREFIX) ||
162
+ normalizedPath === "/raw/websocket"
163
+ ) {
160
164
  // Handle websocket proxy
165
+ // Use the full path with query parameters
161
166
  const wsHandler = await handleRawWebSocketHandler(
162
167
  undefined,
163
168
  path,
@@ -187,13 +192,14 @@ export class FileSystemManagerDriver implements ManagerDriver {
187
192
  actorId: string,
188
193
  encoding: Encoding,
189
194
  connParams: unknown,
190
- authData: unknown,
191
195
  ): Promise<Response> {
192
196
  const upgradeWebSocket = this.#runConfig.getUpgradeWebSocket?.();
193
197
  invariant(upgradeWebSocket, "missing getUpgradeWebSocket");
194
198
 
195
199
  // Handle raw WebSocket paths
196
- if (path === PATH_CONNECT_WEBSOCKET) {
200
+ const pathOnly = path.split("?")[0];
201
+ const normalizedPath = pathOnly.startsWith("/") ? pathOnly : `/${pathOnly}`;
202
+ if (normalizedPath === PATH_CONNECT_WEBSOCKET) {
197
203
  // Handle standard connect
198
204
  const wsHandler = await handleWebSocketConnect(
199
205
  c.req.raw,
@@ -202,20 +208,22 @@ export class FileSystemManagerDriver implements ManagerDriver {
202
208
  actorId,
203
209
  encoding,
204
210
  connParams,
205
- authData,
211
+ undefined,
206
212
  );
207
-
208
213
  return upgradeWebSocket(() => wsHandler)(c, noopNext());
209
- } else if (path.startsWith(PATH_RAW_WEBSOCKET_PREFIX)) {
214
+ } else if (
215
+ normalizedPath.startsWith(PATH_RAW_WEBSOCKET_PREFIX) ||
216
+ normalizedPath === "/raw/websocket"
217
+ ) {
210
218
  // Handle websocket proxy
219
+ // Use the full path with query parameters
211
220
  const wsHandler = await handleRawWebSocketHandler(
212
221
  c.req.raw,
213
222
  path,
214
223
  this.#actorDriver,
215
224
  actorId,
216
- authData,
225
+ undefined,
217
226
  );
218
-
219
227
  return upgradeWebSocket(() => wsHandler)(c, noopNext());
220
228
  } else {
221
229
  throw new Error(`Unreachable path: ${path}`);
@@ -237,7 +245,7 @@ export class FileSystemManagerDriver implements ManagerDriver {
237
245
  key: actor.state.key as string[],
238
246
  };
239
247
  } catch (error) {
240
- logger().error("failed to read actor state", { actorId, error });
248
+ logger().error({ msg: "failed to read actor state", actorId, error });
241
249
  return undefined;
242
250
  }
243
251
  }
@@ -297,6 +305,16 @@ export class FileSystemManagerDriver implements ManagerDriver {
297
305
  };
298
306
  }
299
307
 
308
+ displayInformation(): ManagerDisplayInformation {
309
+ return {
310
+ name: this.#state.persist ? "File System" : "Memory",
311
+ properties: {
312
+ ...(this.#state.persist ? { Data: this.#state.storagePath } : {}),
313
+ Instances: this.#state.actorCountOnStartup.toString(),
314
+ },
315
+ };
316
+ }
317
+
300
318
  extraStartupLog() {
301
319
  return {
302
320
  instances: this.#state.actorCountOnStartup,
@@ -24,14 +24,16 @@ const defaultEnabled = () => {
24
24
 
25
25
  const defaultInspectorOrigins = [
26
26
  "http://localhost:43708",
27
+ "http://localhost:43709",
27
28
  "https://studio.rivet.gg",
29
+ "https://inspect.rivet.dev",
28
30
  ];
29
31
 
30
32
  const defaultCors: CorsOptions = {
31
33
  origin: (origin) => {
32
34
  if (
33
35
  defaultInspectorOrigins.includes(origin) ||
34
- (origin.startsWith("https://") && origin.endsWith("rivet-gg.vercel.app"))
36
+ (origin.startsWith("https://") && origin.endsWith("rivet-dev.vercel.app"))
35
37
  ) {
36
38
  return origin;
37
39
  } else {
@@ -40,10 +42,13 @@ const defaultCors: CorsOptions = {
40
42
  },
41
43
  allowMethods: ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
42
44
  allowHeaders: [
43
- "Content-Type",
44
45
  "Authorization",
45
- HEADER_ACTOR_QUERY,
46
- "last-event-id",
46
+ "Content-Type",
47
+ "User-Agent",
48
+ "baggage",
49
+ "sentry-trace",
50
+ "x-rivet-actor",
51
+ "x-rivet-target",
47
52
  ],
48
53
  maxAge: 3600,
49
54
  credentials: true,
@@ -1,4 +1,4 @@
1
- import { getLogger } from "@/common//log";
1
+ import { getLogger } from "@/common/log";
2
2
 
3
3
  export function inspectorLogger() {
4
4
  return getLogger("inspector");
@@ -35,7 +35,7 @@ export function createManagerInspectorRouter() {
35
35
  });
36
36
  return c.json(actors, 200);
37
37
  } catch (error) {
38
- inspectorLogger().error("Failed to fetch actors", error);
38
+ inspectorLogger().error({ msg: "Failed to fetch actors", error });
39
39
  return c.json("Failed to fetch actors", 500);
40
40
  }
41
41
  })
@@ -81,6 +81,6 @@ export class ManagerInspector {
81
81
 
82
82
  constructor(accessors: () => ManagerInspectorAccessors) {
83
83
  this.accessors = accessors();
84
- inspectorLogger().debug("Manager Inspector enabled and ready");
84
+ inspectorLogger().debug({ msg: "Manager Inspector enabled and ready" });
85
85
  }
86
86
  }
@@ -64,7 +64,7 @@ export function getInspectorUrl(runConfig: RunConfigInput | undefined) {
64
64
  return "disabled";
65
65
  }
66
66
 
67
- const url = new URL("https://studio.rivet.gg");
67
+ const url = new URL("https://inspect.rivet.dev");
68
68
 
69
69
  url.searchParams.set("t", accessToken);
70
70
 
@@ -1,5 +1,5 @@
1
1
  import type { Env, Hono, Context as HonoContext } from "hono";
2
- import type { ActorKey, Encoding } from "@/actor/mod";
2
+ import type { ActorKey, Encoding, UniversalWebSocket } from "@/actor/mod";
3
3
  import type { ManagerInspector } from "@/inspector/manager";
4
4
  import type { RunConfig } from "@/mod";
5
5
  import type { RegistryConfig } from "@/registry/config";
@@ -21,7 +21,7 @@ export interface ManagerDriver {
21
21
  actorId: string,
22
22
  encoding: Encoding,
23
23
  params: unknown,
24
- ): Promise<WebSocket>;
24
+ ): Promise<UniversalWebSocket>;
25
25
  proxyRequest(
26
26
  c: HonoContext,
27
27
  actorRequest: Request,
@@ -36,6 +36,8 @@ export interface ManagerDriver {
36
36
  authData: unknown,
37
37
  ): Promise<Response>;
38
38
 
39
+ displayInformation(): ManagerDisplayInformation;
40
+
39
41
  extraStartupLog?: () => Record<string, unknown>;
40
42
 
41
43
  modifyManagerRouter?: (registryConfig: RegistryConfig, router: Hono) => void;
@@ -45,6 +47,12 @@ export interface ManagerDriver {
45
47
  */
46
48
  readonly inspector?: ManagerInspector;
47
49
  }
50
+
51
+ export interface ManagerDisplayInformation {
52
+ name: string;
53
+ properties: Record<string, string>;
54
+ }
55
+
48
56
  export interface GetForIdInput<E extends Env = any> {
49
57
  c?: HonoContext | undefined;
50
58
  name: string;
@@ -70,7 +70,8 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
70
70
  }
71
71
 
72
72
  try {
73
- logger().debug("bridge sending data", {
73
+ logger().debug({
74
+ msg: "bridge sending data",
74
75
  dataType: typeof data,
75
76
  isString: typeof data === "string",
76
77
  isArrayBuffer: data instanceof ArrayBuffer,
@@ -104,19 +105,23 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
104
105
  (this.#ws as any).send(buffer);
105
106
  })
106
107
  .catch((error) => {
107
- logger().error("failed to convert blob to arraybuffer", { error });
108
+ logger().error({
109
+ msg: "failed to convert blob to arraybuffer",
110
+ error,
111
+ });
108
112
  this.#fireEvent("error", { type: "error", target: this, error });
109
113
  });
110
114
  } else {
111
115
  // Try to convert to string as a fallback
112
- logger().warn("unsupported data type, converting to string", {
116
+ logger().warn({
117
+ msg: "unsupported data type, converting to string",
113
118
  dataType: typeof data,
114
119
  data,
115
120
  });
116
121
  (this.#ws as any).send(String(data));
117
122
  }
118
123
  } catch (error) {
119
- logger().error("error sending websocket data", { error });
124
+ logger().error({ msg: "error sending websocket data", error });
120
125
  this.#fireEvent("error", { type: "error", target: this, error });
121
126
  throw error;
122
127
  }
@@ -144,7 +149,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
144
149
  wasClean: code === 1000,
145
150
  });
146
151
  } catch (error) {
147
- logger().error("error closing websocket", { error });
152
+ logger().error({ msg: "error closing websocket", error });
148
153
  this.#readyState = this.CLOSED;
149
154
  this.#fireEvent("close", {
150
155
  type: "close",
@@ -177,7 +182,10 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
177
182
  try {
178
183
  listener(event);
179
184
  } catch (error) {
180
- logger().error(`error in ${event.type} event listener`, { error });
185
+ logger().error({
186
+ msg: `error in ${event.type} event listener`,
187
+ error,
188
+ });
181
189
  }
182
190
  }
183
191
  }
@@ -201,7 +209,8 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
201
209
  messageData = String(data);
202
210
  }
203
211
 
204
- logger().debug("bridge handling message", {
212
+ logger().debug({
213
+ msg: "bridge handling message",
205
214
  dataType: typeof messageData,
206
215
  isArrayBuffer: messageData instanceof ArrayBuffer,
207
216
  dataStr: typeof messageData === "string" ? messageData : "<binary>",
@@ -251,7 +260,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
251
260
  try {
252
261
  listener(event);
253
262
  } catch (error) {
254
- logger().error(`error in ${type} event listener`, { error });
263
+ logger().error({ msg: `error in ${type} event listener`, error });
255
264
  }
256
265
  }
257
266
  }
@@ -263,7 +272,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
263
272
  try {
264
273
  this.#onopen(event);
265
274
  } catch (error) {
266
- logger().error("error in onopen handler", { error });
275
+ logger().error({ msg: "error in onopen handler", error });
267
276
  }
268
277
  }
269
278
  break;
@@ -272,7 +281,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
272
281
  try {
273
282
  this.#onclose(event);
274
283
  } catch (error) {
275
- logger().error("error in onclose handler", { error });
284
+ logger().error({ msg: "error in onclose handler", error });
276
285
  }
277
286
  }
278
287
  break;
@@ -281,7 +290,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
281
290
  try {
282
291
  this.#onerror(event);
283
292
  } catch (error) {
284
- logger().error("error in onerror handler", { error });
293
+ logger().error({ msg: "error in onerror handler", error });
285
294
  }
286
295
  }
287
296
  break;
@@ -290,7 +299,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
290
299
  try {
291
300
  this.#onmessage(event);
292
301
  } catch (error) {
293
- logger().error("error in onmessage handler", { error });
302
+ logger().error({ msg: "error in onmessage handler", error });
294
303
  }
295
304
  }
296
305
  break;
@@ -1,7 +1,5 @@
1
- import { getLogger } from "@/common//log";
2
-
3
- export const LOGGER_NAME = "actor-manager";
1
+ import { getLogger } from "@/common/log";
4
2
 
5
3
  export function logger() {
6
- return getLogger(LOGGER_NAME);
4
+ return getLogger("actor-manager");
7
5
  }
@@ -1,2 +1,2 @@
1
- export { ManagerDriver } from "./driver";
1
+ export { ManagerDisplayInformation, ManagerDriver } from "./driver";
2
2
  export { createManagerRouter } from "./router";