rivetkit 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) 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-6PDXBYI5.js → chunk-3F2YSRJL.js} +8 -23
  10. package/dist/tsup/chunk-3F2YSRJL.js.map +1 -0
  11. package/dist/tsup/chunk-4CXBCT26.cjs +250 -0
  12. package/dist/tsup/chunk-4CXBCT26.cjs.map +1 -0
  13. package/dist/tsup/chunk-4R73YDN3.cjs +20 -0
  14. package/dist/tsup/chunk-4R73YDN3.cjs.map +1 -0
  15. package/dist/tsup/{chunk-OGAPU3UG.cjs → chunk-6LJT3QRL.cjs} +39 -25
  16. package/dist/tsup/chunk-6LJT3QRL.cjs.map +1 -0
  17. package/dist/tsup/{chunk-6WKQDDUD.cjs → chunk-GICQ3YCU.cjs} +143 -141
  18. package/dist/tsup/chunk-GICQ3YCU.cjs.map +1 -0
  19. package/dist/tsup/{chunk-FLMTTN27.js → chunk-H26RP6GD.js} +15 -8
  20. package/dist/tsup/chunk-H26RP6GD.js.map +1 -0
  21. package/dist/tsup/chunk-HI3HWJRC.js +20 -0
  22. package/dist/tsup/chunk-HI3HWJRC.js.map +1 -0
  23. package/dist/tsup/{chunk-4NSUQZ2H.js → chunk-HLLF4B4Q.js} +116 -114
  24. package/dist/tsup/chunk-HLLF4B4Q.js.map +1 -0
  25. package/dist/tsup/{chunk-FCCPJNMA.cjs → chunk-IH6CKNDW.cjs} +12 -27
  26. package/dist/tsup/chunk-IH6CKNDW.cjs.map +1 -0
  27. package/dist/tsup/chunk-LV2S3OU3.js +250 -0
  28. package/dist/tsup/chunk-LV2S3OU3.js.map +1 -0
  29. package/dist/tsup/{chunk-R2OPSKIV.cjs → chunk-LWNKVZG5.cjs} +20 -13
  30. package/dist/tsup/chunk-LWNKVZG5.cjs.map +1 -0
  31. package/dist/tsup/{chunk-INGJP237.js → chunk-NFU2BBT5.js} +102 -43
  32. package/dist/tsup/chunk-NFU2BBT5.js.map +1 -0
  33. package/dist/tsup/{chunk-3H7O2A7I.js → chunk-PQY7KKTL.js} +33 -19
  34. package/dist/tsup/chunk-PQY7KKTL.js.map +1 -0
  35. package/dist/tsup/{chunk-PO4VLDWA.js → chunk-QK72M5JB.js} +3 -5
  36. package/dist/tsup/chunk-QK72M5JB.js.map +1 -0
  37. package/dist/tsup/{chunk-TZJKSBUQ.cjs → chunk-QNNXFOQV.cjs} +3 -5
  38. package/dist/tsup/chunk-QNNXFOQV.cjs.map +1 -0
  39. package/dist/tsup/{chunk-GIR3AFFI.cjs → chunk-SBHHJ6QS.cjs} +102 -43
  40. package/dist/tsup/chunk-SBHHJ6QS.cjs.map +1 -0
  41. package/dist/tsup/chunk-TQ62L3X7.js +325 -0
  42. package/dist/tsup/chunk-TQ62L3X7.js.map +1 -0
  43. package/dist/tsup/chunk-VO7ZRVVD.cjs +6293 -0
  44. package/dist/tsup/chunk-VO7ZRVVD.cjs.map +1 -0
  45. package/dist/tsup/chunk-WHBPJNGW.cjs +325 -0
  46. package/dist/tsup/chunk-WHBPJNGW.cjs.map +1 -0
  47. package/dist/tsup/chunk-XJQHKJ4P.js +6293 -0
  48. package/dist/tsup/chunk-XJQHKJ4P.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-BI-6UIBJ.d.ts} +196 -226
  63. package/dist/tsup/{connection-BR_Ve4ku.d.cts → connection-Dyd4NLGW.d.cts} +196 -226
  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 +155 -1363
  70. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  71. package/dist/tsup/driver-test-suite/mod.d.cts +11 -5
  72. package/dist/tsup/driver-test-suite/mod.d.ts +11 -5
  73. package/dist/tsup/driver-test-suite/mod.js +876 -2084
  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-BTe_Rsdn.d.cts} +2 -3
  86. package/dist/tsup/{router-endpoints-AYkXG8Tl.d.cts → router-endpoints-CBSrKHmo.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 +3 -3
  95. package/dist/tsup/utils.d.cts +1 -1
  96. package/dist/tsup/utils.d.ts +1 -1
  97. package/dist/tsup/utils.js +2 -2
  98. package/package.json +4 -4
  99. package/src/actor/action.ts +1 -5
  100. package/src/actor/config.ts +27 -295
  101. package/src/actor/connection.ts +9 -12
  102. package/src/actor/context.ts +1 -4
  103. package/src/actor/definition.ts +7 -11
  104. package/src/actor/errors.ts +97 -35
  105. package/src/actor/generic-conn-driver.ts +28 -16
  106. package/src/actor/instance.ts +177 -133
  107. package/src/actor/log.ts +4 -13
  108. package/src/actor/mod.ts +0 -5
  109. package/src/actor/protocol/old.ts +42 -26
  110. package/src/actor/protocol/serde.ts +1 -1
  111. package/src/actor/router-endpoints.ts +41 -38
  112. package/src/actor/router.ts +20 -18
  113. package/src/actor/unstable-react.ts +1 -1
  114. package/src/actor/utils.ts +6 -2
  115. package/src/client/actor-common.ts +1 -1
  116. package/src/client/actor-conn.ts +152 -91
  117. package/src/client/actor-handle.ts +85 -25
  118. package/src/client/actor-query.ts +65 -0
  119. package/src/client/client.ts +29 -98
  120. package/src/client/config.ts +44 -0
  121. package/src/client/errors.ts +1 -0
  122. package/src/client/log.ts +2 -4
  123. package/src/client/mod.ts +16 -12
  124. package/src/client/raw-utils.ts +82 -25
  125. package/src/client/utils.ts +5 -3
  126. package/src/common/fake-event-source.ts +10 -9
  127. package/src/common/inline-websocket-adapter2.ts +39 -30
  128. package/src/common/log.ts +176 -101
  129. package/src/common/logfmt.ts +21 -30
  130. package/src/common/router.ts +12 -19
  131. package/src/common/utils.ts +27 -13
  132. package/src/common/websocket.ts +0 -1
  133. package/src/driver-helpers/mod.ts +1 -1
  134. package/src/driver-test-suite/log.ts +1 -3
  135. package/src/driver-test-suite/mod.ts +86 -60
  136. package/src/driver-test-suite/tests/actor-handle.ts +33 -0
  137. package/src/driver-test-suite/tests/manager-driver.ts +5 -3
  138. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -226
  139. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -392
  140. package/src/driver-test-suite/tests/request-access.ts +112 -126
  141. package/src/driver-test-suite/utils.ts +13 -10
  142. package/src/drivers/default.ts +7 -4
  143. package/src/drivers/engine/actor-driver.ts +22 -13
  144. package/src/drivers/engine/config.ts +2 -10
  145. package/src/drivers/engine/kv.ts +1 -1
  146. package/src/drivers/engine/log.ts +1 -3
  147. package/src/drivers/engine/mod.ts +2 -3
  148. package/src/drivers/file-system/actor.ts +1 -1
  149. package/src/drivers/file-system/global-state.ts +33 -20
  150. package/src/drivers/file-system/log.ts +1 -3
  151. package/src/drivers/file-system/manager.ts +31 -8
  152. package/src/inspector/config.ts +9 -4
  153. package/src/inspector/log.ts +1 -1
  154. package/src/inspector/manager.ts +2 -2
  155. package/src/inspector/utils.ts +1 -1
  156. package/src/manager/driver.ts +10 -2
  157. package/src/manager/hono-websocket-adapter.ts +21 -12
  158. package/src/manager/log.ts +2 -4
  159. package/src/manager/mod.ts +1 -1
  160. package/src/manager/router.ts +277 -1657
  161. package/src/manager-api/routes/actors-create.ts +16 -0
  162. package/src/manager-api/routes/actors-delete.ts +4 -0
  163. package/src/manager-api/routes/actors-get-by-id.ts +7 -0
  164. package/src/manager-api/routes/actors-get-or-create-by-id.ts +29 -0
  165. package/src/manager-api/routes/actors-get.ts +7 -0
  166. package/src/manager-api/routes/common.ts +18 -0
  167. package/src/mod.ts +0 -2
  168. package/src/registry/config.ts +1 -1
  169. package/src/registry/log.ts +2 -4
  170. package/src/registry/mod.ts +57 -24
  171. package/src/registry/run-config.ts +31 -33
  172. package/src/registry/serve.ts +4 -5
  173. package/src/remote-manager-driver/actor-http-client.ts +72 -0
  174. package/src/remote-manager-driver/actor-websocket-client.ts +63 -0
  175. package/src/remote-manager-driver/api-endpoints.ts +79 -0
  176. package/src/remote-manager-driver/api-utils.ts +43 -0
  177. package/src/remote-manager-driver/log.ts +5 -0
  178. package/src/remote-manager-driver/mod.ts +274 -0
  179. package/src/{drivers/engine → remote-manager-driver}/ws-proxy.ts +24 -14
  180. package/src/serde.ts +8 -2
  181. package/src/test/log.ts +1 -3
  182. package/src/test/mod.ts +17 -16
  183. package/dist/tsup/chunk-2CRLFV6Z.cjs +0 -202
  184. package/dist/tsup/chunk-2CRLFV6Z.cjs.map +0 -1
  185. package/dist/tsup/chunk-3H7O2A7I.js.map +0 -1
  186. package/dist/tsup/chunk-42I3OZ3Q.js +0 -15
  187. package/dist/tsup/chunk-42I3OZ3Q.js.map +0 -1
  188. package/dist/tsup/chunk-4NSUQZ2H.js.map +0 -1
  189. package/dist/tsup/chunk-6PDXBYI5.js.map +0 -1
  190. package/dist/tsup/chunk-6WKQDDUD.cjs.map +0 -1
  191. package/dist/tsup/chunk-CTBOSFUH.cjs +0 -116
  192. package/dist/tsup/chunk-CTBOSFUH.cjs.map +0 -1
  193. package/dist/tsup/chunk-EGVZZFE2.js +0 -2857
  194. package/dist/tsup/chunk-EGVZZFE2.js.map +0 -1
  195. package/dist/tsup/chunk-FCCPJNMA.cjs.map +0 -1
  196. package/dist/tsup/chunk-FLMTTN27.js.map +0 -1
  197. package/dist/tsup/chunk-GIR3AFFI.cjs.map +0 -1
  198. package/dist/tsup/chunk-INGJP237.js.map +0 -1
  199. package/dist/tsup/chunk-KJCJLKRM.js +0 -116
  200. package/dist/tsup/chunk-KJCJLKRM.js.map +0 -1
  201. package/dist/tsup/chunk-KUPQZYUQ.cjs +0 -15
  202. package/dist/tsup/chunk-KUPQZYUQ.cjs.map +0 -1
  203. package/dist/tsup/chunk-O2MBYIXO.cjs +0 -2857
  204. package/dist/tsup/chunk-O2MBYIXO.cjs.map +0 -1
  205. package/dist/tsup/chunk-OGAPU3UG.cjs.map +0 -1
  206. package/dist/tsup/chunk-OV6AYD4S.js +0 -4406
  207. package/dist/tsup/chunk-OV6AYD4S.js.map +0 -1
  208. package/dist/tsup/chunk-PO4VLDWA.js.map +0 -1
  209. package/dist/tsup/chunk-R2OPSKIV.cjs.map +0 -1
  210. package/dist/tsup/chunk-TZJKSBUQ.cjs.map +0 -1
  211. package/dist/tsup/chunk-UBUC5C3G.cjs +0 -189
  212. package/dist/tsup/chunk-UBUC5C3G.cjs.map +0 -1
  213. package/dist/tsup/chunk-UIM22YJL.cjs +0 -4406
  214. package/dist/tsup/chunk-UIM22YJL.cjs.map +0 -1
  215. package/dist/tsup/chunk-URVFQMYI.cjs +0 -230
  216. package/dist/tsup/chunk-URVFQMYI.cjs.map +0 -1
  217. package/dist/tsup/chunk-UVUPOS46.js +0 -230
  218. package/dist/tsup/chunk-UVUPOS46.js.map +0 -1
  219. package/dist/tsup/chunk-VRRHBNJC.js +0 -189
  220. package/dist/tsup/chunk-VRRHBNJC.js.map +0 -1
  221. package/dist/tsup/chunk-XFSS33EQ.js +0 -202
  222. package/dist/tsup/chunk-XFSS33EQ.js.map +0 -1
  223. package/src/client/http-client-driver.ts +0 -326
  224. package/src/driver-test-suite/test-inline-client-driver.ts +0 -402
  225. package/src/driver-test-suite/tests/actor-auth.ts +0 -591
  226. package/src/drivers/engine/api-endpoints.ts +0 -128
  227. package/src/drivers/engine/api-utils.ts +0 -70
  228. package/src/drivers/engine/manager-driver.ts +0 -391
  229. package/src/inline-client-driver/log.ts +0 -7
  230. package/src/inline-client-driver/mod.ts +0 -385
  231. package/src/manager/auth.ts +0 -121
  232. /package/src/{drivers/engine → actor}/keys.test.ts +0 -0
  233. /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
 
@@ -538,17 +542,18 @@ export class FileSystemGlobalState {
538
542
  if (Number.isFinite(timestamp)) {
539
543
  this.#scheduleAlarmTimeout(alarmData.actorId, timestamp);
540
544
  } else {
541
- logger().debug("invalid alarm file contents", { file });
545
+ logger().debug({ msg: "invalid alarm file contents", file });
542
546
  }
543
547
  } catch (err) {
544
- logger().error("failed to read alarm file", {
548
+ logger().error({
549
+ msg: "failed to read alarm file",
545
550
  file,
546
551
  error: stringifyError(err),
547
552
  });
548
553
  }
549
554
  }
550
555
  } catch (err) {
551
- logger().error("failed to list alarms directory", { error: err });
556
+ logger().error({ msg: "failed to list alarms directory", error: err });
552
557
  }
553
558
  }
