rivetkit 2.0.6 → 2.0.7
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/schemas/actor-persist/v1.ts +0 -6
- package/dist/tsup/actor-router-consts-B3Lu87yJ.d.cts +28 -0
- package/dist/tsup/actor-router-consts-B3Lu87yJ.d.ts +28 -0
- package/dist/tsup/{chunk-7OUKNSTU.js → chunk-2NL3KGJ7.js} +17 -14
- package/dist/tsup/chunk-2NL3KGJ7.js.map +1 -0
- package/dist/tsup/{chunk-6P6RA47N.cjs → chunk-3ALZ7EGX.cjs} +14 -10
- package/dist/tsup/chunk-3ALZ7EGX.cjs.map +1 -0
- package/dist/tsup/chunk-4EXJ4ITR.cjs +102 -0
- package/dist/tsup/chunk-4EXJ4ITR.cjs.map +1 -0
- package/dist/tsup/{chunk-ZYLTS2EM.js → chunk-54MAHBLL.js} +2 -2
- package/dist/tsup/{chunk-NTCUGYSD.cjs → chunk-7OOBMCQI.cjs} +34 -31
- package/dist/tsup/chunk-7OOBMCQI.cjs.map +1 -0
- package/dist/tsup/{chunk-VCEHU56K.js → chunk-B6N6VM37.js} +2 -2
- package/dist/tsup/{chunk-VPV4MWXR.js → chunk-DIHKN7NM.js} +3 -3
- package/dist/tsup/{chunk-MRRT2CZD.cjs → chunk-ETDWYT2P.cjs} +7 -7
- package/dist/tsup/{chunk-MRRT2CZD.cjs.map → chunk-ETDWYT2P.cjs.map} +1 -1
- package/dist/tsup/{chunk-TWGATZ3X.cjs → chunk-F7YL5G7Q.cjs} +922 -872
- package/dist/tsup/chunk-F7YL5G7Q.cjs.map +1 -0
- package/dist/tsup/{chunk-UTI5NCES.cjs → chunk-GWJTWY3G.cjs} +6 -6
- package/dist/tsup/{chunk-UTI5NCES.cjs.map → chunk-GWJTWY3G.cjs.map} +1 -1
- package/dist/tsup/{chunk-W6LN7AF5.js → chunk-KHRZPP5T.js} +866 -816
- package/dist/tsup/chunk-KHRZPP5T.js.map +1 -0
- package/dist/tsup/{chunk-5JBFVV4C.cjs → chunk-LXAVET4A.cjs} +21 -7
- package/dist/tsup/chunk-LXAVET4A.cjs.map +1 -0
- package/dist/tsup/{chunk-TCUI5JFE.cjs → chunk-NDCVQZBS.cjs} +45 -18
- package/dist/tsup/chunk-NDCVQZBS.cjs.map +1 -0
- package/dist/tsup/{chunk-4CKHQRXG.js → chunk-NII4KKHD.js} +515 -240
- package/dist/tsup/chunk-NII4KKHD.js.map +1 -0
- package/dist/tsup/{chunk-2K3JMDAN.js → chunk-NRELKXIX.js} +40 -13
- package/dist/tsup/chunk-NRELKXIX.js.map +1 -0
- package/dist/tsup/{chunk-UFWAK3X2.cjs → chunk-NUA6LOOJ.cjs} +660 -385
- package/dist/tsup/chunk-NUA6LOOJ.cjs.map +1 -0
- package/dist/tsup/{chunk-DIAYNQTE.cjs → chunk-OSK2VSJF.cjs} +12 -12
- package/dist/tsup/{chunk-DIAYNQTE.cjs.map → chunk-OSK2VSJF.cjs.map} +1 -1
- package/dist/tsup/chunk-PD6HCAJE.js +102 -0
- package/dist/tsup/chunk-PD6HCAJE.js.map +1 -0
- package/dist/tsup/{chunk-RGQR2J7S.js → chunk-RLBM6D4L.js} +20 -6
- package/dist/tsup/chunk-RLBM6D4L.js.map +1 -0
- package/dist/tsup/{chunk-KG3C7MKR.cjs → chunk-VAF63BEI.cjs} +3 -3
- package/dist/tsup/{chunk-KG3C7MKR.cjs.map → chunk-VAF63BEI.cjs.map} +1 -1
- package/dist/tsup/{chunk-G75SVQON.js → chunk-WAT5AE7S.js} +9 -5
- package/dist/tsup/chunk-WAT5AE7S.js.map +1 -0
- package/dist/tsup/{chunk-WC2PSJWN.js → chunk-YL4VZMMT.js} +2 -2
- package/dist/tsup/client/mod.cjs +9 -9
- package/dist/tsup/client/mod.d.cts +7 -8
- package/dist/tsup/client/mod.d.ts +7 -8
- 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/{connection-BLemxi4f.d.ts → conn-DCSQgIlw.d.ts} +1605 -1353
- package/dist/tsup/{connection-CpDIydXf.d.cts → conn-DdzHTm2E.d.cts} +1605 -1353
- package/dist/tsup/driver-helpers/mod.cjs +31 -5
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +7 -8
- package/dist/tsup/driver-helpers/mod.d.ts +7 -8
- package/dist/tsup/driver-helpers/mod.js +33 -7
- package/dist/tsup/driver-test-suite/mod.cjs +317 -222
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +7 -7
- package/dist/tsup/driver-test-suite/mod.d.ts +7 -7
- package/dist/tsup/driver-test-suite/mod.js +582 -487
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +16 -6
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/inspector/mod.d.cts +34 -7
- package/dist/tsup/inspector/mod.d.ts +34 -7
- package/dist/tsup/inspector/mod.js +17 -7
- package/dist/tsup/mod.cjs +10 -20
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +9 -7
- package/dist/tsup/mod.d.ts +9 -7
- package/dist/tsup/mod.js +9 -19
- package/dist/tsup/test/mod.cjs +11 -11
- package/dist/tsup/test/mod.d.cts +6 -7
- package/dist/tsup/test/mod.d.ts +6 -7
- package/dist/tsup/test/mod.js +10 -10
- package/dist/tsup/utils.cjs +4 -2
- package/dist/tsup/utils.cjs.map +1 -1
- package/dist/tsup/utils.d.cts +11 -1
- package/dist/tsup/utils.d.ts +11 -1
- package/dist/tsup/utils.js +3 -1
- package/package.json +8 -4
- package/src/actor/action.ts +1 -1
- package/src/actor/config.ts +1 -1
- package/src/actor/conn-drivers.ts +205 -0
- package/src/actor/conn-socket.ts +6 -0
- package/src/actor/{connection.ts → conn.ts} +78 -84
- package/src/actor/context.ts +1 -1
- package/src/actor/driver.ts +4 -43
- package/src/actor/instance.ts +162 -86
- package/src/actor/mod.ts +1 -11
- package/src/actor/persisted.ts +2 -5
- package/src/actor/protocol/old.ts +1 -1
- package/src/actor/router-endpoints.ts +142 -106
- package/src/actor/router.ts +81 -45
- package/src/actor/utils.ts +5 -1
- package/src/client/actor-conn.ts +154 -23
- package/src/client/client.ts +1 -1
- package/src/client/config.ts +7 -0
- package/src/common/actor-router-consts.ts +29 -8
- package/src/common/router.ts +2 -1
- package/src/common/versioned-data.ts +5 -5
- package/src/driver-helpers/mod.ts +14 -1
- package/src/driver-test-suite/mod.ts +11 -2
- package/src/driver-test-suite/test-inline-client-driver.ts +36 -18
- package/src/driver-test-suite/tests/actor-conn-state.ts +66 -22
- package/src/driver-test-suite/tests/actor-conn.ts +65 -126
- package/src/driver-test-suite/tests/actor-reconnect.ts +160 -0
- package/src/driver-test-suite/tests/actor-sleep.ts +0 -1
- package/src/driver-test-suite/tests/raw-websocket.ts +0 -35
- package/src/driver-test-suite/utils.ts +3 -3
- package/src/drivers/default.ts +8 -7
- package/src/drivers/engine/actor-driver.ts +53 -31
- package/src/drivers/engine/config.ts +4 -0
- package/src/drivers/file-system/actor.ts +0 -6
- package/src/drivers/file-system/global-state.ts +3 -14
- package/src/drivers/file-system/manager.ts +12 -8
- package/src/inspector/actor.ts +4 -3
- package/src/inspector/config.ts +10 -1
- package/src/inspector/mod.ts +1 -0
- package/src/inspector/utils.ts +23 -4
- package/src/manager/driver.ts +11 -1
- package/src/manager/gateway.ts +407 -0
- package/src/manager/router.ts +269 -468
- package/src/manager-api/actors.ts +61 -0
- package/src/manager-api/common.ts +4 -0
- package/src/mod.ts +1 -1
- package/src/registry/mod.ts +119 -10
- package/src/remote-manager-driver/actor-http-client.ts +30 -19
- package/src/remote-manager-driver/actor-websocket-client.ts +43 -16
- package/src/remote-manager-driver/api-endpoints.ts +19 -21
- package/src/remote-manager-driver/api-utils.ts +10 -1
- package/src/remote-manager-driver/mod.ts +51 -48
- package/src/remote-manager-driver/ws-proxy.ts +2 -9
- package/src/test/mod.ts +6 -2
- package/src/utils.ts +21 -2
- package/dist/tsup/actor-router-consts-BK6arfy8.d.cts +0 -17
- package/dist/tsup/actor-router-consts-BK6arfy8.d.ts +0 -17
- package/dist/tsup/chunk-2K3JMDAN.js.map +0 -1
- package/dist/tsup/chunk-42I3OZ3Q.js +0 -15
- package/dist/tsup/chunk-42I3OZ3Q.js.map +0 -1
- package/dist/tsup/chunk-4CKHQRXG.js.map +0 -1
- package/dist/tsup/chunk-5JBFVV4C.cjs.map +0 -1
- package/dist/tsup/chunk-6P6RA47N.cjs.map +0 -1
- package/dist/tsup/chunk-7OUKNSTU.js.map +0 -1
- package/dist/tsup/chunk-G75SVQON.js.map +0 -1
- package/dist/tsup/chunk-KUPQZYUQ.cjs +0 -15
- package/dist/tsup/chunk-KUPQZYUQ.cjs.map +0 -1
- package/dist/tsup/chunk-NTCUGYSD.cjs.map +0 -1
- package/dist/tsup/chunk-RGQR2J7S.js.map +0 -1
- package/dist/tsup/chunk-TCUI5JFE.cjs.map +0 -1
- package/dist/tsup/chunk-TWGATZ3X.cjs.map +0 -1
- package/dist/tsup/chunk-UFWAK3X2.cjs.map +0 -1
- package/dist/tsup/chunk-W6LN7AF5.js.map +0 -1
- package/dist/tsup/common-CXCe7s6i.d.cts +0 -218
- package/dist/tsup/common-CXCe7s6i.d.ts +0 -218
- package/src/actor/generic-conn-driver.ts +0 -246
- package/src/common/fake-event-source.ts +0 -267
- package/src/manager-api/routes/actors-create.ts +0 -16
- package/src/manager-api/routes/actors-delete.ts +0 -4
- package/src/manager-api/routes/actors-get-by-id.ts +0 -7
- package/src/manager-api/routes/actors-get-or-create-by-id.ts +0 -29
- package/src/manager-api/routes/actors-get.ts +0 -7
- package/src/manager-api/routes/common.ts +0 -18
- /package/dist/tsup/{chunk-ZYLTS2EM.js.map → chunk-54MAHBLL.js.map} +0 -0
- /package/dist/tsup/{chunk-VCEHU56K.js.map → chunk-B6N6VM37.js.map} +0 -0
- /package/dist/tsup/{chunk-VPV4MWXR.js.map → chunk-DIHKN7NM.js.map} +0 -0
- /package/dist/tsup/{chunk-WC2PSJWN.js.map → chunk-YL4VZMMT.js.map} +0 -0
|
@@ -2,6 +2,7 @@ import * as cbor from "cbor-x";
|
|
|
2
2
|
import type { Context as HonoContext } from "hono";
|
|
3
3
|
import invariant from "invariant";
|
|
4
4
|
import { deserializeActorKey, serializeActorKey } from "@/actor/keys";
|
|
5
|
+
import { generateRandomString } from "@/actor/utils";
|
|
5
6
|
import type { ClientConfig } from "@/client/client";
|
|
6
7
|
import { noopNext } from "@/common/utils";
|
|
7
8
|
import type {
|
|
@@ -17,15 +18,15 @@ import type { Encoding, UniversalWebSocket } from "@/mod";
|
|
|
17
18
|
import { combineUrlPath } from "@/utils";
|
|
18
19
|
import { sendHttpRequestToActor } from "./actor-http-client";
|
|
19
20
|
import {
|
|
20
|
-
|
|
21
|
+
buildWebSocketProtocols,
|
|
21
22
|
openWebSocketToActor,
|
|
22
23
|
} from "./actor-websocket-client";
|
|
23
24
|
import {
|
|
24
25
|
createActor,
|
|
25
26
|
destroyActor,
|
|
26
27
|
getActor,
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
getActorByKey,
|
|
29
|
+
getOrCreateActor,
|
|
29
30
|
} from "./api-endpoints";
|
|
30
31
|
import { EngineApiError, getEndpoint } from "./api-utils";
|
|
31
32
|
import { logger } from "./log";
|
|
@@ -58,39 +59,30 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
58
59
|
actorId,
|
|
59
60
|
}: GetForIdInput): Promise<ActorOutput | undefined> {
|
|
60
61
|
// Fetch from API if not in cache
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// Validate name matches
|
|
65
|
-
if (response.actor.name !== name) {
|
|
66
|
-
logger().debug({
|
|
67
|
-
msg: "actor name mismatch from api",
|
|
68
|
-
actorId,
|
|
69
|
-
apiName: response.actor.name,
|
|
70
|
-
requestedName: name,
|
|
71
|
-
});
|
|
72
|
-
return undefined;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const keyRaw = response.actor.key;
|
|
76
|
-
invariant(keyRaw, `actor ${actorId} should have key`);
|
|
77
|
-
const key = deserializeActorKey(keyRaw);
|
|
62
|
+
const response = await getActor(this.#config, name, actorId);
|
|
63
|
+
const actor = response.actors[0];
|
|
64
|
+
if (!actor) return undefined;
|
|
78
65
|
|
|
79
|
-
|
|
66
|
+
// Validate name matches
|
|
67
|
+
if (actor.name !== name) {
|
|
68
|
+
logger().debug({
|
|
69
|
+
msg: "actor name mismatch from api",
|
|
80
70
|
actorId,
|
|
81
|
-
name,
|
|
82
|
-
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
if (
|
|
86
|
-
error instanceof EngineApiError &&
|
|
87
|
-
(error as EngineApiError).group === "actor" &&
|
|
88
|
-
(error as EngineApiError).code === "not_found"
|
|
89
|
-
) {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
throw error;
|
|
71
|
+
apiName: actor.name,
|
|
72
|
+
requestedName: name,
|
|
73
|
+
});
|
|
74
|
+
return undefined;
|
|
93
75
|
}
|
|
76
|
+
|
|
77
|
+
const keyRaw = actor.key;
|
|
78
|
+
invariant(keyRaw, `actor ${actorId} should have key`);
|
|
79
|
+
const key = deserializeActorKey(keyRaw);
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
actorId,
|
|
83
|
+
name,
|
|
84
|
+
key,
|
|
85
|
+
};
|
|
94
86
|
}
|
|
95
87
|
|
|
96
88
|
async getWithKey({
|
|
@@ -102,13 +94,11 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
102
94
|
|
|
103
95
|
// If not in local cache, fetch by key from API
|
|
104
96
|
try {
|
|
105
|
-
const response = await
|
|
106
|
-
|
|
107
|
-
if (!
|
|
108
|
-
return undefined;
|
|
109
|
-
}
|
|
97
|
+
const response = await getActorByKey(this.#config, name, key);
|
|
98
|
+
const actor = response.actors[0];
|
|
99
|
+
if (!actor) return undefined;
|
|
110
100
|
|
|
111
|
-
const actorId =
|
|
101
|
+
const actorId = actor.actor_id;
|
|
112
102
|
|
|
113
103
|
logger().debug({
|
|
114
104
|
msg: "getWithKey: found actor via api",
|
|
@@ -145,22 +135,24 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
145
135
|
key,
|
|
146
136
|
});
|
|
147
137
|
|
|
148
|
-
const
|
|
138
|
+
const { actor, created } = await getOrCreateActor(this.#config, {
|
|
149
139
|
name,
|
|
150
140
|
key: serializeActorKey(key),
|
|
151
141
|
runner_name_selector: this.#config.runnerName,
|
|
152
|
-
input:
|
|
142
|
+
input: actorInput
|
|
143
|
+
? cbor.encode(actorInput).toString("base64")
|
|
144
|
+
: undefined,
|
|
153
145
|
crash_policy: "sleep",
|
|
154
146
|
});
|
|
155
147
|
|
|
156
|
-
const actorId =
|
|
148
|
+
const actorId = actor.actor_id;
|
|
157
149
|
|
|
158
150
|
logger().info({
|
|
159
151
|
msg: "getOrCreateWithKey: actor ready",
|
|
160
152
|
actorId,
|
|
161
153
|
name,
|
|
162
154
|
key,
|
|
163
|
-
created
|
|
155
|
+
created,
|
|
164
156
|
});
|
|
165
157
|
|
|
166
158
|
return {
|
|
@@ -214,6 +206,8 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
214
206
|
actorId: string,
|
|
215
207
|
encoding: Encoding,
|
|
216
208
|
params: unknown,
|
|
209
|
+
connId?: string,
|
|
210
|
+
connToken?: string,
|
|
217
211
|
): Promise<UniversalWebSocket> {
|
|
218
212
|
return await openWebSocketToActor(
|
|
219
213
|
this.#config,
|
|
@@ -221,6 +215,8 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
221
215
|
actorId,
|
|
222
216
|
encoding,
|
|
223
217
|
params,
|
|
218
|
+
connId,
|
|
219
|
+
connToken,
|
|
224
220
|
);
|
|
225
221
|
}
|
|
226
222
|
|
|
@@ -238,7 +234,8 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
238
234
|
actorId: string,
|
|
239
235
|
encoding: Encoding,
|
|
240
236
|
params: unknown,
|
|
241
|
-
|
|
237
|
+
connId?: string,
|
|
238
|
+
connToken?: string,
|
|
242
239
|
): Promise<Response> {
|
|
243
240
|
const upgradeWebSocket = this.#config.getUpgradeWebSocket?.();
|
|
244
241
|
invariant(upgradeWebSocket, "missing getUpgradeWebSocket");
|
|
@@ -254,14 +251,16 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
254
251
|
guardUrl,
|
|
255
252
|
});
|
|
256
253
|
|
|
257
|
-
// Build
|
|
258
|
-
const
|
|
254
|
+
// Build protocols
|
|
255
|
+
const protocols = buildWebSocketProtocols(
|
|
256
|
+
this.#config,
|
|
259
257
|
actorId,
|
|
260
258
|
encoding,
|
|
261
259
|
params,
|
|
262
|
-
|
|
260
|
+
connId,
|
|
261
|
+
connToken,
|
|
263
262
|
);
|
|
264
|
-
const args = await createWebSocketProxy(c, wsGuardUrl,
|
|
263
|
+
const args = await createWebSocketProxy(c, wsGuardUrl, protocols);
|
|
265
264
|
|
|
266
265
|
return await upgradeWebSocket(() => args)(c, noopNext());
|
|
267
266
|
}
|
|
@@ -269,4 +268,8 @@ export class RemoteManagerDriver implements ManagerDriver {
|
|
|
269
268
|
displayInformation(): ManagerDisplayInformation {
|
|
270
269
|
return { name: "Remote", properties: {} };
|
|
271
270
|
}
|
|
271
|
+
|
|
272
|
+
getOrCreateInspectorAccessToken() {
|
|
273
|
+
return generateRandomString();
|
|
274
|
+
}
|
|
272
275
|
}
|
|
@@ -11,17 +11,10 @@ import { logger } from "./log";
|
|
|
11
11
|
export async function createWebSocketProxy(
|
|
12
12
|
c: HonoContext,
|
|
13
13
|
targetUrl: string,
|
|
14
|
-
|
|
14
|
+
protocols: string[],
|
|
15
15
|
): Promise<UpgradeWebSocketArgs> {
|
|
16
16
|
const WebSocket = await importWebSocket();
|
|
17
17
|
|
|
18
|
-
// HACK: Sanitize WebSocket-specific headers. If we don't do this, some WebSocket implementations (i.e. native WebSocket in Node.js) will fail to connect.
|
|
19
|
-
for (const [k, v] of c.req.raw.headers.entries()) {
|
|
20
|
-
if (!k.startsWith("sec-") && k !== "connection" && k !== "upgrade") {
|
|
21
|
-
headers[k] = v;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
18
|
// WebSocket state
|
|
26
19
|
interface WsState {
|
|
27
20
|
targetWs?: WebSocket;
|
|
@@ -43,7 +36,7 @@ export async function createWebSocketProxy(
|
|
|
43
36
|
}
|
|
44
37
|
|
|
45
38
|
// Create WebSocket
|
|
46
|
-
const targetWs = new WebSocket(targetUrl,
|
|
39
|
+
const targetWs = new WebSocket(targetUrl, protocols);
|
|
47
40
|
state.targetWs = targetWs;
|
|
48
41
|
|
|
49
42
|
// Setup connection promise
|
package/src/test/mod.ts
CHANGED
|
@@ -5,7 +5,10 @@ import { type TestContext, vi } from "vitest";
|
|
|
5
5
|
import { type Client, createClient } from "@/client/mod";
|
|
6
6
|
import { chooseDefaultDriver } from "@/drivers/default";
|
|
7
7
|
import { createFileSystemOrMemoryDriver } from "@/drivers/file-system/mod";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
configureInspectorAccessToken,
|
|
10
|
+
getInspectorUrl,
|
|
11
|
+
} from "@/inspector/utils";
|
|
9
12
|
import { createManagerRouter } from "@/manager/router";
|
|
10
13
|
import type { Registry } from "@/registry/mod";
|
|
11
14
|
import { RunConfigSchema } from "@/registry/run-config";
|
|
@@ -27,11 +30,12 @@ function serve(registry: Registry<any>, inputConfig?: InputConfig): ServerType {
|
|
|
27
30
|
const runConfig = RunConfigSchema.parse(inputConfig);
|
|
28
31
|
const driver = inputConfig.driver ?? createFileSystemOrMemoryDriver(false);
|
|
29
32
|
const managerDriver = driver.manager(registry.config, config);
|
|
33
|
+
configureInspectorAccessToken(config, managerDriver);
|
|
30
34
|
const { router } = createManagerRouter(
|
|
31
35
|
registry.config,
|
|
32
36
|
runConfig,
|
|
33
37
|
managerDriver,
|
|
34
|
-
|
|
38
|
+
undefined,
|
|
35
39
|
);
|
|
36
40
|
|
|
37
41
|
// Inject WebSocket
|
package/src/utils.ts
CHANGED
|
@@ -77,6 +77,25 @@ const TIMEOUT_MAX = 2147483647; // 2^31-1
|
|
|
77
77
|
|
|
78
78
|
export type LongTimeoutHandle = { abort: () => void };
|
|
79
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Polyfill for Promise.withResolvers().
|
|
82
|
+
*
|
|
83
|
+
* This is specifically for Cloudflare Workers. Their implementation of Promise.withResolvers does not work correctly.
|
|
84
|
+
*/
|
|
85
|
+
export function promiseWithResolvers<T>(): {
|
|
86
|
+
promise: Promise<T>;
|
|
87
|
+
resolve: (value: T | PromiseLike<T>) => void;
|
|
88
|
+
reject: (reason?: any) => void;
|
|
89
|
+
} {
|
|
90
|
+
let resolve!: (value: T | PromiseLike<T>) => void;
|
|
91
|
+
let reject!: (reason?: any) => void;
|
|
92
|
+
const promise = new Promise<T>((res, rej) => {
|
|
93
|
+
resolve = res;
|
|
94
|
+
reject = rej;
|
|
95
|
+
});
|
|
96
|
+
return { promise, resolve, reject };
|
|
97
|
+
}
|
|
98
|
+
|
|
80
99
|
export function setLongTimeout(
|
|
81
100
|
listener: () => void,
|
|
82
101
|
after: number,
|
|
@@ -115,7 +134,7 @@ export class SinglePromiseQueue {
|
|
|
115
134
|
runningDrainLoop?: Promise<void>;
|
|
116
135
|
|
|
117
136
|
/** Pending resolver fro the currently queued entry. */
|
|
118
|
-
#pending?:
|
|
137
|
+
#pending?: ReturnType<typeof promiseWithResolvers<void>>;
|
|
119
138
|
|
|
120
139
|
/** Queue the next operation and return a promise that resolves when it flushes. */
|
|
121
140
|
enqueue(op: () => Promise<void>): Promise<void> {
|
|
@@ -124,7 +143,7 @@ export class SinglePromiseQueue {
|
|
|
124
143
|
|
|
125
144
|
// Ensure a shared resolver exists for all callers in this cycle
|
|
126
145
|
if (!this.#pending) {
|
|
127
|
-
this.#pending =
|
|
146
|
+
this.#pending = promiseWithResolvers<void>();
|
|
128
147
|
}
|
|
129
148
|
|
|
130
149
|
const waitForThisCycle = this.#pending.promise;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
declare const PATH_CONNECT_WEBSOCKET = "/connect/websocket";
|
|
2
|
-
declare const PATH_RAW_WEBSOCKET_PREFIX = "/raw/websocket/";
|
|
3
|
-
declare const HEADER_ACTOR_QUERY = "X-RivetKit-Query";
|
|
4
|
-
declare const HEADER_ENCODING = "X-RivetKit-Encoding";
|
|
5
|
-
declare const HEADER_CONN_PARAMS = "X-RivetKit-Conn-Params";
|
|
6
|
-
declare const HEADER_AUTH_DATA = "X-RivetKit-Auth-Data";
|
|
7
|
-
declare const HEADER_ACTOR_ID = "X-RivetKit-Actor";
|
|
8
|
-
declare const HEADER_CONN_ID = "X-RivetKit-Conn";
|
|
9
|
-
declare const HEADER_CONN_TOKEN = "X-RivetKit-Conn-Token";
|
|
10
|
-
/**
|
|
11
|
-
* Headers that publics can send from public clients.
|
|
12
|
-
*
|
|
13
|
-
* Used for CORS.
|
|
14
|
-
**/
|
|
15
|
-
declare const ALLOWED_PUBLIC_HEADERS: string[];
|
|
16
|
-
|
|
17
|
-
export { ALLOWED_PUBLIC_HEADERS as A, HEADER_ACTOR_ID as H, PATH_CONNECT_WEBSOCKET as P, PATH_RAW_WEBSOCKET_PREFIX as a, HEADER_ACTOR_QUERY as b, HEADER_AUTH_DATA as c, HEADER_CONN_ID as d, HEADER_CONN_PARAMS as e, HEADER_CONN_TOKEN as f, HEADER_ENCODING as g };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
declare const PATH_CONNECT_WEBSOCKET = "/connect/websocket";
|
|
2
|
-
declare const PATH_RAW_WEBSOCKET_PREFIX = "/raw/websocket/";
|
|
3
|
-
declare const HEADER_ACTOR_QUERY = "X-RivetKit-Query";
|
|
4
|
-
declare const HEADER_ENCODING = "X-RivetKit-Encoding";
|
|
5
|
-
declare const HEADER_CONN_PARAMS = "X-RivetKit-Conn-Params";
|
|
6
|
-
declare const HEADER_AUTH_DATA = "X-RivetKit-Auth-Data";
|
|
7
|
-
declare const HEADER_ACTOR_ID = "X-RivetKit-Actor";
|
|
8
|
-
declare const HEADER_CONN_ID = "X-RivetKit-Conn";
|
|
9
|
-
declare const HEADER_CONN_TOKEN = "X-RivetKit-Conn-Token";
|
|
10
|
-
/**
|
|
11
|
-
* Headers that publics can send from public clients.
|
|
12
|
-
*
|
|
13
|
-
* Used for CORS.
|
|
14
|
-
**/
|
|
15
|
-
declare const ALLOWED_PUBLIC_HEADERS: string[];
|
|
16
|
-
|
|
17
|
-
export { ALLOWED_PUBLIC_HEADERS as A, HEADER_ACTOR_ID as H, PATH_CONNECT_WEBSOCKET as P, PATH_RAW_WEBSOCKET_PREFIX as a, HEADER_ACTOR_QUERY as b, HEADER_AUTH_DATA as c, HEADER_CONN_ID as d, HEADER_CONN_PARAMS as e, HEADER_CONN_TOKEN as f, HEADER_ENCODING as g };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/actor-router-consts.ts","../../src/serde.ts","../../src/actor/protocol/serde.ts","../../src/actor/log.ts","../../src/actor/utils.ts"],"sourcesContent":["// NOTE: This is in a separate file from the router since it needs to be shared between the client & the server. If this was in the router file, the client would end up importing the *entire* actor router and tree shaking would not work.\n\n// MARK: Paths\nexport const PATH_CONNECT_WEBSOCKET = \"/connect/websocket\";\nexport const PATH_RAW_WEBSOCKET_PREFIX = \"/raw/websocket/\";\n\n// MARK: Headers\nexport const HEADER_ACTOR_QUERY = \"X-RivetKit-Query\";\n\nexport const HEADER_ENCODING = \"X-RivetKit-Encoding\";\n\n// IMPORTANT: Params must be in headers or in an E2EE part of the request (i.e. NOT the URL or query string) in order to ensure that tokens can be securely passed in params.\nexport const HEADER_CONN_PARAMS = \"X-RivetKit-Conn-Params\";\n\n// Internal header\nexport const HEADER_AUTH_DATA = \"X-RivetKit-Auth-Data\";\n\nexport const HEADER_ACTOR_ID = \"X-RivetKit-Actor\";\n\nexport const HEADER_CONN_ID = \"X-RivetKit-Conn\";\n\nexport const HEADER_CONN_TOKEN = \"X-RivetKit-Conn-Token\";\n\n/**\n * Headers that publics can send from public clients.\n *\n * Used for CORS.\n **/\nexport const ALLOWED_PUBLIC_HEADERS = [\n\t\"Content-Type\",\n\t\"User-Agent\",\n\tHEADER_ACTOR_QUERY,\n\tHEADER_ENCODING,\n\tHEADER_CONN_PARAMS,\n\tHEADER_ACTOR_ID,\n\tHEADER_CONN_ID,\n\tHEADER_CONN_TOKEN,\n];\n","import * as cbor from \"cbor-x\";\nimport invariant from \"invariant\";\nimport { assertUnreachable } from \"@/common/utils\";\nimport type { VersionedDataHandler } from \"@/common/versioned-data\";\nimport type { Encoding } from \"@/mod\";\nimport { jsonStringifyCompat } from \"./actor/protocol/serde\";\n\nexport function encodingIsBinary(encoding: Encoding): boolean {\n\tif (encoding === \"json\") {\n\t\treturn false;\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn true;\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function contentTypeForEncoding(encoding: Encoding): string {\n\tif (encoding === \"json\") {\n\t\treturn \"application/json\";\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn \"application/octet-stream\";\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function wsBinaryTypeForEncoding(\n\tencoding: Encoding,\n): \"arraybuffer\" | \"blob\" {\n\tif (encoding === \"json\") {\n\t\treturn \"blob\";\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn \"arraybuffer\";\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function serializeWithEncoding<T>(\n\tencoding: Encoding,\n\tvalue: T,\n\tversionedDataHandler: VersionedDataHandler<T> | undefined,\n): Uint8Array | string {\n\tif (encoding === \"json\") {\n\t\treturn jsonStringifyCompat(value);\n\t} else if (encoding === \"cbor\") {\n\t\treturn cbor.encode(value);\n\t} else if (encoding === \"bare\") {\n\t\tif (!versionedDataHandler) {\n\t\t\tthrow new Error(\"VersionedDataHandler is required for 'bare' encoding\");\n\t\t}\n\t\treturn versionedDataHandler.serializeWithEmbeddedVersion(value);\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function deserializeWithEncoding<T>(\n\tencoding: Encoding,\n\tbuffer: Uint8Array | string,\n\tversionedDataHandler: VersionedDataHandler<T> | undefined,\n): T {\n\tif (encoding === \"json\") {\n\t\tif (typeof buffer === \"string\") {\n\t\t\treturn JSON.parse(buffer);\n\t\t} else {\n\t\t\tconst decoder = new TextDecoder(\"utf-8\");\n\t\t\tconst jsonString = decoder.decode(buffer);\n\t\t\treturn JSON.parse(jsonString);\n\t\t}\n\t} else if (encoding === \"cbor\") {\n\t\tinvariant(\n\t\t\ttypeof buffer !== \"string\",\n\t\t\t\"buffer cannot be string for cbor encoding\",\n\t\t);\n\t\treturn cbor.decode(buffer);\n\t} else if (encoding === \"bare\") {\n\t\tinvariant(\n\t\t\ttypeof buffer !== \"string\",\n\t\t\t\"buffer cannot be string for bare encoding\",\n\t\t);\n\t\tif (!versionedDataHandler) {\n\t\t\tthrow new Error(\"VersionedDataHandler is required for 'bare' encoding\");\n\t\t}\n\t\treturn versionedDataHandler.deserializeWithEmbeddedVersion(buffer);\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n","import * as cbor from \"cbor-x\";\nimport { z } from \"zod\";\nimport * as errors from \"@/actor/errors\";\nimport type { VersionedDataHandler } from \"@/common/versioned-data\";\nimport { serializeWithEncoding } from \"@/serde\";\nimport { loggerWithoutContext } from \"../log\";\nimport { assertUnreachable } from \"../utils\";\n\n/** Data that can be deserialized. */\nexport type InputData = string | Buffer | Blob | ArrayBufferLike | Uint8Array;\n\n/** Data that's been serialized. */\nexport type OutputData = string | Uint8Array;\n\nexport const EncodingSchema = z.enum([\"json\", \"cbor\", \"bare\"]);\n\n/**\n * Encoding used to communicate between the client & actor.\n */\nexport type Encoding = z.infer<typeof EncodingSchema>;\n\n/**\n * Helper class that helps serialize data without re-serializing for the same encoding.\n */\nexport class CachedSerializer<T> {\n\t#data: T;\n\t#cache = new Map<Encoding, OutputData>();\n\t#versionedDataHandler: VersionedDataHandler<T>;\n\n\tconstructor(data: T, versionedDataHandler: VersionedDataHandler<T>) {\n\t\tthis.#data = data;\n\t\tthis.#versionedDataHandler = versionedDataHandler;\n\t}\n\n\tpublic get rawData(): T {\n\t\treturn this.#data;\n\t}\n\n\tpublic serialize(encoding: Encoding): OutputData {\n\t\tconst cached = this.#cache.get(encoding);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t} else {\n\t\t\tconst serialized = serializeWithEncoding(\n\t\t\t\tencoding,\n\t\t\t\tthis.#data,\n\t\t\t\tthis.#versionedDataHandler,\n\t\t\t);\n\t\t\tthis.#cache.set(encoding, serialized);\n\t\t\treturn serialized;\n\t\t}\n\t}\n}\n\n///**\n// * Use `CachedSerializer` if serializing the same data repeatedly.\n// */\n//export function serialize<T>(value: T, encoding: Encoding): OutputData {\n//\tif (encoding === \"json\") {\n//\t\treturn JSON.stringify(value);\n//\t} else if (encoding === \"cbor\") {\n//\t\t// TODO: Remove this hack, but cbor-x can't handle anything extra in data structures\n//\t\tconst cleanValue = JSON.parse(JSON.stringify(value));\n//\t\treturn cbor.encode(cleanValue);\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n//\n//export async function deserialize(data: InputData, encoding: Encoding) {\n//\tif (encoding === \"json\") {\n//\t\tif (typeof data !== \"string\") {\n//\t\t\tlogger().warn(\"received non-string for json parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t} else {\n//\t\t\treturn JSON.parse(data);\n//\t\t}\n//\t} else if (encoding === \"cbor\") {\n//\t\tif (data instanceof Blob) {\n//\t\t\tconst arrayBuffer = await data.arrayBuffer();\n//\t\t\treturn cbor.decode(new Uint8Array(arrayBuffer));\n//\t\t} else if (data instanceof Uint8Array) {\n//\t\t\treturn cbor.decode(data);\n//\t\t} else if (\n//\t\t\tdata instanceof ArrayBuffer ||\n//\t\t\tdata instanceof SharedArrayBuffer\n//\t\t) {\n//\t\t\treturn cbor.decode(new Uint8Array(data));\n//\t\t} else {\n//\t\t\tlogger().warn(\"received non-binary type for cbor parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t}\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n\n// TODO: Encode base 128\nfunction base64EncodeUint8Array(uint8Array: Uint8Array): string {\n\tlet binary = \"\";\n\tconst len = uint8Array.byteLength;\n\tfor (let i = 0; i < len; i++) {\n\t\tbinary += String.fromCharCode(uint8Array[i]);\n\t}\n\treturn btoa(binary);\n}\n\nfunction base64EncodeArrayBuffer(arrayBuffer: ArrayBuffer): string {\n\tconst uint8Array = new Uint8Array(arrayBuffer);\n\treturn base64EncodeUint8Array(uint8Array);\n}\n\n/** Converts data that was encoded to a string. Some formats (like SSE) don't support raw binary data. */\nexport function encodeDataToString(message: OutputData): string {\n\tif (typeof message === \"string\") {\n\t\treturn message;\n\t} else if (message instanceof ArrayBuffer) {\n\t\treturn base64EncodeArrayBuffer(message);\n\t} else if (message instanceof Uint8Array) {\n\t\treturn base64EncodeUint8Array(message);\n\t} else {\n\t\tassertUnreachable(message);\n\t}\n}\n\n/** Stringifies with compat for values that BARE & CBOR supports. */\nexport function jsonStringifyCompat(input: any): string {\n\treturn JSON.stringify(input, (_key, value) =>\n\t\ttypeof value === \"bigint\" ? value.toString() : value,\n\t);\n}\n","import { getLogger } from \"@/common/log\";\n\n/** Prever to use ActorInstance.rlog child logger. This does not provide context in the log, should only be used as a last resort if you cannot pass the actor's child logger. */\nexport function loggerWithoutContext() {\n\treturn getLogger(\"actor-runtime\");\n}\n","import * as errors from \"./errors\";\nimport { loggerWithoutContext } from \"./log\";\n\nexport function assertUnreachable(x: never): never {\n\tloggerWithoutContext().error({\n\t\tmsg: \"unreachable\",\n\t\tvalue: `${x}`,\n\t\tstack: new Error().stack,\n\t});\n\tthrow new errors.Unreachable(x);\n}\n\nexport const throttle = <\n\t// biome-ignore lint/suspicious/noExplicitAny: we want to allow any function\n\tFn extends (...args: any) => any,\n>(\n\tfn: Fn,\n\tdelay: number,\n) => {\n\tlet lastRan = false;\n\tlet lastArgs: Parameters<Fn> | null = null;\n\n\treturn (...args: Parameters<Fn>) => {\n\t\tif (!lastRan) {\n\t\t\tfn.apply(this, args);\n\t\t\tlastRan = true;\n\t\t\tconst timer = () =>\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tlastRan = false;\n\t\t\t\t\tif (lastArgs) {\n\t\t\t\t\t\tfn.apply(this, lastArgs);\n\t\t\t\t\t\tlastRan = true;\n\t\t\t\t\t\tlastArgs = null;\n\t\t\t\t\t\ttimer();\n\t\t\t\t\t}\n\t\t\t\t}, delay);\n\t\t\ttimer();\n\t\t} else lastArgs = args;\n\t};\n};\n\nexport class DeadlineError extends Error {\n\tconstructor() {\n\t\tsuper(\"Promise did not complete before deadline.\");\n\t}\n}\n\nexport function deadline<T>(promise: Promise<T>, timeout: number): Promise<T> {\n\tconst controller = new AbortController();\n\tconst signal = controller.signal;\n\n\t// Set a timeout to abort the operation\n\tconst timeoutId = setTimeout(() => controller.abort(), timeout);\n\n\treturn Promise.race<T>([\n\t\tpromise,\n\t\tnew Promise<T>((_, reject) => {\n\t\t\tsignal.addEventListener(\"abort\", () => reject(new DeadlineError()));\n\t\t}),\n\t]).finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n}\n\nexport class Lock<T> {\n\tprivate _locked = false;\n\tprivate _waiting: Array<() => void> = [];\n\n\tconstructor(private _value: T) {}\n\n\tasync lock(fn: (value: T) => Promise<void>): Promise<void> {\n\t\tif (this._locked) {\n\t\t\tawait new Promise<void>((resolve) => this._waiting.push(resolve));\n\t\t}\n\t\tthis._locked = true;\n\n\t\ttry {\n\t\t\tawait fn(this._value);\n\t\t} finally {\n\t\t\tthis._locked = false;\n\t\t\tconst next = this._waiting.shift();\n\t\t\tif (next) next();\n\t\t}\n\t}\n}\n\nexport function generateSecureToken(length = 32) {\n\tconst array = new Uint8Array(length);\n\tcrypto.getRandomValues(array);\n\treturn btoa(String.fromCharCode(...array));\n}\n\nexport function generateRandomString(length = 32) {\n\tconst characters =\n\t\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\tlet result = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tconst randomIndex = Math.floor(Math.random() * characters.length);\n\t\tresult += characters[randomIndex];\n\t}\n\treturn result;\n}\n"],"mappings":"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","names":["assertUnreachable","assertUnreachable"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// src/inspector/protocol/actor.ts
|
|
2
|
-
import { hc } from "hono/client";
|
|
3
|
-
var client = hc("");
|
|
4
|
-
var createActorInspectorClient = (...args) => hc(...args);
|
|
5
|
-
|
|
6
|
-
// src/inspector/protocol/manager.ts
|
|
7
|
-
import { hc as hc2 } from "hono/client";
|
|
8
|
-
var client2 = hc2("");
|
|
9
|
-
var createManagerInspectorClient = (...args) => hc2(...args);
|
|
10
|
-
|
|
11
|
-
export {
|
|
12
|
-
createActorInspectorClient,
|
|
13
|
-
createManagerInspectorClient
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=chunk-42I3OZ3Q.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/inspector/protocol/actor.ts","../../src/inspector/protocol/manager.ts"],"sourcesContent":["import { hc } from \"hono/client\";\nimport type { createActorInspectorRouter } from \"../actor\";\n\ntype ActorInspectorRouter = ReturnType<typeof createActorInspectorRouter>;\nconst client = hc<ActorInspectorRouter>(\"\");\nexport type ActorInspectorClient = typeof client;\n\nexport const createActorInspectorClient = (\n\t...args: Parameters<typeof hc>\n): ActorInspectorClient => hc<ActorInspectorRouter>(...args);\n","import { hc } from \"hono/client\";\nimport type { createManagerInspectorRouter } from \"../manager\";\n\ntype ManagerInspectorRouter = ReturnType<typeof createManagerInspectorRouter>;\nconst client = hc<ManagerInspectorRouter>(\"\");\nexport type ManagerInspectorClient = typeof client;\n\nexport const createManagerInspectorClient = (\n\t...args: Parameters<typeof hc>\n): ManagerInspectorClient => hc<ManagerInspectorRouter>(...args);\n"],"mappings":";AAAA,SAAS,UAAU;AAInB,IAAM,SAAS,GAAyB,EAAE;AAGnC,IAAM,6BAA6B,IACtC,SACuB,GAAyB,GAAG,IAAI;;;ACT3D,SAAS,MAAAA,WAAU;AAInB,IAAMC,UAASD,IAA2B,EAAE;AAGrC,IAAM,+BAA+B,IACxC,SACyBA,IAA2B,GAAG,IAAI;","names":["hc","client"]}
|