rivetkit 2.0.38 → 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-6WLJW57U.cjs → chunk-7E3RWMR6.cjs} +161 -115
- package/dist/tsup/chunk-7E3RWMR6.cjs.map +1 -0
- package/dist/tsup/{chunk-FA6FGAEC.js → chunk-BQ36VTSB.js} +74 -28
- package/dist/tsup/chunk-BQ36VTSB.js.map +1 -0
- package/dist/tsup/{chunk-GFKZZG2A.cjs → chunk-C64FV764.cjs} +3 -3
- package/dist/tsup/{chunk-GFKZZG2A.cjs.map → chunk-C64FV764.cjs.map} +1 -1
- package/dist/tsup/{chunk-4U45T5KW.js → chunk-CDK6DRO2.js} +2 -2
- package/dist/tsup/{chunk-4U45T5KW.js.map → chunk-CDK6DRO2.js.map} +1 -1
- package/dist/tsup/{chunk-IRTVRBJA.cjs → chunk-DY4H3ASE.cjs} +50 -46
- package/dist/tsup/chunk-DY4H3ASE.cjs.map +1 -0
- package/dist/tsup/{chunk-IWXMFQDT.cjs → chunk-KMYFL3OL.cjs} +264 -77
- package/dist/tsup/chunk-KMYFL3OL.cjs.map +1 -0
- package/dist/tsup/{chunk-FZQHTGQX.cjs → chunk-MZPYVTVG.cjs} +9 -9
- package/dist/tsup/{chunk-FZQHTGQX.cjs.map → chunk-MZPYVTVG.cjs.map} +1 -1
- package/dist/tsup/{chunk-K2RNF2ZR.js → chunk-OJZRCEIA.js} +5 -5
- package/dist/tsup/{chunk-WIZ4JGP6.js → chunk-PHCD25XO.js} +2 -2
- package/dist/tsup/{chunk-MIOU6BF3.js → chunk-PVKUXMOA.js} +209 -22
- package/dist/tsup/chunk-PVKUXMOA.js.map +1 -0
- package/dist/tsup/{chunk-UUEZVDRL.js → chunk-T7IPDBWH.js} +8 -4
- package/dist/tsup/{chunk-UUEZVDRL.js.map → chunk-T7IPDBWH.js.map} +1 -1
- package/dist/tsup/{chunk-LULP6HM2.cjs → chunk-UAX5E3EU.cjs} +311 -288
- package/dist/tsup/chunk-UAX5E3EU.cjs.map +1 -0
- package/dist/tsup/{chunk-O433HWWG.cjs → chunk-X72X7I7T.cjs} +2 -2
- package/dist/tsup/{chunk-O433HWWG.cjs.map → chunk-X72X7I7T.cjs.map} +1 -1
- package/dist/tsup/{chunk-EEL32AJM.js → chunk-XU74APB4.js} +72 -49
- 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-CwJCQyP1.d.cts → config-BuBlMs6C.d.cts} +72 -5
- package/dist/tsup/{config-CbIHPGKl.d.ts → config-CBwo4ooA.d.ts} +72 -5
- package/dist/tsup/{driver-Lw_oORox.d.cts → driver-CPXmh8f8.d.cts} +1 -1
- package/dist/tsup/{driver-CMN823Lc.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 +9 -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 +8 -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 +2 -2
- package/src/actor/config.ts +183 -34
- 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-handle.ts +13 -3
- package/src/client/mod.ts +1 -1
- 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 +7 -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 +10 -0
- package/dist/tsup/chunk-6WLJW57U.cjs.map +0 -1
- package/dist/tsup/chunk-EEL32AJM.js.map +0 -1
- package/dist/tsup/chunk-FA6FGAEC.js.map +0 -1
- package/dist/tsup/chunk-IRTVRBJA.cjs.map +0 -1
- package/dist/tsup/chunk-IWXMFQDT.cjs.map +0 -1
- package/dist/tsup/chunk-LULP6HM2.cjs.map +0 -1
- package/dist/tsup/chunk-MIOU6BF3.js.map +0 -1
- /package/dist/tsup/{chunk-K2RNF2ZR.js.map → chunk-OJZRCEIA.js.map} +0 -0
- /package/dist/tsup/{chunk-WIZ4JGP6.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
|
*
|
|
@@ -3338,7 +3541,7 @@ function parseWebSocketProtocols(protocols) {
|
|
|
3338
3541
|
}
|
|
3339
3542
|
}
|
|
3340
3543
|
}
|
|
3341
|
-
const encoding = EncodingSchema.parse(encodingRaw);
|
|
3544
|
+
const encoding = EncodingSchema.parse(encodingRaw ?? "json");
|
|
3342
3545
|
const connParams = connParamsRaw ? JSON.parse(connParamsRaw) : void 0;
|
|
3343
3546
|
return { encoding, connParams };
|
|
3344
3547
|
}
|
|
@@ -4200,23 +4403,6 @@ function createApiActor(actor) {
|
|
|
4200
4403
|
// src/driver-helpers/utils.ts
|
|
4201
4404
|
import * as cbor7 from "cbor-x";
|
|
4202
4405
|
|
|
4203
|
-
// src/actor/instance/kv.ts
|
|
4204
|
-
var KEYS = {
|
|
4205
|
-
PERSIST_DATA: Uint8Array.from([1]),
|
|
4206
|
-
CONN_PREFIX: Uint8Array.from([2]),
|
|
4207
|
-
// Prefix for connection keys
|
|
4208
|
-
INSPECTOR_TOKEN: Uint8Array.from([3])
|
|
4209
|
-
// Inspector token key
|
|
4210
|
-
};
|
|
4211
|
-
function makeConnKey(connId) {
|
|
4212
|
-
const encoder = new TextEncoder();
|
|
4213
|
-
const connIdBytes = encoder.encode(connId);
|
|
4214
|
-
const key = new Uint8Array(KEYS.CONN_PREFIX.length + connIdBytes.length);
|
|
4215
|
-
key.set(KEYS.CONN_PREFIX, 0);
|
|
4216
|
-
key.set(connIdBytes, KEYS.CONN_PREFIX.length);
|
|
4217
|
-
return key;
|
|
4218
|
-
}
|
|
4219
|
-
|
|
4220
4406
|
// src/schemas/actor-persist/versioned.ts
|
|
4221
4407
|
import { createVersionedDataHandler as createVersionedDataHandler2 } from "vbare";
|
|
4222
4408
|
|
|
@@ -4936,6 +5122,9 @@ export {
|
|
|
4936
5122
|
CONN_STATE_MANAGER_SYMBOL,
|
|
4937
5123
|
CONN_SEND_MESSAGE_SYMBOL,
|
|
4938
5124
|
Conn,
|
|
5125
|
+
KEYS,
|
|
5126
|
+
makeConnKey,
|
|
5127
|
+
ActorKv,
|
|
4939
5128
|
ActorContext,
|
|
4940
5129
|
ActionContext,
|
|
4941
5130
|
CURRENT_VERSION2,
|
|
@@ -4951,8 +5140,6 @@ export {
|
|
|
4951
5140
|
getValueLength,
|
|
4952
5141
|
inputDataToBuffer,
|
|
4953
5142
|
processMessage,
|
|
4954
|
-
KEYS,
|
|
4955
|
-
makeConnKey,
|
|
4956
5143
|
PATH_CONNECT,
|
|
4957
5144
|
PATH_WEBSOCKET_BASE,
|
|
4958
5145
|
PATH_WEBSOCKET_PREFIX,
|
|
@@ -4999,4 +5186,4 @@ export {
|
|
|
4999
5186
|
buildManagerRouter,
|
|
5000
5187
|
getInitialActorKvState
|
|
5001
5188
|
};
|
|
5002
|
-
//# sourceMappingURL=chunk-
|
|
5189
|
+
//# sourceMappingURL=chunk-PVKUXMOA.js.map
|