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
@@ -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,11 +1,9 @@
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";
6
5
  import type { registry } from "../../fixtures/driver-test-suite/registry";
7
6
  import type { DriverTestConfig } from "./mod";
8
- import { createTestInlineClientDriver } from "./test-inline-client-driver";
9
7
 
10
8
  export const FAKE_TIME = new Date("2024-01-01T00:00:00.000Z");
11
9
 
@@ -24,22 +22,27 @@ export async function setupDriverTest(
24
22
 
25
23
  // Build drivers
26
24
  const projectPath = resolve(__dirname, "../../fixtures/driver-test-suite");
27
- const { endpoint, cleanup } = await driverTestConfig.start(projectPath);
25
+ const { endpoint, namespace, runnerName, cleanup } =
26
+ await driverTestConfig.start(projectPath);
28
27
  c.onTestFinished(cleanup);
29
28
 
30
29
  let client: Client<typeof registry>;
31
30
  if (driverTestConfig.clientType === "http") {
32
31
  // Create client
33
- client = createClient<typeof registry>(endpoint, {
32
+ client = createClient<typeof registry>({
33
+ endpoint,
34
+ namespace,
35
+ runnerName,
34
36
  transport: driverTestConfig.transport,
35
37
  });
36
38
  } else if (driverTestConfig.clientType === "inline") {
37
- // Use inline client from driver
38
- const clientDriver = createTestInlineClientDriver(
39
- endpoint,
40
- driverTestConfig.transport ?? "websocket",
41
- );
42
- client = createClientWithDriver(clientDriver);
39
+ throw "TODO";
40
+ // // Use inline client from driver
41
+ // const clientDriver = createTestInlineClientDriver(
42
+ // endpoint,
43
+ // driverTestConfig.transport ?? "websocket",
44
+ // );
45
+ // client = createClientWithDriver(clientDriver);
43
46
  } else {
44
47
  assertUnreachable(driverTestConfig.clientType);
45
48
  }
@@ -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,