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
@@ -114,131 +114,117 @@ export function runRequestAccessTests(driverTestConfig: DriverTestConfig) {
114
114
  await connection.dispose();
115
115
  });
116
116
 
117
- test("should have access to request object in onAuth", async (c) => {
118
- const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
119
-
120
- // Only test in HTTP mode as onAuth only runs for public endpoints
121
- if (driverTestConfig.clientType === "http") {
122
- // For now, skip this test as onAuth might not be properly invoked in test environment
123
- // The onAuth hook is designed for public endpoints and might require special setup
124
- console.log("Skipping onAuth test - requires public endpoint setup");
125
-
126
- // TODO: Implement proper public endpoint test for onAuth
127
- // This would require setting up the actor with public access and making
128
- // requests from outside the internal client
129
- }
130
- });
131
-
132
- test("should have access to request object in onFetch", async (c) => {
133
- const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
134
-
135
- // Create actor
136
- const handle = client.requestAccessActor.getOrCreate(["test-fetch"]);
137
-
138
- // Make a raw HTTP request to the actor
139
- await handle.resolve(); // Ensure actor is created
140
-
141
- const actorQuery = {
142
- getOrCreateForKey: {
143
- name: "requestAccessActor",
144
- key: ["test-fetch"],
145
- },
146
- };
147
-
148
- const url = `${endpoint}/registry/actors/raw/http/test-path`;
149
- const response = await fetch(url, {
150
- method: "POST",
151
- headers: {
152
- "Content-Type": "application/json",
153
- "X-Test-Header": "test-value",
154
- "X-RivetKit-Query": JSON.stringify(actorQuery),
155
- },
156
- body: JSON.stringify({ test: "data" }),
157
- });
158
-
159
- if (!response.ok) {
160
- const errorText = await response.text();
161
- console.error(
162
- `HTTP request failed: ${response.status} ${response.statusText}`,
163
- errorText,
164
- );
165
- }
166
-
167
- expect(response.ok).toBe(true);
168
- const data = await response.json();
169
-
170
- // Verify request info from onFetch
171
- expect((data as any).hasRequest).toBe(true);
172
- expect((data as any).requestUrl).toContain("/test-path");
173
- expect((data as any).requestMethod).toBe("POST");
174
- expect((data as any).requestHeaders).toBeDefined();
175
- expect((data as any).requestHeaders["content-type"]).toBe(
176
- "application/json",
177
- );
178
- expect((data as any).requestHeaders["x-test-header"]).toBe("test-value");
179
- });
180
-
181
- test("should have access to request object in onWebSocket", async (c) => {
182
- const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
183
-
184
- // Only test in environments that support WebSocket
185
- if (typeof WebSocket !== "undefined") {
186
- // Create actor
187
- const handle = client.requestAccessActor.getOrCreate([
188
- "test-websocket",
189
- ]);
190
- await handle.resolve(); // Ensure actor is created
191
-
192
- const actorQuery = {
193
- getOrCreateForKey: {
194
- name: "requestAccessActor",
195
- key: ["test-websocket"],
196
- },
197
- };
198
-
199
- // Encode query as WebSocket subprotocol
200
- const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
201
-
202
- // Create raw WebSocket connection
203
- const wsUrl = endpoint
204
- .replace("http://", "ws://")
205
- .replace("https://", "wss://");
206
- const ws = new WebSocket(
207
- `${wsUrl}/registry/actors/raw/websocket/test-path`,
208
- [
209
- queryProtocol,
210
- "rivetkit", // Required protocol
211
- ],
212
- );
213
-
214
- // Wait for connection and first message
215
- await new Promise<void>((resolve, reject) => {
216
- ws.onopen = () => {
217
- // Connection established
218
- };
219
-
220
- ws.onmessage = (event) => {
221
- try {
222
- const data = JSON.parse(event.data);
223
-
224
- // Verify request info from onWebSocket
225
- expect(data.hasRequest).toBe(true);
226
- expect(data.requestUrl).toContain("/test-path");
227
- expect(data.requestMethod).toBe("GET");
228
- expect(data.requestHeaders).toBeDefined();
229
-
230
- ws.close();
231
- resolve();
232
- } catch (error) {
233
- reject(error);
234
- }
235
- };
236
-
237
- ws.onerror = (error) => {
238
- reject(error);
239
- };
240
- });
241
- }
242
- });
117
+ // TODO: re-expose this once we can have actor queries on the gateway
118
+ // test("should have access to request object in onFetch", async (c) => {
119
+ // const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
120
+ //
121
+ // // Create actor
122
+ // const handle = client.requestAccessActor.getOrCreate(["test-fetch"]);
123
+ //
124
+ // // Make a raw HTTP request to the actor
125
+ // await handle.resolve(); // Ensure actor is created
126
+ //
127
+ // const actorQuery = {
128
+ // getOrCreateForKey: {
129
+ // name: "requestAccessActor",
130
+ // key: ["test-fetch"],
131
+ // },
132
+ // };
133
+ //
134
+ // const url = `${endpoint}/registry/actors/raw/http/test-path`;
135
+ // const response = await fetch(url, {
136
+ // method: "POST",
137
+ // headers: {
138
+ // "Content-Type": "application/json",
139
+ // "X-Test-Header": "test-value",
140
+ // "X-RivetKit-Query": JSON.stringify(actorQuery),
141
+ // },
142
+ // body: JSON.stringify({ test: "data" }),
143
+ // });
144
+ //
145
+ // if (!response.ok) {
146
+ // const errorText = await response.text();
147
+ // console.error(
148
+ // `HTTP request failed: ${response.status} ${response.statusText}`,
149
+ // errorText,
150
+ // );
151
+ // }
152
+ //
153
+ // expect(response.ok).toBe(true);
154
+ // const data = await response.json();
155
+ //
156
+ // // Verify request info from onFetch
157
+ // expect((data as any).hasRequest).toBe(true);
158
+ // expect((data as any).requestUrl).toContain("/test-path");
159
+ // expect((data as any).requestMethod).toBe("POST");
160
+ // expect((data as any).requestHeaders).toBeDefined();
161
+ // expect((data as any).requestHeaders["content-type"]).toBe(
162
+ // "application/json",
163
+ // );
164
+ // expect((data as any).requestHeaders["x-test-header"]).toBe("test-value");
165
+ // });
166
+
167
+ // test("should have access to request object in onWebSocket", async (c) => {
168
+ // const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
169
+ //
170
+ // // Only test in environments that support WebSocket
171
+ // if (typeof WebSocket !== "undefined") {
172
+ // // Create actor
173
+ // const handle = client.requestAccessActor.getOrCreate([
174
+ // "test-websocket",
175
+ // ]);
176
+ // await handle.resolve(); // Ensure actor is created
177
+ //
178
+ // const actorQuery = {
179
+ // getOrCreateForKey: {
180
+ // name: "requestAccessActor",
181
+ // key: ["test-websocket"],
182
+ // },
183
+ // };
184
+ //
185
+ // // Encode query as WebSocket subprotocol
186
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
187
+ //
188
+ // // Create raw WebSocket connection
189
+ // const wsUrl = endpoint
190
+ // .replace("http://", "ws://")
191
+ // .replace("https://", "wss://");
192
+ // const ws = new WebSocket(
193
+ // `${wsUrl}/registry/actors/raw/websocket/test-path`,
194
+ // [
195
+ // queryProtocol,
196
+ // "rivetkit", // Required protocol
197
+ // ],
198
+ // );
199
+ //
200
+ // // Wait for connection and first message
201
+ // await new Promise<void>((resolve, reject) => {
202
+ // ws.onopen = () => {
203
+ // // Connection established
204
+ // };
205
+ //
206
+ // ws.onmessage = (event) => {
207
+ // try {
208
+ // const data = JSON.parse(event.data);
209
+ //
210
+ // // Verify request info from onWebSocket
211
+ // expect(data.hasRequest).toBe(true);
212
+ // expect(data.requestUrl).toContain("/test-path");
213
+ // expect(data.requestMethod).toBe("GET");
214
+ // expect(data.requestHeaders).toBeDefined();
215
+ //
216
+ // ws.close();
217
+ // resolve();
218
+ // } catch (error) {
219
+ // reject(error);
220
+ // }
221
+ // };
222
+ //
223
+ // ws.onerror = (error) => {
224
+ // reject(error);
225
+ // };
226
+ // });
227
+ // }
228
+ // });
243
229
  });
