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.
- package/README.md +11 -0
- package/dist/schemas/actor-persist/v1.ts +21 -24
- package/dist/schemas/client-protocol/v1.ts +6 -0
- package/dist/tsup/actor/errors.cjs +10 -2
- package/dist/tsup/actor/errors.cjs.map +1 -1
- package/dist/tsup/actor/errors.d.cts +17 -4
- package/dist/tsup/actor/errors.d.ts +17 -4
- package/dist/tsup/actor/errors.js +11 -3
- package/dist/tsup/{chunk-6PDXBYI5.js → chunk-3F2YSRJL.js} +8 -23
- package/dist/tsup/chunk-3F2YSRJL.js.map +1 -0
- package/dist/tsup/chunk-4CXBCT26.cjs +250 -0
- package/dist/tsup/chunk-4CXBCT26.cjs.map +1 -0
- package/dist/tsup/chunk-4R73YDN3.cjs +20 -0
- package/dist/tsup/chunk-4R73YDN3.cjs.map +1 -0
- package/dist/tsup/{chunk-OGAPU3UG.cjs → chunk-6LJT3QRL.cjs} +39 -25
- package/dist/tsup/chunk-6LJT3QRL.cjs.map +1 -0
- package/dist/tsup/{chunk-6WKQDDUD.cjs → chunk-GICQ3YCU.cjs} +143 -141
- package/dist/tsup/chunk-GICQ3YCU.cjs.map +1 -0
- package/dist/tsup/{chunk-FLMTTN27.js → chunk-H26RP6GD.js} +15 -8
- package/dist/tsup/chunk-H26RP6GD.js.map +1 -0
- package/dist/tsup/chunk-HI3HWJRC.js +20 -0
- package/dist/tsup/chunk-HI3HWJRC.js.map +1 -0
- package/dist/tsup/{chunk-4NSUQZ2H.js → chunk-HLLF4B4Q.js} +116 -114
- package/dist/tsup/chunk-HLLF4B4Q.js.map +1 -0
- package/dist/tsup/{chunk-FCCPJNMA.cjs → chunk-IH6CKNDW.cjs} +12 -27
- package/dist/tsup/chunk-IH6CKNDW.cjs.map +1 -0
- package/dist/tsup/chunk-LV2S3OU3.js +250 -0
- package/dist/tsup/chunk-LV2S3OU3.js.map +1 -0
- package/dist/tsup/{chunk-R2OPSKIV.cjs → chunk-LWNKVZG5.cjs} +20 -13
- package/dist/tsup/chunk-LWNKVZG5.cjs.map +1 -0
- package/dist/tsup/{chunk-INGJP237.js → chunk-NFU2BBT5.js} +102 -43
- package/dist/tsup/chunk-NFU2BBT5.js.map +1 -0
- package/dist/tsup/{chunk-3H7O2A7I.js → chunk-PQY7KKTL.js} +33 -19
- package/dist/tsup/chunk-PQY7KKTL.js.map +1 -0
- package/dist/tsup/{chunk-PO4VLDWA.js → chunk-QK72M5JB.js} +3 -5
- package/dist/tsup/chunk-QK72M5JB.js.map +1 -0
- package/dist/tsup/{chunk-TZJKSBUQ.cjs → chunk-QNNXFOQV.cjs} +3 -5
- package/dist/tsup/chunk-QNNXFOQV.cjs.map +1 -0
- package/dist/tsup/{chunk-GIR3AFFI.cjs → chunk-SBHHJ6QS.cjs} +102 -43
- package/dist/tsup/chunk-SBHHJ6QS.cjs.map +1 -0
- package/dist/tsup/chunk-TQ62L3X7.js +325 -0
- package/dist/tsup/chunk-TQ62L3X7.js.map +1 -0
- package/dist/tsup/chunk-VO7ZRVVD.cjs +6293 -0
- package/dist/tsup/chunk-VO7ZRVVD.cjs.map +1 -0
- package/dist/tsup/chunk-WHBPJNGW.cjs +325 -0
- package/dist/tsup/chunk-WHBPJNGW.cjs.map +1 -0
- package/dist/tsup/chunk-XJQHKJ4P.js +6293 -0
- package/dist/tsup/chunk-XJQHKJ4P.js.map +1 -0
- package/dist/tsup/client/mod.cjs +10 -10
- package/dist/tsup/client/mod.d.cts +7 -13
- package/dist/tsup/client/mod.d.ts +7 -13
- package/dist/tsup/client/mod.js +9 -9
- package/dist/tsup/common/log.cjs +12 -4
- package/dist/tsup/common/log.cjs.map +1 -1
- package/dist/tsup/common/log.d.cts +23 -17
- package/dist/tsup/common/log.d.ts +23 -17
- package/dist/tsup/common/log.js +15 -7
- package/dist/tsup/common/websocket.cjs +5 -5
- package/dist/tsup/common/websocket.js +4 -4
- package/dist/tsup/{common-CpqORuCq.d.cts → common-CXCe7s6i.d.cts} +2 -2
- package/dist/tsup/{common-CpqORuCq.d.ts → common-CXCe7s6i.d.ts} +2 -2
- package/dist/tsup/{connection-BwUMoe6n.d.ts → connection-BI-6UIBJ.d.ts} +196 -226
- package/dist/tsup/{connection-BR_Ve4ku.d.cts → connection-Dyd4NLGW.d.cts} +196 -226
- package/dist/tsup/driver-helpers/mod.cjs +6 -9
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +5 -6
- package/dist/tsup/driver-helpers/mod.d.ts +5 -6
- package/dist/tsup/driver-helpers/mod.js +6 -9
- package/dist/tsup/driver-test-suite/mod.cjs +155 -1363
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +11 -5
- package/dist/tsup/driver-test-suite/mod.d.ts +11 -5
- package/dist/tsup/driver-test-suite/mod.js +876 -2084
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +6 -8
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/inspector/mod.d.cts +3 -3
- package/dist/tsup/inspector/mod.d.ts +3 -3
- package/dist/tsup/inspector/mod.js +8 -10
- package/dist/tsup/mod.cjs +9 -15
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +47 -42
- package/dist/tsup/mod.d.ts +47 -42
- package/dist/tsup/mod.js +10 -16
- package/dist/tsup/{router-endpoints-DAbqVFx2.d.ts → router-endpoints-BTe_Rsdn.d.cts} +2 -3
- package/dist/tsup/{router-endpoints-AYkXG8Tl.d.cts → router-endpoints-CBSrKHmo.d.ts} +2 -3
- package/dist/tsup/test/mod.cjs +10 -14
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +4 -5
- package/dist/tsup/test/mod.d.ts +4 -5
- package/dist/tsup/test/mod.js +9 -13
- package/dist/tsup/{utils-CT0cv4jd.d.ts → utils-fwx3o3K9.d.cts} +1 -0
- package/dist/tsup/{utils-CT0cv4jd.d.cts → utils-fwx3o3K9.d.ts} +1 -0
- package/dist/tsup/utils.cjs +3 -3
- package/dist/tsup/utils.d.cts +1 -1
- package/dist/tsup/utils.d.ts +1 -1
- package/dist/tsup/utils.js +2 -2
- package/package.json +4 -4
- package/src/actor/action.ts +1 -5
- package/src/actor/config.ts +27 -295
- package/src/actor/connection.ts +9 -12
- package/src/actor/context.ts +1 -4
- package/src/actor/definition.ts +7 -11
- package/src/actor/errors.ts +97 -35
- package/src/actor/generic-conn-driver.ts +28 -16
- package/src/actor/instance.ts +177 -133
- package/src/actor/log.ts +4 -13
- package/src/actor/mod.ts +0 -5
- package/src/actor/protocol/old.ts +42 -26
- package/src/actor/protocol/serde.ts +1 -1
- package/src/actor/router-endpoints.ts +41 -38
- package/src/actor/router.ts +20 -18
- package/src/actor/unstable-react.ts +1 -1
- package/src/actor/utils.ts +6 -2
- package/src/client/actor-common.ts +1 -1
- package/src/client/actor-conn.ts +152 -91
- package/src/client/actor-handle.ts +85 -25
- package/src/client/actor-query.ts +65 -0
- package/src/client/client.ts +29 -98
- package/src/client/config.ts +44 -0
- package/src/client/errors.ts +1 -0
- package/src/client/log.ts +2 -4
- package/src/client/mod.ts +16 -12
- package/src/client/raw-utils.ts +82 -25
- package/src/client/utils.ts +5 -3
- package/src/common/fake-event-source.ts +10 -9
- package/src/common/inline-websocket-adapter2.ts +39 -30
- package/src/common/log.ts +176 -101
- package/src/common/logfmt.ts +21 -30
- package/src/common/router.ts +12 -19
- package/src/common/utils.ts +27 -13
- package/src/common/websocket.ts +0 -1
- package/src/driver-helpers/mod.ts +1 -1
- package/src/driver-test-suite/log.ts +1 -3
- package/src/driver-test-suite/mod.ts +86 -60
- package/src/driver-test-suite/tests/actor-handle.ts +33 -0
- package/src/driver-test-suite/tests/manager-driver.ts +5 -3
- package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -226
- package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -392
- package/src/driver-test-suite/tests/request-access.ts +112 -126
- package/src/driver-test-suite/utils.ts +13 -10
- package/src/drivers/default.ts +7 -4
- package/src/drivers/engine/actor-driver.ts +22 -13
- package/src/drivers/engine/config.ts +2 -10
- package/src/drivers/engine/kv.ts +1 -1
- package/src/drivers/engine/log.ts +1 -3
- package/src/drivers/engine/mod.ts +2 -3
- package/src/drivers/file-system/actor.ts +1 -1
- package/src/drivers/file-system/global-state.ts +33 -20
- package/src/drivers/file-system/log.ts +1 -3
- package/src/drivers/file-system/manager.ts +31 -8
- package/src/inspector/config.ts +9 -4
- package/src/inspector/log.ts +1 -1
- package/src/inspector/manager.ts +2 -2
- package/src/inspector/utils.ts +1 -1
- package/src/manager/driver.ts +10 -2
- package/src/manager/hono-websocket-adapter.ts +21 -12
- package/src/manager/log.ts +2 -4
- package/src/manager/mod.ts +1 -1
- package/src/manager/router.ts +277 -1657
- package/src/manager-api/routes/actors-create.ts +16 -0
- package/src/manager-api/routes/actors-delete.ts +4 -0
- package/src/manager-api/routes/actors-get-by-id.ts +7 -0
- package/src/manager-api/routes/actors-get-or-create-by-id.ts +29 -0
- package/src/manager-api/routes/actors-get.ts +7 -0
- package/src/manager-api/routes/common.ts +18 -0
- package/src/mod.ts +0 -2
- package/src/registry/config.ts +1 -1
- package/src/registry/log.ts +2 -4
- package/src/registry/mod.ts +57 -24
- package/src/registry/run-config.ts +31 -33
- package/src/registry/serve.ts +4 -5
- package/src/remote-manager-driver/actor-http-client.ts +72 -0
- package/src/remote-manager-driver/actor-websocket-client.ts +63 -0
- package/src/remote-manager-driver/api-endpoints.ts +79 -0
- package/src/remote-manager-driver/api-utils.ts +43 -0
- package/src/remote-manager-driver/log.ts +5 -0
- package/src/remote-manager-driver/mod.ts +274 -0
- package/src/{drivers/engine → remote-manager-driver}/ws-proxy.ts +24 -14
- package/src/serde.ts +8 -2
- package/src/test/log.ts +1 -3
- package/src/test/mod.ts +17 -16
- package/dist/tsup/chunk-2CRLFV6Z.cjs +0 -202
- package/dist/tsup/chunk-2CRLFV6Z.cjs.map +0 -1
- package/dist/tsup/chunk-3H7O2A7I.js.map +0 -1
- package/dist/tsup/chunk-42I3OZ3Q.js +0 -15
- package/dist/tsup/chunk-42I3OZ3Q.js.map +0 -1
- package/dist/tsup/chunk-4NSUQZ2H.js.map +0 -1
- package/dist/tsup/chunk-6PDXBYI5.js.map +0 -1
- package/dist/tsup/chunk-6WKQDDUD.cjs.map +0 -1
- package/dist/tsup/chunk-CTBOSFUH.cjs +0 -116
- package/dist/tsup/chunk-CTBOSFUH.cjs.map +0 -1
- package/dist/tsup/chunk-EGVZZFE2.js +0 -2857
- package/dist/tsup/chunk-EGVZZFE2.js.map +0 -1
- package/dist/tsup/chunk-FCCPJNMA.cjs.map +0 -1
- package/dist/tsup/chunk-FLMTTN27.js.map +0 -1
- package/dist/tsup/chunk-GIR3AFFI.cjs.map +0 -1
- package/dist/tsup/chunk-INGJP237.js.map +0 -1
- package/dist/tsup/chunk-KJCJLKRM.js +0 -116
- package/dist/tsup/chunk-KJCJLKRM.js.map +0 -1
- package/dist/tsup/chunk-KUPQZYUQ.cjs +0 -15
- package/dist/tsup/chunk-KUPQZYUQ.cjs.map +0 -1
- package/dist/tsup/chunk-O2MBYIXO.cjs +0 -2857
- package/dist/tsup/chunk-O2MBYIXO.cjs.map +0 -1
- package/dist/tsup/chunk-OGAPU3UG.cjs.map +0 -1
- package/dist/tsup/chunk-OV6AYD4S.js +0 -4406
- package/dist/tsup/chunk-OV6AYD4S.js.map +0 -1
- package/dist/tsup/chunk-PO4VLDWA.js.map +0 -1
- package/dist/tsup/chunk-R2OPSKIV.cjs.map +0 -1
- package/dist/tsup/chunk-TZJKSBUQ.cjs.map +0 -1
- package/dist/tsup/chunk-UBUC5C3G.cjs +0 -189
- package/dist/tsup/chunk-UBUC5C3G.cjs.map +0 -1
- package/dist/tsup/chunk-UIM22YJL.cjs +0 -4406
- package/dist/tsup/chunk-UIM22YJL.cjs.map +0 -1
- package/dist/tsup/chunk-URVFQMYI.cjs +0 -230
- package/dist/tsup/chunk-URVFQMYI.cjs.map +0 -1
- package/dist/tsup/chunk-UVUPOS46.js +0 -230
- package/dist/tsup/chunk-UVUPOS46.js.map +0 -1
- package/dist/tsup/chunk-VRRHBNJC.js +0 -189
- package/dist/tsup/chunk-VRRHBNJC.js.map +0 -1
- package/dist/tsup/chunk-XFSS33EQ.js +0 -202
- package/dist/tsup/chunk-XFSS33EQ.js.map +0 -1
- package/src/client/http-client-driver.ts +0 -326
- package/src/driver-test-suite/test-inline-client-driver.ts +0 -402
- package/src/driver-test-suite/tests/actor-auth.ts +0 -591
- package/src/drivers/engine/api-endpoints.ts +0 -128
- package/src/drivers/engine/api-utils.ts +0 -70
- package/src/drivers/engine/manager-driver.ts +0 -391
- package/src/inline-client-driver/log.ts +0 -7
- package/src/inline-client-driver/mod.ts +0 -385
- package/src/manager/auth.ts +0 -121
- /package/src/{drivers/engine → actor}/keys.test.ts +0 -0
- /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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
test
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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 } =
|
|
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>(
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
}
|
package/src/drivers/default.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UserError } from "@/actor/errors";
|
|
2
|
-
import {
|
|
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.
|
|
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
|
-
|
|
25
|
+
loggerWithoutContext().debug({
|
|
26
|
+
msg: "using rivet engine driver",
|
|
27
|
+
endpoint: engineEndpoint,
|
|
28
|
+
});
|
|
26
29
|
return createEngineDriver({ endpoint: engineEndpoint });
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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",
|
|
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",
|
|
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",
|
|
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(
|
|
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",
|
|
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",
|
|
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:
|
|
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
|
|
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
|
|
package/src/drivers/engine/kv.ts
CHANGED
|
@@ -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
|
|
18
|
+
return new RemoteManagerDriver(runConfig);
|
|
20
19
|
},
|
|
21
20
|
actor: (
|
|
22
21
|
registryConfig: RegistryConfig,
|