rivetkit 2.0.37 → 2.0.39
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-G4N7FZMM.cjs → chunk-7E3RWMR6.cjs} +195 -93
- package/dist/tsup/chunk-7E3RWMR6.cjs.map +1 -0
- package/dist/tsup/{chunk-J6TX5EFW.js → chunk-BQ36VTSB.js} +108 -6
- package/dist/tsup/chunk-BQ36VTSB.js.map +1 -0
- package/dist/tsup/{chunk-4V7MS7SO.cjs → chunk-C64FV764.cjs} +3 -3
- package/dist/tsup/{chunk-4V7MS7SO.cjs.map → chunk-C64FV764.cjs.map} +1 -1
- package/dist/tsup/{chunk-XI335ZED.js → chunk-CDK6DRO2.js} +6 -4
- package/dist/tsup/chunk-CDK6DRO2.js.map +1 -0
- package/dist/tsup/{chunk-LYYTV7DN.cjs → chunk-DY4H3ASE.cjs} +50 -46
- package/dist/tsup/chunk-DY4H3ASE.cjs.map +1 -0
- package/dist/tsup/{chunk-B6BP74X3.cjs → chunk-KMYFL3OL.cjs} +318 -92
- package/dist/tsup/chunk-KMYFL3OL.cjs.map +1 -0
- package/dist/tsup/{chunk-22NKW7F5.cjs → chunk-MZPYVTVG.cjs} +9 -9
- package/dist/tsup/{chunk-22NKW7F5.cjs.map → chunk-MZPYVTVG.cjs.map} +1 -1
- package/dist/tsup/{chunk-RBA5AQTB.js → chunk-OJZRCEIA.js} +5 -5
- package/dist/tsup/{chunk-RXA3ZMCL.js → chunk-PHCD25XO.js} +2 -2
- package/dist/tsup/{chunk-5XGZXH74.js → chunk-PVKUXMOA.js} +264 -38
- package/dist/tsup/chunk-PVKUXMOA.js.map +1 -0
- package/dist/tsup/{chunk-FIUSIG6J.js → chunk-T7IPDBWH.js} +8 -4
- package/dist/tsup/{chunk-FIUSIG6J.js.map → chunk-T7IPDBWH.js.map} +1 -1
- package/dist/tsup/{chunk-5VVIFC6M.cjs → chunk-UAX5E3EU.cjs} +443 -369
- package/dist/tsup/chunk-UAX5E3EU.cjs.map +1 -0
- package/dist/tsup/{chunk-X5IX3YPO.cjs → chunk-X72X7I7T.cjs} +6 -4
- package/dist/tsup/chunk-X72X7I7T.cjs.map +1 -0
- package/dist/tsup/{chunk-ZQBSQ6H3.js → chunk-XU74APB4.js} +208 -134
- package/dist/tsup/chunk-XU74APB4.js.map +1 -0
- package/dist/tsup/client/mod.cjs +5 -5
- package/dist/tsup/client/mod.d.cts +3 -3
- package/dist/tsup/client/mod.d.ts +3 -3
- package/dist/tsup/client/mod.js +4 -4
- package/dist/tsup/common/log.cjs +2 -2
- package/dist/tsup/common/log.js +1 -1
- package/dist/tsup/common/websocket.cjs +3 -3
- package/dist/tsup/common/websocket.js +2 -2
- package/dist/tsup/{config--NjwiYlS.d.cts → config-BuBlMs6C.d.cts} +238 -60
- package/dist/tsup/{config-CRuzI6n4.d.ts → config-CBwo4ooA.d.ts} +238 -60
- package/dist/tsup/{driver-yKjYx9Yy.d.cts → driver-CPXmh8f8.d.cts} +1 -1
- package/dist/tsup/{driver-BcmckRaF.d.ts → driver-DxWa6HUO.d.ts} +1 -1
- package/dist/tsup/driver-helpers/mod.cjs +3 -3
- package/dist/tsup/driver-helpers/mod.d.cts +2 -2
- package/dist/tsup/driver-helpers/mod.d.ts +2 -2
- package/dist/tsup/driver-helpers/mod.js +2 -2
- package/dist/tsup/driver-test-suite/mod.cjs +81 -35
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +2 -2
- package/dist/tsup/driver-test-suite/mod.d.ts +2 -2
- package/dist/tsup/driver-test-suite/mod.js +407 -361
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/{kv-CTM8sCvx.d.cts → keys-Chhy4ylv.d.cts} +1 -0
- package/dist/tsup/{kv-CTM8sCvx.d.ts → keys-Chhy4ylv.d.ts} +1 -0
- package/dist/tsup/mod.cjs +19 -7
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +5 -5
- package/dist/tsup/mod.d.ts +5 -5
- package/dist/tsup/mod.js +18 -6
- package/dist/tsup/test/mod.cjs +7 -7
- package/dist/tsup/test/mod.d.cts +1 -1
- package/dist/tsup/test/mod.d.ts +1 -1
- package/dist/tsup/test/mod.js +6 -6
- package/dist/tsup/utils.cjs +2 -2
- package/dist/tsup/utils.js +1 -1
- package/package.json +6 -4
- package/src/actor/config.ts +198 -2
- package/src/actor/contexts/base/actor.ts +12 -0
- package/src/actor/instance/connection-manager.ts +1 -1
- package/src/actor/instance/keys.ts +29 -0
- package/src/actor/instance/kv.ts +240 -14
- package/src/actor/instance/mod.ts +5 -4
- package/src/actor/instance/state-manager.ts +1 -1
- package/src/actor/mod.ts +2 -1
- package/src/actor/router-websocket-endpoints.ts +2 -1
- package/src/client/actor-conn.ts +70 -81
- package/src/client/actor-handle.ts +35 -15
- package/src/client/actor-query.ts +47 -0
- package/src/client/errors.ts +22 -58
- package/src/client/mod.ts +1 -1
- package/src/client/utils.ts +33 -0
- package/src/driver-helpers/utils.ts +1 -1
- package/src/driver-test-suite/mod.ts +3 -0
- package/src/driver-test-suite/test-inline-client-driver.ts +3 -0
- package/src/driver-test-suite/tests/actor-kv.ts +44 -0
- package/src/driver-test-suite/utils.ts +4 -0
- package/src/drivers/engine/actor-driver.ts +3 -3
- package/src/drivers/file-system/manager.ts +5 -0
- package/src/manager/driver.ts +8 -3
- package/src/manager-api/actors.ts +1 -20
- package/src/registry/config/index.ts +68 -0
- package/src/remote-manager-driver/actor-http-client.ts +5 -3
- package/src/remote-manager-driver/actor-websocket-client.ts +18 -7
- package/src/remote-manager-driver/mod.ts +21 -1
- package/src/serverless/router.test.ts +166 -0
- package/src/serverless/router.ts +58 -5
- package/src/utils/env-vars.ts +4 -1
- package/dist/tsup/chunk-5VVIFC6M.cjs.map +0 -1
- package/dist/tsup/chunk-5XGZXH74.js.map +0 -1
- package/dist/tsup/chunk-B6BP74X3.cjs.map +0 -1
- package/dist/tsup/chunk-G4N7FZMM.cjs.map +0 -1
- package/dist/tsup/chunk-J6TX5EFW.js.map +0 -1
- package/dist/tsup/chunk-LYYTV7DN.cjs.map +0 -1
- package/dist/tsup/chunk-X5IX3YPO.cjs.map +0 -1
- package/dist/tsup/chunk-XI335ZED.js.map +0 -1
- package/dist/tsup/chunk-ZQBSQ6H3.js.map +0 -1
- /package/dist/tsup/{chunk-RBA5AQTB.js.map → chunk-OJZRCEIA.js.map} +0 -0
- /package/dist/tsup/{chunk-RXA3ZMCL.js.map → chunk-PHCD25XO.js.map} +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkDY4H3ASEcjs = require('./chunk-DY4H3ASE.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkUAX5E3EUcjs = require('./chunk-UAX5E3EU.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkKMYFL3OLcjs = require('./chunk-KMYFL3OL.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkX72X7I7Tcjs = require('./chunk-X72X7I7T.cjs');
|
|
13
13
|
|
|
14
14
|
// src/test/mod.ts
|
|
15
15
|
var _net = require('net');
|
|
@@ -19,14 +19,14 @@ var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(
|
|
|
19
19
|
|
|
20
20
|
// src/test/log.ts
|
|
21
21
|
function logger() {
|
|
22
|
-
return
|
|
22
|
+
return _chunkX72X7I7Tcjs.getLogger.call(void 0, "test");
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
// src/test/mod.ts
|
|
26
26
|
async function setupTest(c, registry) {
|
|
27
27
|
var _a;
|
|
28
28
|
registry.config.test = { ...registry.config.test, enabled: true };
|
|
29
|
-
const driver = await
|
|
29
|
+
const driver = await _chunkDY4H3ASEcjs.createFileSystemOrMemoryDriver.call(void 0,
|
|
30
30
|
true,
|
|
31
31
|
`/tmp/rivetkit-test-${crypto.randomUUID()}`
|
|
32
32
|
);
|
|
@@ -39,7 +39,7 @@ async function setupTest(c, registry) {
|
|
|
39
39
|
const parsedConfig = registry.parseConfig();
|
|
40
40
|
const managerDriver = (_a = driver.manager) == null ? void 0 : _a.call(driver, parsedConfig);
|
|
41
41
|
_invariant2.default.call(void 0, managerDriver, "missing manager driver");
|
|
42
|
-
const { router } =
|
|
42
|
+
const { router } = _chunkKMYFL3OLcjs.buildManagerRouter.call(void 0,
|
|
43
43
|
parsedConfig,
|
|
44
44
|
managerDriver,
|
|
45
45
|
() => upgradeWebSocket
|
|
@@ -62,7 +62,7 @@ async function setupTest(c, registry) {
|
|
|
62
62
|
c.onTestFinished(async () => {
|
|
63
63
|
await new Promise((resolve) => server.close(() => resolve(void 0)));
|
|
64
64
|
});
|
|
65
|
-
const client =
|
|
65
|
+
const client = _chunkUAX5E3EUcjs.createClient.call(void 0, {
|
|
66
66
|
endpoint,
|
|
67
67
|
namespace: "default",
|
|
68
68
|
runnerName: "default"
|
|
@@ -111,4 +111,4 @@ async function getPort() {
|
|
|
111
111
|
|
|
112
112
|
|
|
113
113
|
exports.setupTest = setupTest; exports.getPort = getPort;
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-MZPYVTVG.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-MZPYVTVG.cjs","../../src/test/mod.ts","../../src/test/log.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACbA,0BAA6B;AAC7B,+CAAmC;AACnC,uCAAoC;AACpC,4FAAsB;ADetB;AACA;AEjBO,SAAS,MAAA,CAAA,EAAS;AACxB,EAAA,OAAO,yCAAA,MAAgB,CAAA;AACxB;AFmBA;AACA;ACNA,MAAA,SAAsB,SAAA,CACrB,CAAA,EACA,QAAA,EAC8B;AArB/B,EAAA,IAAA,EAAA;AAuBC,EAAA,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,EAAE,GAAG,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,KAAK,CAAA;AAGhE,EAAA,MAAM,OAAA,EAAS,MAAM,8DAAA;AAAA,IACpB,IAAA;AAAA,IACA,CAAA,mBAAA,EAAsB,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAAA;AAK1C,EAAA;AACA,EAAA;AACA,EAAA;AAA4B,IAAA;AAClB,IAAA;AACI,EAAA;AAId,EAAA;AACA,EAAA;AACA,EAAA;AAKA,EAAA;AAAmB,IAAA;AAClB,IAAA;AACA,IAAA;AACM,EAAA;AAIP,EAAA;AACA,EAAA;AAIA,EAAA;AACA,EAAA;AAAyB,IAAA;AACV,IAAA;AACJ,IAAA;AACV,EAAA;AAED,EAAA;AAAA,IAAA;AACmC,IAAA;AAClC,EAAA;AAED,EAAA;AACA,EAAA;AAEA,EAAA;AAGA,EAAA;AACC,IAAA;AAAqE,EAAA;AAItE,EAAA;AAA+B,IAAA;AAC9B,IAAA;AACW,IAAA;AACC,EAAA;AAEb,EAAA;AAEA,EAAA;AACD;AAEA;AAEC,EAAA;AACA,EAAA;AACA,EAAA;AAGA,EAAA;AACA,EAAA;AAEA,EAAA;AACC,IAAA;AAEC,MAAA;AACC,QAAA;AAEA,QAAA;AACC,UAAA;AACC,YAAA;AAA0C,UAAA;AAE1C,YAAA;AAAU,UAAA;AACX,QAAA;AAGD,QAAA;AACC,UAAA;AAAc,QAAA;AAGf,QAAA;AAAkB,MAAA;AAInB,MAAA;AACC,QAAA;AAA4B,MAAA;AAG7B,MAAA;AAAO,IAAA;AAGP,MAAA;AACA,MAAA;AACC,QAAA;AAAA,MAAA;AAED,MAAA;AAAqB,IAAA;AACtB,EAAA;AAGD,EAAA;AACD;AD/BA;AACA;AACA;AACA;AACA","file":"/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-MZPYVTVG.cjs","sourcesContent":[null,"import { createServer } from \"node:net\";\nimport { serve as honoServe } from \"@hono/node-server\";\nimport { createNodeWebSocket } from \"@hono/node-ws\";\nimport invariant from \"invariant\";\nimport { type TestContext, vi } from \"vitest\";\nimport { ClientConfigSchema } from \"@/client/config\";\nimport { type Client, createClient } from \"@/client/mod\";\nimport { createFileSystemOrMemoryDriver } from \"@/drivers/file-system/mod\";\nimport { createClientWithDriver, type Registry } from \"@/mod\";\nimport { RegistryConfig, RegistryConfigSchema } from \"@/registry/config\";\nimport { buildManagerRouter } from \"@/manager/router\";\nimport { logger } from \"./log\";\n\nexport interface SetupTestResult<A extends Registry<any>> {\n\tclient: Client<A>;\n}\n\n// Must use `TestContext` since global hooks do not work when running concurrently\nexport async function setupTest<A extends Registry<any>>(\n\tc: TestContext,\n\tregistry: A,\n): Promise<SetupTestResult<A>> {\n\t// Force enable test mode\n\tregistry.config.test = { ...registry.config.test, enabled: true };\n\n\t// Create driver\n\tconst driver = await createFileSystemOrMemoryDriver(\n\t\ttrue,\n\t\t`/tmp/rivetkit-test-${crypto.randomUUID()}`,\n\t);\n\n\t// Build driver config\n\t// biome-ignore lint/style/useConst: Assigned later\n\tlet upgradeWebSocket: any;\n\tregistry.config.driver = driver;\n\tregistry.config.inspector = {\n\t\tenabled: true,\n\t\ttoken: () => \"token\",\n\t};\n\n\t// Create router\n\tconst parsedConfig = registry.parseConfig();\n\tconst managerDriver = driver.manager?.(parsedConfig);\n\tinvariant(managerDriver, \"missing manager driver\");\n\t// const internalClient = createClientWithDriver(\n\t// \tmanagerDriver,\n\t// \tClientConfigSchema.parse({}),\n\t// );\n\tconst { router } = buildManagerRouter(\n\t\tparsedConfig,\n\t\tmanagerDriver,\n\t\t() => upgradeWebSocket!,\n\t);\n\n\t// Inject WebSocket\n\tconst nodeWebSocket = createNodeWebSocket({ app: router });\n\tupgradeWebSocket = nodeWebSocket.upgradeWebSocket;\n\n\t// TODO: I think this whole function is fucked, we should probably switch to calling registry.serve() directly\n\t// Start server\n\tconst port = await getPort();\n\tconst server = honoServe({\n\t\tfetch: router.fetch,\n\t\thostname: \"127.0.0.1\",\n\t\tport,\n\t});\n\tinvariant(\n\t\tnodeWebSocket.injectWebSocket !== undefined,\n\t\t\"should have injectWebSocket\",\n\t);\n\tnodeWebSocket.injectWebSocket(server);\n\tconst endpoint = `http://127.0.0.1:${port}`;\n\n\tlogger().info({ msg: \"test server listening\", port });\n\n\t// Cleanup on test finish\n\tc.onTestFinished(async () => {\n\t\tawait new Promise((resolve) => server.close(() => resolve(undefined)));\n\t});\n\n\t// Create client\n\tconst client = createClient<A>({\n\t\tendpoint,\n\t\tnamespace: \"default\",\n\t\trunnerName: \"default\",\n\t});\n\tc.onTestFinished(async () => await client.dispose());\n\n\treturn { client };\n}\n\nexport async function getPort(): Promise<number> {\n\t// Pick random port between 10000 and 65535 (avoiding well-known and registered ports)\n\tconst MIN_PORT = 10000;\n\tconst MAX_PORT = 65535;\n\tconst getRandomPort = () =>\n\t\tMath.floor(Math.random() * (MAX_PORT - MIN_PORT + 1)) + MIN_PORT;\n\n\tlet port = getRandomPort();\n\tlet maxAttempts = 10;\n\n\twhile (maxAttempts > 0) {\n\t\ttry {\n\t\t\t// Try to create a server on the port to check if it's available\n\t\t\tconst server = await new Promise<any>((resolve, reject) => {\n\t\t\t\tconst server = createServer();\n\n\t\t\t\tserver.once(\"error\", (err: Error & { code?: string }) => {\n\t\t\t\t\tif (err.code === \"EADDRINUSE\") {\n\t\t\t\t\t\treject(new Error(`Port ${port} is in use`));\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tserver.once(\"listening\", () => {\n\t\t\t\t\tresolve(server);\n\t\t\t\t});\n\n\t\t\t\tserver.listen(port);\n\t\t\t});\n\n\t\t\t// Close the server since we're just checking availability\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tserver.close(() => resolve());\n\t\t\t});\n\n\t\t\treturn port;\n\t\t} catch (err) {\n\t\t\t// If port is in use, try a different one\n\t\t\tmaxAttempts--;\n\t\t\tif (maxAttempts <= 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tport = getRandomPort();\n\t\t}\n\t}\n\n\tthrow new Error(\"Could not find an available port after multiple attempts\");\n}\n","import { getLogger } from \"@/common/log\";\n\nexport function logger() {\n\treturn getLogger(\"test\");\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createFileSystemOrMemoryDriver
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-T7IPDBWH.js";
|
|
4
4
|
import {
|
|
5
5
|
createClient
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XU74APB4.js";
|
|
7
7
|
import {
|
|
8
8
|
buildManagerRouter
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-PVKUXMOA.js";
|
|
10
10
|
import {
|
|
11
11
|
getLogger
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-CDK6DRO2.js";
|
|
13
13
|
|
|
14
14
|
// src/test/mod.ts
|
|
15
15
|
import { createServer } from "net";
|
|
@@ -111,4 +111,4 @@ export {
|
|
|
111
111
|
setupTest,
|
|
112
112
|
getPort
|
|
113
113
|
};
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-OJZRCEIA.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getLogger
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CDK6DRO2.js";
|
|
4
4
|
|
|
5
5
|
// src/client/log.ts
|
|
6
6
|
function logger() {
|
|
@@ -46,4 +46,4 @@ export {
|
|
|
46
46
|
logger,
|
|
47
47
|
importWebSocket
|
|
48
48
|
};
|
|
49
|
-
//# sourceMappingURL=chunk-
|
|
49
|
+
//# sourceMappingURL=chunk-PHCD25XO.js.map
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
noopNext,
|
|
32
32
|
promiseWithResolvers,
|
|
33
33
|
stringifyError
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-CDK6DRO2.js";
|
|
35
35
|
import {
|
|
36
36
|
ConnStateNotEnabled,
|
|
37
37
|
Forbidden,
|
|
@@ -152,12 +152,215 @@ import * as cbor3 from "cbor-x";
|
|
|
152
152
|
// src/actor/router-endpoints.ts
|
|
153
153
|
import * as cbor2 from "cbor-x";
|
|
154
154
|
|
|
155
|
+
// src/actor/instance/keys.ts
|
|
156
|
+
var KEYS = {
|
|
157
|
+
PERSIST_DATA: Uint8Array.from([1]),
|
|
158
|
+
CONN_PREFIX: Uint8Array.from([2]),
|
|
159
|
+
// Prefix for connection keys
|
|
160
|
+
INSPECTOR_TOKEN: Uint8Array.from([3]),
|
|
161
|
+
// Inspector token key
|
|
162
|
+
KV: Uint8Array.from([4])
|
|
163
|
+
// Prefix for user-facing KV storage
|
|
164
|
+
};
|
|
165
|
+
function makePrefixedKey(key) {
|
|
166
|
+
const prefixed = new Uint8Array(KEYS.KV.length + key.length);
|
|
167
|
+
prefixed.set(KEYS.KV, 0);
|
|
168
|
+
prefixed.set(key, KEYS.KV.length);
|
|
169
|
+
return prefixed;
|
|
170
|
+
}
|
|
171
|
+
function removePrefixFromKey(prefixedKey) {
|
|
172
|
+
return prefixedKey.slice(KEYS.KV.length);
|
|
173
|
+
}
|
|
174
|
+
function makeConnKey(connId) {
|
|
175
|
+
const encoder = new TextEncoder();
|
|
176
|
+
const connIdBytes = encoder.encode(connId);
|
|
177
|
+
const key = new Uint8Array(KEYS.CONN_PREFIX.length + connIdBytes.length);
|
|
178
|
+
key.set(KEYS.CONN_PREFIX, 0);
|
|
179
|
+
key.set(connIdBytes, KEYS.CONN_PREFIX.length);
|
|
180
|
+
return key;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// src/actor/instance/kv.ts
|
|
184
|
+
var textEncoder = new TextEncoder();
|
|
185
|
+
var textDecoder = new TextDecoder();
|
|
186
|
+
function encodeKey(key, keyType) {
|
|
187
|
+
if (key instanceof Uint8Array) {
|
|
188
|
+
return key;
|
|
189
|
+
}
|
|
190
|
+
const resolvedKeyType = keyType ?? "text";
|
|
191
|
+
if (resolvedKeyType === "binary") {
|
|
192
|
+
throw new TypeError("Expected a Uint8Array when keyType is binary");
|
|
193
|
+
}
|
|
194
|
+
return textEncoder.encode(key);
|
|
195
|
+
}
|
|
196
|
+
function decodeKey(key, keyType) {
|
|
197
|
+
const resolvedKeyType = keyType ?? "text";
|
|
198
|
+
switch (resolvedKeyType) {
|
|
199
|
+
case "text":
|
|
200
|
+
return textDecoder.decode(key);
|
|
201
|
+
case "binary":
|
|
202
|
+
return key;
|
|
203
|
+
default:
|
|
204
|
+
throw new TypeError("Invalid kv key type");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function resolveValueType(value) {
|
|
208
|
+
if (typeof value === "string") {
|
|
209
|
+
return "text";
|
|
210
|
+
}
|
|
211
|
+
if (value instanceof Uint8Array) {
|
|
212
|
+
return "binary";
|
|
213
|
+
}
|
|
214
|
+
if (value instanceof ArrayBuffer) {
|
|
215
|
+
return "arrayBuffer";
|
|
216
|
+
}
|
|
217
|
+
throw new TypeError("Invalid kv value");
|
|
218
|
+
}
|
|
219
|
+
function encodeValue(value, options) {
|
|
220
|
+
const type = (options == null ? void 0 : options.type) ?? resolveValueType(value);
|
|
221
|
+
switch (type) {
|
|
222
|
+
case "text":
|
|
223
|
+
if (typeof value !== "string") {
|
|
224
|
+
throw new TypeError("Expected a string when type is text");
|
|
225
|
+
}
|
|
226
|
+
return textEncoder.encode(value);
|
|
227
|
+
case "arrayBuffer":
|
|
228
|
+
if (!(value instanceof ArrayBuffer)) {
|
|
229
|
+
throw new TypeError("Expected an ArrayBuffer when type is arrayBuffer");
|
|
230
|
+
}
|
|
231
|
+
return new Uint8Array(value);
|
|
232
|
+
case "binary":
|
|
233
|
+
if (!(value instanceof Uint8Array)) {
|
|
234
|
+
throw new TypeError("Expected a Uint8Array when type is binary");
|
|
235
|
+
}
|
|
236
|
+
return value;
|
|
237
|
+
default:
|
|
238
|
+
throw new TypeError("Invalid kv value type");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
function decodeValue(value, options) {
|
|
242
|
+
const type = (options == null ? void 0 : options.type) ?? "text";
|
|
243
|
+
switch (type) {
|
|
244
|
+
case "text":
|
|
245
|
+
return textDecoder.decode(value);
|
|
246
|
+
case "arrayBuffer": {
|
|
247
|
+
const copy = new Uint8Array(value.byteLength);
|
|
248
|
+
copy.set(value);
|
|
249
|
+
return copy.buffer;
|
|
250
|
+
}
|
|
251
|
+
case "binary":
|
|
252
|
+
return value;
|
|
253
|
+
default:
|
|
254
|
+
throw new TypeError("Invalid kv value type");
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
var ActorKv = class {
|
|
258
|
+
#driver;
|
|
259
|
+
#actorId;
|
|
260
|
+
constructor(driver, actorId) {
|
|
261
|
+
this.#driver = driver;
|
|
262
|
+
this.#actorId = actorId;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get a single value by key.
|
|
266
|
+
*/
|
|
267
|
+
async get(key, options) {
|
|
268
|
+
const results = await this.#driver.kvBatchGet(this.#actorId, [
|
|
269
|
+
makePrefixedKey(encodeKey(key))
|
|
270
|
+
]);
|
|
271
|
+
const result = results[0];
|
|
272
|
+
if (!result) {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
return decodeValue(result, options);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get multiple values by keys.
|
|
279
|
+
*/
|
|
280
|
+
async getBatch(keys, options) {
|
|
281
|
+
const prefixedKeys = keys.map(
|
|
282
|
+
(key) => makePrefixedKey(encodeKey(key))
|
|
283
|
+
);
|
|
284
|
+
const results = await this.#driver.kvBatchGet(
|
|
285
|
+
this.#actorId,
|
|
286
|
+
prefixedKeys
|
|
287
|
+
);
|
|
288
|
+
return results.map(
|
|
289
|
+
(result) => result ? decodeValue(result, options) : null
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Put a single key-value pair.
|
|
294
|
+
*/
|
|
295
|
+
async put(key, value, options) {
|
|
296
|
+
await this.#driver.kvBatchPut(this.#actorId, [
|
|
297
|
+
[makePrefixedKey(encodeKey(key)), encodeValue(value, options)]
|
|
298
|
+
]);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Put multiple key-value pairs.
|
|
302
|
+
*/
|
|
303
|
+
async putBatch(entries, options) {
|
|
304
|
+
const prefixedEntries = entries.map(
|
|
305
|
+
([key, value]) => [
|
|
306
|
+
makePrefixedKey(encodeKey(key)),
|
|
307
|
+
encodeValue(value, options)
|
|
308
|
+
]
|
|
309
|
+
);
|
|
310
|
+
await this.#driver.kvBatchPut(this.#actorId, prefixedEntries);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Delete a single key.
|
|
314
|
+
*/
|
|
315
|
+
async delete(key) {
|
|
316
|
+
await this.#driver.kvBatchDelete(this.#actorId, [
|
|
317
|
+
makePrefixedKey(encodeKey(key))
|
|
318
|
+
]);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Delete multiple keys.
|
|
322
|
+
*/
|
|
323
|
+
async deleteBatch(keys) {
|
|
324
|
+
const prefixedKeys = keys.map(
|
|
325
|
+
(key) => makePrefixedKey(encodeKey(key))
|
|
326
|
+
);
|
|
327
|
+
await this.#driver.kvBatchDelete(this.#actorId, prefixedKeys);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* List all keys with a given prefix.
|
|
331
|
+
* Returns key-value pairs where keys have the user prefix removed.
|
|
332
|
+
*/
|
|
333
|
+
async list(prefix, options) {
|
|
334
|
+
const prefixedPrefix = makePrefixedKey(
|
|
335
|
+
encodeKey(prefix, options == null ? void 0 : options.keyType)
|
|
336
|
+
);
|
|
337
|
+
const results = await this.#driver.kvListPrefix(
|
|
338
|
+
this.#actorId,
|
|
339
|
+
prefixedPrefix
|
|
340
|
+
);
|
|
341
|
+
return results.map(([key, value]) => [
|
|
342
|
+
decodeKey(removePrefixFromKey(key), options == null ? void 0 : options.keyType),
|
|
343
|
+
decodeValue(value, options)
|
|
344
|
+
]);
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
|
|
155
348
|
// src/actor/contexts/base/actor.ts
|
|
156
349
|
var ActorContext = class {
|
|
157
350
|
#actor;
|
|
351
|
+
#kv;
|
|
158
352
|
constructor(actor) {
|
|
159
353
|
this.#actor = actor;
|
|
160
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* Gets the KV storage interface.
|
|
357
|
+
*/
|
|
358
|
+
get kv() {
|
|
359
|
+
if (!this.#kv) {
|
|
360
|
+
this.#kv = new ActorKv(this.#actor.driver, this.#actor.id);
|
|
361
|
+
}
|
|
362
|
+
return this.#kv;
|
|
363
|
+
}
|
|
161
364
|
/**
|
|
162
365
|
* Get the actor state
|
|
163
366
|
*
|
|
@@ -1981,6 +2184,55 @@ function buildActorNames(config6) {
|
|
|
1981
2184
|
Object.keys(config6.use).map((name) => [name, { metadata: {} }])
|
|
1982
2185
|
);
|
|
1983
2186
|
}
|
|
2187
|
+
var DocInspectorConfigSchema = z7.object({
|
|
2188
|
+
enabled: z7.boolean().optional().describe("Whether to enable the Rivet Inspector. Defaults to true in development mode."),
|
|
2189
|
+
token: z7.string().optional().describe("Token used to access the Inspector."),
|
|
2190
|
+
defaultEndpoint: z7.string().optional().describe("Default RivetKit server endpoint for Rivet Inspector to connect to.")
|
|
2191
|
+
}).optional().describe("Inspector configuration for debugging and development.");
|
|
2192
|
+
var DocConfigureRunnerPoolSchema = z7.object({
|
|
2193
|
+
name: z7.string().optional().describe("Name of the runner pool."),
|
|
2194
|
+
url: z7.string().describe("URL of the serverless platform to configure runners."),
|
|
2195
|
+
headers: z7.record(z7.string(), z7.string()).optional().describe("Headers to include in requests to the serverless platform."),
|
|
2196
|
+
maxRunners: z7.number().optional().describe("Maximum number of runners in the pool."),
|
|
2197
|
+
minRunners: z7.number().optional().describe("Minimum number of runners to keep warm."),
|
|
2198
|
+
requestLifespan: z7.number().optional().describe("Maximum lifespan of a request in milliseconds."),
|
|
2199
|
+
runnersMargin: z7.number().optional().describe("Buffer margin for scaling runners."),
|
|
2200
|
+
slotsPerRunner: z7.number().optional().describe("Number of actor slots per runner."),
|
|
2201
|
+
metadata: z7.record(z7.string(), z7.unknown()).optional().describe("Additional metadata to pass to the serverless platform.")
|
|
2202
|
+
}).optional();
|
|
2203
|
+
var DocServerlessConfigSchema = z7.object({
|
|
2204
|
+
spawnEngine: z7.boolean().optional().describe("Downloads and starts the full Rust engine process. Auto-enabled in development mode when no endpoint is provided. Default: false"),
|
|
2205
|
+
engineVersion: z7.string().optional().describe("Version of the engine to download. Defaults to the current RivetKit version."),
|
|
2206
|
+
configureRunnerPool: DocConfigureRunnerPoolSchema.describe("Automatically configure serverless runners in the engine."),
|
|
2207
|
+
basePath: z7.string().optional().describe("Base path for serverless API routes. Default: '/api/rivet'"),
|
|
2208
|
+
publicEndpoint: z7.string().optional().describe("The endpoint that clients should connect to. Supports URL auth syntax: https://namespace:token@api.rivet.dev"),
|
|
2209
|
+
publicToken: z7.string().optional().describe("Token that clients should use when connecting via the public endpoint.")
|
|
2210
|
+
}).describe("Configuration for serverless deployment mode.");
|
|
2211
|
+
var DocRunnerConfigSchema = z7.object({
|
|
2212
|
+
totalSlots: z7.number().optional().describe("Total number of actor slots available. Default: 100000"),
|
|
2213
|
+
runnerName: z7.string().optional().describe("Name of this runner. Default: 'default'"),
|
|
2214
|
+
runnerKey: z7.string().optional().describe("Authentication key for the runner."),
|
|
2215
|
+
version: z7.number().optional().describe("Version number of this runner. Default: 1")
|
|
2216
|
+
}).describe("Configuration for runner mode.");
|
|
2217
|
+
var DocRegistryConfigSchema = z7.object({
|
|
2218
|
+
use: z7.record(z7.string(), z7.unknown()).describe("Actor definitions. Keys are actor names, values are actor definitions."),
|
|
2219
|
+
maxIncomingMessageSize: z7.number().optional().describe("Maximum size of incoming WebSocket messages in bytes. Default: 65536"),
|
|
2220
|
+
maxOutgoingMessageSize: z7.number().optional().describe("Maximum size of outgoing WebSocket messages in bytes. Default: 1048576"),
|
|
2221
|
+
noWelcome: z7.boolean().optional().describe("Disable the welcome message on startup. Default: false"),
|
|
2222
|
+
logging: z7.object({
|
|
2223
|
+
level: LogLevelSchema.optional().describe("Log level for RivetKit. Default: 'warn'")
|
|
2224
|
+
}).optional().describe("Logging configuration."),
|
|
2225
|
+
endpoint: z7.string().optional().describe("Endpoint URL to connect to Rivet Engine. Supports URL auth syntax: https://namespace:token@api.rivet.dev. Can also be set via RIVET_ENDPOINT environment variable."),
|
|
2226
|
+
token: z7.string().optional().describe("Authentication token for Rivet Engine. Can also be set via RIVET_TOKEN environment variable."),
|
|
2227
|
+
namespace: z7.string().optional().describe("Namespace to use. Default: 'default'. Can also be set via RIVET_NAMESPACE environment variable."),
|
|
2228
|
+
headers: z7.record(z7.string(), z7.string()).optional().describe("Additional headers to include in requests to Rivet Engine."),
|
|
2229
|
+
serveManager: z7.boolean().optional().describe("Whether to start the local manager server. Auto-determined based on endpoint and NODE_ENV if not specified."),
|
|
2230
|
+
managerBasePath: z7.string().optional().describe("Base path for the manager API. Default: '/'"),
|
|
2231
|
+
managerPort: z7.number().optional().describe("Port to run the manager on. Default: 6420"),
|
|
2232
|
+
inspector: DocInspectorConfigSchema,
|
|
2233
|
+
serverless: DocServerlessConfigSchema.optional(),
|
|
2234
|
+
runner: DocRunnerConfigSchema.optional()
|
|
2235
|
+
}).describe("RivetKit registry configuration.");
|
|
1984
2236
|
|
|
1985
2237
|
// src/common/router.ts
|
|
1986
2238
|
function logger() {
|
|
@@ -2080,21 +2332,6 @@ import { z as z8 } from "zod";
|
|
|
2080
2332
|
var RivetIdSchema = z8.string();
|
|
2081
2333
|
|
|
2082
2334
|
// src/manager-api/actors.ts
|
|
2083
|
-
var ServerlessConnectionErrorSchema = z9.union([
|
|
2084
|
-
z9.object({ http_error: z9.object({ status_code: z9.number(), body: z9.string() }) }),
|
|
2085
|
-
z9.literal("stream_ended_early"),
|
|
2086
|
-
z9.object({ connection_error: z9.object({ message: z9.string() }) }),
|
|
2087
|
-
z9.literal("invalid_base64"),
|
|
2088
|
-
z9.object({ invalid_payload: z9.object({ message: z9.string() }) }),
|
|
2089
|
-
z9.literal("runner_config_not_found"),
|
|
2090
|
-
z9.literal("runner_config_not_serverless"),
|
|
2091
|
-
z9.literal("namespace_not_found")
|
|
2092
|
-
]);
|
|
2093
|
-
var ActorErrorDetailsSchema = z9.union([
|
|
2094
|
-
z9.object({ serverless_error: ServerlessConnectionErrorSchema }),
|
|
2095
|
-
z9.object({ no_capacity: z9.object({ runner_name: z9.string() }) }),
|
|
2096
|
-
z9.object({ runner_no_response: z9.object({ runner_id: z9.string() }) })
|
|
2097
|
-
]);
|
|
2098
2335
|
var ActorSchema = z9.object({
|
|
2099
2336
|
actor_id: RivetIdSchema,
|
|
2100
2337
|
name: z9.string(),
|
|
@@ -2106,7 +2343,7 @@ var ActorSchema = z9.object({
|
|
|
2106
2343
|
destroy_ts: z9.number().nullable().optional(),
|
|
2107
2344
|
sleep_ts: z9.number().nullable().optional(),
|
|
2108
2345
|
start_ts: z9.number().nullable().optional(),
|
|
2109
|
-
error:
|
|
2346
|
+
error: z9.unknown().nullable().optional()
|
|
2110
2347
|
});
|
|
2111
2348
|
var ActorNameSchema = z9.object({
|
|
2112
2349
|
metadata: z9.record(z9.string(), z9.unknown())
|
|
@@ -3304,7 +3541,7 @@ function parseWebSocketProtocols(protocols) {
|
|
|
3304
3541
|
}
|
|
3305
3542
|
}
|
|
3306
3543
|
}
|
|
3307
|
-
const encoding = EncodingSchema.parse(encodingRaw);
|
|
3544
|
+
const encoding = EncodingSchema.parse(encodingRaw ?? "json");
|
|
3308
3545
|
const connParams = connParamsRaw ? JSON.parse(connParamsRaw) : void 0;
|
|
3309
3546
|
return { encoding, connParams };
|
|
3310
3547
|
}
|
|
@@ -4166,23 +4403,6 @@ function createApiActor(actor) {
|
|
|
4166
4403
|
// src/driver-helpers/utils.ts
|
|
4167
4404
|
import * as cbor7 from "cbor-x";
|
|
4168
4405
|
|
|
4169
|
-
// src/actor/instance/kv.ts
|
|
4170
|
-
var KEYS = {
|
|
4171
|
-
PERSIST_DATA: Uint8Array.from([1]),
|
|
4172
|
-
CONN_PREFIX: Uint8Array.from([2]),
|
|
4173
|
-
// Prefix for connection keys
|
|
4174
|
-
INSPECTOR_TOKEN: Uint8Array.from([3])
|
|
4175
|
-
// Inspector token key
|
|
4176
|
-
};
|
|
4177
|
-
function makeConnKey(connId) {
|
|
4178
|
-
const encoder = new TextEncoder();
|
|
4179
|
-
const connIdBytes = encoder.encode(connId);
|
|
4180
|
-
const key = new Uint8Array(KEYS.CONN_PREFIX.length + connIdBytes.length);
|
|
4181
|
-
key.set(KEYS.CONN_PREFIX, 0);
|
|
4182
|
-
key.set(connIdBytes, KEYS.CONN_PREFIX.length);
|
|
4183
|
-
return key;
|
|
4184
|
-
}
|
|
4185
|
-
|
|
4186
4406
|
// src/schemas/actor-persist/versioned.ts
|
|
4187
4407
|
import { createVersionedDataHandler as createVersionedDataHandler2 } from "vbare";
|
|
4188
4408
|
|
|
@@ -4902,6 +5122,9 @@ export {
|
|
|
4902
5122
|
CONN_STATE_MANAGER_SYMBOL,
|
|
4903
5123
|
CONN_SEND_MESSAGE_SYMBOL,
|
|
4904
5124
|
Conn,
|
|
5125
|
+
KEYS,
|
|
5126
|
+
makeConnKey,
|
|
5127
|
+
ActorKv,
|
|
4905
5128
|
ActorContext,
|
|
4906
5129
|
ActionContext,
|
|
4907
5130
|
CURRENT_VERSION2,
|
|
@@ -4917,8 +5140,6 @@ export {
|
|
|
4917
5140
|
getValueLength,
|
|
4918
5141
|
inputDataToBuffer,
|
|
4919
5142
|
processMessage,
|
|
4920
|
-
KEYS,
|
|
4921
|
-
makeConnKey,
|
|
4922
5143
|
PATH_CONNECT,
|
|
4923
5144
|
PATH_WEBSOCKET_BASE,
|
|
4924
5145
|
PATH_WEBSOCKET_PREFIX,
|
|
@@ -4948,6 +5169,11 @@ export {
|
|
|
4948
5169
|
TestConfigSchema,
|
|
4949
5170
|
RegistryConfigSchema,
|
|
4950
5171
|
buildActorNames,
|
|
5172
|
+
DocInspectorConfigSchema,
|
|
5173
|
+
DocConfigureRunnerPoolSchema,
|
|
5174
|
+
DocServerlessConfigSchema,
|
|
5175
|
+
DocRunnerConfigSchema,
|
|
5176
|
+
DocRegistryConfigSchema,
|
|
4951
5177
|
loggerMiddleware,
|
|
4952
5178
|
handleRouteNotFound,
|
|
4953
5179
|
handleRouteError,
|
|
@@ -4960,4 +5186,4 @@ export {
|
|
|
4960
5186
|
buildManagerRouter,
|
|
4961
5187
|
getInitialActorKvState
|
|
4962
5188
|
};
|
|
4963
|
-
//# sourceMappingURL=chunk-
|
|
5189
|
+
//# sourceMappingURL=chunk-PVKUXMOA.js.map
|