554
559
 
@@ -563,7 +568,8 @@ export class FileSystemGlobalState {
563
568
  entry.alarmTimestamp !== undefined &&
564
569
  timestamp >= entry.alarmTimestamp
565
570
  ) {
566
- logger().debug("skipping alarm schedule (later than existing)", {
571
+ logger().debug({
572
+ msg: "skipping alarm schedule (later than existing)",
567
573
  actorId,
568
574
  timestamp,
569
575
  current: entry.alarmTimestamp,
@@ -571,7 +577,7 @@ export class FileSystemGlobalState {
571
577
  return;
572
578
  }
573
579
 
574
- logger().debug("scheduling alarm", { actorId, timestamp });
580
+ logger().debug({ msg: "scheduling alarm", actorId, timestamp });
575
581
 
576
582
  // Cancel existing timeout and update the current scheduled timestamp
577
583
  entry.alarmTimeout?.abort();
@@ -587,7 +593,8 @@ export class FileSystemGlobalState {
587
593
  await fs.unlink(this.getActorAlarmPath(actorId));
588
594
  } catch (err: any) {
589
595
  if (err?.code !== "ENOENT") {
590
- logger().debug("failed to remove alarm file", {
596
+ logger().debug({
597
+ msg: "failed to remove alarm file",
591
598
  actorId,
592
599
  error: stringifyError(err),
593
600
  });
@@ -596,7 +603,7 @@ export class FileSystemGlobalState {
596
603
  }
597
604
 
598
605
  try {
599
- logger().debug("triggering alarm", { actorId, timestamp });
606
+ logger().debug({ msg: "triggering alarm", actorId, timestamp });
600
607
 
601
608
  // Ensure actor state exists and start actor if needed
602
609
  const loaded = await this.loadActor(actorId);
@@ -618,7 +625,8 @@ export class FileSystemGlobalState {
618
625
  invariant(loaded.actor, "actor should be loaded after wake");
619
626
  await loaded.actor._onAlarm();
620
627
  } catch (err) {
621
- logger().error("failed to handle alarm", {
628
+ logger().error({
629
+ msg: "failed to handle alarm",
622
630
  actorId,
623
631
  error: stringifyError(err),
624
632
  });
@@ -655,17 +663,22 @@ export class FileSystemGlobalState {
655
663
  // Remove if older than 1 hour
656
664
  if (stat.mtimeMs < oneHourAgo) {
657
665
  fsSync.unlinkSync(fullPath);
658
- logger().info("cleaned up stale temp file", { file: tempFile });
666
+ logger().info({
667
+ msg: "cleaned up stale temp file",
668
+ file: tempFile,
669
+ });
659
670
  }
660
671
  } catch (err) {
661
- logger().debug("failed to cleanup temp file", {
672
+ logger().debug({
673
+ msg: "failed to cleanup temp file",
662
674
  file: tempFile,
663
675
  error: err,
664
676
  });
665
677
  }
666
678
  }
667
679
  } catch (err) {
668
- logger().error("failed to read actors directory for cleanup", {
680
+ logger().error({
681
+ msg: "failed to read actors directory for cleanup",
669
682
  error: err,
670
683
  });
671
684
  }
@@ -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,7 +141,7 @@ export class FileSystemManagerDriver implements ManagerDriver {
140
141
  actorId: string,
141
142
  encoding: Encoding,
142
143
  params: unknown,
143
- ): Promise<WebSocket> {
144
+ ): Promise<UniversalWebSocket> {
144
145
  // TODO:
145
146
 
146
147
  // Handle raw WebSocket paths
@@ -156,11 +157,17 @@ 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
+ path.startsWith(PATH_RAW_WEBSOCKET_PREFIX) ||
162
+ path === "/raw/websocket"
163
+ ) {
160
164
  // Handle websocket proxy
165
+ // Normalize path to include trailing slash if missing
166
+ const normalizedPath =
167
+ path === "/raw/websocket" ? "/raw/websocket/" : path;
161
168
  const wsHandler = await handleRawWebSocketHandler(
162
169
  undefined,
163
- path,
170
+ normalizedPath,
164
171
  this.#actorDriver,
165
172
  actorId,
166
173
  undefined,
@@ -206,11 +213,17 @@ export class FileSystemManagerDriver implements ManagerDriver {
206
213
  );
207
214
 
208
215
  return upgradeWebSocket(() => wsHandler)(c, noopNext());
209
- } else if (path.startsWith(PATH_RAW_WEBSOCKET_PREFIX)) {
216
+ } else if (
217
+ path.startsWith(PATH_RAW_WEBSOCKET_PREFIX) ||
218
+ path === "/raw/websocket"
219
+ ) {
210
220
  // Handle websocket proxy
221
+ // Normalize path to include trailing slash if missing
222
+ const normalizedPath =
223
+ path === "/raw/websocket" ? "/raw/websocket/" : path;
211
224
  const wsHandler = await handleRawWebSocketHandler(
212
225
  c.req.raw,
213
- path,
226
+ normalizedPath,
214
227
  this.#actorDriver,
215
228
  actorId,
216
229
  authData,
@@ -237,7 +250,7 @@ export class FileSystemManagerDriver implements ManagerDriver {
237
250
  key: actor.state.key as string[],
238
251
  };
239
252
  } catch (error) {
240
- logger().error("failed to read actor state", { actorId, error });
253
+ logger().error({ msg: "failed to read actor state", actorId, error });
241
254
  return undefined;
242
255
  }
243
256
  }
@@ -297,6 +310,16 @@ export class FileSystemManagerDriver implements ManagerDriver {
297
310
  };
298
311
  }
299
312
 
313
+ displayInformation(): ManagerDisplayInformation {
314
+ return {
315
+ name: this.#state.persist ? "File System" : "Memory",
316
+ properties: {
317
+ ...(this.#state.persist ? { Data: this.#state.storagePath } : {}),
318
+ Instances: this.#state.actorCountOnStartup.toString(),
319
+ },
320
+ };
321
+ }
322
+
300
323
  extraStartupLog() {
301
324
  return {
302
325
  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";