rivetkit 2.0.9 → 2.0.11
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/dist/tsup/{chunk-F2YZNUPU.js → chunk-3JUN3IEH.js} +3 -3
- package/dist/tsup/{chunk-DL7TPF63.cjs → chunk-5ABUOI3V.cjs} +7 -7
- package/dist/tsup/{chunk-DL7TPF63.cjs.map → chunk-5ABUOI3V.cjs.map} +1 -1
- package/dist/tsup/{chunk-SDXTJDDR.cjs → chunk-5JZPEJVJ.cjs} +58 -14
- package/dist/tsup/chunk-5JZPEJVJ.cjs.map +1 -0
- package/dist/tsup/{chunk-SOC4HWCG.cjs → chunk-6PORXHSQ.cjs} +92 -39
- package/dist/tsup/chunk-6PORXHSQ.cjs.map +1 -0
- package/dist/tsup/{chunk-QGRYH6TU.cjs → chunk-765F7ILI.cjs} +7 -6
- package/dist/tsup/chunk-765F7ILI.cjs.map +1 -0
- package/dist/tsup/{chunk-DLPIL3VC.js → chunk-7DCESQ4O.js} +2 -2
- package/dist/tsup/{chunk-R7OP5N25.js → chunk-AZI2T6UF.js} +53 -9
- package/dist/tsup/chunk-AZI2T6UF.js.map +1 -0
- package/dist/tsup/{chunk-A44TWAS5.cjs → chunk-GGIW54I2.cjs} +6 -6
- package/dist/tsup/{chunk-A44TWAS5.cjs.map → chunk-GGIW54I2.cjs.map} +1 -1
- package/dist/tsup/{chunk-7OMMIAWP.cjs → chunk-HDCLOVOE.cjs} +17 -12
- package/dist/tsup/chunk-HDCLOVOE.cjs.map +1 -0
- package/dist/tsup/{chunk-2MJYYF2Q.cjs → chunk-I6AVFIVY.cjs} +12 -12
- package/dist/tsup/{chunk-2MJYYF2Q.cjs.map → chunk-I6AVFIVY.cjs.map} +1 -1
- package/dist/tsup/{chunk-WBSPHV5V.js → chunk-JTWD6ZT2.js} +2 -2
- package/dist/tsup/{chunk-4YV6RDZL.cjs → chunk-LXFOO25H.cjs} +722 -359
- package/dist/tsup/chunk-LXFOO25H.cjs.map +1 -0
- package/dist/tsup/{chunk-YR2VY4XS.js → chunk-MIP4PYTD.js} +5 -4
- package/dist/tsup/chunk-MIP4PYTD.js.map +1 -0
- package/dist/tsup/{chunk-KHZ2QSQ4.js → chunk-MT5ES4XD.js} +32 -10
- package/dist/tsup/chunk-MT5ES4XD.js.map +1 -0
- package/dist/tsup/{chunk-U2IXX6DY.cjs → chunk-NLYAKGML.cjs} +5 -6
- package/dist/tsup/chunk-NLYAKGML.cjs.map +1 -0
- package/dist/tsup/{chunk-FZP2IBIX.js → chunk-NOXYAPM2.js} +603 -240
- package/dist/tsup/chunk-NOXYAPM2.js.map +1 -0
- package/dist/tsup/{chunk-E63WU5PL.js → chunk-NQFIZSTR.js} +5 -6
- package/dist/tsup/chunk-NQFIZSTR.js.map +1 -0
- package/dist/tsup/{chunk-4PSLOAXR.cjs → chunk-O7BIBANW.cjs} +226 -204
- package/dist/tsup/chunk-O7BIBANW.cjs.map +1 -0
- package/dist/tsup/{chunk-VVCL5DXN.js → chunk-OHSP4BUE.js} +97 -44
- package/dist/tsup/{chunk-VVCL5DXN.js.map → chunk-OHSP4BUE.js.map} +1 -1
- package/dist/tsup/{chunk-APHV6WXU.js → chunk-SBUJ3KIM.js} +2 -2
- package/dist/tsup/{chunk-DZZQG7VH.cjs → chunk-WYTLLIJM.cjs} +3 -3
- package/dist/tsup/{chunk-DZZQG7VH.cjs.map → chunk-WYTLLIJM.cjs.map} +1 -1
- package/dist/tsup/{chunk-WRSWUDFA.js → chunk-XO7VX4MN.js} +14 -9
- package/dist/tsup/chunk-XO7VX4MN.js.map +1 -0
- package/dist/tsup/client/mod.cjs +9 -9
- package/dist/tsup/client/mod.d.cts +2 -2
- package/dist/tsup/client/mod.d.ts +2 -2
- package/dist/tsup/client/mod.js +8 -8
- package/dist/tsup/common/log.cjs +3 -3
- package/dist/tsup/common/log.js +2 -2
- package/dist/tsup/common/websocket.cjs +4 -4
- package/dist/tsup/common/websocket.js +3 -3
- package/dist/tsup/{conn-CEh3WKbA.d.cts → conn-CT_8ZBT_.d.cts} +204 -199
- package/dist/tsup/{conn-Bt8rkUzm.d.ts → conn-d5F0M95s.d.ts} +204 -199
- package/dist/tsup/driver-helpers/mod.cjs +5 -5
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +1 -1
- package/dist/tsup/driver-helpers/mod.d.ts +1 -1
- package/dist/tsup/driver-helpers/mod.js +6 -6
- package/dist/tsup/driver-test-suite/mod.cjs +117 -103
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +3 -2
- package/dist/tsup/driver-test-suite/mod.d.ts +3 -2
- package/dist/tsup/driver-test-suite/mod.js +62 -48
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +6 -6
- package/dist/tsup/inspector/mod.d.cts +6 -6
- package/dist/tsup/inspector/mod.d.ts +6 -6
- package/dist/tsup/inspector/mod.js +5 -5
- package/dist/tsup/mod.cjs +10 -10
- package/dist/tsup/mod.d.cts +8 -39
- package/dist/tsup/mod.d.ts +8 -39
- package/dist/tsup/mod.js +9 -9
- package/dist/tsup/test/mod.cjs +11 -11
- package/dist/tsup/test/mod.d.cts +1 -1
- package/dist/tsup/test/mod.d.ts +1 -1
- package/dist/tsup/test/mod.js +10 -10
- package/dist/tsup/utils.cjs +2 -2
- package/dist/tsup/utils.d.cts +2 -1
- package/dist/tsup/utils.d.ts +2 -1
- package/dist/tsup/utils.js +1 -1
- package/package.json +4 -5
- package/src/actor/driver.ts +2 -2
- package/src/actor/protocol/serde.ts +75 -3
- package/src/actor/router-endpoints.ts +6 -6
- package/src/actor/router.ts +2 -2
- package/src/client/actor-conn.ts +24 -3
- package/src/client/config.ts +19 -26
- package/src/driver-helpers/mod.ts +4 -1
- package/src/driver-test-suite/mod.ts +66 -44
- package/src/driver-test-suite/utils.ts +4 -1
- package/src/drivers/default.ts +11 -9
- package/src/drivers/engine/actor-driver.ts +42 -39
- package/src/drivers/engine/config.ts +9 -22
- package/src/drivers/engine/mod.ts +9 -8
- package/src/drivers/file-system/global-state.ts +4 -4
- package/src/engine-process/log.ts +5 -0
- package/src/engine-process/mod.ts +316 -0
- package/src/inspector/utils.ts +6 -4
- package/src/manager/driver.ts +2 -2
- package/src/manager/gateway.ts +29 -11
- package/src/manager/router-schema.ts +20 -0
- package/src/manager/router.ts +116 -29
- package/src/registry/mod.ts +168 -113
- package/src/registry/run-config.ts +116 -47
- package/src/registry/serve.ts +3 -1
- package/src/serde.ts +3 -3
- package/src/test/config.ts +2 -2
- package/src/test/mod.ts +6 -3
- package/src/utils.ts +2 -0
- package/dist/tsup/chunk-4PSLOAXR.cjs.map +0 -1
- package/dist/tsup/chunk-4YV6RDZL.cjs.map +0 -1
- package/dist/tsup/chunk-7OMMIAWP.cjs.map +0 -1
- package/dist/tsup/chunk-E63WU5PL.js.map +0 -1
- package/dist/tsup/chunk-FZP2IBIX.js.map +0 -1
- package/dist/tsup/chunk-KHZ2QSQ4.js.map +0 -1
- package/dist/tsup/chunk-QGRYH6TU.cjs.map +0 -1
- package/dist/tsup/chunk-R7OP5N25.js.map +0 -1
- package/dist/tsup/chunk-SDXTJDDR.cjs.map +0 -1
- package/dist/tsup/chunk-SOC4HWCG.cjs.map +0 -1
- package/dist/tsup/chunk-U2IXX6DY.cjs.map +0 -1
- package/dist/tsup/chunk-WRSWUDFA.js.map +0 -1
- package/dist/tsup/chunk-YR2VY4XS.js.map +0 -1
- /package/dist/tsup/{chunk-F2YZNUPU.js.map → chunk-3JUN3IEH.js.map} +0 -0
- /package/dist/tsup/{chunk-DLPIL3VC.js.map → chunk-7DCESQ4O.js.map} +0 -0
- /package/dist/tsup/{chunk-WBSPHV5V.js.map → chunk-JTWD6ZT2.js.map} +0 -0
- /package/dist/tsup/{chunk-APHV6WXU.js.map → chunk-SBUJ3KIM.js.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunk765F7ILIcjs = require('./chunk-765F7ILI.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
@@ -14,11 +14,11 @@ var _chunkQGRYH6TUcjs = require('./chunk-QGRYH6TU.cjs');
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
var _chunk4PSLOAXRcjs = require('./chunk-4PSLOAXR.cjs');
|
|
18
17
|
|
|
18
|
+
var _chunkO7BIBANWcjs = require('./chunk-O7BIBANW.cjs');
|
|
19
19
|
|
|
20
|
-
var _chunk2MJYYF2Qcjs = require('./chunk-2MJYYF2Q.cjs');
|
|
21
20
|
|
|
21
|
+
var _chunkI6AVFIVYcjs = require('./chunk-I6AVFIVY.cjs');
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -28,8 +28,8 @@ var _chunk2MJYYF2Qcjs = require('./chunk-2MJYYF2Q.cjs');
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
var _chunkSOC4HWCGcjs = require('./chunk-SOC4HWCG.cjs');
|
|
32
31
|
|
|
32
|
+
var _chunk6PORXHSQcjs = require('./chunk-6PORXHSQ.cjs');
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
|
|
@@ -54,13 +54,13 @@ var _chunkSOC4HWCGcjs = require('./chunk-SOC4HWCG.cjs');
|
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
var _chunkSDXTJDDRcjs = require('./chunk-SDXTJDDR.cjs');
|
|
58
57
|
|
|
58
|
+
var _chunk5JZPEJVJcjs = require('./chunk-5JZPEJVJ.cjs');
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
var _chunkDL7TPF63cjs = require('./chunk-DL7TPF63.cjs');
|
|
63
62
|
|
|
63
|
+
var _chunk5ABUOI3Vcjs = require('./chunk-5ABUOI3V.cjs');
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
|
|
@@ -69,7 +69,10 @@ var _chunkDL7TPF63cjs = require('./chunk-DL7TPF63.cjs');
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
var _chunkNLYAKGMLcjs = require('./chunk-NLYAKGML.cjs');
|
|
75
|
+
|
|
73
76
|
|
|
74
77
|
|
|
75
78
|
|
|
@@ -151,7 +154,7 @@ var _streaming = require('hono/streaming');
|
|
|
151
154
|
|
|
152
155
|
// src/manager/log.ts
|
|
153
156
|
function logger() {
|
|
154
|
-
return
|
|
157
|
+
return _chunk5ABUOI3Vcjs.getLogger.call(void 0, "actor-manager");
|
|
155
158
|
}
|
|
156
159
|
|
|
157
160
|
// src/manager/hono-websocket-adapter.ts
|
|
@@ -439,14 +442,14 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
439
442
|
promise: handlersPromise,
|
|
440
443
|
resolve: handlersResolve,
|
|
441
444
|
reject: handlersReject
|
|
442
|
-
} =
|
|
445
|
+
} = _chunkNLYAKGMLcjs.promiseWithResolvers.call(void 0, );
|
|
443
446
|
let actor2;
|
|
444
447
|
try {
|
|
445
448
|
actor2 = await actorDriver.loadActor(actorId);
|
|
446
449
|
} catch (error) {
|
|
447
450
|
return {
|
|
448
451
|
onOpen: (_evt, ws) => {
|
|
449
|
-
const { code } =
|
|
452
|
+
const { code } = _chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
450
453
|
error,
|
|
451
454
|
actor2.rLog,
|
|
452
455
|
{
|
|
@@ -465,8 +468,8 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
465
468
|
}
|
|
466
469
|
};
|
|
467
470
|
}
|
|
468
|
-
const closePromise =
|
|
469
|
-
const socketId =
|
|
471
|
+
const closePromise = _chunkNLYAKGMLcjs.promiseWithResolvers.call(void 0, );
|
|
472
|
+
const socketId = _chunkO7BIBANWcjs.generateConnSocketId.call(void 0, );
|
|
470
473
|
return {
|
|
471
474
|
onOpen: (_evt, ws) => {
|
|
472
475
|
actor2.rLog.debug("actor websocket open");
|
|
@@ -497,7 +500,7 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
497
500
|
handlersResolve({ conn, actor: actor2, connId: conn.id });
|
|
498
501
|
} catch (error) {
|
|
499
502
|
handlersReject(error);
|
|
500
|
-
const { code } =
|
|
503
|
+
const { code } = _chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
501
504
|
error,
|
|
502
505
|
actor2.rLog,
|
|
503
506
|
{
|
|
@@ -513,12 +516,12 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
513
516
|
handlersPromise.then(({ conn, actor: actor3 }) => {
|
|
514
517
|
actor3.rLog.debug({ msg: "received message" });
|
|
515
518
|
const value = evt.data.valueOf();
|
|
516
|
-
|
|
519
|
+
_chunk6PORXHSQcjs.parseMessage.call(void 0, value, {
|
|
517
520
|
encoding,
|
|
518
521
|
maxIncomingMessageSize: runConfig.maxIncomingMessageSize
|
|
519
522
|
}).then((message) => {
|
|
520
523
|
actor3.processMessage(message, conn).catch((error) => {
|
|
521
|
-
const { code } =
|
|
524
|
+
const { code } = _chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
522
525
|
error,
|
|
523
526
|
actor3.rLog,
|
|
524
527
|
{
|
|
@@ -529,7 +532,7 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
529
532
|
ws.close(1011, code);
|
|
530
533
|
});
|
|
531
534
|
}).catch((error) => {
|
|
532
|
-
const { code } =
|
|
535
|
+
const { code } = _chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
533
536
|
error,
|
|
534
537
|
actor3.rLog,
|
|
535
538
|
{
|
|
@@ -540,7 +543,7 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
540
543
|
ws.close(1011, code);
|
|
541
544
|
});
|
|
542
545
|
}).catch((error) => {
|
|
543
|
-
const { code } =
|
|
546
|
+
const { code } = _chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
544
547
|
error,
|
|
545
548
|
actor2.rLog,
|
|
546
549
|
{
|
|
@@ -574,7 +577,7 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
574
577
|
const wasClean = event.wasClean || event.code === 1e3;
|
|
575
578
|
actor3.__connDisconnected(conn, wasClean, socketId);
|
|
576
579
|
}).catch((error) => {
|
|
577
|
-
|
|
580
|
+
_chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
578
581
|
error,
|
|
579
582
|
actor2.rLog,
|
|
580
583
|
{ wsEvent: "close" },
|
|
@@ -586,7 +589,7 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
586
589
|
try {
|
|
587
590
|
actor2.rLog.warn({ msg: "websocket error" });
|
|
588
591
|
} catch (error) {
|
|
589
|
-
|
|
592
|
+
_chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
590
593
|
error,
|
|
591
594
|
actor2.rLog,
|
|
592
595
|
{ wsEvent: "error" },
|
|
@@ -600,9 +603,9 @@ async function handleSseConnect(c, _runConfig, actorDriver, actorId) {
|
|
|
600
603
|
c.header("Content-Encoding", "Identity");
|
|
601
604
|
const encoding = getRequestEncoding(c.req);
|
|
602
605
|
const parameters = getRequestConnParams(c.req);
|
|
603
|
-
const socketId =
|
|
604
|
-
const connId = c.req.header(
|
|
605
|
-
const connToken = c.req.header(
|
|
606
|
+
const socketId = _chunkO7BIBANWcjs.generateConnSocketId.call(void 0, );
|
|
607
|
+
const connId = c.req.header(_chunk5JZPEJVJcjs.HEADER_CONN_ID);
|
|
608
|
+
const connToken = c.req.header(_chunk5JZPEJVJcjs.HEADER_CONN_TOKEN);
|
|
606
609
|
return _streaming.streamSSE.call(void 0, c, async (stream) => {
|
|
607
610
|
let actor2;
|
|
608
611
|
let conn;
|
|
@@ -627,12 +630,12 @@ async function handleSseConnect(c, _runConfig, actorDriver, actorId) {
|
|
|
627
630
|
connId,
|
|
628
631
|
connToken
|
|
629
632
|
);
|
|
630
|
-
const abortResolver =
|
|
633
|
+
const abortResolver = _chunkNLYAKGMLcjs.promiseWithResolvers.call(void 0, );
|
|
631
634
|
stream.onAbort(() => {
|
|
632
635
|
});
|
|
633
636
|
c.req.raw.signal.addEventListener("abort", async () => {
|
|
634
637
|
_invariant2.default.call(void 0, actor2, "actor should exist");
|
|
635
|
-
const rLog = _nullishCoalesce(actor2.rLog, () => (
|
|
638
|
+
const rLog = _nullishCoalesce(actor2.rLog, () => ( _chunk5JZPEJVJcjs.loggerWithoutContext.call(void 0, )));
|
|
636
639
|
try {
|
|
637
640
|
rLog.debug("sse stream aborted");
|
|
638
641
|
if (conn) {
|
|
@@ -657,7 +660,7 @@ async function handleSseConnect(c, _runConfig, actorDriver, actorId) {
|
|
|
657
660
|
await stream.sleep(SSE_PING_INTERVAL);
|
|
658
661
|
}
|
|
659
662
|
} catch (error) {
|
|
660
|
-
|
|
663
|
+
_chunk5JZPEJVJcjs.loggerWithoutContext.call(void 0, ).error({ msg: "error in sse connection", error });
|
|
661
664
|
if (conn && actor2 !== void 0) {
|
|
662
665
|
actor2.__connDisconnected(conn, false, socketId);
|
|
663
666
|
}
|
|
@@ -669,13 +672,13 @@ async function handleAction(c, _runConfig, actorDriver, actionName, actorId) {
|
|
|
669
672
|
const encoding = getRequestEncoding(c.req);
|
|
670
673
|
const parameters = getRequestConnParams(c.req);
|
|
671
674
|
const arrayBuffer = await c.req.arrayBuffer();
|
|
672
|
-
const request =
|
|
675
|
+
const request = _chunk5JZPEJVJcjs.deserializeWithEncoding.call(void 0,
|
|
673
676
|
encoding,
|
|
674
677
|
new Uint8Array(arrayBuffer),
|
|
675
|
-
|
|
678
|
+
_chunk6PORXHSQcjs.HTTP_ACTION_REQUEST_VERSIONED
|
|
676
679
|
);
|
|
677
680
|
const actionArgs = cbor.decode(new Uint8Array(request.args));
|
|
678
|
-
const socketId =
|
|
681
|
+
const socketId = _chunkO7BIBANWcjs.generateConnSocketId.call(void 0, );
|
|
679
682
|
let actor2;
|
|
680
683
|
let conn;
|
|
681
684
|
let output;
|
|
@@ -690,7 +693,7 @@ async function handleAction(c, _runConfig, actorDriver, actionName, actorId) {
|
|
|
690
693
|
parameters,
|
|
691
694
|
c.req.raw
|
|
692
695
|
);
|
|
693
|
-
const ctx = new (0,
|
|
696
|
+
const ctx = new (0, _chunk6PORXHSQcjs.ActionContext)(actor2.actorContext, conn);
|
|
694
697
|
output = await actor2.executeAction(ctx, actionName, actionArgs);
|
|
695
698
|
} finally {
|
|
696
699
|
if (conn) {
|
|
@@ -698,24 +701,24 @@ async function handleAction(c, _runConfig, actorDriver, actionName, actorId) {
|
|
|
698
701
|
}
|
|
699
702
|
}
|
|
700
703
|
const responseData = {
|
|
701
|
-
output:
|
|
704
|
+
output: _chunkNLYAKGMLcjs.bufferToArrayBuffer.call(void 0, cbor.encode(output))
|
|
702
705
|
};
|
|
703
|
-
const serialized =
|
|
706
|
+
const serialized = _chunk5JZPEJVJcjs.serializeWithEncoding.call(void 0,
|
|
704
707
|
encoding,
|
|
705
708
|
responseData,
|
|
706
|
-
|
|
709
|
+
_chunk6PORXHSQcjs.HTTP_ACTION_RESPONSE_VERSIONED
|
|
707
710
|
);
|
|
708
711
|
return c.body(serialized, 200, {
|
|
709
|
-
"Content-Type":
|
|
712
|
+
"Content-Type": _chunk5JZPEJVJcjs.contentTypeForEncoding.call(void 0, encoding)
|
|
710
713
|
});
|
|
711
714
|
}
|
|
712
715
|
async function handleConnectionMessage(c, _runConfig, actorDriver, connId, connToken, actorId) {
|
|
713
716
|
const encoding = getRequestEncoding(c.req);
|
|
714
717
|
const arrayBuffer = await c.req.arrayBuffer();
|
|
715
|
-
const message =
|
|
718
|
+
const message = _chunk5JZPEJVJcjs.deserializeWithEncoding.call(void 0,
|
|
716
719
|
encoding,
|
|
717
720
|
new Uint8Array(arrayBuffer),
|
|
718
|
-
|
|
721
|
+
_chunk6PORXHSQcjs.TO_SERVER_VERSIONED
|
|
719
722
|
);
|
|
720
723
|
const actor2 = await actorDriver.loadActor(actorId);
|
|
721
724
|
const conn = actor2.conns.get(connId);
|
|
@@ -746,13 +749,13 @@ async function handleConnectionClose(c, _runConfig, actorDriver, connId, connTok
|
|
|
746
749
|
await conn.disconnect("Connection closed by client request");
|
|
747
750
|
return c.json({});
|
|
748
751
|
}
|
|
749
|
-
async function handleRawWebSocketHandler(req,
|
|
752
|
+
async function handleRawWebSocketHandler(req, path4, actorDriver, actorId) {
|
|
750
753
|
const actor2 = await actorDriver.loadActor(actorId);
|
|
751
754
|
return {
|
|
752
755
|
onOpen: (_evt, ws) => {
|
|
753
756
|
const adapter = new HonoWebSocketAdapter(ws);
|
|
754
757
|
ws.__adapter = adapter;
|
|
755
|
-
const url = new URL(
|
|
758
|
+
const url = new URL(path4, "http://actor");
|
|
756
759
|
const pathname = url.pathname.replace(/^\/raw\/websocket\/?/, "") || "/";
|
|
757
760
|
const normalizedPath = (pathname.startsWith("/") ? pathname : "/" + pathname) + url.search;
|
|
758
761
|
let newRequest;
|
|
@@ -765,7 +768,7 @@ async function handleRawWebSocketHandler(req, path3, actorDriver, actorId) {
|
|
|
765
768
|
}
|
|
766
769
|
actor2.rLog.debug({
|
|
767
770
|
msg: "rewriting websocket url",
|
|
768
|
-
from:
|
|
771
|
+
from: path4,
|
|
769
772
|
to: newRequest.url,
|
|
770
773
|
pathname: url.pathname,
|
|
771
774
|
search: url.search,
|
|
@@ -796,11 +799,11 @@ async function handleRawWebSocketHandler(req, path3, actorDriver, actorId) {
|
|
|
796
799
|
};
|
|
797
800
|
}
|
|
798
801
|
function getRequestEncoding(req) {
|
|
799
|
-
const encodingParam = req.header(
|
|
802
|
+
const encodingParam = req.header(_chunk5JZPEJVJcjs.HEADER_ENCODING);
|
|
800
803
|
if (!encodingParam) {
|
|
801
804
|
throw new (0, _chunk5QGQK44Lcjs.InvalidEncoding)("undefined");
|
|
802
805
|
}
|
|
803
|
-
const result =
|
|
806
|
+
const result = _chunk5JZPEJVJcjs.EncodingSchema.safeParse(encodingParam);
|
|
804
807
|
if (!result.success) {
|
|
805
808
|
throw new (0, _chunk5QGQK44Lcjs.InvalidEncoding)(encodingParam);
|
|
806
809
|
}
|
|
@@ -810,7 +813,7 @@ function getRequestExposeInternalError(_req) {
|
|
|
810
813
|
return false;
|
|
811
814
|
}
|
|
812
815
|
function getRequestConnParams(req) {
|
|
813
|
-
const paramsParam = req.header(
|
|
816
|
+
const paramsParam = req.header(_chunk5JZPEJVJcjs.HEADER_CONN_PARAMS);
|
|
814
817
|
if (!paramsParam) {
|
|
815
818
|
return null;
|
|
816
819
|
}
|
|
@@ -818,7 +821,7 @@ function getRequestConnParams(req) {
|
|
|
818
821
|
return JSON.parse(paramsParam);
|
|
819
822
|
} catch (err) {
|
|
820
823
|
throw new (0, _chunk5QGQK44Lcjs.InvalidParams)(
|
|
821
|
-
`Invalid params JSON: ${
|
|
824
|
+
`Invalid params JSON: ${_chunkNLYAKGMLcjs.stringifyError.call(void 0, err)}`
|
|
822
825
|
);
|
|
823
826
|
}
|
|
824
827
|
}
|
|
@@ -826,19 +829,19 @@ function getRequestConnParams(req) {
|
|
|
826
829
|
// src/common/router.ts
|
|
827
830
|
|
|
828
831
|
function logger2() {
|
|
829
|
-
return
|
|
832
|
+
return _chunk5ABUOI3Vcjs.getLogger.call(void 0, "router");
|
|
830
833
|
}
|
|
831
|
-
function loggerMiddleware(
|
|
834
|
+
function loggerMiddleware(logger8) {
|
|
832
835
|
return async (c, next) => {
|
|
833
836
|
const method = c.req.method;
|
|
834
|
-
const
|
|
837
|
+
const path4 = c.req.path;
|
|
835
838
|
const startTime = Date.now();
|
|
836
839
|
await next();
|
|
837
840
|
const duration = Date.now() - startTime;
|
|
838
|
-
|
|
841
|
+
logger8.debug({
|
|
839
842
|
msg: "http request",
|
|
840
843
|
method,
|
|
841
|
-
path:
|
|
844
|
+
path: path4,
|
|
842
845
|
status: c.res.status,
|
|
843
846
|
dt: `${duration}ms`,
|
|
844
847
|
reqSize: c.req.header("content-length"),
|
|
@@ -852,7 +855,7 @@ function handleRouteNotFound(c) {
|
|
|
852
855
|
}
|
|
853
856
|
function handleRouteError(error, c) {
|
|
854
857
|
const exposeInternalError = getRequestExposeInternalError(c.req.raw);
|
|
855
|
-
const { statusCode, group, code, message, metadata } =
|
|
858
|
+
const { statusCode, group, code, message, metadata } = _chunkNLYAKGMLcjs.deconstructError.call(void 0,
|
|
856
859
|
error,
|
|
857
860
|
logger2(),
|
|
858
861
|
{
|
|
@@ -867,16 +870,16 @@ function handleRouteError(error, c) {
|
|
|
867
870
|
} catch (_) {
|
|
868
871
|
encoding = "json";
|
|
869
872
|
}
|
|
870
|
-
const output =
|
|
873
|
+
const output = _chunk5JZPEJVJcjs.serializeWithEncoding.call(void 0,
|
|
871
874
|
encoding,
|
|
872
875
|
{
|
|
873
876
|
group,
|
|
874
877
|
code,
|
|
875
878
|
message,
|
|
876
879
|
// TODO: Cannot serialize non-binary meta since it requires ArrayBuffer atm
|
|
877
|
-
metadata:
|
|
880
|
+
metadata: _chunk5JZPEJVJcjs.encodingIsBinary.call(void 0, encoding) ? _chunkNLYAKGMLcjs.bufferToArrayBuffer.call(void 0, cbor2.encode(metadata)) : null
|
|
878
881
|
},
|
|
879
|
-
|
|
882
|
+
_chunk6PORXHSQcjs.HTTP_RESPONSE_ERROR_VERSIONED
|
|
880
883
|
);
|
|
881
884
|
return c.body(output, { status: statusCode });
|
|
882
885
|
}
|
|
@@ -884,7 +887,7 @@ function handleRouteError(error, c) {
|
|
|
884
887
|
// src/actor/router.ts
|
|
885
888
|
function createActorRouter(runConfig, actorDriver, isTest) {
|
|
886
889
|
const router = new (0, _hono.Hono)({ strict: false });
|
|
887
|
-
router.use("*", loggerMiddleware(
|
|
890
|
+
router.use("*", loggerMiddleware(_chunk5JZPEJVJcjs.loggerWithoutContext.call(void 0, )));
|
|
888
891
|
router.get("/", (c) => {
|
|
889
892
|
return c.text(
|
|
890
893
|
"This is an RivetKit actor.\n\nLearn more at https://rivetkit.org"
|
|
@@ -915,7 +918,7 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
915
918
|
return c.json({ success: true });
|
|
916
919
|
});
|
|
917
920
|
}
|
|
918
|
-
router.get(
|
|
921
|
+
router.get(_chunk5JZPEJVJcjs.PATH_CONNECT_WEBSOCKET, async (c) => {
|
|
919
922
|
var _a;
|
|
920
923
|
const upgradeWebSocket = (_a = runConfig.getUpgradeWebSocket) == null ? void 0 : _a.call(runConfig);
|
|
921
924
|
if (upgradeWebSocket) {
|
|
@@ -928,20 +931,20 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
928
931
|
if (protocols) {
|
|
929
932
|
const protocolList = protocols.split(",").map((p) => p.trim());
|
|
930
933
|
for (const protocol of protocolList) {
|
|
931
|
-
if (protocol.startsWith(
|
|
932
|
-
encodingRaw = protocol.substring(
|
|
933
|
-
} else if (protocol.startsWith(
|
|
934
|
+
if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING)) {
|
|
935
|
+
encodingRaw = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING.length);
|
|
936
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS)) {
|
|
934
937
|
connParamsRaw = decodeURIComponent(
|
|
935
|
-
protocol.substring(
|
|
938
|
+
protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS.length)
|
|
936
939
|
);
|
|
937
|
-
} else if (protocol.startsWith(
|
|
938
|
-
connIdRaw = protocol.substring(
|
|
939
|
-
} else if (protocol.startsWith(
|
|
940
|
-
connTokenRaw = protocol.substring(
|
|
940
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_ID)) {
|
|
941
|
+
connIdRaw = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_ID.length);
|
|
942
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_TOKEN)) {
|
|
943
|
+
connTokenRaw = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_TOKEN.length);
|
|
941
944
|
}
|
|
942
945
|
}
|
|
943
946
|
}
|
|
944
|
-
const encoding =
|
|
947
|
+
const encoding = _chunk5JZPEJVJcjs.EncodingSchema.parse(encodingRaw);
|
|
945
948
|
const connParams = connParamsRaw ? JSON.parse(connParamsRaw) : void 0;
|
|
946
949
|
return await handleWebSocketConnect(
|
|
947
950
|
c2.req.raw,
|
|
@@ -953,7 +956,7 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
953
956
|
connIdRaw,
|
|
954
957
|
connTokenRaw
|
|
955
958
|
);
|
|
956
|
-
})(c,
|
|
959
|
+
})(c, _chunkNLYAKGMLcjs.noopNext.call(void 0, ));
|
|
957
960
|
} else {
|
|
958
961
|
return c.text(
|
|
959
962
|
"WebSockets are not enabled for this driver. Use SSE instead.",
|
|
@@ -969,8 +972,8 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
969
972
|
return handleAction(c, runConfig, actorDriver, actionName, c.env.actorId);
|
|
970
973
|
});
|
|
971
974
|
router.post("/connections/message", async (c) => {
|
|
972
|
-
const connId = c.req.header(
|
|
973
|
-
const connToken = c.req.header(
|
|
975
|
+
const connId = c.req.header(_chunk5JZPEJVJcjs.HEADER_CONN_ID);
|
|
976
|
+
const connToken = c.req.header(_chunk5JZPEJVJcjs.HEADER_CONN_TOKEN);
|
|
974
977
|
if (!connId || !connToken) {
|
|
975
978
|
throw new Error("Missing required parameters");
|
|
976
979
|
}
|
|
@@ -984,8 +987,8 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
984
987
|
);
|
|
985
988
|
});
|
|
986
989
|
router.post("/connections/close", async (c) => {
|
|
987
|
-
const connId = c.req.header(
|
|
988
|
-
const connToken = c.req.header(
|
|
990
|
+
const connId = c.req.header(_chunk5JZPEJVJcjs.HEADER_CONN_ID);
|
|
991
|
+
const connToken = c.req.header(_chunk5JZPEJVJcjs.HEADER_CONN_TOKEN);
|
|
989
992
|
if (!connId || !connToken) {
|
|
990
993
|
throw new Error("Missing required parameters");
|
|
991
994
|
}
|
|
@@ -1009,7 +1012,7 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
1009
1012
|
body: c.req.raw.body,
|
|
1010
1013
|
duplex: "half"
|
|
1011
1014
|
});
|
|
1012
|
-
|
|
1015
|
+
_chunk5JZPEJVJcjs.loggerWithoutContext.call(void 0, ).debug({
|
|
1013
1016
|
msg: "rewriting http url",
|
|
1014
1017
|
from: c.req.url,
|
|
1015
1018
|
to: correctedRequest.url
|
|
@@ -1020,14 +1023,14 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
1020
1023
|
}
|
|
1021
1024
|
return response;
|
|
1022
1025
|
});
|
|
1023
|
-
router.get(`${
|
|
1026
|
+
router.get(`${_chunk5JZPEJVJcjs.PATH_RAW_WEBSOCKET_PREFIX}*`, async (c) => {
|
|
1024
1027
|
var _a;
|
|
1025
1028
|
const upgradeWebSocket = (_a = runConfig.getUpgradeWebSocket) == null ? void 0 : _a.call(runConfig);
|
|
1026
1029
|
if (upgradeWebSocket) {
|
|
1027
1030
|
return upgradeWebSocket(async (c2) => {
|
|
1028
1031
|
const url = new URL(c2.req.url);
|
|
1029
1032
|
const pathWithQuery = c2.req.path + url.search;
|
|
1030
|
-
|
|
1033
|
+
_chunk5JZPEJVJcjs.loggerWithoutContext.call(void 0, ).debug({
|
|
1031
1034
|
msg: "actor router raw websocket",
|
|
1032
1035
|
path: c2.req.path,
|
|
1033
1036
|
url: c2.req.url,
|
|
@@ -1040,7 +1043,7 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
1040
1043
|
actorDriver,
|
|
1041
1044
|
c2.env.actorId
|
|
1042
1045
|
);
|
|
1043
|
-
})(c,
|
|
1046
|
+
})(c, _chunkNLYAKGMLcjs.noopNext.call(void 0, ));
|
|
1044
1047
|
} else {
|
|
1045
1048
|
return c.text(
|
|
1046
1049
|
"WebSockets are not enabled for this driver. Use SSE instead.",
|
|
@@ -1048,19 +1051,19 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
1048
1051
|
);
|
|
1049
1052
|
}
|
|
1050
1053
|
});
|
|
1051
|
-
if (
|
|
1054
|
+
if (_chunk765F7ILIcjs.isInspectorEnabled.call(void 0, runConfig, "actor")) {
|
|
1052
1055
|
router.route(
|
|
1053
1056
|
"/inspect",
|
|
1054
1057
|
new (0, _hono.Hono)().use(
|
|
1055
1058
|
_cors.cors.call(void 0, runConfig.inspector.cors),
|
|
1056
|
-
|
|
1059
|
+
_chunk765F7ILIcjs.secureInspector.call(void 0, runConfig),
|
|
1057
1060
|
async (c, next) => {
|
|
1058
1061
|
const inspector = (await actorDriver.loadActor(c.env.actorId)).inspector;
|
|
1059
1062
|
_invariant2.default.call(void 0, inspector, "inspector not supported on this platform");
|
|
1060
1063
|
c.set("inspector", inspector);
|
|
1061
1064
|
return next();
|
|
1062
1065
|
}
|
|
1063
|
-
).route("/",
|
|
1066
|
+
).route("/", _chunkO7BIBANWcjs.createActorInspectorRouter.call(void 0, ))
|
|
1064
1067
|
);
|
|
1065
1068
|
}
|
|
1066
1069
|
router.notFound(handleRouteNotFound);
|
|
@@ -1071,13 +1074,13 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
1071
1074
|
// src/actor/mod.ts
|
|
1072
1075
|
function actor(input) {
|
|
1073
1076
|
const config2 = ActorConfigSchema.parse(input);
|
|
1074
|
-
return new (0,
|
|
1077
|
+
return new (0, _chunkO7BIBANWcjs.ActorDefinition)(config2);
|
|
1075
1078
|
}
|
|
1076
1079
|
|
|
1077
1080
|
// src/common/inline-websocket-adapter2.ts
|
|
1078
1081
|
var _ws2 = require('hono/ws');
|
|
1079
1082
|
function logger3() {
|
|
1080
|
-
return
|
|
1083
|
+
return _chunk5ABUOI3Vcjs.getLogger.call(void 0, "fake-event-source2");
|
|
1081
1084
|
}
|
|
1082
1085
|
var InlineWebSocketAdapter2 = (_class2 = class {
|
|
1083
1086
|
// WebSocket readyState values
|
|
@@ -1425,7 +1428,7 @@ var KEYS = {
|
|
|
1425
1428
|
|
|
1426
1429
|
// src/drivers/engine/log.ts
|
|
1427
1430
|
function logger4() {
|
|
1428
|
-
return
|
|
1431
|
+
return _chunk5ABUOI3Vcjs.getLogger.call(void 0, "driver-engine");
|
|
1429
1432
|
}
|
|
1430
1433
|
|
|
1431
1434
|
// src/drivers/engine/actor-driver.ts
|
|
@@ -1434,7 +1437,6 @@ var EngineActorDriver = class {
|
|
|
1434
1437
|
#runConfig;
|
|
1435
1438
|
#managerDriver;
|
|
1436
1439
|
#inlineClient;
|
|
1437
|
-
#config;
|
|
1438
1440
|
#runner;
|
|
1439
1441
|
#actors = /* @__PURE__ */ new Map();
|
|
1440
1442
|
#actorRouter;
|
|
@@ -1443,27 +1445,29 @@ var EngineActorDriver = class {
|
|
|
1443
1445
|
#alarmTimeout;
|
|
1444
1446
|
#runnerStarted = Promise.withResolvers();
|
|
1445
1447
|
#runnerStopped = Promise.withResolvers();
|
|
1446
|
-
constructor(registryConfig, runConfig, managerDriver, inlineClient
|
|
1448
|
+
constructor(registryConfig, runConfig, managerDriver, inlineClient) {
|
|
1447
1449
|
this.#registryConfig = registryConfig;
|
|
1448
1450
|
this.#runConfig = runConfig;
|
|
1449
1451
|
this.#managerDriver = managerDriver;
|
|
1450
1452
|
this.#inlineClient = inlineClient;
|
|
1451
|
-
|
|
1453
|
+
const token = _nullishCoalesce(runConfig.token, () => ( runConfig.token));
|
|
1454
|
+
if (token && runConfig.inspector && runConfig.inspector.enabled) {
|
|
1455
|
+
runConfig.inspector.token = () => token;
|
|
1456
|
+
}
|
|
1452
1457
|
this.#actorRouter = createActorRouter(
|
|
1453
1458
|
runConfig,
|
|
1454
1459
|
this,
|
|
1455
1460
|
registryConfig.test.enabled
|
|
1456
1461
|
);
|
|
1457
1462
|
let hasDisconnected = false;
|
|
1458
|
-
const
|
|
1463
|
+
const engineRunnerConfig = {
|
|
1459
1464
|
version: this.#version,
|
|
1460
|
-
endpoint:
|
|
1461
|
-
token
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
runnerKey: config2.runnerKey,
|
|
1465
|
+
endpoint: _chunkO7BIBANWcjs.getEndpoint.call(void 0, runConfig),
|
|
1466
|
+
token,
|
|
1467
|
+
namespace: _nullishCoalesce(runConfig.namespace, () => ( runConfig.namespace)),
|
|
1468
|
+
totalSlots: _nullishCoalesce(runConfig.totalSlots, () => ( runConfig.totalSlots)),
|
|
1469
|
+
runnerName: _nullishCoalesce(runConfig.runnerName, () => ( runConfig.runnerName)),
|
|
1470
|
+
runnerKey: runConfig.runnerKey,
|
|
1467
1471
|
metadata: {
|
|
1468
1472
|
inspectorToken: this.#runConfig.inspector.token()
|
|
1469
1473
|
},
|
|
@@ -1477,14 +1481,14 @@ var EngineActorDriver = class {
|
|
|
1477
1481
|
if (hasDisconnected) {
|
|
1478
1482
|
logger4().info({
|
|
1479
1483
|
msg: "runner reconnected",
|
|
1480
|
-
namespace: this.#
|
|
1481
|
-
runnerName: this.#
|
|
1484
|
+
namespace: this.#runConfig.namespace,
|
|
1485
|
+
runnerName: this.#runConfig.runnerName
|
|
1482
1486
|
});
|
|
1483
1487
|
} else {
|
|
1484
1488
|
logger4().debug({
|
|
1485
1489
|
msg: "runner connected",
|
|
1486
|
-
namespace: this.#
|
|
1487
|
-
runnerName: this.#
|
|
1490
|
+
namespace: this.#runConfig.namespace,
|
|
1491
|
+
runnerName: this.#runConfig.runnerName
|
|
1488
1492
|
});
|
|
1489
1493
|
}
|
|
1490
1494
|
this.#runnerStarted.resolve(void 0);
|
|
@@ -1492,8 +1496,8 @@ var EngineActorDriver = class {
|
|
|
1492
1496
|
onDisconnected: () => {
|
|
1493
1497
|
logger4().warn({
|
|
1494
1498
|
msg: "runner disconnected",
|
|
1495
|
-
namespace: this.#
|
|
1496
|
-
runnerName: this.#
|
|
1499
|
+
namespace: this.#runConfig.namespace,
|
|
1500
|
+
runnerName: this.#runConfig.runnerName
|
|
1497
1501
|
});
|
|
1498
1502
|
hasDisconnected = true;
|
|
1499
1503
|
},
|
|
@@ -1504,15 +1508,15 @@ var EngineActorDriver = class {
|
|
|
1504
1508
|
websocket: this.#runnerWebSocket.bind(this),
|
|
1505
1509
|
onActorStart: this.#runnerOnActorStart.bind(this),
|
|
1506
1510
|
onActorStop: this.#runnerOnActorStop.bind(this),
|
|
1507
|
-
logger:
|
|
1511
|
+
logger: _chunk5ABUOI3Vcjs.getLogger.call(void 0, "engine-runner")
|
|
1508
1512
|
};
|
|
1509
|
-
this.#runner = new (0, _enginerunner.Runner)(
|
|
1513
|
+
this.#runner = new (0, _enginerunner.Runner)(engineRunnerConfig);
|
|
1510
1514
|
this.#runner.start();
|
|
1511
1515
|
logger4().debug({
|
|
1512
1516
|
msg: "engine runner started",
|
|
1513
|
-
endpoint:
|
|
1514
|
-
namespace:
|
|
1515
|
-
runnerName:
|
|
1517
|
+
endpoint: runConfig.endpoint,
|
|
1518
|
+
namespace: runConfig.namespace,
|
|
1519
|
+
runnerName: runConfig.runnerName
|
|
1516
1520
|
});
|
|
1517
1521
|
}
|
|
1518
1522
|
async #loadActorHandler(actorId) {
|
|
@@ -1554,7 +1558,7 @@ var EngineActorDriver = class {
|
|
|
1554
1558
|
this.#alarmTimeout = void 0;
|
|
1555
1559
|
}
|
|
1556
1560
|
const delay = Math.max(0, timestamp - Date.now());
|
|
1557
|
-
this.#alarmTimeout =
|
|
1561
|
+
this.#alarmTimeout = _chunkNLYAKGMLcjs.setLongTimeout.call(void 0, () => {
|
|
1558
1562
|
actor2._onAlarm();
|
|
1559
1563
|
this.#alarmTimeout = void 0;
|
|
1560
1564
|
}, delay);
|
|
@@ -1564,35 +1568,31 @@ var EngineActorDriver = class {
|
|
|
1564
1568
|
return void 0;
|
|
1565
1569
|
}
|
|
1566
1570
|
// Runner lifecycle callbacks
|
|
1567
|
-
async #runnerOnActorStart(actorId, generation,
|
|
1571
|
+
async #runnerOnActorStart(actorId, generation, runConfig) {
|
|
1568
1572
|
var _a;
|
|
1569
1573
|
logger4().debug({
|
|
1570
1574
|
msg: "runner actor starting",
|
|
1571
1575
|
actorId,
|
|
1572
|
-
name:
|
|
1573
|
-
key:
|
|
1576
|
+
name: runConfig.name,
|
|
1577
|
+
key: runConfig.key,
|
|
1574
1578
|
generation
|
|
1575
1579
|
});
|
|
1576
1580
|
let input;
|
|
1577
|
-
if (
|
|
1578
|
-
input = cbor3.decode(
|
|
1581
|
+
if (runConfig.input) {
|
|
1582
|
+
input = cbor3.decode(runConfig.input);
|
|
1579
1583
|
}
|
|
1580
1584
|
let handler = this.#actors.get(actorId);
|
|
1581
1585
|
if (!handler) {
|
|
1582
1586
|
handler = {
|
|
1583
|
-
actorStartPromise:
|
|
1584
|
-
persistedData:
|
|
1587
|
+
actorStartPromise: _chunkNLYAKGMLcjs.promiseWithResolvers.call(void 0, ),
|
|
1588
|
+
persistedData: _chunk6PORXHSQcjs.serializeEmptyPersistData.call(void 0, input)
|
|
1585
1589
|
};
|
|
1586
1590
|
this.#actors.set(actorId, handler);
|
|
1587
1591
|
}
|
|
1588
|
-
const name =
|
|
1589
|
-
_invariant2.default.call(void 0,
|
|
1590
|
-
const key =
|
|
1591
|
-
const definition =
|
|
1592
|
-
this.#registryConfig,
|
|
1593
|
-
config2.name
|
|
1594
|
-
// TODO: Remove cast
|
|
1595
|
-
);
|
|
1592
|
+
const name = runConfig.name;
|
|
1593
|
+
_invariant2.default.call(void 0, runConfig.key, "actor should have a key");
|
|
1594
|
+
const key = _chunkO7BIBANWcjs.deserializeActorKey.call(void 0, runConfig.key);
|
|
1595
|
+
const definition = _chunkO7BIBANWcjs.lookupInRegistry.call(void 0, this.#registryConfig, runConfig.name);
|
|
1596
1596
|
handler.actor = definition.instantiate();
|
|
1597
1597
|
await handler.actor.start(
|
|
1598
1598
|
this,
|
|
@@ -1637,19 +1637,19 @@ var EngineActorDriver = class {
|
|
|
1637
1637
|
if (protocols) {
|
|
1638
1638
|
const protocolList = protocols.split(",").map((p) => p.trim());
|
|
1639
1639
|
for (const protocol of protocolList) {
|
|
1640
|
-
if (protocol.startsWith(
|
|
1641
|
-
encodingRaw = protocol.substring(
|
|
1642
|
-
} else if (protocol.startsWith(
|
|
1640
|
+
if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING)) {
|
|
1641
|
+
encodingRaw = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING.length);
|
|
1642
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS)) {
|
|
1643
1643
|
connParamsRaw = decodeURIComponent(
|
|
1644
|
-
protocol.substring(
|
|
1644
|
+
protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS.length)
|
|
1645
1645
|
);
|
|
1646
1646
|
}
|
|
1647
1647
|
}
|
|
1648
1648
|
}
|
|
1649
|
-
const encoding =
|
|
1649
|
+
const encoding = _chunk5JZPEJVJcjs.EncodingSchema.parse(encodingRaw);
|
|
1650
1650
|
const connParams = connParamsRaw ? JSON.parse(connParamsRaw) : void 0;
|
|
1651
1651
|
let wsHandlerPromise;
|
|
1652
|
-
if (url.pathname ===
|
|
1652
|
+
if (url.pathname === _chunk5JZPEJVJcjs.PATH_CONNECT_WEBSOCKET) {
|
|
1653
1653
|
wsHandlerPromise = handleWebSocketConnect(
|
|
1654
1654
|
request,
|
|
1655
1655
|
this.#runConfig,
|
|
@@ -1661,7 +1661,7 @@ var EngineActorDriver = class {
|
|
|
1661
1661
|
void 0,
|
|
1662
1662
|
void 0
|
|
1663
1663
|
);
|
|
1664
|
-
} else if (url.pathname.startsWith(
|
|
1664
|
+
} else if (url.pathname.startsWith(_chunk5JZPEJVJcjs.PATH_RAW_WEBSOCKET_PREFIX)) {
|
|
1665
1665
|
wsHandlerPromise = handleRawWebSocketHandler(
|
|
1666
1666
|
request,
|
|
1667
1667
|
url.pathname + url.search,
|
|
@@ -1718,47 +1718,28 @@ var EngineActorDriver = class {
|
|
|
1718
1718
|
async serverlessHandleStart(c) {
|
|
1719
1719
|
await this.#runnerStarted.promise;
|
|
1720
1720
|
return _streaming.streamSSE.call(void 0, c, async (stream) => {
|
|
1721
|
+
stream.onAbort(() => this.shutdown(true));
|
|
1721
1722
|
const payload = this.#runner.getServerlessInitPacket();
|
|
1722
1723
|
_invariant2.default.call(void 0, payload, "runnerId not set");
|
|
1723
|
-
stream.writeSSE({ data: payload });
|
|
1724
|
+
await stream.writeSSE({ data: payload });
|
|
1724
1725
|
return this.#runnerStopped.promise;
|
|
1725
1726
|
});
|
|
1726
1727
|
}
|
|
1727
1728
|
};
|
|
1728
1729
|
|
|
1729
|
-
// src/drivers/engine/config.ts
|
|
1730
|
-
|
|
1731
|
-
var ConfigSchema = _zod.z.object({
|
|
1732
|
-
app: _zod.z.custom().optional(),
|
|
1733
|
-
endpoint: _zod.z.string().default(
|
|
1734
|
-
() => _nullishCoalesce(_chunkU2IXX6DYcjs.getEnvUniversal.call(void 0, "RIVET_ENGINE"), () => ( "http://localhost:6420"))
|
|
1735
|
-
),
|
|
1736
|
-
token: _zod.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkU2IXX6DYcjs.getEnvUniversal.call(void 0, "RIVET_TOKEN")))),
|
|
1737
|
-
pegboardEndpoint: _zod.z.string().optional(),
|
|
1738
|
-
namespace: _zod.z.string().default(() => _nullishCoalesce(_chunkU2IXX6DYcjs.getEnvUniversal.call(void 0, "RIVET_NAMESPACE"), () => ( "default"))),
|
|
1739
|
-
runnerName: _zod.z.string().default(() => _nullishCoalesce(_chunkU2IXX6DYcjs.getEnvUniversal.call(void 0, "RIVET_RUNNER"), () => ( "rivetkit"))),
|
|
1740
|
-
// TODO: Automatically attempt to determine key by common env vars (e.g. k8s pod name)
|
|
1741
|
-
runnerKey: _zod.z.string().default(
|
|
1742
|
-
() => _nullishCoalesce(_chunkU2IXX6DYcjs.getEnvUniversal.call(void 0, "RIVET_RUNNER_KEY"), () => ( crypto.randomUUID()))
|
|
1743
|
-
),
|
|
1744
|
-
totalSlots: _zod.z.number().default(1e5)
|
|
1745
|
-
}).default({});
|
|
1746
|
-
|
|
1747
1730
|
// src/drivers/engine/mod.ts
|
|
1748
|
-
function createEngineDriver(
|
|
1749
|
-
const config2 = ConfigSchema.parse(inputConfig);
|
|
1731
|
+
function createEngineDriver() {
|
|
1750
1732
|
return {
|
|
1751
1733
|
name: "engine",
|
|
1752
1734
|
manager: (_registryConfig, runConfig) => {
|
|
1753
|
-
return new (0,
|
|
1735
|
+
return new (0, _chunkO7BIBANWcjs.RemoteManagerDriver)(runConfig);
|
|
1754
1736
|
},
|
|
1755
1737
|
actor: (registryConfig, runConfig, managerDriver, inlineClient) => {
|
|
1756
1738
|
return new EngineActorDriver(
|
|
1757
1739
|
registryConfig,
|
|
1758
1740
|
runConfig,
|
|
1759
1741
|
managerDriver,
|
|
1760
|
-
inlineClient
|
|
1761
|
-
config2
|
|
1742
|
+
inlineClient
|
|
1762
1743
|
);
|
|
1763
1744
|
}
|
|
1764
1745
|
};
|
|
@@ -1805,7 +1786,7 @@ var FileSystemActorDriver = class {
|
|
|
1805
1786
|
const state = await this.#state.loadActorStateOrError(actorId);
|
|
1806
1787
|
await this.#state.writeActor(actorId, {
|
|
1807
1788
|
...state,
|
|
1808
|
-
persistedData:
|
|
1789
|
+
persistedData: _chunkNLYAKGMLcjs.bufferToArrayBuffer.call(void 0, data)
|
|
1809
1790
|
});
|
|
1810
1791
|
}
|
|
1811
1792
|
async setAlarm(actor2, timestamp) {
|
|
@@ -1822,8 +1803,8 @@ var FileSystemActorDriver = class {
|
|
|
1822
1803
|
// src/drivers/file-system/global-state.ts
|
|
1823
1804
|
var _crypto = require('crypto'); var crypto3 = _interopRequireWildcard(_crypto); var crypto2 = _interopRequireWildcard(_crypto);
|
|
1824
1805
|
var _fs = require('fs'); var fsSync2 = _interopRequireWildcard(_fs); var fsSync = _interopRequireWildcard(_fs);
|
|
1825
|
-
var _promises = require('fs/promises'); var fs2 = _interopRequireWildcard(_promises); var fs = _interopRequireWildcard(_promises);
|
|
1826
|
-
var _path = require('path'); var path2 = _interopRequireWildcard(_path); var path = _interopRequireWildcard(_path);
|
|
1806
|
+
var _promises = require('fs/promises'); var fs2 = _interopRequireWildcard(_promises); var fs = _interopRequireWildcard(_promises); var fs3 = _interopRequireWildcard(_promises);
|
|
1807
|
+
var _path = require('path'); var path2 = _interopRequireWildcard(_path); var path = _interopRequireWildcard(_path); var path3 = _interopRequireWildcard(_path);
|
|
1827
1808
|
|
|
1828
1809
|
|
|
1829
1810
|
// dist/schemas/file-system-driver/v1.ts
|
|
@@ -1908,13 +1889,13 @@ function decodeActorAlarm(bytes) {
|
|
|
1908
1889
|
// src/schemas/file-system-driver/versioned.ts
|
|
1909
1890
|
var CURRENT_VERSION = 1;
|
|
1910
1891
|
var migrations = /* @__PURE__ */ new Map();
|
|
1911
|
-
var ACTOR_STATE_VERSIONED =
|
|
1892
|
+
var ACTOR_STATE_VERSIONED = _chunk6PORXHSQcjs.createVersionedDataHandler.call(void 0, {
|
|
1912
1893
|
currentVersion: CURRENT_VERSION,
|
|
1913
1894
|
migrations,
|
|
1914
1895
|
serializeVersion: (data) => encodeActorState(data),
|
|
1915
1896
|
deserializeVersion: (bytes) => decodeActorState(bytes)
|
|
1916
1897
|
});
|
|
1917
|
-
var ACTOR_ALARM_VERSIONED =
|
|
1898
|
+
var ACTOR_ALARM_VERSIONED = _chunk6PORXHSQcjs.createVersionedDataHandler.call(void 0, {
|
|
1918
1899
|
currentVersion: CURRENT_VERSION,
|
|
1919
1900
|
migrations,
|
|
1920
1901
|
serializeVersion: (data) => encodeActorAlarm(data),
|
|
@@ -1923,7 +1904,7 @@ var ACTOR_ALARM_VERSIONED = _chunkSOC4HWCGcjs.createVersionedDataHandler.call(vo
|
|
|
1923
1904
|
|
|
1924
1905
|
// src/drivers/file-system/log.ts
|
|
1925
1906
|
function logger5() {
|
|
1926
|
-
return
|
|
1907
|
+
return _chunk5ABUOI3Vcjs.getLogger.call(void 0, "driver-fs");
|
|
1927
1908
|
}
|
|
1928
1909
|
|
|
1929
1910
|
// src/drivers/file-system/utils.ts
|
|
@@ -1949,9 +1930,9 @@ function getStoragePath(customPath) {
|
|
|
1949
1930
|
const dirHash = createHashForPath(pathToHash);
|
|
1950
1931
|
return path.join(dataPath, dirHash);
|
|
1951
1932
|
}
|
|
1952
|
-
async function pathExists(
|
|
1933
|
+
async function pathExists(path4) {
|
|
1953
1934
|
try {
|
|
1954
|
-
await fs.access(
|
|
1935
|
+
await fs.access(path4);
|
|
1955
1936
|
return true;
|
|
1956
1937
|
} catch (e) {
|
|
1957
1938
|
return false;
|
|
@@ -2093,7 +2074,7 @@ var FileSystemGlobalState = class {
|
|
|
2093
2074
|
name,
|
|
2094
2075
|
key,
|
|
2095
2076
|
createdAt: BigInt(Date.now()),
|
|
2096
|
-
persistedData:
|
|
2077
|
+
persistedData: _chunkNLYAKGMLcjs.bufferToArrayBuffer.call(void 0, _chunk6PORXHSQcjs.serializeEmptyPersistData.call(void 0, input))
|
|
2097
2078
|
};
|
|
2098
2079
|
await this.writeActor(actorId, entry.state);
|
|
2099
2080
|
return entry;
|
|
@@ -2141,7 +2122,7 @@ var FileSystemGlobalState = class {
|
|
|
2141
2122
|
name,
|
|
2142
2123
|
key,
|
|
2143
2124
|
createdAt: BigInt(Date.now()),
|
|
2144
|
-
persistedData:
|
|
2125
|
+
persistedData: _chunkNLYAKGMLcjs.bufferToArrayBuffer.call(void 0, _chunk6PORXHSQcjs.serializeEmptyPersistData.call(void 0, input))
|
|
2145
2126
|
};
|
|
2146
2127
|
await this.writeActor(actorId, entry.state);
|
|
2147
2128
|
}
|
|
@@ -2265,9 +2246,9 @@ var FileSystemGlobalState = class {
|
|
|
2265
2246
|
if (entry.actor) {
|
|
2266
2247
|
return entry.actor;
|
|
2267
2248
|
}
|
|
2268
|
-
entry.startPromise =
|
|
2249
|
+
entry.startPromise = _chunkNLYAKGMLcjs.promiseWithResolvers.call(void 0, );
|
|
2269
2250
|
try {
|
|
2270
|
-
const definition =
|
|
2251
|
+
const definition = _chunkO7BIBANWcjs.lookupInRegistry.call(void 0, registryConfig, entry.state.name);
|
|
2271
2252
|
entry.actor = definition.instantiate();
|
|
2272
2253
|
await entry.actor.start(
|
|
2273
2254
|
actorDriver,
|
|
@@ -2327,7 +2308,7 @@ var FileSystemGlobalState = class {
|
|
|
2327
2308
|
logger5().error({
|
|
2328
2309
|
msg: "failed to read alarm file",
|
|
2329
2310
|
file,
|
|
2330
|
-
error:
|
|
2311
|
+
error: _chunkNLYAKGMLcjs.stringifyError.call(void 0, err)
|
|
2331
2312
|
});
|
|
2332
2313
|
}
|
|
2333
2314
|
}
|
|
@@ -2354,7 +2335,7 @@ var FileSystemGlobalState = class {
|
|
|
2354
2335
|
(_a = entry.alarmTimeout) == null ? void 0 : _a.abort();
|
|
2355
2336
|
entry.alarmTimestamp = timestamp;
|
|
2356
2337
|
const delay = Math.max(0, timestamp - Date.now());
|
|
2357
|
-
entry.alarmTimeout =
|
|
2338
|
+
entry.alarmTimeout = _chunkNLYAKGMLcjs.setLongTimeout.call(void 0, async () => {
|
|
2358
2339
|
entry.alarmTimestamp = void 0;
|
|
2359
2340
|
if (this.#persist) {
|
|
2360
2341
|
try {
|
|
@@ -2364,7 +2345,7 @@ var FileSystemGlobalState = class {
|
|
|
2364
2345
|
logger5().debug({
|
|
2365
2346
|
msg: "failed to remove alarm file",
|
|
2366
2347
|
actorId,
|
|
2367
|
-
error:
|
|
2348
|
+
error: _chunkNLYAKGMLcjs.stringifyError.call(void 0, err)
|
|
2368
2349
|
});
|
|
2369
2350
|
}
|
|
2370
2351
|
}
|
|
@@ -2390,7 +2371,7 @@ var FileSystemGlobalState = class {
|
|
|
2390
2371
|
logger5().error({
|
|
2391
2372
|
msg: "failed to handle alarm",
|
|
2392
2373
|
actorId,
|
|
2393
|
-
error:
|
|
2374
|
+
error: _chunkNLYAKGMLcjs.stringifyError.call(void 0, err)
|
|
2394
2375
|
});
|
|
2395
2376
|
}
|
|
2396
2377
|
}, delay);
|
|
@@ -2400,7 +2381,7 @@ var FileSystemGlobalState = class {
|
|
|
2400
2381
|
if (fsSync2.existsSync(tokenPath)) {
|
|
2401
2382
|
return fsSync2.readFileSync(tokenPath, "utf-8");
|
|
2402
2383
|
}
|
|
2403
|
-
const newToken =
|
|
2384
|
+
const newToken = _chunk5JZPEJVJcjs.generateRandomString.call(void 0, );
|
|
2404
2385
|
fsSync2.writeFileSync(tokenPath, newToken);
|
|
2405
2386
|
return newToken;
|
|
2406
2387
|
}
|
|
@@ -2462,10 +2443,10 @@ function createManagerInspectorRouter() {
|
|
|
2462
2443
|
});
|
|
2463
2444
|
return c.json(actors, 200);
|
|
2464
2445
|
} catch (error) {
|
|
2465
|
-
|
|
2446
|
+
_chunk765F7ILIcjs.inspectorLogger.call(void 0, ).error({ msg: "Failed to fetch actors", error });
|
|
2466
2447
|
return c.json("Failed to fetch actors", 500);
|
|
2467
2448
|
}
|
|
2468
|
-
}).post("/actors", _standardvalidator.sValidator.call(void 0, "json",
|
|
2449
|
+
}).post("/actors", _standardvalidator.sValidator.call(void 0, "json", _chunkI6AVFIVYcjs.CreateActorSchema), async (c) => {
|
|
2469
2450
|
const actor2 = await c.var.inspector.accessors.createActor(
|
|
2470
2451
|
c.req.valid("json")
|
|
2471
2452
|
);
|
|
@@ -2491,7 +2472,7 @@ var ManagerInspector = class {
|
|
|
2491
2472
|
|
|
2492
2473
|
constructor(accessors) {
|
|
2493
2474
|
this.accessors = accessors();
|
|
2494
|
-
|
|
2475
|
+
_chunk765F7ILIcjs.inspectorLogger.call(void 0, ).debug({ msg: "Manager Inspector enabled and ready" });
|
|
2495
2476
|
}
|
|
2496
2477
|
};
|
|
2497
2478
|
|
|
@@ -2566,7 +2547,7 @@ var FileSystemManagerDriver = class {
|
|
|
2566
2547
|
};
|
|
2567
2548
|
});
|
|
2568
2549
|
}
|
|
2569
|
-
const inlineClient =
|
|
2550
|
+
const inlineClient = _chunkO7BIBANWcjs.createClientWithDriver.call(void 0, this);
|
|
2570
2551
|
this.#actorDriver = this.#driverConfig.actor(
|
|
2571
2552
|
registryConfig,
|
|
2572
2553
|
runConfig,
|
|
@@ -2584,10 +2565,10 @@ var FileSystemManagerDriver = class {
|
|
|
2584
2565
|
actorId
|
|
2585
2566
|
});
|
|
2586
2567
|
}
|
|
2587
|
-
async openWebSocket(
|
|
2588
|
-
const pathOnly =
|
|
2568
|
+
async openWebSocket(path4, actorId, encoding, params, connId, connToken) {
|
|
2569
|
+
const pathOnly = path4.split("?")[0];
|
|
2589
2570
|
const normalizedPath = pathOnly.startsWith("/") ? pathOnly : `/${pathOnly}`;
|
|
2590
|
-
if (normalizedPath ===
|
|
2571
|
+
if (normalizedPath === _chunk5JZPEJVJcjs.PATH_CONNECT_WEBSOCKET) {
|
|
2591
2572
|
const wsHandler = await handleWebSocketConnect(
|
|
2592
2573
|
void 0,
|
|
2593
2574
|
this.#runConfig,
|
|
@@ -2599,16 +2580,16 @@ var FileSystemManagerDriver = class {
|
|
|
2599
2580
|
connToken
|
|
2600
2581
|
);
|
|
2601
2582
|
return new InlineWebSocketAdapter2(wsHandler);
|
|
2602
|
-
} else if (normalizedPath.startsWith(
|
|
2583
|
+
} else if (normalizedPath.startsWith(_chunk5JZPEJVJcjs.PATH_RAW_WEBSOCKET_PREFIX) || normalizedPath === "/raw/websocket") {
|
|
2603
2584
|
const wsHandler = await handleRawWebSocketHandler(
|
|
2604
2585
|
void 0,
|
|
2605
|
-
|
|
2586
|
+
path4,
|
|
2606
2587
|
this.#actorDriver,
|
|
2607
2588
|
actorId
|
|
2608
2589
|
);
|
|
2609
2590
|
return new InlineWebSocketAdapter2(wsHandler);
|
|
2610
2591
|
} else {
|
|
2611
|
-
throw new Error(`Unreachable path: ${
|
|
2592
|
+
throw new Error(`Unreachable path: ${path4}`);
|
|
2612
2593
|
}
|
|
2613
2594
|
}
|
|
2614
2595
|
async proxyRequest(c, actorRequest, actorId) {
|
|
@@ -2616,13 +2597,13 @@ var FileSystemManagerDriver = class {
|
|
|
2616
2597
|
actorId
|
|
2617
2598
|
});
|
|
2618
2599
|
}
|
|
2619
|
-
async proxyWebSocket(c,
|
|
2600
|
+
async proxyWebSocket(c, path4, actorId, encoding, connParams, connId, connToken) {
|
|
2620
2601
|
var _a, _b;
|
|
2621
2602
|
const upgradeWebSocket = (_b = (_a = this.#runConfig).getUpgradeWebSocket) == null ? void 0 : _b.call(_a);
|
|
2622
2603
|
_invariant2.default.call(void 0, upgradeWebSocket, "missing getUpgradeWebSocket");
|
|
2623
|
-
const pathOnly =
|
|
2604
|
+
const pathOnly = path4.split("?")[0];
|
|
2624
2605
|
const normalizedPath = pathOnly.startsWith("/") ? pathOnly : `/${pathOnly}`;
|
|
2625
|
-
if (normalizedPath ===
|
|
2606
|
+
if (normalizedPath === _chunk5JZPEJVJcjs.PATH_CONNECT_WEBSOCKET) {
|
|
2626
2607
|
const wsHandler = await handleWebSocketConnect(
|
|
2627
2608
|
c.req.raw,
|
|
2628
2609
|
this.#runConfig,
|
|
@@ -2633,17 +2614,17 @@ var FileSystemManagerDriver = class {
|
|
|
2633
2614
|
connId,
|
|
2634
2615
|
connToken
|
|
2635
2616
|
);
|
|
2636
|
-
return upgradeWebSocket(() => wsHandler)(c,
|
|
2637
|
-
} else if (normalizedPath.startsWith(
|
|
2617
|
+
return upgradeWebSocket(() => wsHandler)(c, _chunkNLYAKGMLcjs.noopNext.call(void 0, ));
|
|
2618
|
+
} else if (normalizedPath.startsWith(_chunk5JZPEJVJcjs.PATH_RAW_WEBSOCKET_PREFIX) || normalizedPath === "/raw/websocket") {
|
|
2638
2619
|
const wsHandler = await handleRawWebSocketHandler(
|
|
2639
2620
|
c.req.raw,
|
|
2640
|
-
|
|
2621
|
+
path4,
|
|
2641
2622
|
this.#actorDriver,
|
|
2642
2623
|
actorId
|
|
2643
2624
|
);
|
|
2644
|
-
return upgradeWebSocket(() => wsHandler)(c,
|
|
2625
|
+
return upgradeWebSocket(() => wsHandler)(c, _chunkNLYAKGMLcjs.noopNext.call(void 0, ));
|
|
2645
2626
|
} else {
|
|
2646
|
-
throw new Error(`Unreachable path: ${
|
|
2627
|
+
throw new Error(`Unreachable path: ${path4}`);
|
|
2647
2628
|
}
|
|
2648
2629
|
}
|
|
2649
2630
|
async getForId({ actorId }) {
|
|
@@ -2753,30 +2734,284 @@ function createMemoryDriver() {
|
|
|
2753
2734
|
return createFileSystemOrMemoryDriver(false);
|
|
2754
2735
|
}
|
|
2755
2736
|
|
|
2737
|
+
// src/registry/mod.ts
|
|
2738
|
+
|
|
2739
|
+
|
|
2756
2740
|
// src/drivers/default.ts
|
|
2757
2741
|
function chooseDefaultDriver(runConfig) {
|
|
2758
2742
|
if (runConfig.endpoint && runConfig.driver) {
|
|
2759
2743
|
throw new (0, _chunk5QGQK44Lcjs.UserError)(
|
|
2760
|
-
"Cannot specify both '
|
|
2744
|
+
"Cannot specify both 'endpoint' and 'driver' in configuration"
|
|
2745
|
+
);
|
|
2746
|
+
}
|
|
2747
|
+
if (runConfig.runnerKind === "serverless" && !runConfig.endpoint) {
|
|
2748
|
+
throw new (0, _chunk5QGQK44Lcjs.UserError)(
|
|
2749
|
+
"Cannot use 'serverless' runnerKind without the 'endpoint' config set."
|
|
2761
2750
|
);
|
|
2762
2751
|
}
|
|
2763
2752
|
if (runConfig.driver) {
|
|
2764
2753
|
return runConfig.driver;
|
|
2765
2754
|
}
|
|
2766
|
-
if (runConfig.endpoint) {
|
|
2767
|
-
|
|
2755
|
+
if (runConfig.endpoint || runConfig.token) {
|
|
2756
|
+
_chunk5JZPEJVJcjs.loggerWithoutContext.call(void 0, ).debug({
|
|
2768
2757
|
msg: "using rivet engine driver",
|
|
2769
2758
|
endpoint: runConfig.endpoint
|
|
2770
2759
|
});
|
|
2771
|
-
return createEngineDriver(
|
|
2772
|
-
endpoint: runConfig.endpoint,
|
|
2773
|
-
token: runConfig.token
|
|
2774
|
-
});
|
|
2760
|
+
return createEngineDriver();
|
|
2775
2761
|
}
|
|
2776
|
-
|
|
2762
|
+
_chunk5JZPEJVJcjs.loggerWithoutContext.call(void 0, ).debug({ msg: "using default file system driver" });
|
|
2777
2763
|
return createFileSystemOrMemoryDriver(true);
|
|
2778
2764
|
}
|
|
2779
2765
|
|
|
2766
|
+
// src/engine-process/mod.ts
|
|
2767
|
+
var _child_process = require('child_process');
|
|
2768
|
+
|
|
2769
|
+
|
|
2770
|
+
|
|
2771
|
+
var _promises2 = require('stream/promises');
|
|
2772
|
+
|
|
2773
|
+
// src/engine-process/log.ts
|
|
2774
|
+
function logger6() {
|
|
2775
|
+
return _chunk5ABUOI3Vcjs.getLogger.call(void 0, "engine-process");
|
|
2776
|
+
}
|
|
2777
|
+
|
|
2778
|
+
// src/engine-process/mod.ts
|
|
2779
|
+
var ENGINE_PORT = 6420;
|
|
2780
|
+
var ENGINE_ENDPOINT = `http://localhost:${ENGINE_PORT}`;
|
|
2781
|
+
var ENGINE_BASE_URL = "https://releases.rivet.gg/engine";
|
|
2782
|
+
var ENGINE_BINARY_NAME = "rivet-engine";
|
|
2783
|
+
async function ensureEngineProcess(options) {
|
|
2784
|
+
logger6().debug({ msg: "ensuring engine process", version: options.version });
|
|
2785
|
+
const storageRoot = getStoragePath();
|
|
2786
|
+
const binDir = path3.join(storageRoot, "bin");
|
|
2787
|
+
const varDir = path3.join(storageRoot, "var");
|
|
2788
|
+
const logsDir = path3.join(varDir, "logs", "rivet-engine");
|
|
2789
|
+
await ensureDirectoryExists(binDir);
|
|
2790
|
+
await ensureDirectoryExists(varDir);
|
|
2791
|
+
await ensureDirectoryExists(logsDir);
|
|
2792
|
+
const executableName = process.platform === "win32" ? `${ENGINE_BINARY_NAME}-${options.version}.exe` : `${ENGINE_BINARY_NAME}-${options.version}`;
|
|
2793
|
+
const binaryPath = path3.join(binDir, executableName);
|
|
2794
|
+
await downloadEngineBinaryIfNeeded(binaryPath, options.version, varDir);
|
|
2795
|
+
if (await isEngineRunning()) {
|
|
2796
|
+
try {
|
|
2797
|
+
await waitForEngineHealth();
|
|
2798
|
+
logger6().debug({
|
|
2799
|
+
msg: "engine already running and healthy",
|
|
2800
|
+
version: options.version
|
|
2801
|
+
});
|
|
2802
|
+
return;
|
|
2803
|
+
} catch (error) {
|
|
2804
|
+
logger6().warn({
|
|
2805
|
+
msg: "existing engine process not healthy, cannot restart automatically",
|
|
2806
|
+
error
|
|
2807
|
+
});
|
|
2808
|
+
throw new Error(
|
|
2809
|
+
"Engine process exists but is not healthy. Please manually stop the process on port 6420 and retry."
|
|
2810
|
+
);
|
|
2811
|
+
}
|
|
2812
|
+
}
|
|
2813
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/:/g, "-").replace(/\./g, "-");
|
|
2814
|
+
const stdoutLogPath = path3.join(logsDir, `engine-${timestamp}-stdout.log`);
|
|
2815
|
+
const stderrLogPath = path3.join(logsDir, `engine-${timestamp}-stderr.log`);
|
|
2816
|
+
const stdoutStream = _fs.createWriteStream.call(void 0, stdoutLogPath, { flags: "a" });
|
|
2817
|
+
const stderrStream = _fs.createWriteStream.call(void 0, stderrLogPath, { flags: "a" });
|
|
2818
|
+
logger6().debug({
|
|
2819
|
+
msg: "creating engine log files",
|
|
2820
|
+
stdout: stdoutLogPath,
|
|
2821
|
+
stderr: stderrLogPath
|
|
2822
|
+
});
|
|
2823
|
+
const child = _child_process.spawn.call(void 0, binaryPath, ["start"], {
|
|
2824
|
+
cwd: path3.dirname(binaryPath),
|
|
2825
|
+
stdio: ["inherit", "pipe", "pipe"],
|
|
2826
|
+
env: {
|
|
2827
|
+
...process.env
|
|
2828
|
+
}
|
|
2829
|
+
});
|
|
2830
|
+
if (!child.pid) {
|
|
2831
|
+
throw new Error("failed to spawn rivet engine process");
|
|
2832
|
+
}
|
|
2833
|
+
if (child.stdout) {
|
|
2834
|
+
child.stdout.pipe(stdoutStream);
|
|
2835
|
+
}
|
|
2836
|
+
if (child.stderr) {
|
|
2837
|
+
child.stderr.pipe(stderrStream);
|
|
2838
|
+
}
|
|
2839
|
+
logger6().debug({
|
|
2840
|
+
msg: "spawned engine process",
|
|
2841
|
+
pid: child.pid,
|
|
2842
|
+
cwd: path3.dirname(binaryPath)
|
|
2843
|
+
});
|
|
2844
|
+
child.once("exit", (code, signal) => {
|
|
2845
|
+
logger6().warn({
|
|
2846
|
+
msg: "engine process exited",
|
|
2847
|
+
code,
|
|
2848
|
+
signal
|
|
2849
|
+
});
|
|
2850
|
+
stdoutStream.end();
|
|
2851
|
+
stderrStream.end();
|
|
2852
|
+
});
|
|
2853
|
+
child.once("error", (error) => {
|
|
2854
|
+
logger6().error({
|
|
2855
|
+
msg: "engine process failed",
|
|
2856
|
+
error
|
|
2857
|
+
});
|
|
2858
|
+
stdoutStream.end();
|
|
2859
|
+
stderrStream.end();
|
|
2860
|
+
});
|
|
2861
|
+
await waitForEngineHealth();
|
|
2862
|
+
logger6().info({
|
|
2863
|
+
msg: "engine process started",
|
|
2864
|
+
pid: child.pid,
|
|
2865
|
+
version: options.version,
|
|
2866
|
+
logs: {
|
|
2867
|
+
stdout: stdoutLogPath,
|
|
2868
|
+
stderr: stderrLogPath
|
|
2869
|
+
}
|
|
2870
|
+
});
|
|
2871
|
+
}
|
|
2872
|
+
async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
2873
|
+
const binaryExists = await fileExists(binaryPath);
|
|
2874
|
+
if (binaryExists) {
|
|
2875
|
+
logger6().debug({
|
|
2876
|
+
msg: "engine binary already cached",
|
|
2877
|
+
version,
|
|
2878
|
+
path: binaryPath
|
|
2879
|
+
});
|
|
2880
|
+
return;
|
|
2881
|
+
}
|
|
2882
|
+
const { targetTriplet, extension } = resolveTargetTriplet();
|
|
2883
|
+
const remoteFile = `${ENGINE_BINARY_NAME}-${targetTriplet}${extension}`;
|
|
2884
|
+
const downloadUrl = `${ENGINE_BASE_URL}/${version}/${remoteFile}`;
|
|
2885
|
+
logger6().info({
|
|
2886
|
+
msg: "downloading engine binary",
|
|
2887
|
+
url: downloadUrl,
|
|
2888
|
+
path: binaryPath,
|
|
2889
|
+
version
|
|
2890
|
+
});
|
|
2891
|
+
const response = await fetch(downloadUrl);
|
|
2892
|
+
if (!response.ok || !response.body) {
|
|
2893
|
+
throw new Error(
|
|
2894
|
+
`failed to download rivet engine binary from ${downloadUrl}: ${response.status} ${response.statusText}`
|
|
2895
|
+
);
|
|
2896
|
+
}
|
|
2897
|
+
const tempPath = `${binaryPath}.${process.pid}.tmp`;
|
|
2898
|
+
await _promises2.pipeline.call(void 0, response.body, _fs.createWriteStream.call(void 0, tempPath));
|
|
2899
|
+
if (process.platform !== "win32") {
|
|
2900
|
+
await fs3.chmod(tempPath, 493);
|
|
2901
|
+
}
|
|
2902
|
+
await fs3.rename(tempPath, binaryPath);
|
|
2903
|
+
logger6().debug({
|
|
2904
|
+
msg: "engine binary download complete",
|
|
2905
|
+
version,
|
|
2906
|
+
path: binaryPath
|
|
2907
|
+
});
|
|
2908
|
+
logger6().info({
|
|
2909
|
+
msg: "engine binary downloaded",
|
|
2910
|
+
version,
|
|
2911
|
+
path: binaryPath
|
|
2912
|
+
});
|
|
2913
|
+
}
|
|
2914
|
+
function resolveTargetTriplet() {
|
|
2915
|
+
return resolveTargetTripletFor(process.platform, process.arch);
|
|
2916
|
+
}
|
|
2917
|
+
function resolveTargetTripletFor(platform, arch) {
|
|
2918
|
+
switch (platform) {
|
|
2919
|
+
case "darwin":
|
|
2920
|
+
if (arch === "arm64") {
|
|
2921
|
+
return { targetTriplet: "aarch64-apple-darwin", extension: "" };
|
|
2922
|
+
}
|
|
2923
|
+
if (arch === "x64") {
|
|
2924
|
+
return { targetTriplet: "x86_64-apple-darwin", extension: "" };
|
|
2925
|
+
}
|
|
2926
|
+
break;
|
|
2927
|
+
case "linux":
|
|
2928
|
+
if (arch === "x64") {
|
|
2929
|
+
return { targetTriplet: "x86_64-unknown-linux-musl", extension: "" };
|
|
2930
|
+
}
|
|
2931
|
+
break;
|
|
2932
|
+
case "win32":
|
|
2933
|
+
if (arch === "x64") {
|
|
2934
|
+
return { targetTriplet: "x86_64-pc-windows-gnu", extension: ".exe" };
|
|
2935
|
+
}
|
|
2936
|
+
break;
|
|
2937
|
+
}
|
|
2938
|
+
throw new Error(
|
|
2939
|
+
`unsupported platform for rivet engine binary: ${platform}/${arch}`
|
|
2940
|
+
);
|
|
2941
|
+
}
|
|
2942
|
+
async function isEngineRunning() {
|
|
2943
|
+
return await checkIfEngineAlreadyRunningOnPort(ENGINE_PORT);
|
|
2944
|
+
}
|
|
2945
|
+
async function checkIfEngineAlreadyRunningOnPort(port) {
|
|
2946
|
+
let response;
|
|
2947
|
+
try {
|
|
2948
|
+
response = await fetch(`http://localhost:${port}/health`);
|
|
2949
|
+
} catch (err) {
|
|
2950
|
+
return false;
|
|
2951
|
+
}
|
|
2952
|
+
if (response.ok) {
|
|
2953
|
+
const health = await response.json();
|
|
2954
|
+
if (health.runtime === "engine") {
|
|
2955
|
+
logger6().debug({
|
|
2956
|
+
msg: "rivet engine already running on port",
|
|
2957
|
+
port
|
|
2958
|
+
});
|
|
2959
|
+
return true;
|
|
2960
|
+
} else if (health.runtime === "rivetkit") {
|
|
2961
|
+
logger6().error({
|
|
2962
|
+
msg: "another rivetkit process is already running on port",
|
|
2963
|
+
port
|
|
2964
|
+
});
|
|
2965
|
+
throw new Error(
|
|
2966
|
+
"RivetKit process already running on port 6420, stop that process and restart this."
|
|
2967
|
+
);
|
|
2968
|
+
} else {
|
|
2969
|
+
throw new Error(
|
|
2970
|
+
"Unknown process running on port 6420, cannot identify what it is."
|
|
2971
|
+
);
|
|
2972
|
+
}
|
|
2973
|
+
}
|
|
2974
|
+
return false;
|
|
2975
|
+
}
|
|
2976
|
+
async function fileExists(filePath) {
|
|
2977
|
+
try {
|
|
2978
|
+
await fs3.access(filePath);
|
|
2979
|
+
return true;
|
|
2980
|
+
} catch (e6) {
|
|
2981
|
+
return false;
|
|
2982
|
+
}
|
|
2983
|
+
}
|
|
2984
|
+
var HEALTH_MAX_WAIT = 1e4;
|
|
2985
|
+
var HEALTH_INTERVAL = 100;
|
|
2986
|
+
async function waitForEngineHealth() {
|
|
2987
|
+
const maxRetries = Math.ceil(HEALTH_MAX_WAIT / HEALTH_INTERVAL);
|
|
2988
|
+
logger6().debug({ msg: "waiting for engine health check" });
|
|
2989
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
2990
|
+
try {
|
|
2991
|
+
const response = await fetch(`${ENGINE_ENDPOINT}/health`);
|
|
2992
|
+
if (response.ok) {
|
|
2993
|
+
logger6().debug({ msg: "engine health check passed" });
|
|
2994
|
+
return;
|
|
2995
|
+
}
|
|
2996
|
+
} catch (error) {
|
|
2997
|
+
if (i === maxRetries - 1) {
|
|
2998
|
+
throw new Error(
|
|
2999
|
+
`engine health check failed after ${maxRetries} retries: ${error}`
|
|
3000
|
+
);
|
|
3001
|
+
}
|
|
3002
|
+
}
|
|
3003
|
+
if (i < maxRetries - 1) {
|
|
3004
|
+
logger6().trace({
|
|
3005
|
+
msg: "engine not ready, retrying",
|
|
3006
|
+
attempt: i + 1,
|
|
3007
|
+
maxRetries
|
|
3008
|
+
});
|
|
3009
|
+
await new Promise((resolve) => setTimeout(resolve, HEALTH_INTERVAL));
|
|
3010
|
+
}
|
|
3011
|
+
}
|
|
3012
|
+
throw new Error(`engine health check failed after ${maxRetries} retries`);
|
|
3013
|
+
}
|
|
3014
|
+
|
|
2780
3015
|
// src/manager/router.ts
|
|
2781
3016
|
var _zodopenapi = require('@hono/zod-openapi');
|
|
2782
3017
|
|
|
@@ -2784,6 +3019,7 @@ var _zodopenapi = require('@hono/zod-openapi');
|
|
|
2784
3019
|
|
|
2785
3020
|
|
|
2786
3021
|
|
|
3022
|
+
var _factory = require('hono/factory');
|
|
2787
3023
|
|
|
2788
3024
|
|
|
2789
3025
|
|
|
@@ -2838,12 +3074,24 @@ async function actorGateway(runConfig, managerDriver, c, next) {
|
|
|
2838
3074
|
if (c.req.path.startsWith("/.test/")) {
|
|
2839
3075
|
return next();
|
|
2840
3076
|
}
|
|
3077
|
+
let strippedPath = c.req.path;
|
|
3078
|
+
if (runConfig.basePath && strippedPath.startsWith(runConfig.basePath)) {
|
|
3079
|
+
strippedPath = strippedPath.slice(runConfig.basePath.length);
|
|
3080
|
+
if (!strippedPath.startsWith("/")) {
|
|
3081
|
+
strippedPath = "/" + strippedPath;
|
|
3082
|
+
}
|
|
3083
|
+
}
|
|
2841
3084
|
if (c.req.header("upgrade") === "websocket") {
|
|
2842
|
-
return await handleWebSocketGateway(
|
|
3085
|
+
return await handleWebSocketGateway(
|
|
3086
|
+
runConfig,
|
|
3087
|
+
managerDriver,
|
|
3088
|
+
c,
|
|
3089
|
+
strippedPath
|
|
3090
|
+
);
|
|
2843
3091
|
}
|
|
2844
|
-
return await handleHttpGateway(managerDriver, c, next);
|
|
3092
|
+
return await handleHttpGateway(managerDriver, c, next, strippedPath);
|
|
2845
3093
|
}
|
|
2846
|
-
async function handleWebSocketGateway(runConfig, managerDriver, c) {
|
|
3094
|
+
async function handleWebSocketGateway(runConfig, managerDriver, c, strippedPath) {
|
|
2847
3095
|
var _a;
|
|
2848
3096
|
const upgradeWebSocket = (_a = runConfig.getUpgradeWebSocket) == null ? void 0 : _a.call(runConfig);
|
|
2849
3097
|
if (!upgradeWebSocket) {
|
|
@@ -2859,20 +3107,20 @@ async function handleWebSocketGateway(runConfig, managerDriver, c) {
|
|
|
2859
3107
|
if (protocols) {
|
|
2860
3108
|
const protocolList = protocols.split(",").map((p) => p.trim());
|
|
2861
3109
|
for (const protocol of protocolList) {
|
|
2862
|
-
if (protocol.startsWith(
|
|
2863
|
-
target = protocol.substring(
|
|
2864
|
-
} else if (protocol.startsWith(
|
|
2865
|
-
actorId = protocol.substring(
|
|
2866
|
-
} else if (protocol.startsWith(
|
|
2867
|
-
encodingRaw = protocol.substring(
|
|
2868
|
-
} else if (protocol.startsWith(
|
|
3110
|
+
if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_TARGET)) {
|
|
3111
|
+
target = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_TARGET.length);
|
|
3112
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_ACTOR)) {
|
|
3113
|
+
actorId = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_ACTOR.length);
|
|
3114
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING)) {
|
|
3115
|
+
encodingRaw = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING.length);
|
|
3116
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS)) {
|
|
2869
3117
|
connParamsRaw = decodeURIComponent(
|
|
2870
|
-
protocol.substring(
|
|
3118
|
+
protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS.length)
|
|
2871
3119
|
);
|
|
2872
|
-
} else if (protocol.startsWith(
|
|
2873
|
-
connIdRaw = protocol.substring(
|
|
2874
|
-
} else if (protocol.startsWith(
|
|
2875
|
-
connTokenRaw = protocol.substring(
|
|
3120
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_ID)) {
|
|
3121
|
+
connIdRaw = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_ID.length);
|
|
3122
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_TOKEN)) {
|
|
3123
|
+
connTokenRaw = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_TOKEN.length);
|
|
2876
3124
|
}
|
|
2877
3125
|
}
|
|
2878
3126
|
}
|
|
@@ -2885,12 +3133,12 @@ async function handleWebSocketGateway(runConfig, managerDriver, c) {
|
|
|
2885
3133
|
logger().debug({
|
|
2886
3134
|
msg: "proxying websocket to actor",
|
|
2887
3135
|
actorId,
|
|
2888
|
-
path:
|
|
3136
|
+
path: strippedPath,
|
|
2889
3137
|
encoding: encodingRaw
|
|
2890
3138
|
});
|
|
2891
3139
|
const encoding = encodingRaw || "json";
|
|
2892
3140
|
const connParams = connParamsRaw ? JSON.parse(connParamsRaw) : void 0;
|
|
2893
|
-
const pathWithQuery = c.req.url.includes("?") ?
|
|
3141
|
+
const pathWithQuery = c.req.url.includes("?") ? strippedPath + c.req.url.substring(c.req.url.indexOf("?")) : strippedPath;
|
|
2894
3142
|
return await managerDriver.proxyWebSocket(
|
|
2895
3143
|
c,
|
|
2896
3144
|
pathWithQuery,
|
|
@@ -2902,9 +3150,9 @@ async function handleWebSocketGateway(runConfig, managerDriver, c) {
|
|
|
2902
3150
|
connTokenRaw
|
|
2903
3151
|
);
|
|
2904
3152
|
}
|
|
2905
|
-
async function handleHttpGateway(managerDriver, c, next) {
|
|
2906
|
-
const target = c.req.header(
|
|
2907
|
-
const actorId = c.req.header(
|
|
3153
|
+
async function handleHttpGateway(managerDriver, c, next, strippedPath) {
|
|
3154
|
+
const target = c.req.header(_chunk5JZPEJVJcjs.HEADER_RIVET_TARGET);
|
|
3155
|
+
const actorId = c.req.header(_chunk5JZPEJVJcjs.HEADER_RIVET_ACTOR);
|
|
2908
3156
|
if (target !== "actor") {
|
|
2909
3157
|
return next();
|
|
2910
3158
|
}
|
|
@@ -2914,19 +3162,20 @@ async function handleHttpGateway(managerDriver, c, next) {
|
|
|
2914
3162
|
logger().debug({
|
|
2915
3163
|
msg: "proxying request to actor",
|
|
2916
3164
|
actorId,
|
|
2917
|
-
path:
|
|
3165
|
+
path: strippedPath,
|
|
2918
3166
|
method: c.req.method
|
|
2919
3167
|
});
|
|
2920
3168
|
const proxyHeaders = new Headers(c.req.raw.headers);
|
|
2921
|
-
proxyHeaders.delete(
|
|
2922
|
-
proxyHeaders.delete(
|
|
3169
|
+
proxyHeaders.delete(_chunk5JZPEJVJcjs.HEADER_RIVET_TARGET);
|
|
3170
|
+
proxyHeaders.delete(_chunk5JZPEJVJcjs.HEADER_RIVET_ACTOR);
|
|
2923
3171
|
const url = new URL(c.req.url);
|
|
2924
|
-
const proxyUrl = new URL(`http://actor${
|
|
3172
|
+
const proxyUrl = new URL(`http://actor${strippedPath}${url.search}`);
|
|
2925
3173
|
const proxyRequest = new Request(proxyUrl, {
|
|
2926
3174
|
method: c.req.raw.method,
|
|
2927
3175
|
headers: proxyHeaders,
|
|
2928
3176
|
body: c.req.raw.body,
|
|
2929
|
-
signal: c.req.raw.signal
|
|
3177
|
+
signal: c.req.raw.signal,
|
|
3178
|
+
duplex: "half"
|
|
2930
3179
|
});
|
|
2931
3180
|
return await managerDriver.proxyRequest(c, proxyRequest, actorId);
|
|
2932
3181
|
}
|
|
@@ -2936,7 +3185,7 @@ async function createTestWebSocketProxy(clientWsPromise) {
|
|
|
2936
3185
|
promise: serverWsPromise,
|
|
2937
3186
|
resolve: serverWsResolve,
|
|
2938
3187
|
reject: serverWsReject
|
|
2939
|
-
} =
|
|
3188
|
+
} = _chunkNLYAKGMLcjs.promiseWithResolvers.call(void 0, );
|
|
2940
3189
|
try {
|
|
2941
3190
|
logger().debug({ msg: "awaiting client websocket promise" });
|
|
2942
3191
|
const ws = await clientWsPromise;
|
|
@@ -3102,6 +3351,22 @@ async function createTestWebSocketProxy(clientWsPromise) {
|
|
|
3102
3351
|
};
|
|
3103
3352
|
}
|
|
3104
3353
|
|
|
3354
|
+
// src/manager/router-schema.ts
|
|
3355
|
+
|
|
3356
|
+
var ServerlessStartHeadersSchema = _zod.z.object({
|
|
3357
|
+
endpoint: _zod.z.string({ required_error: "x-rivet-endpoint header is required" }),
|
|
3358
|
+
token: _zod.z.string({ invalid_type_error: "x-rivet-token header must be a string" }).optional(),
|
|
3359
|
+
totalSlots: _zod.z.coerce.number({
|
|
3360
|
+
invalid_type_error: "x-rivet-total-slots header must be a number"
|
|
3361
|
+
}).int("x-rivet-total-slots header must be an integer").gte(1, "x-rivet-total-slots header must be positive"),
|
|
3362
|
+
runnerName: _zod.z.string({
|
|
3363
|
+
required_error: "x-rivet-runner-name header is required"
|
|
3364
|
+
}),
|
|
3365
|
+
namespace: _zod.z.string({
|
|
3366
|
+
required_error: "x-rivet-namespace-id header is required"
|
|
3367
|
+
})
|
|
3368
|
+
});
|
|
3369
|
+
|
|
3105
3370
|
// src/manager/router.ts
|
|
3106
3371
|
function buildOpenApiResponses(schema) {
|
|
3107
3372
|
return {
|
|
@@ -3121,21 +3386,42 @@ function buildOpenApiResponses(schema) {
|
|
|
3121
3386
|
}
|
|
3122
3387
|
};
|
|
3123
3388
|
}
|
|
3124
|
-
function createManagerRouter(registryConfig, runConfig, managerDriver,
|
|
3389
|
+
function createManagerRouter(registryConfig, runConfig, managerDriver, driverConfig, client) {
|
|
3125
3390
|
const router = new (0, _zodopenapi.OpenAPIHono)({ strict: false }).basePath(
|
|
3126
3391
|
runConfig.basePath
|
|
3127
3392
|
);
|
|
3128
3393
|
router.use("*", loggerMiddleware(logger()));
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3394
|
+
router.use(
|
|
3395
|
+
"*",
|
|
3396
|
+
_factory.createMiddleware.call(void 0, async (c, next) => {
|
|
3397
|
+
const upgrade = c.req.header("upgrade");
|
|
3398
|
+
const isWebSocket = (upgrade == null ? void 0 : upgrade.toLowerCase()) === "websocket";
|
|
3399
|
+
const isGet = c.req.method === "GET";
|
|
3400
|
+
if (isGet && isWebSocket) {
|
|
3401
|
+
c.header("Sec-WebSocket-Protocol", "rivet");
|
|
3402
|
+
}
|
|
3403
|
+
await next();
|
|
3404
|
+
})
|
|
3405
|
+
);
|
|
3406
|
+
if (runConfig.runnerKind === "serverless") {
|
|
3407
|
+
addServerlessRoutes(
|
|
3408
|
+
driverConfig,
|
|
3409
|
+
registryConfig,
|
|
3410
|
+
runConfig,
|
|
3411
|
+
managerDriver,
|
|
3412
|
+
client,
|
|
3413
|
+
router
|
|
3414
|
+
);
|
|
3415
|
+
} else if (runConfig.runnerKind === "normal") {
|
|
3132
3416
|
addManagerRoutes(registryConfig, runConfig, managerDriver, router);
|
|
3417
|
+
} else {
|
|
3418
|
+
_chunkNLYAKGMLcjs.assertUnreachable.call(void 0, runConfig.runnerKind);
|
|
3133
3419
|
}
|
|
3134
3420
|
router.notFound(handleRouteNotFound);
|
|
3135
3421
|
router.onError(handleRouteError);
|
|
3136
3422
|
return { router, openapi: router };
|
|
3137
3423
|
}
|
|
3138
|
-
function addServerlessRoutes(runConfig,
|
|
3424
|
+
function addServerlessRoutes(driverConfig, registryConfig, runConfig, managerDriver, client, router) {
|
|
3139
3425
|
if (runConfig.cors) router.use("*", _cors.cors.call(void 0, runConfig.cors));
|
|
3140
3426
|
router.get("/", (c) => {
|
|
3141
3427
|
return c.text(
|
|
@@ -3143,12 +3429,39 @@ function addServerlessRoutes(runConfig, serverlessActorDriverBuilder, router) {
|
|
|
3143
3429
|
);
|
|
3144
3430
|
});
|
|
3145
3431
|
router.get("/start", async (c) => {
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
c.req.header("x-
|
|
3432
|
+
var _a;
|
|
3433
|
+
const parseResult = ServerlessStartHeadersSchema.safeParse({
|
|
3434
|
+
endpoint: c.req.header("x-rivet-endpoint"),
|
|
3435
|
+
token: _nullishCoalesce(c.req.header("x-rivet-token"), () => ( void 0)),
|
|
3436
|
+
totalSlots: c.req.header("x-rivet-total-slots"),
|
|
3437
|
+
runnerName: c.req.header("x-rivet-runner-name"),
|
|
3438
|
+
namespace: c.req.header("x-rivet-namespace-id")
|
|
3439
|
+
});
|
|
3440
|
+
if (!parseResult.success) {
|
|
3441
|
+
throw new (0, _chunk5QGQK44Lcjs.InvalidRequest)(
|
|
3442
|
+
_nullishCoalesce(((_a = parseResult.error.issues[0]) == null ? void 0 : _a.message), () => ( "invalid serverless start headers"))
|
|
3443
|
+
);
|
|
3444
|
+
}
|
|
3445
|
+
const { endpoint, token, totalSlots, runnerName, namespace } = parseResult.data;
|
|
3446
|
+
logger().debug({
|
|
3447
|
+
msg: "received serverless runner start request",
|
|
3448
|
+
endpoint,
|
|
3449
|
+
totalSlots,
|
|
3450
|
+
runnerName,
|
|
3451
|
+
namespace
|
|
3452
|
+
});
|
|
3453
|
+
const newRunConfig = Object.assign({}, runConfig);
|
|
3454
|
+
newRunConfig.endpoint = endpoint;
|
|
3455
|
+
newRunConfig.token = token;
|
|
3456
|
+
newRunConfig.totalSlots = totalSlots;
|
|
3457
|
+
newRunConfig.runnerName = runnerName;
|
|
3458
|
+
newRunConfig.namespace = namespace;
|
|
3459
|
+
const actorDriver = driverConfig.actor(
|
|
3460
|
+
registryConfig,
|
|
3461
|
+
newRunConfig,
|
|
3462
|
+
managerDriver,
|
|
3463
|
+
client
|
|
3149
3464
|
);
|
|
3150
|
-
if (isNaN(totalSlots)) totalSlots = void 0;
|
|
3151
|
-
const actorDriver = serverlessActorDriverBuilder(token, totalSlots);
|
|
3152
3465
|
_invariant2.default.call(void 0,
|
|
3153
3466
|
actorDriver.serverlessHandleStart,
|
|
3154
3467
|
"missing serverlessHandleStart on ActorDriver"
|
|
@@ -3156,18 +3469,22 @@ function addServerlessRoutes(runConfig, serverlessActorDriverBuilder, router) {
|
|
|
3156
3469
|
return await actorDriver.serverlessHandleStart(c);
|
|
3157
3470
|
});
|
|
3158
3471
|
router.get("/health", (c) => {
|
|
3159
|
-
return c.
|
|
3472
|
+
return c.json({
|
|
3473
|
+
status: "ok",
|
|
3474
|
+
runtime: "rivetkit",
|
|
3475
|
+
version: _chunkNLYAKGMLcjs.VERSION
|
|
3476
|
+
});
|
|
3160
3477
|
});
|
|
3161
3478
|
}
|
|
3162
3479
|
function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
3163
3480
|
var _a;
|
|
3164
|
-
if (
|
|
3481
|
+
if (_chunk765F7ILIcjs.isInspectorEnabled.call(void 0, runConfig, "manager")) {
|
|
3165
3482
|
if (!managerDriver.inspector) {
|
|
3166
3483
|
throw new (0, _chunk5QGQK44Lcjs.Unsupported)("inspector");
|
|
3167
3484
|
}
|
|
3168
3485
|
router.route(
|
|
3169
3486
|
"/inspect",
|
|
3170
|
-
new (0, _hono.Hono)().use(_cors.cors.call(void 0, runConfig.inspector.cors)).use(
|
|
3487
|
+
new (0, _hono.Hono)().use(_cors.cors.call(void 0, runConfig.inspector.cors)).use(_chunk765F7ILIcjs.secureInspector.call(void 0, runConfig)).use((c, next) => {
|
|
3171
3488
|
c.set("inspector", managerDriver.inspector);
|
|
3172
3489
|
return next();
|
|
3173
3490
|
}).route("/", createManagerInspectorRouter())
|
|
@@ -3235,7 +3552,9 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3235
3552
|
}
|
|
3236
3553
|
}
|
|
3237
3554
|
return c.json({
|
|
3238
|
-
actors: actors.map(
|
|
3555
|
+
actors: actors.map(
|
|
3556
|
+
(actor2) => createApiActor(actor2, runConfig.runnerName)
|
|
3557
|
+
)
|
|
3239
3558
|
});
|
|
3240
3559
|
});
|
|
3241
3560
|
}
|
|
@@ -3264,7 +3583,7 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3264
3583
|
});
|
|
3265
3584
|
if (existingActor) {
|
|
3266
3585
|
return c.json({
|
|
3267
|
-
actor: createApiActor(existingActor),
|
|
3586
|
+
actor: createApiActor(existingActor, runConfig.runnerName),
|
|
3268
3587
|
created: false
|
|
3269
3588
|
});
|
|
3270
3589
|
}
|
|
@@ -3278,7 +3597,7 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3278
3597
|
// Not provided in the request schema
|
|
3279
3598
|
});
|
|
3280
3599
|
return c.json({
|
|
3281
|
-
actor: createApiActor(newActor),
|
|
3600
|
+
actor: createApiActor(newActor, runConfig.runnerName),
|
|
3282
3601
|
created: true
|
|
3283
3602
|
});
|
|
3284
3603
|
});
|
|
@@ -3309,7 +3628,7 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3309
3628
|
region: void 0
|
|
3310
3629
|
// Not provided in the request schema
|
|
3311
3630
|
});
|
|
3312
|
-
const actor2 = createApiActor(actorOutput);
|
|
3631
|
+
const actor2 = createApiActor(actorOutput, runConfig.runnerName);
|
|
3313
3632
|
return c.json({ actor: actor2 });
|
|
3314
3633
|
});
|
|
3315
3634
|
}
|
|
@@ -3329,7 +3648,7 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3329
3648
|
const output = await managerDriver[method](...args);
|
|
3330
3649
|
response = { ok: output };
|
|
3331
3650
|
} catch (rawErr) {
|
|
3332
|
-
const err =
|
|
3651
|
+
const err = _chunkNLYAKGMLcjs.deconstructError.call(void 0, rawErr, logger(), {}, true);
|
|
3333
3652
|
response = { err };
|
|
3334
3653
|
}
|
|
3335
3654
|
return c.body(cbor4.encode(response));
|
|
@@ -3344,34 +3663,34 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3344
3663
|
let actorId = "";
|
|
3345
3664
|
let encoding = "bare";
|
|
3346
3665
|
let transport = "websocket";
|
|
3347
|
-
let
|
|
3666
|
+
let path4 = "";
|
|
3348
3667
|
let params;
|
|
3349
3668
|
let connId;
|
|
3350
3669
|
let connToken;
|
|
3351
3670
|
for (const protocol of protocols) {
|
|
3352
|
-
if (protocol.startsWith(
|
|
3353
|
-
actorId = protocol.substring(
|
|
3354
|
-
} else if (protocol.startsWith(
|
|
3671
|
+
if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_ACTOR)) {
|
|
3672
|
+
actorId = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_ACTOR.length);
|
|
3673
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING)) {
|
|
3355
3674
|
encoding = protocol.substring(
|
|
3356
|
-
|
|
3675
|
+
_chunk5JZPEJVJcjs.WS_PROTOCOL_ENCODING.length
|
|
3357
3676
|
);
|
|
3358
|
-
} else if (protocol.startsWith(
|
|
3677
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_TRANSPORT)) {
|
|
3359
3678
|
transport = protocol.substring(
|
|
3360
|
-
|
|
3679
|
+
_chunk5JZPEJVJcjs.WS_PROTOCOL_TRANSPORT.length
|
|
3361
3680
|
);
|
|
3362
|
-
} else if (protocol.startsWith(
|
|
3363
|
-
|
|
3364
|
-
protocol.substring(
|
|
3681
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_PATH)) {
|
|
3682
|
+
path4 = decodeURIComponent(
|
|
3683
|
+
protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_PATH.length)
|
|
3365
3684
|
);
|
|
3366
|
-
} else if (protocol.startsWith(
|
|
3685
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS)) {
|
|
3367
3686
|
const paramsRaw = decodeURIComponent(
|
|
3368
|
-
protocol.substring(
|
|
3687
|
+
protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_PARAMS.length)
|
|
3369
3688
|
);
|
|
3370
3689
|
params = JSON.parse(paramsRaw);
|
|
3371
|
-
} else if (protocol.startsWith(
|
|
3372
|
-
connId = protocol.substring(
|
|
3373
|
-
} else if (protocol.startsWith(
|
|
3374
|
-
connToken = protocol.substring(
|
|
3690
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_ID)) {
|
|
3691
|
+
connId = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_ID.length);
|
|
3692
|
+
} else if (protocol.startsWith(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_TOKEN)) {
|
|
3693
|
+
connToken = protocol.substring(_chunk5JZPEJVJcjs.WS_PROTOCOL_CONN_TOKEN.length);
|
|
3375
3694
|
}
|
|
3376
3695
|
}
|
|
3377
3696
|
logger().debug({
|
|
@@ -3380,10 +3699,10 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3380
3699
|
params,
|
|
3381
3700
|
encodingKind: encoding,
|
|
3382
3701
|
transport,
|
|
3383
|
-
path:
|
|
3702
|
+
path: path4
|
|
3384
3703
|
});
|
|
3385
3704
|
const clientWsPromise = managerDriver.openWebSocket(
|
|
3386
|
-
|
|
3705
|
+
path4,
|
|
3387
3706
|
actorId,
|
|
3388
3707
|
encoding,
|
|
3389
3708
|
params,
|
|
@@ -3391,10 +3710,10 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3391
3710
|
connToken
|
|
3392
3711
|
);
|
|
3393
3712
|
return await createTestWebSocketProxy(clientWsPromise);
|
|
3394
|
-
})(c,
|
|
3713
|
+
})(c, _chunkNLYAKGMLcjs.noopNext.call(void 0, ));
|
|
3395
3714
|
});
|
|
3396
3715
|
router.all(".test/inline-driver/send-request/*", async (c) => {
|
|
3397
|
-
const actorId = c.req.header(
|
|
3716
|
+
const actorId = c.req.header(_chunk5JZPEJVJcjs.HEADER_ACTOR_ID);
|
|
3398
3717
|
if (!actorId) {
|
|
3399
3718
|
return c.text("Missing required headers", 400);
|
|
3400
3719
|
}
|
|
@@ -3421,9 +3740,9 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3421
3740
|
} catch (error) {
|
|
3422
3741
|
logger().error({
|
|
3423
3742
|
msg: "error in test inline raw http",
|
|
3424
|
-
error:
|
|
3743
|
+
error: _chunkNLYAKGMLcjs.stringifyError.call(void 0, error)
|
|
3425
3744
|
});
|
|
3426
|
-
const err =
|
|
3745
|
+
const err = _chunkNLYAKGMLcjs.deconstructError.call(void 0, error, logger(), {}, true);
|
|
3427
3746
|
return c.json(
|
|
3428
3747
|
{
|
|
3429
3748
|
error: {
|
|
@@ -3465,14 +3784,19 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3465
3784
|
} catch (error) {
|
|
3466
3785
|
logger().error({
|
|
3467
3786
|
msg: "error forcing disconnect",
|
|
3468
|
-
error:
|
|
3787
|
+
error: _chunkNLYAKGMLcjs.stringifyError.call(void 0, error)
|
|
3469
3788
|
});
|
|
3470
3789
|
return c.text(`Error: ${error}`, 500);
|
|
3471
3790
|
}
|
|
3472
3791
|
});
|
|
3473
3792
|
}
|
|
3474
3793
|
router.get("/health", (c) => {
|
|
3475
|
-
return c.
|
|
3794
|
+
return c.json({
|
|
3795
|
+
status: "ok",
|
|
3796
|
+
rivetkit: {
|
|
3797
|
+
version: _chunkNLYAKGMLcjs.VERSION
|
|
3798
|
+
}
|
|
3799
|
+
});
|
|
3476
3800
|
});
|
|
3477
3801
|
(_a = managerDriver.modifyManagerRouter) == null ? void 0 : _a.call(
|
|
3478
3802
|
managerDriver,
|
|
@@ -3480,15 +3804,14 @@ function addManagerRoutes(registryConfig, runConfig, managerDriver, router) {
|
|
|
3480
3804
|
router
|
|
3481
3805
|
);
|
|
3482
3806
|
}
|
|
3483
|
-
function createApiActor(actor2) {
|
|
3807
|
+
function createApiActor(actor2, runnerName = "default") {
|
|
3484
3808
|
return {
|
|
3485
3809
|
actor_id: actor2.actorId,
|
|
3486
3810
|
name: actor2.name,
|
|
3487
|
-
key:
|
|
3811
|
+
key: _chunkO7BIBANWcjs.serializeActorKey.call(void 0, actor2.key),
|
|
3488
3812
|
namespace_id: "default",
|
|
3489
3813
|
// Assert default namespace
|
|
3490
|
-
runner_name_selector:
|
|
3491
|
-
// Assert rivetkit runner
|
|
3814
|
+
runner_name_selector: runnerName,
|
|
3492
3815
|
create_ts: Date.now(),
|
|
3493
3816
|
connectable_ts: null,
|
|
3494
3817
|
destroy_ts: null,
|
|
@@ -3517,13 +3840,13 @@ var RegistryConfigSchema = _zod.z.object({
|
|
|
3517
3840
|
});
|
|
3518
3841
|
|
|
3519
3842
|
// src/registry/log.ts
|
|
3520
|
-
function
|
|
3521
|
-
return
|
|
3843
|
+
function logger7() {
|
|
3844
|
+
return _chunk5ABUOI3Vcjs.getLogger.call(void 0, "registry");
|
|
3522
3845
|
}
|
|
3523
3846
|
|
|
3524
3847
|
// src/registry/serve.ts
|
|
3525
3848
|
|
|
3526
|
-
async function crossPlatformServe(rivetKitRouter, userRouter) {
|
|
3849
|
+
async function crossPlatformServe(runConfig, rivetKitRouter, userRouter) {
|
|
3527
3850
|
const app = _nullishCoalesce(userRouter, () => ( new (0, _hono.Hono)()));
|
|
3528
3851
|
let serve;
|
|
3529
3852
|
try {
|
|
@@ -3533,7 +3856,7 @@ async function crossPlatformServe(rivetKitRouter, userRouter) {
|
|
|
3533
3856
|
)));
|
|
3534
3857
|
serve = dep.serve;
|
|
3535
3858
|
} catch (err) {
|
|
3536
|
-
|
|
3859
|
+
logger7().error(
|
|
3537
3860
|
"failed to import @hono/node-server. please run 'npm install @hono/node-server @hono/node-ws'"
|
|
3538
3861
|
);
|
|
3539
3862
|
process.exit(1);
|
|
@@ -3547,7 +3870,7 @@ async function crossPlatformServe(rivetKitRouter, userRouter) {
|
|
|
3547
3870
|
)));
|
|
3548
3871
|
createNodeWebSocket = dep.createNodeWebSocket;
|
|
3549
3872
|
} catch (err) {
|
|
3550
|
-
|
|
3873
|
+
logger7().error(
|
|
3551
3874
|
"failed to import @hono/node-ws. please run 'npm install @hono/node-server @hono/node-ws'"
|
|
3552
3875
|
);
|
|
3553
3876
|
process.exit(1);
|
|
@@ -3555,10 +3878,10 @@ async function crossPlatformServe(rivetKitRouter, userRouter) {
|
|
|
3555
3878
|
const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({
|
|
3556
3879
|
app
|
|
3557
3880
|
});
|
|
3558
|
-
const port =
|
|
3881
|
+
const port = runConfig.defaultServerPort;
|
|
3559
3882
|
const server = serve(
|
|
3560
3883
|
{ fetch: app.fetch, port },
|
|
3561
|
-
() =>
|
|
3884
|
+
() => logger7().info({ msg: "server listening", port })
|
|
3562
3885
|
);
|
|
3563
3886
|
injectWebSocket(server);
|
|
3564
3887
|
return { upgradeWebSocket };
|
|
@@ -3578,20 +3901,49 @@ var Registry = class {
|
|
|
3578
3901
|
*/
|
|
3579
3902
|
start(inputConfig) {
|
|
3580
3903
|
var _a, _b, _c;
|
|
3581
|
-
const config2 =
|
|
3904
|
+
const config2 = _chunk6PORXHSQcjs.RunnerConfigSchema.parse(inputConfig);
|
|
3905
|
+
if (config2.autoConfigureServerless && config2.runnerKind !== "serverless") {
|
|
3906
|
+
throw new Error(
|
|
3907
|
+
"autoConfigureServerless can only be configured when runnerKind is 'serverless'"
|
|
3908
|
+
);
|
|
3909
|
+
}
|
|
3910
|
+
const readyPromises = [];
|
|
3911
|
+
if (config2.runEngine) {
|
|
3912
|
+
logger7().debug({
|
|
3913
|
+
msg: "run engine requested",
|
|
3914
|
+
version: config2.runEngineVersion
|
|
3915
|
+
});
|
|
3916
|
+
_invariant2.default.call(void 0,
|
|
3917
|
+
config2.endpoint === void 0,
|
|
3918
|
+
"cannot specify 'endpoint' with 'runEngine'"
|
|
3919
|
+
);
|
|
3920
|
+
config2.endpoint = ENGINE_ENDPOINT;
|
|
3921
|
+
config2.disableActorDriver = true;
|
|
3922
|
+
const engineProcessPromise = ensureEngineProcess({
|
|
3923
|
+
version: config2.runEngineVersion
|
|
3924
|
+
});
|
|
3925
|
+
readyPromises.push(engineProcessPromise);
|
|
3926
|
+
}
|
|
3927
|
+
if (config2.runnerKind === "serverless") {
|
|
3928
|
+
config2.defaultServerPort = 8080;
|
|
3929
|
+
config2.overrideServerAddress = config2.endpoint;
|
|
3930
|
+
config2.disableActorDriver = true;
|
|
3931
|
+
}
|
|
3582
3932
|
if ((_a = config2.logging) == null ? void 0 : _a.baseLogger) {
|
|
3583
|
-
|
|
3933
|
+
_chunk5ABUOI3Vcjs.configureBaseLogger.call(void 0, config2.logging.baseLogger);
|
|
3584
3934
|
} else {
|
|
3585
|
-
|
|
3935
|
+
_chunk5ABUOI3Vcjs.configureDefaultLogger.call(void 0, (_b = config2.logging) == null ? void 0 : _b.level);
|
|
3586
3936
|
}
|
|
3587
3937
|
const driver = chooseDefaultDriver(config2);
|
|
3588
3938
|
if (driver.name === "engine") {
|
|
3589
3939
|
config2.inspector.enabled = { manager: false, actor: true };
|
|
3590
|
-
config2.
|
|
3940
|
+
if (config2.runnerKind !== "serverless") {
|
|
3941
|
+
config2.disableDefaultServer = true;
|
|
3942
|
+
}
|
|
3591
3943
|
}
|
|
3592
3944
|
if (driver.name === "cloudflare-workers") {
|
|
3593
3945
|
config2.inspector.enabled = { manager: false, actor: true };
|
|
3594
|
-
config2.
|
|
3946
|
+
config2.disableDefaultServer = true;
|
|
3595
3947
|
config2.disableActorDriver = true;
|
|
3596
3948
|
config2.noWelcome = true;
|
|
3597
3949
|
}
|
|
@@ -3600,49 +3952,60 @@ var Registry = class {
|
|
|
3600
3952
|
config2.getUpgradeWebSocket = () => upgradeWebSocket;
|
|
3601
3953
|
}
|
|
3602
3954
|
const managerDriver = driver.manager(this.#config, config2);
|
|
3603
|
-
|
|
3604
|
-
const client =
|
|
3955
|
+
_chunk765F7ILIcjs.configureInspectorAccessToken.call(void 0, config2, managerDriver);
|
|
3956
|
+
const client = _chunkO7BIBANWcjs.createClientWithDriver.call(void 0, managerDriver, config2);
|
|
3605
3957
|
const driverLog = _nullishCoalesce(((_c = managerDriver.extraStartupLog) == null ? void 0 : _c.call(managerDriver)), () => ( {}));
|
|
3606
|
-
|
|
3958
|
+
logger7().info({
|
|
3607
3959
|
msg: "rivetkit ready",
|
|
3608
3960
|
driver: driver.name,
|
|
3609
3961
|
definitions: Object.keys(this.#config.use).length,
|
|
3610
3962
|
...driverLog
|
|
3611
3963
|
});
|
|
3612
|
-
if (
|
|
3613
|
-
|
|
3964
|
+
if (_chunk765F7ILIcjs.isInspectorEnabled.call(void 0, config2, "manager") && managerDriver.inspector) {
|
|
3965
|
+
logger7().info({ msg: "inspector ready", url: _chunk765F7ILIcjs.getInspectorUrl.call(void 0, config2) });
|
|
3614
3966
|
}
|
|
3615
3967
|
if (!config2.noWelcome) {
|
|
3616
3968
|
const displayInfo = managerDriver.displayInformation();
|
|
3617
3969
|
console.log();
|
|
3618
|
-
console.log(` RivetKit ${
|
|
3619
|
-
|
|
3970
|
+
console.log(` RivetKit ${_chunkNLYAKGMLcjs.package_default.version} (${displayInfo.name})`);
|
|
3971
|
+
if (!config2.disableDefaultServer) {
|
|
3972
|
+
console.log(` - Endpoint: ${config2.endpoint}`);
|
|
3973
|
+
} else if (config2.overrideServerAddress) {
|
|
3974
|
+
console.log(` - Endpoint: ${config2.overrideServerAddress}`);
|
|
3975
|
+
}
|
|
3976
|
+
if (config2.runEngine) {
|
|
3977
|
+
const padding = " ".repeat(Math.max(0, 13 - "Engine".length));
|
|
3978
|
+
console.log(` - Engine:${padding}v${config2.runEngineVersion}`);
|
|
3979
|
+
}
|
|
3620
3980
|
for (const [k, v] of Object.entries(displayInfo.properties)) {
|
|
3621
3981
|
const padding = " ".repeat(Math.max(0, 13 - k.length));
|
|
3622
3982
|
console.log(` - ${k}:${padding}${v}`);
|
|
3623
3983
|
}
|
|
3624
|
-
if (
|
|
3625
|
-
console.log(` - Inspector: ${
|
|
3984
|
+
if (_chunk765F7ILIcjs.isInspectorEnabled.call(void 0, config2, "manager") && managerDriver.inspector) {
|
|
3985
|
+
console.log(` - Inspector: ${_chunk765F7ILIcjs.getInspectorUrl.call(void 0, config2)}`);
|
|
3626
3986
|
}
|
|
3627
3987
|
console.log();
|
|
3628
3988
|
}
|
|
3629
3989
|
if (!config2.disableActorDriver) {
|
|
3630
|
-
|
|
3631
|
-
this.#config,
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
)
|
|
3990
|
+
Promise.all(readyPromises).then(async () => {
|
|
3991
|
+
driver.actor(this.#config, config2, managerDriver, client);
|
|
3992
|
+
});
|
|
3993
|
+
}
|
|
3994
|
+
if (config2.runnerKind === "serverless" && config2.autoConfigureServerless) {
|
|
3995
|
+
Promise.all(readyPromises).then(async () => {
|
|
3996
|
+
await configureServerlessRunner(config2);
|
|
3997
|
+
});
|
|
3636
3998
|
}
|
|
3637
3999
|
const { router: hono } = createManagerRouter(
|
|
3638
4000
|
this.#config,
|
|
3639
4001
|
config2,
|
|
3640
4002
|
managerDriver,
|
|
3641
|
-
|
|
4003
|
+
driver,
|
|
4004
|
+
client
|
|
3642
4005
|
);
|
|
3643
|
-
if (!config2.
|
|
4006
|
+
if (!config2.disableDefaultServer) {
|
|
3644
4007
|
(async () => {
|
|
3645
|
-
const out = await crossPlatformServe(hono, void 0);
|
|
4008
|
+
const out = await crossPlatformServe(config2, hono, void 0);
|
|
3646
4009
|
upgradeWebSocket = out.upgradeWebSocket;
|
|
3647
4010
|
})();
|
|
3648
4011
|
}
|
|
@@ -3651,83 +4014,83 @@ var Registry = class {
|
|
|
3651
4014
|
fetch: hono.fetch.bind(hono)
|
|
3652
4015
|
};
|
|
3653
4016
|
}
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
if (
|
|
3658
|
-
|
|
3659
|
-
} else {
|
|
3660
|
-
_chunkDL7TPF63cjs.configureDefaultLogger.call(void 0, (_b = config2.logging) == null ? void 0 : _b.level);
|
|
3661
|
-
}
|
|
3662
|
-
const driver = chooseDefaultDriver(config2);
|
|
3663
|
-
if (driver.name === "engine") {
|
|
3664
|
-
config2.inspector.enabled = false;
|
|
3665
|
-
config2.disableServer = true;
|
|
3666
|
-
config2.disableActorDriver = true;
|
|
4017
|
+
};
|
|
4018
|
+
async function configureServerlessRunner(config2) {
|
|
4019
|
+
try {
|
|
4020
|
+
if (!config2.runnerName) {
|
|
4021
|
+
throw new Error("runnerName is required for serverless configuration");
|
|
3667
4022
|
}
|
|
3668
|
-
if (
|
|
3669
|
-
|
|
3670
|
-
config2.disableServer = true;
|
|
3671
|
-
config2.disableActorDriver = true;
|
|
3672
|
-
config2.noWelcome = true;
|
|
4023
|
+
if (!config2.namespace) {
|
|
4024
|
+
throw new Error("namespace is required for serverless configuration");
|
|
3673
4025
|
}
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
config2.getUpgradeWebSocket = () => upgradeWebSocket;
|
|
4026
|
+
if (!config2.endpoint) {
|
|
4027
|
+
throw new Error("endpoint is required for serverless configuration");
|
|
3677
4028
|
}
|
|
3678
|
-
const
|
|
3679
|
-
const
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
3683
|
-
driver: driver.name,
|
|
3684
|
-
definitions: Object.keys(this.#config.use).length,
|
|
3685
|
-
...driverLog
|
|
4029
|
+
const customConfig = typeof config2.autoConfigureServerless === "object" ? config2.autoConfigureServerless : {};
|
|
4030
|
+
const dcsUrl = `${config2.endpoint}/datacenters`;
|
|
4031
|
+
logger7().debug({
|
|
4032
|
+
msg: "fetching datacenters",
|
|
4033
|
+
url: dcsUrl
|
|
3686
4034
|
});
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
if (!config2.noWelcome) {
|
|
3691
|
-
const displayInfo = managerDriver.displayInformation();
|
|
3692
|
-
console.log();
|
|
3693
|
-
console.log(` RivetKit ${_chunkU2IXX6DYcjs.package_default.version} (${displayInfo.name})`);
|
|
3694
|
-
console.log(` - Endpoint: http://127.0.0.1:6420`);
|
|
3695
|
-
for (const [k, v] of Object.entries(displayInfo.properties)) {
|
|
3696
|
-
const padding = " ".repeat(Math.max(0, 13 - k.length));
|
|
3697
|
-
console.log(` - ${k}:${padding}${v}`);
|
|
3698
|
-
}
|
|
3699
|
-
if (((_e = config2.inspector) == null ? void 0 : _e.enabled) && managerDriver.inspector) {
|
|
3700
|
-
console.log(` - Inspector: ${_chunkQGRYH6TUcjs.getInspectorUrl.call(void 0, config2)}`);
|
|
4035
|
+
const dcsResponse = await fetch(dcsUrl, {
|
|
4036
|
+
headers: {
|
|
4037
|
+
...config2.token ? { Authorization: `Bearer ${config2.token}` } : {}
|
|
3701
4038
|
}
|
|
3702
|
-
|
|
4039
|
+
});
|
|
4040
|
+
if (!dcsResponse.ok) {
|
|
4041
|
+
const errorText = await dcsResponse.text();
|
|
4042
|
+
throw new Error(
|
|
4043
|
+
`failed to configure serverless runner: ${dcsResponse.status} ${dcsResponse.statusText} - ${errorText}`
|
|
4044
|
+
);
|
|
3703
4045
|
}
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
4046
|
+
const dcsRes = await dcsResponse.json();
|
|
4047
|
+
const serverlessConfig = {
|
|
4048
|
+
serverless: {
|
|
4049
|
+
url: customConfig.url || `http://localhost:${config2.defaultServerPort}/start`,
|
|
4050
|
+
headers: customConfig.headers || {},
|
|
4051
|
+
max_runners: _nullishCoalesce(customConfig.maxRunners, () => ( 100)),
|
|
4052
|
+
min_runners: _nullishCoalesce(customConfig.minRunners, () => ( 0)),
|
|
4053
|
+
request_lifespan: _nullishCoalesce(customConfig.requestLifespan, () => ( 15 * 60)),
|
|
4054
|
+
runners_margin: _nullishCoalesce(customConfig.runnersMargin, () => ( 0)),
|
|
4055
|
+
slots_per_runner: _nullishCoalesce(_nullishCoalesce(customConfig.slotsPerRunner, () => ( config2.totalSlots)), () => ( 1e3))
|
|
4056
|
+
}
|
|
3708
4057
|
};
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
serverlessActorDriverBuilder = void 0;
|
|
3712
|
-
}
|
|
3713
|
-
const { router: hono } = createManagerRouter(
|
|
3714
|
-
this.#config,
|
|
3715
|
-
config2,
|
|
3716
|
-
managerDriver,
|
|
3717
|
-
serverlessActorDriverBuilder
|
|
4058
|
+
const requestBody = Object.fromEntries(
|
|
4059
|
+
dcsRes.datacenters.map((dc) => [dc.name, serverlessConfig])
|
|
3718
4060
|
);
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
4061
|
+
const configUrl = `${config2.endpoint}/runner-configs/${config2.runnerName}?namespace=${config2.namespace}`;
|
|
4062
|
+
logger7().debug({
|
|
4063
|
+
msg: "configuring serverless runner",
|
|
4064
|
+
url: configUrl,
|
|
4065
|
+
config: serverlessConfig.serverless
|
|
4066
|
+
});
|
|
4067
|
+
const response = await fetch(configUrl, {
|
|
4068
|
+
method: "PUT",
|
|
4069
|
+
headers: {
|
|
4070
|
+
"Content-Type": "application/json",
|
|
4071
|
+
...config2.token ? { Authorization: `Bearer ${config2.token}` } : {}
|
|
4072
|
+
},
|
|
4073
|
+
body: JSON.stringify(requestBody)
|
|
4074
|
+
});
|
|
4075
|
+
if (!response.ok) {
|
|
4076
|
+
const errorText = await response.text();
|
|
4077
|
+
throw new Error(
|
|
4078
|
+
`failed to configure serverless runner: ${response.status} ${response.statusText} - ${errorText}`
|
|
4079
|
+
);
|
|
3724
4080
|
}
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
4081
|
+
logger7().info({
|
|
4082
|
+
msg: "serverless runner configured successfully",
|
|
4083
|
+
runnerName: config2.runnerName,
|
|
4084
|
+
namespace: config2.namespace
|
|
4085
|
+
});
|
|
4086
|
+
} catch (error) {
|
|
4087
|
+
logger7().error({
|
|
4088
|
+
msg: "failed to configure serverless runner",
|
|
4089
|
+
error
|
|
4090
|
+
});
|
|
4091
|
+
throw error;
|
|
3729
4092
|
}
|
|
3730
|
-
}
|
|
4093
|
+
}
|
|
3731
4094
|
function setup(input) {
|
|
3732
4095
|
const config2 = RegistryConfigSchema.parse(input);
|
|
3733
4096
|
return new Registry(config2);
|
|
@@ -3749,4 +4112,4 @@ function setup(input) {
|
|
|
3749
4112
|
|
|
3750
4113
|
exports.handleWebSocketConnect = handleWebSocketConnect; exports.handleRawWebSocketHandler = handleRawWebSocketHandler; exports.createActorRouter = createActorRouter; exports.actor = actor; exports.InlineWebSocketAdapter2 = InlineWebSocketAdapter2; exports.createEngineDriver = createEngineDriver; exports.createFileSystemOrMemoryDriver = createFileSystemOrMemoryDriver; exports.createFileSystemDriver = createFileSystemDriver; exports.createMemoryDriver = createMemoryDriver; exports.createManagerRouter = createManagerRouter; exports.RegistryConfigSchema = RegistryConfigSchema; exports.Registry = Registry; exports.setup = setup;
|
|
3751
4114
|
//! These configs configs hold anything that's not platform-specific about running actors.
|
|
3752
|
-
//# sourceMappingURL=chunk-
|
|
4115
|
+
//# sourceMappingURL=chunk-LXFOO25H.cjs.map
|