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
|
@@ -84,6 +84,10 @@ export class FileSystemGlobalState {
|
|
|
84
84
|
actorDriver: ActorDriver;
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
+
get persist(): boolean {
|
|
88
|
+
return this.#persist;
|
|
89
|
+
}
|
|
90
|
+
|
|
87
91
|
get storagePath() {
|
|
88
92
|
return this.#storagePath;
|
|
89
93
|
}
|
|
@@ -109,10 +113,11 @@ export class FileSystemGlobalState {
|
|
|
109
113
|
const actorIds = fsSync.readdirSync(this.#stateDir);
|
|
110
114
|
this.#actorCountOnStartup = actorIds.length;
|
|
111
115
|
} catch (error) {
|
|
112
|
-
logger().error("failed to count actors",
|
|
116
|
+
logger().error({ msg: "failed to count actors", error });
|
|
113
117
|
}
|
|
114
118
|
|
|
115
|
-
logger().debug(
|
|
119
|
+
logger().debug({
|
|
120
|
+
msg: "file system driver ready",
|
|
116
121
|
dir: this.#storagePath,
|
|
117
122
|
actorCount: this.#actorCountOnStartup,
|
|
118
123
|
});
|
|
@@ -121,10 +126,10 @@ export class FileSystemGlobalState {
|
|
|
121
126
|
try {
|
|
122
127
|
this.#cleanupTempFilesSync();
|
|
123
128
|
} catch (err) {
|
|
124
|
-
logger().error("failed to cleanup temp files",
|
|
129
|
+
logger().error({ msg: "failed to cleanup temp files", error: err });
|
|
125
130
|
}
|
|
126
131
|
} else {
|
|
127
|
-
logger().debug("memory driver ready");
|
|
132
|
+
logger().debug({ msg: "memory driver ready" });
|
|
128
133
|
}
|
|
129
134
|
}
|
|
130
135
|
|
|
@@ -165,7 +170,7 @@ export class FileSystemGlobalState {
|
|
|
165
170
|
const state = await this.loadActorStateOrError(actorId);
|
|
166
171
|
yield state;
|
|
167
172
|
} catch (error) {
|
|
168
|
-
logger().error("failed to load actor state",
|
|
173
|
+
logger().error({ msg: "failed to load actor state", actorId, error });
|
|
169
174
|
}
|
|
170
175
|
}
|
|
171
176
|
}
|
|
@@ -353,7 +358,7 @@ export class FileSystemGlobalState {
|
|
|
353
358
|
try {
|
|
354
359
|
await fs.unlink(tempPath);
|
|
355
360
|
} catch {}
|
|
356
|
-
logger().error("failed to write alarm",
|
|
361
|
+
logger().error({ msg: "failed to write alarm", actorId, error });
|
|
357
362
|
throw new Error(`Failed to write alarm: ${error}`);
|
|
358
363
|
}
|
|
359
364
|
}
|
|
@@ -398,7 +403,7 @@ export class FileSystemGlobalState {
|
|
|
398
403
|
} catch {
|
|
399
404
|
// Ignore cleanup errors
|
|
400
405
|
}
|
|
401
|
-
logger().error("failed to save actor state",
|
|
406
|
+
logger().error({ msg: "failed to save actor state", actorId, error });
|
|
402
407
|
throw new Error(`Failed to save actor state: ${error}`);
|
|
403
408
|
}
|
|
404
409
|
}
|
|
@@ -417,7 +422,6 @@ export class FileSystemGlobalState {
|
|
|
417
422
|
actorDriver: ActorDriver,
|
|
418
423
|
) {
|
|
419
424
|
if (this.#runnerParams) {
|
|
420
|
-
logger().warn("already called onRunnerStart");
|
|
421
425
|
return;
|
|
422
426
|
}
|
|
423
427
|
|
|
@@ -433,7 +437,7 @@ export class FileSystemGlobalState {
|
|
|
433
437
|
try {
|
|
434
438
|
this.#loadAlarmsSync();
|
|
435
439
|
} catch (err) {
|
|
436
|
-
logger().error("failed to load alarms on startup",
|
|
440
|
+
logger().error({ msg: "failed to load alarms on startup", error: err });
|
|
437
441
|
}
|
|
438
442
|
}
|
|
439
443
|
|
|
@@ -538,17 +542,18 @@ export class FileSystemGlobalState {
|
|
|
538
542
|
if (Number.isFinite(timestamp)) {
|
|
539
543
|
this.#scheduleAlarmTimeout(alarmData.actorId, timestamp);
|
|
540
544
|
} else {
|
|
541
|
-
logger().debug("invalid alarm file contents",
|
|
545
|
+
logger().debug({ msg: "invalid alarm file contents", file });
|
|
542
546
|
}
|
|
543
547
|
} catch (err) {
|
|
544
|
-
logger().error(
|
|
548
|
+
logger().error({
|
|
549
|
+
msg: "failed to read alarm file",
|
|
545
550
|
file,
|
|
546
551
|
error: stringifyError(err),
|
|
547
552
|
});
|
|
548
553
|
}
|
|
549
554
|
}
|
|
550
555
|
} catch (err) {
|
|
551
|
-
logger().error("failed to list alarms directory",
|
|
556
|
+
logger().error({ msg: "failed to list alarms directory", error: err });
|
|
552
557
|
}
|
|
553
558
|
}
|
|
554
559
|
|
|
@@ -563,7 +568,8 @@ export class FileSystemGlobalState {
|
|
|
563
568
|
entry.alarmTimestamp !== undefined &&
|
|
564
569
|
timestamp >= entry.alarmTimestamp
|
|
565
570
|
) {
|
|
566
|
-
logger().debug(
|
|
571
|
+
logger().debug({
|
|
572
|
+
msg: "skipping alarm schedule (later than existing)",
|
|
567
573
|
actorId,
|
|
568
574
|
timestamp,
|
|
569
575
|
current: entry.alarmTimestamp,
|
|
@@ -571,7 +577,7 @@ export class FileSystemGlobalState {
|
|
|
571
577
|
return;
|
|
572
578
|
}
|
|
573
579
|
|
|
574
|
-
logger().debug("scheduling alarm",
|
|
580
|
+
logger().debug({ msg: "scheduling alarm", actorId, timestamp });
|
|
575
581
|
|
|
576
582
|
// Cancel existing timeout and update the current scheduled timestamp
|
|
577
583
|
entry.alarmTimeout?.abort();
|
|
@@ -587,7 +593,8 @@ export class FileSystemGlobalState {
|
|
|
587
593
|
await fs.unlink(this.getActorAlarmPath(actorId));
|
|
588
594
|
} catch (err: any) {
|
|
589
595
|
if (err?.code !== "ENOENT") {
|
|
590
|
-
logger().debug(
|
|
596
|
+
logger().debug({
|
|
597
|
+
msg: "failed to remove alarm file",
|
|
591
598
|
actorId,
|
|
592
599
|
error: stringifyError(err),
|
|
593
600
|
});
|
|
@@ -596,7 +603,7 @@ export class FileSystemGlobalState {
|
|
|
596
603
|
}
|
|
597
604
|
|
|
598
605
|
try {
|
|
599
|
-
logger().debug("triggering alarm",
|
|
606
|
+
logger().debug({ msg: "triggering alarm", actorId, timestamp });
|
|
600
607
|
|
|
601
608
|
// Ensure actor state exists and start actor if needed
|
|
602
609
|
const loaded = await this.loadActor(actorId);
|
|
@@ -618,7 +625,8 @@ export class FileSystemGlobalState {
|
|
|
618
625
|
invariant(loaded.actor, "actor should be loaded after wake");
|
|
619
626
|
await loaded.actor._onAlarm();
|
|
620
627
|
} catch (err) {
|
|
621
|
-
logger().error(
|
|
628
|
+
logger().error({
|
|
629
|
+
msg: "failed to handle alarm",
|
|
622
630
|
actorId,
|
|
623
631
|
error: stringifyError(err),
|
|
624
632
|
});
|
|
@@ -655,17 +663,22 @@ export class FileSystemGlobalState {
|
|
|
655
663
|
// Remove if older than 1 hour
|
|
656
664
|
if (stat.mtimeMs < oneHourAgo) {
|
|
657
665
|
fsSync.unlinkSync(fullPath);
|
|
658
|
-
logger().info(
|
|
666
|
+
logger().info({
|
|
667
|
+
msg: "cleaned up stale temp file",
|
|
668
|
+
file: tempFile,
|
|
669
|
+
});
|
|
659
670
|
}
|
|
660
671
|
} catch (err) {
|
|
661
|
-
logger().debug(
|
|
672
|
+
logger().debug({
|
|
673
|
+
msg: "failed to cleanup temp file",
|
|
662
674
|
file: tempFile,
|
|
663
675
|
error: err,
|
|
664
676
|
});
|
|
665
677
|
}
|
|
666
678
|
}
|
|
667
679
|
} catch (err) {
|
|
668
|
-
logger().error(
|
|
680
|
+
logger().error({
|
|
681
|
+
msg: "failed to read actors directory for cleanup",
|
|
669
682
|
error: err,
|
|
670
683
|
});
|
|
671
684
|
}
|
|
@@ -17,9 +17,9 @@ import type {
|
|
|
17
17
|
GetWithKeyInput,
|
|
18
18
|
ManagerDriver,
|
|
19
19
|
} from "@/driver-helpers/mod";
|
|
20
|
-
import { createInlineClientDriver } from "@/inline-client-driver/mod";
|
|
21
20
|
import { ManagerInspector } from "@/inspector/manager";
|
|
22
21
|
import { type Actor, ActorFeature, type ActorId } from "@/inspector/mod";
|
|
22
|
+
import type { ManagerDisplayInformation } from "@/manager/driver";
|
|
23
23
|
import {
|
|
24
24
|
type DriverConfig,
|
|
25
25
|
type Encoding,
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
PATH_RAW_WEBSOCKET_PREFIX,
|
|
28
28
|
type RegistryConfig,
|
|
29
29
|
type RunConfig,
|
|
30
|
+
type UniversalWebSocket,
|
|
30
31
|
} from "@/mod";
|
|
31
32
|
import type * as schema from "@/schemas/file-system-driver/mod";
|
|
32
33
|
import type { FileSystemGlobalState } from "./global-state";
|
|
@@ -119,7 +120,7 @@ export class FileSystemManagerDriver implements ManagerDriver {
|
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
// Actors run on the same node as the manager, so we create a dummy actor router that we route requests to
|
|
122
|
-
const inlineClient = createClientWithDriver(
|
|
123
|
+
const inlineClient = createClientWithDriver(this);
|
|
123
124
|
this.#actorDriver = this.#driverConfig.actor(
|
|
124
125
|
registryConfig,
|
|
125
126
|
runConfig,
|
|
@@ -140,7 +141,7 @@ export class FileSystemManagerDriver implements ManagerDriver {
|
|
|
140
141
|
actorId: string,
|
|
141
142
|
encoding: Encoding,
|
|
142
143
|
params: unknown,
|
|
143
|
-
): Promise<
|
|
144
|
+
): Promise<UniversalWebSocket> {
|
|
144
145
|
// TODO:
|
|
145
146
|
|
|
146
147
|
// Handle raw WebSocket paths
|
|
@@ -156,11 +157,17 @@ export class FileSystemManagerDriver implements ManagerDriver {
|
|
|
156
157
|
undefined,
|
|
157
158
|
);
|
|
158
159
|
return new InlineWebSocketAdapter2(wsHandler);
|
|
159
|
-
} else if (
|
|
160
|
+
} else if (
|
|
161
|
+
path.startsWith(PATH_RAW_WEBSOCKET_PREFIX) ||
|
|
162
|
+
path === "/raw/websocket"
|
|
163
|
+
) {
|
|
160
164
|
// Handle websocket proxy
|
|
165
|
+
// Normalize path to include trailing slash if missing
|
|
166
|
+
const normalizedPath =
|
|
167
|
+
path === "/raw/websocket" ? "/raw/websocket/" : path;
|
|
161
168
|
const wsHandler = await handleRawWebSocketHandler(
|
|
162
169
|
undefined,
|
|
163
|
-
|
|
170
|
+
normalizedPath,
|
|
164
171
|
this.#actorDriver,
|
|
165
172
|
actorId,
|
|
166
173
|
undefined,
|
|
@@ -206,11 +213,17 @@ export class FileSystemManagerDriver implements ManagerDriver {
|
|
|
206
213
|
);
|
|
207
214
|
|
|
208
215
|
return upgradeWebSocket(() => wsHandler)(c, noopNext());
|
|
209
|
-
} else if (
|
|
216
|
+
} else if (
|
|
217
|
+
path.startsWith(PATH_RAW_WEBSOCKET_PREFIX) ||
|
|
218
|
+
path === "/raw/websocket"
|
|
219
|
+
) {
|
|
210
220
|
// Handle websocket proxy
|
|
221
|
+
// Normalize path to include trailing slash if missing
|
|
222
|
+
const normalizedPath =
|
|
223
|
+
path === "/raw/websocket" ? "/raw/websocket/" : path;
|
|
211
224
|
const wsHandler = await handleRawWebSocketHandler(
|
|
212
225
|
c.req.raw,
|
|
213
|
-
|
|
226
|
+
normalizedPath,
|
|
214
227
|
this.#actorDriver,
|
|
215
228
|
actorId,
|
|
216
229
|
authData,
|
|
@@ -237,7 +250,7 @@ export class FileSystemManagerDriver implements ManagerDriver {
|
|
|
237
250
|
key: actor.state.key as string[],
|
|
238
251
|
};
|
|
239
252
|
} catch (error) {
|
|
240
|
-
logger().error("failed to read actor state",
|
|
253
|
+
logger().error({ msg: "failed to read actor state", actorId, error });
|
|
241
254
|
return undefined;
|
|
242
255
|
}
|
|
243
256
|
}
|
|
@@ -297,6 +310,16 @@ export class FileSystemManagerDriver implements ManagerDriver {
|
|
|
297
310
|
};
|
|
298
311
|
}
|
|
299
312
|
|
|
313
|
+
displayInformation(): ManagerDisplayInformation {
|
|
314
|
+
return {
|
|
315
|
+
name: this.#state.persist ? "File System" : "Memory",
|
|
316
|
+
properties: {
|
|
317
|
+
...(this.#state.persist ? { Data: this.#state.storagePath } : {}),
|
|
318
|
+
Instances: this.#state.actorCountOnStartup.toString(),
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
|
|
300
323
|
extraStartupLog() {
|
|
301
324
|
return {
|
|
302
325
|
instances: this.#state.actorCountOnStartup,
|
package/src/inspector/config.ts
CHANGED
|
@@ -24,14 +24,16 @@ const defaultEnabled = () => {
|
|
|
24
24
|
|
|
25
25
|
const defaultInspectorOrigins = [
|
|
26
26
|
"http://localhost:43708",
|
|
27
|
+
"http://localhost:43709",
|
|
27
28
|
"https://studio.rivet.gg",
|
|
29
|
+
"https://inspect.rivet.dev",
|
|
28
30
|
];
|
|
29
31
|
|
|
30
32
|
const defaultCors: CorsOptions = {
|
|
31
33
|
origin: (origin) => {
|
|
32
34
|
if (
|
|
33
35
|
defaultInspectorOrigins.includes(origin) ||
|
|
34
|
-
(origin.startsWith("https://") && origin.endsWith("rivet-
|
|
36
|
+
(origin.startsWith("https://") && origin.endsWith("rivet-dev.vercel.app"))
|
|
35
37
|
) {
|
|
36
38
|
return origin;
|
|
37
39
|
} else {
|
|
@@ -40,10 +42,13 @@ const defaultCors: CorsOptions = {
|
|
|
40
42
|
},
|
|
41
43
|
allowMethods: ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
|
|
42
44
|
allowHeaders: [
|
|
43
|
-
"Content-Type",
|
|
44
45
|
"Authorization",
|
|
45
|
-
|
|
46
|
-
"
|
|
46
|
+
"Content-Type",
|
|
47
|
+
"User-Agent",
|
|
48
|
+
"baggage",
|
|
49
|
+
"sentry-trace",
|
|
50
|
+
"x-rivet-actor",
|
|
51
|
+
"x-rivet-target",
|
|
47
52
|
],
|
|
48
53
|
maxAge: 3600,
|
|
49
54
|
credentials: true,
|
package/src/inspector/log.ts
CHANGED
package/src/inspector/manager.ts
CHANGED
|
@@ -35,7 +35,7 @@ export function createManagerInspectorRouter() {
|
|
|
35
35
|
});
|
|
36
36
|
return c.json(actors, 200);
|
|
37
37
|
} catch (error) {
|
|
38
|
-
inspectorLogger().error("Failed to fetch actors", error);
|
|
38
|
+
inspectorLogger().error({ msg: "Failed to fetch actors", error });
|
|
39
39
|
return c.json("Failed to fetch actors", 500);
|
|
40
40
|
}
|
|
41
41
|
})
|
|
@@ -81,6 +81,6 @@ export class ManagerInspector {
|
|
|
81
81
|
|
|
82
82
|
constructor(accessors: () => ManagerInspectorAccessors) {
|
|
83
83
|
this.accessors = accessors();
|
|
84
|
-
inspectorLogger().debug("Manager Inspector enabled and ready");
|
|
84
|
+
inspectorLogger().debug({ msg: "Manager Inspector enabled and ready" });
|
|
85
85
|
}
|
|
86
86
|
}
|
package/src/inspector/utils.ts
CHANGED
package/src/manager/driver.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Env, Hono, Context as HonoContext } from "hono";
|
|
2
|
-
import type { ActorKey, Encoding } from "@/actor/mod";
|
|
2
|
+
import type { ActorKey, Encoding, UniversalWebSocket } from "@/actor/mod";
|
|
3
3
|
import type { ManagerInspector } from "@/inspector/manager";
|
|
4
4
|
import type { RunConfig } from "@/mod";
|
|
5
5
|
import type { RegistryConfig } from "@/registry/config";
|
|
@@ -21,7 +21,7 @@ export interface ManagerDriver {
|
|
|
21
21
|
actorId: string,
|
|
22
22
|
encoding: Encoding,
|
|
23
23
|
params: unknown,
|
|
24
|
-
): Promise<
|
|
24
|
+
): Promise<UniversalWebSocket>;
|
|
25
25
|
proxyRequest(
|
|
26
26
|
c: HonoContext,
|
|
27
27
|
actorRequest: Request,
|
|
@@ -36,6 +36,8 @@ export interface ManagerDriver {
|
|
|
36
36
|
authData: unknown,
|
|
37
37
|
): Promise<Response>;
|
|
38
38
|
|
|
39
|
+
displayInformation(): ManagerDisplayInformation;
|
|
40
|
+
|
|
39
41
|
extraStartupLog?: () => Record<string, unknown>;
|
|
40
42
|
|
|
41
43
|
modifyManagerRouter?: (registryConfig: RegistryConfig, router: Hono) => void;
|
|
@@ -45,6 +47,12 @@ export interface ManagerDriver {
|
|
|
45
47
|
*/
|
|
46
48
|
readonly inspector?: ManagerInspector;
|
|
47
49
|
}
|
|
50
|
+
|
|
51
|
+
export interface ManagerDisplayInformation {
|
|
52
|
+
name: string;
|
|
53
|
+
properties: Record<string, string>;
|
|
54
|
+
}
|
|
55
|
+
|
|
48
56
|
export interface GetForIdInput<E extends Env = any> {
|
|
49
57
|
c?: HonoContext | undefined;
|
|
50
58
|
name: string;
|
|
@@ -70,7 +70,8 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
try {
|
|
73
|
-
logger().debug(
|
|
73
|
+
logger().debug({
|
|
74
|
+
msg: "bridge sending data",
|
|
74
75
|
dataType: typeof data,
|
|
75
76
|
isString: typeof data === "string",
|
|
76
77
|
isArrayBuffer: data instanceof ArrayBuffer,
|
|
@@ -104,19 +105,23 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
104
105
|
(this.#ws as any).send(buffer);
|
|
105
106
|
})
|
|
106
107
|
.catch((error) => {
|
|
107
|
-
logger().error(
|
|
108
|
+
logger().error({
|
|
109
|
+
msg: "failed to convert blob to arraybuffer",
|
|
110
|
+
error,
|
|
111
|
+
});
|
|
108
112
|
this.#fireEvent("error", { type: "error", target: this, error });
|
|
109
113
|
});
|
|
110
114
|
} else {
|
|
111
115
|
// Try to convert to string as a fallback
|
|
112
|
-
logger().warn(
|
|
116
|
+
logger().warn({
|
|
117
|
+
msg: "unsupported data type, converting to string",
|
|
113
118
|
dataType: typeof data,
|
|
114
119
|
data,
|
|
115
120
|
});
|
|
116
121
|
(this.#ws as any).send(String(data));
|
|
117
122
|
}
|
|
118
123
|
} catch (error) {
|
|
119
|
-
logger().error("error sending websocket data",
|
|
124
|
+
logger().error({ msg: "error sending websocket data", error });
|
|
120
125
|
this.#fireEvent("error", { type: "error", target: this, error });
|
|
121
126
|
throw error;
|
|
122
127
|
}
|
|
@@ -144,7 +149,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
144
149
|
wasClean: code === 1000,
|
|
145
150
|
});
|
|
146
151
|
} catch (error) {
|
|
147
|
-
logger().error("error closing websocket",
|
|
152
|
+
logger().error({ msg: "error closing websocket", error });
|
|
148
153
|
this.#readyState = this.CLOSED;
|
|
149
154
|
this.#fireEvent("close", {
|
|
150
155
|
type: "close",
|
|
@@ -177,7 +182,10 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
177
182
|
try {
|
|
178
183
|
listener(event);
|
|
179
184
|
} catch (error) {
|
|
180
|
-
logger().error(
|
|
185
|
+
logger().error({
|
|
186
|
+
msg: `error in ${event.type} event listener`,
|
|
187
|
+
error,
|
|
188
|
+
});
|
|
181
189
|
}
|
|
182
190
|
}
|
|
183
191
|
}
|
|
@@ -201,7 +209,8 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
201
209
|
messageData = String(data);
|
|
202
210
|
}
|
|
203
211
|
|
|
204
|
-
logger().debug(
|
|
212
|
+
logger().debug({
|
|
213
|
+
msg: "bridge handling message",
|
|
205
214
|
dataType: typeof messageData,
|
|
206
215
|
isArrayBuffer: messageData instanceof ArrayBuffer,
|
|
207
216
|
dataStr: typeof messageData === "string" ? messageData : "<binary>",
|
|
@@ -251,7 +260,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
251
260
|
try {
|
|
252
261
|
listener(event);
|
|
253
262
|
} catch (error) {
|
|
254
|
-
logger().error(`error in ${type} event listener`,
|
|
263
|
+
logger().error({ msg: `error in ${type} event listener`, error });
|
|
255
264
|
}
|
|
256
265
|
}
|
|
257
266
|
}
|
|
@@ -263,7 +272,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
263
272
|
try {
|
|
264
273
|
this.#onopen(event);
|
|
265
274
|
} catch (error) {
|
|
266
|
-
logger().error("error in onopen handler",
|
|
275
|
+
logger().error({ msg: "error in onopen handler", error });
|
|
267
276
|
}
|
|
268
277
|
}
|
|
269
278
|
break;
|
|
@@ -272,7 +281,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
272
281
|
try {
|
|
273
282
|
this.#onclose(event);
|
|
274
283
|
} catch (error) {
|
|
275
|
-
logger().error("error in onclose handler",
|
|
284
|
+
logger().error({ msg: "error in onclose handler", error });
|
|
276
285
|
}
|
|
277
286
|
}
|
|
278
287
|
break;
|
|
@@ -281,7 +290,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
281
290
|
try {
|
|
282
291
|
this.#onerror(event);
|
|
283
292
|
} catch (error) {
|
|
284
|
-
logger().error("error in onerror handler",
|
|
293
|
+
logger().error({ msg: "error in onerror handler", error });
|
|
285
294
|
}
|
|
286
295
|
}
|
|
287
296
|
break;
|
|
@@ -290,7 +299,7 @@ export class HonoWebSocketAdapter implements UniversalWebSocket {
|
|
|
290
299
|
try {
|
|
291
300
|
this.#onmessage(event);
|
|
292
301
|
} catch (error) {
|
|
293
|
-
logger().error("error in onmessage handler",
|
|
302
|
+
logger().error({ msg: "error in onmessage handler", error });
|
|
294
303
|
}
|
|
295
304
|
}
|
|
296
305
|
break;
|
package/src/manager/log.ts
CHANGED
package/src/manager/mod.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ManagerDriver } from "./driver";
|
|
1
|
+
export { ManagerDisplayInformation, ManagerDriver } from "./driver";
|
|
2
2
|
export { createManagerRouter } from "./router";
|