244
230
  }
@@ -1,8 +1,8 @@
1
1
  import { resolve } from "node:path";
2
2
  import { type TestContext, vi } from "vitest";
3
3
  import { assertUnreachable } from "@/actor/utils";
4
- import { createClientWithDriver } from "@/client/client";
5
4
  import { type Client, createClient } from "@/client/mod";
5
+ import { createClientWithDriver } from "@/mod";
6
6
  import type { registry } from "../../fixtures/driver-test-suite/registry";
7
7
  import type { DriverTestConfig } from "./mod";
8
8
  import { createTestInlineClientDriver } from "./test-inline-client-driver";
@@ -23,23 +23,27 @@ export async function setupDriverTest(
23
23
  }
24
24
 
25
25
  // Build drivers
26
- const projectPath = resolve(__dirname, "../../fixtures/driver-test-suite");
27
- const { endpoint, cleanup } = await driverTestConfig.start(projectPath);
26
+ const { endpoint, namespace, runnerName, cleanup } =
27
+ await driverTestConfig.start();
28
28
  c.onTestFinished(cleanup);
29
29
 
30
30
  let client: Client<typeof registry>;
31
31
  if (driverTestConfig.clientType === "http") {
32
32
  // Create client
33
- client = createClient<typeof registry>(endpoint, {
33
+ client = createClient<typeof registry>({
34
+ endpoint,
35
+ namespace,
36
+ runnerName,
34
37
  transport: driverTestConfig.transport,
35
38
  });
36
39
  } else if (driverTestConfig.clientType === "inline") {
37
40
  // Use inline client from driver
38
- const clientDriver = createTestInlineClientDriver(
41
+ const managerDriver = createTestInlineClientDriver(
39
42
  endpoint,
43
+ "bare",
40
44
  driverTestConfig.transport ?? "websocket",
41
45
  );
42
- client = createClientWithDriver(clientDriver);
46
+ client = createClientWithDriver(managerDriver);
43
47
  } else {
44
48
  assertUnreachable(driverTestConfig.clientType);
45
49
  }
@@ -1,5 +1,5 @@
1
1
  import { UserError } from "@/actor/errors";
2
- import { logger } from "@/actor/log";
2
+ import { loggerWithoutContext } from "@/actor/log";
3
3
  import { createEngineDriver } from "@/drivers/engine/mod";
4
4
  import { createFileSystemOrMemoryDriver } from "@/drivers/file-system/mod";
5
5
  import type { DriverConfig, RunConfig } from "@/registry/run-config";
@@ -9,7 +9,7 @@ import { getEnvUniversal } from "@/utils";
9
9
  * Chooses the appropriate driver based on the run configuration.
10
10
  */
11
11
  export function chooseDefaultDriver(runConfig: RunConfig): DriverConfig {
12
- const engineEndpoint = runConfig.engine || getEnvUniversal("RIVET_ENGINE");
12
+ const engineEndpoint = runConfig.endpoint ?? getEnvUniversal("RIVET_ENGINE");
13
13
 
14
14
  if (engineEndpoint && runConfig.driver) {
15
15
  throw new UserError(
@@ -22,10 +22,13 @@ export function chooseDefaultDriver(runConfig: RunConfig): DriverConfig {
22
22
  }
23
23
 
24
24
  if (engineEndpoint) {
25
- logger().debug("using rivet engine driver", { endpoint: engineEndpoint });
25
+ loggerWithoutContext().debug({
26
+ msg: "using rivet engine driver",
27
+ endpoint: engineEndpoint,
28
+ });
26
29
  return createEngineDriver({ endpoint: engineEndpoint });
27
30
  }
28
31
 
29
- logger().debug("using default file system driver");
32
+ loggerWithoutContext().debug({ msg: "using default file system driver" });
30
33
  return createFileSystemOrMemoryDriver(true);
31
34
  }
@@ -6,8 +6,10 @@ import { Runner } from "@rivetkit/engine-runner";
6
6
  import * as cbor from "cbor-x";
7
7
  import { WSContext } from "hono/ws";
8
8
  import invariant from "invariant";
9
+ import { deserializeActorKey } from "@/actor/keys";
9
10
  import { EncodingSchema } from "@/actor/protocol/serde";
10
11
  import type { Client } from "@/client/client";
12
+ import { getLogger } from "@/common/log";
11
13
  import {
12
14
  type ActorDriver,
13
15
  type AnyActorInstance,
@@ -35,7 +37,6 @@ import {
35
37
  PATH_RAW_WEBSOCKET_PREFIX,
36
38
  } from "@/mod";
37
39
  import type { Config } from "./config";
38
- import { deserializeActorKey } from "./keys";
39
40
  import { KEYS } from "./kv";
40
41
  import { logger } from "./log";
41
42
 
@@ -94,34 +95,40 @@ export class EngineActorDriver implements ActorDriver {
94
95
  ),
95
96
  onConnected: () => {
96
97
  if (hasDisconnected) {
97
- logger().info("runner reconnected", {
98
+ logger().info({
99
+ msg: "runner reconnected",
98
100
  namespace: this.#config.namespace,
99
101
  runnerName: this.#config.runnerName,
100
102
  });
101
103
  } else {
102
- logger().debug("runner connected", {
104
+ logger().debug({
105
+ msg: "runner connected",
103
106
  namespace: this.#config.namespace,
104
107
  runnerName: this.#config.runnerName,
105
108
  });
106
109
  }
107
110
  },
108
111
  onDisconnected: () => {
109
- logger().warn("runner disconnected", {
112
+ logger().warn({
113
+ msg: "runner disconnected",
110
114
  namespace: this.#config.namespace,
111
115
  runnerName: this.#config.runnerName,
112
116
  });
113
117
  hasDisconnected = true;
114
118
  },
119
+ onShutdown: () => {},
115
120
  fetch: this.#runnerFetch.bind(this),
116
121
  websocket: this.#runnerWebSocket.bind(this),
117
122
  onActorStart: this.#runnerOnActorStart.bind(this),
118
123
  onActorStop: this.#runnerOnActorStop.bind(this),
124
+ logger: getLogger("engine-runner"),
119
125
  };
120
126
 
121
127
  // Create and start runner
122
128
  this.#runner = new Runner(runnerConfig);
123
129
  this.#runner.start();
124
- logger().debug("engine runner started", {
130
+ logger().debug({
131
+ msg: "engine runner started",
125
132
  endpoint: config.endpoint,
126
133
  namespace: config.namespace,
127
134
  runnerName: config.runnerName,
@@ -195,7 +202,8 @@ export class EngineActorDriver implements ActorDriver {
195
202
  generation: number,
196
203
  config: RunnerActorConfig,
197
204
  ): Promise<void> {
198
- logger().debug("runner actor starting", {
205
+ logger().debug({
206
+ msg: "runner actor starting",
199
207
  actorId,
200
208
  name: config.name,
201
209
  key: config.key,
@@ -248,11 +256,11 @@ export class EngineActorDriver implements ActorDriver {
248
256
  handler.actorStartPromise?.resolve();
249
257
  handler.actorStartPromise = undefined;
250
258
 
251
- logger().debug("runner actor started", { actorId, name, key });
259
+ logger().debug({ msg: "runner actor started", actorId, name, key });
252
260
  }
253
261
 
254
262
  async #runnerOnActorStop(actorId: string, generation: number): Promise<void> {
255
- logger().debug("runner actor stopping", { actorId, generation });
263
+ logger().debug({ msg: "runner actor stopping", actorId, generation });
256
264
 
257
265
  const handler = this.#actors.get(actorId);
258
266
  if (handler?.actor) {
@@ -260,11 +268,12 @@ export class EngineActorDriver implements ActorDriver {
260
268
  this.#actors.delete(actorId);
261
269
  }
262
270
 
263
- logger().debug("runner actor stopped", { actorId });
271
+ logger().debug({ msg: "runner actor stopped", actorId });
264
272
  }
265
273
 
266
274
  async #runnerFetch(actorId: string, request: Request): Promise<Response> {
267
- logger().debug("runner fetch", {
275
+ logger().debug({
276
+ msg: "runner fetch",
268
277
  actorId,
269
278
  url: request.url,
270
279
  method: request.method,
@@ -279,7 +288,7 @@ export class EngineActorDriver implements ActorDriver {
279
288
  ): Promise<void> {
280
289
  const websocket = websocketRaw as UniversalWebSocket;
281
290
 
282
- logger().debug("runner websocket", { actorId, url: request.url });
291
+ logger().debug({ msg: "runner websocket", actorId, url: request.url });
283
292
 
284
293
  const url = new URL(request.url);
285
294
 
@@ -324,7 +333,7 @@ export class EngineActorDriver implements ActorDriver {
324
333
  const wsContext = new WSContext(websocket);
325
334
 
326
335
  wsHandlerPromise.catch((err) => {
327
- logger().error("building websocket handlers errored", { err });
336
+ logger().error({ msg: "building websocket handlers errored", err });
328
337
  wsContext.close(1011, `${err}`);
329
338
  });
330
339
 
@@ -354,7 +363,7 @@ export class EngineActorDriver implements ActorDriver {
354
363
  }
355
364
 
356
365
  async shutdown(immediate: boolean): Promise<void> {
357
- logger().info("stopping engine actor driver");
366
+ logger().info({ msg: "stopping engine actor driver" });
358
367
  await this.#runner.shutdown(immediate);
359
368
  }
360
369
  }
@@ -8,7 +8,7 @@ export const ConfigSchema = z
8
8
  endpoint: z
9
9
  .string()
10
10
  .default(
11
- () => getEnvUniversal("RIVET_ENGINE") ?? "http://localhost:7080",
11
+ () => getEnvUniversal("RIVET_ENGINE") ?? "http://localhost:6420",
12
12
  ),
13
13
  pegboardEndpoint: z.string().optional(),
14
14
  namespace: z
@@ -17,21 +17,13 @@ export const ConfigSchema = z
17
17
  runnerName: z
18
18
  .string()
19
19
  .default(() => getEnvUniversal("RIVET_RUNNER") ?? "rivetkit"),
20
- // TODO: Automatically attempt ot determine key by common env vars (e.g. k8s pod name)
20
+ // TODO: Automatically attempt to determine key by common env vars (e.g. k8s pod name)
21
21
  runnerKey: z
22
22
  .string()
23
23
  .default(
24
24
  () => getEnvUniversal("RIVET_RUNNER_KEY") ?? crypto.randomUUID(),
25
25
  ),
26
26
  totalSlots: z.number().default(100_000),
27
- addresses: z
28
- .record(
29
- z.object({
30
- host: z.string(),
31
- port: z.number(),
32
- }),
33
- )
34
- .default({ main: { host: "127.0.0.1", port: 5051 } }),
35
27
  })
36
28
  .default({});
37
29
 
@@ -1,3 +1,3 @@
1
1
  export const KEYS = {
2
- PERSIST_DATA: Uint8Array.from([1, 1]),
2
+ PERSIST_DATA: Uint8Array.from([1]),
3
3
  };
@@ -1,7 +1,5 @@
1
1
  import { getLogger } from "@/common/log";
2
2
 
3
- export const LOGGER_NAME = "driver-engine";
4
-
5
3
  export function logger() {
6
- return getLogger(LOGGER_NAME);
4
+ return getLogger("driver-engine");
7
5
  }
@@ -2,13 +2,12 @@ import type { Client } from "@/client/client";
2
2
  import type { ManagerDriver } from "@/manager/driver";
3
3
  import type { RegistryConfig } from "@/registry/config";
4
4
  import type { DriverConfig, RunConfig } from "@/registry/run-config";
5
+ import { RemoteManagerDriver } from "@/remote-manager-driver/mod";
5
6
  import { EngineActorDriver } from "./actor-driver";
6
7
  import { ConfigSchema, type InputConfig } from "./config";
7
- import { EngineManagerDriver } from "./manager-driver";
8
8
 
9
9
  export { EngineActorDriver } from "./actor-driver";
10
10
  export { type Config, ConfigSchema, type InputConfig } from "./config";
11
- export { EngineManagerDriver } from "./manager-driver";
12
11
 
13
12
  export function createEngineDriver(inputConfig?: InputConfig): DriverConfig {
14
13
  const config = ConfigSchema.parse(inputConfig);
@@ -16,7 +15,7 @@ export function createEngineDriver(inputConfig?: InputConfig): DriverConfig {
16
15
  return {
17
16
  name: "engine",
18
17
  manager: (_registryConfig, runConfig) => {
19
- return new EngineManagerDriver(config, runConfig);
18
+ return new RemoteManagerDriver(runConfig);
20
19
  },
21
20
  actor: (
22
21
  registryConfig: RegistryConfig,
@@ -1,5 +1,5 @@
1
1
  import type { GenericConnGlobalState } from "@/actor/generic-conn-driver";
2
- import { logger } from "@/actor/log";
2
+ import { loggerWithoutContext } from "@/actor/log";
3
3
  import type { AnyClient } from "@/client/client";
4
4
  import type {
5
5
  ActorDriver,