@party-stack/node-runtime 0.3.0 → 0.3.1

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.
Files changed (37) hide show
  1. package/lib/NodeFileSystemBlobBytesStore.d.ts +10 -8
  2. package/lib/NodeFileSystemBlobBytesStore.d.ts.map +1 -1
  3. package/lib/NodeFileSystemBlobBytesStore.js +42 -41
  4. package/lib/NodeFileSystemBlobBytesStore.js.map +1 -1
  5. package/lib/NodeSecretStore.d.ts +9 -7
  6. package/lib/NodeSecretStore.d.ts.map +1 -1
  7. package/lib/NodeSecretStore.js +38 -40
  8. package/lib/NodeSecretStore.js.map +1 -1
  9. package/lib/createNodeBrowserAuthentication.d.ts +5 -3
  10. package/lib/createNodeBrowserAuthentication.d.ts.map +1 -1
  11. package/lib/createNodeBrowserAuthentication.js +91 -102
  12. package/lib/createNodeBrowserAuthentication.js.map +1 -1
  13. package/lib/createNodeRuntime.d.ts +4 -2
  14. package/lib/createNodeRuntime.d.ts.map +1 -1
  15. package/lib/createNodeRuntime.js +41 -55
  16. package/lib/createNodeRuntime.js.map +1 -1
  17. package/lib/index.d.ts +2 -2
  18. package/lib/index.js +2 -2
  19. package/package.json +10 -16
  20. package/lib/NodeFileSystemBlobBytesStore.test.d.ts +0 -2
  21. package/lib/NodeFileSystemBlobBytesStore.test.d.ts.map +0 -1
  22. package/lib/NodeFileSystemBlobBytesStore.test.js +0 -38
  23. package/lib/NodeFileSystemBlobBytesStore.test.js.map +0 -1
  24. package/lib/NodeSecretStore.test.d.ts +0 -2
  25. package/lib/NodeSecretStore.test.d.ts.map +0 -1
  26. package/lib/NodeSecretStore.test.js +0 -69
  27. package/lib/NodeSecretStore.test.js.map +0 -1
  28. package/lib/createNodeBrowserAuthentication.test.d.ts +0 -2
  29. package/lib/createNodeBrowserAuthentication.test.d.ts.map +0 -1
  30. package/lib/createNodeBrowserAuthentication.test.js +0 -74
  31. package/lib/createNodeBrowserAuthentication.test.js.map +0 -1
  32. package/lib/createNodeRuntime.test.d.ts +0 -2
  33. package/lib/createNodeRuntime.test.d.ts.map +0 -1
  34. package/lib/createNodeRuntime.test.js +0 -172
  35. package/lib/createNodeRuntime.test.js.map +0 -1
  36. package/lib/index.d.ts.map +0 -1
  37. package/lib/index.js.map +0 -1
@@ -1,67 +1,53 @@
1
- // SQLite persistence revives Temporal values through the registered global constructors.
2
- import "temporal-polyfill/global";
1
+ import { NodeFileSystemBlobBytesStore } from "./NodeFileSystemBlobBytesStore.js";
2
+ import { NodeSecretStore } from "./NodeSecretStore.js";
3
+ import { createNodeBrowserAuthentication } from "./createNodeBrowserAuthentication.js";
3
4
  import { createHash } from "node:crypto";
4
5
  import { mkdir, rm } from "node:fs/promises";
5
- import { homedir } from "node:os";
6
6
  import { join } from "node:path";
7
- import { SingleProcessCoordination } from "@party-stack/coordination";
8
7
  import { defineRuntime } from "@party-stack/runtime";
8
+ import "temporal-polyfill/global";
9
+ import { homedir } from "node:os";
10
+ import { SingleProcessCoordination } from "@party-stack/coordination";
9
11
  import { createNodeSQLitePersistence } from "@tanstack/node-db-sqlite-persistence";
10
12
  import Database from "better-sqlite3";
11
- import { createNodeBrowserAuthentication } from "./createNodeBrowserAuthentication.js";
12
- import { NodeFileSystemBlobBytesStore } from "./NodeFileSystemBlobBytesStore.js";
13
- import { NodeSecretStore } from "./NodeSecretStore.js";
13
+ //#region src/createNodeRuntime.ts
14
14
  function defaultDataDirectory() {
15
- if (process.platform === "darwin") {
16
- return join(homedir(), "Library", "Application Support", "party-stack");
17
- }
18
- if (process.platform === "win32") {
19
- return join(process.env.LOCALAPPDATA ?? join(homedir(), "AppData", "Local"), "party-stack");
20
- }
21
- return join(process.env.XDG_DATA_HOME ?? join(homedir(), ".local", "share"), "party-stack");
15
+ if (process.platform === "darwin") return join(homedir(), "Library", "Application Support", "party-stack");
16
+ if (process.platform === "win32") return join(process.env.LOCALAPPDATA ?? join(homedir(), "AppData", "Local"), "party-stack");
17
+ return join(process.env.XDG_DATA_HOME ?? join(homedir(), ".local", "share"), "party-stack");
22
18
  }
23
19
  function runtimeId(owner, namespace) {
24
- return createHash("sha256")
25
- .update(JSON.stringify([owner, namespace]))
26
- .digest("hex");
20
+ return createHash("sha256").update(JSON.stringify([owner, namespace])).digest("hex");
27
21
  }
28
- export function createNodeRuntimeWithOptions(options) {
29
- return defineRuntime(async (owner, namespace) => {
30
- const scope = `party-stack:${owner}:${namespace}`;
31
- const directory = join(options.dataDirectory ?? defaultDataDirectory(), runtimeId(owner, namespace));
32
- await mkdir(directory, {
33
- recursive: true,
34
- });
35
- const database = new Database(join(directory, "collections.sqlite"));
36
- const persistence = createNodeSQLitePersistence({
37
- database,
38
- });
39
- const coordination = new SingleProcessCoordination({
40
- scope,
41
- });
42
- const blobBytes = new NodeFileSystemBlobBytesStore({
43
- directory: join(directory, "blobs"),
44
- });
45
- return {
46
- owner,
47
- namespace,
48
- blobBytes,
49
- browserAuthentication: createNodeBrowserAuthentication(),
50
- secrets: new NodeSecretStore({
51
- service: `party-stack:${runtimeId(owner, namespace)}:secrets`,
52
- }),
53
- coordination,
54
- persistence,
55
- cleanup: async () => {
56
- await coordination.close();
57
- database.close();
58
- },
59
- destroy: () => rm(directory, {
60
- recursive: true,
61
- force: true,
62
- }),
63
- };
64
- });
22
+ function createNodeRuntimeWithOptions(options) {
23
+ return defineRuntime(async (owner, namespace) => {
24
+ const scope = `party-stack:${owner}:${namespace}`;
25
+ const directory = join(options.dataDirectory ?? defaultDataDirectory(), runtimeId(owner, namespace));
26
+ await mkdir(directory, { recursive: true });
27
+ const database = new Database(join(directory, "collections.sqlite"));
28
+ const persistence = createNodeSQLitePersistence({ database });
29
+ const coordination = new SingleProcessCoordination({ scope });
30
+ return {
31
+ owner,
32
+ namespace,
33
+ blobBytes: new NodeFileSystemBlobBytesStore({ directory: join(directory, "blobs") }),
34
+ browserAuthentication: createNodeBrowserAuthentication(),
35
+ secrets: new NodeSecretStore({ service: `party-stack:${runtimeId(owner, namespace)}:secrets` }),
36
+ coordination,
37
+ persistence,
38
+ cleanup: async () => {
39
+ await coordination.close();
40
+ database.close();
41
+ },
42
+ destroy: () => rm(directory, {
43
+ recursive: true,
44
+ force: true
45
+ })
46
+ };
47
+ });
65
48
  }
66
- export const createNodeRuntime = createNodeRuntimeWithOptions({});
49
+ const createNodeRuntime = createNodeRuntimeWithOptions({});
50
+ //#endregion
51
+ export { createNodeRuntime, createNodeRuntimeWithOptions };
52
+
67
53
  //# sourceMappingURL=createNodeRuntime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeRuntime.js","sourceRoot":"","sources":["../src/createNodeRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createNodeRuntime.js","names":[],"sources":["../src/createNodeRuntime.ts"],"sourcesContent":["// SQLite persistence revives Temporal values through the registered global constructors.\nimport \"temporal-polyfill/global\";\nimport { createHash } from \"node:crypto\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { SingleProcessCoordination } from \"@party-stack/coordination\";\nimport { defineRuntime, type RuntimeAdapterProvider } from \"@party-stack/runtime\";\nimport { createNodeSQLitePersistence } from \"@tanstack/node-db-sqlite-persistence\";\nimport Database from \"better-sqlite3\";\nimport { createNodeBrowserAuthentication } from \"./createNodeBrowserAuthentication.js\";\nimport { NodeFileSystemBlobBytesStore } from \"./NodeFileSystemBlobBytesStore.js\";\nimport { NodeSecretStore } from \"./NodeSecretStore.js\";\n\nexport interface CreateNodeRuntimeOptions {\n dataDirectory?: string;\n}\n\nfunction defaultDataDirectory(): string {\n if (process.platform === \"darwin\") {\n return join(homedir(), \"Library\", \"Application Support\", \"party-stack\");\n }\n if (process.platform === \"win32\") {\n return join(process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"), \"party-stack\");\n }\n return join(process.env.XDG_DATA_HOME ?? join(homedir(), \".local\", \"share\"), \"party-stack\");\n}\n\nfunction runtimeId(owner: string, namespace: string): string {\n return createHash(\"sha256\")\n .update(JSON.stringify([owner, namespace]))\n .digest(\"hex\");\n}\n\nexport function createNodeRuntimeWithOptions(options: CreateNodeRuntimeOptions): RuntimeAdapterProvider {\n return defineRuntime(async (owner, namespace) => {\n const scope = `party-stack:${owner}:${namespace}`;\n const directory = join(options.dataDirectory ?? defaultDataDirectory(), runtimeId(owner, namespace));\n await mkdir(directory, {\n recursive: true,\n });\n\n const database = new Database(join(directory, \"collections.sqlite\"));\n const persistence = createNodeSQLitePersistence({\n database,\n });\n const coordination = new SingleProcessCoordination({\n scope,\n });\n const blobBytes = new NodeFileSystemBlobBytesStore({\n directory: join(directory, \"blobs\"),\n });\n\n return {\n owner,\n namespace,\n blobBytes,\n browserAuthentication: createNodeBrowserAuthentication(),\n secrets: new NodeSecretStore({\n service: `party-stack:${runtimeId(owner, namespace)}:secrets`,\n }),\n coordination,\n persistence,\n cleanup: async () => {\n await coordination.close();\n database.close();\n },\n destroy: () =>\n rm(directory, {\n recursive: true,\n force: true,\n }),\n };\n });\n}\n\nexport const createNodeRuntime = createNodeRuntimeWithOptions({});\n"],"mappings":";;;;;;;;;;;;;AAkBA,SAAS,uBAA+B;CACpC,IAAI,QAAQ,aAAa,UACrB,OAAO,KAAK,QAAQ,GAAG,WAAW,uBAAuB,aAAa;CAE1E,IAAI,QAAQ,aAAa,SACrB,OAAO,KAAK,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,GAAG,WAAW,OAAO,GAAG,aAAa;CAE9F,OAAO,KAAK,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,GAAG,UAAU,OAAO,GAAG,aAAa;AAC9F;AAEA,SAAS,UAAU,OAAe,WAA2B;CACzD,OAAO,WAAW,QAAQ,CAAC,CACtB,OAAO,KAAK,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAC1C,OAAO,KAAK;AACrB;AAEA,SAAgB,6BAA6B,SAA2D;CACpG,OAAO,cAAc,OAAO,OAAO,cAAc;EAC7C,MAAM,QAAQ,eAAe,MAAM,GAAG;EACtC,MAAM,YAAY,KAAK,QAAQ,iBAAiB,qBAAqB,GAAG,UAAU,OAAO,SAAS,CAAC;EACnG,MAAM,MAAM,WAAW,EACnB,WAAW,KACf,CAAC;EAED,MAAM,WAAW,IAAI,SAAS,KAAK,WAAW,oBAAoB,CAAC;EACnE,MAAM,cAAc,4BAA4B,EAC5C,SACJ,CAAC;EACD,MAAM,eAAe,IAAI,0BAA0B,EAC/C,MACJ,CAAC;EAKD,OAAO;GACH;GACA;GACA,WAAA,IAPkB,6BAA6B,EAC/C,WAAW,KAAK,WAAW,OAAO,EACtC,CAKY;GACR,uBAAuB,gCAAgC;GACvD,SAAS,IAAI,gBAAgB,EACzB,SAAS,eAAe,UAAU,OAAO,SAAS,EAAE,UACxD,CAAC;GACD;GACA;GACA,SAAS,YAAY;IACjB,MAAM,aAAa,MAAM;IACzB,SAAS,MAAM;GACnB;GACA,eACI,GAAG,WAAW;IACV,WAAW;IACX,OAAO;GACX,CAAC;EACT;CACJ,CAAC;AACL;AAEA,MAAa,oBAAoB,6BAA6B,CAAC,CAAC"}
package/lib/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { createNodeRuntime, createNodeRuntimeWithOptions, type CreateNodeRuntimeOptions, } from "./createNodeRuntime.js";
2
- //# sourceMappingURL=index.d.ts.map
1
+ import { CreateNodeRuntimeOptions, createNodeRuntime, createNodeRuntimeWithOptions } from "./createNodeRuntime.js";
2
+ export { type CreateNodeRuntimeOptions, createNodeRuntime, createNodeRuntimeWithOptions };
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { createNodeRuntime, createNodeRuntimeWithOptions, } from "./createNodeRuntime.js";
2
- //# sourceMappingURL=index.js.map
1
+ import { createNodeRuntime, createNodeRuntimeWithOptions } from "./createNodeRuntime.js";
2
+ export { createNodeRuntime, createNodeRuntimeWithOptions };
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@party-stack/node-runtime",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
+ "files": [
5
+ "lib"
6
+ ],
4
7
  "type": "module",
5
8
  "exports": {
6
9
  ".": {
@@ -8,32 +11,23 @@
8
11
  "default": "./lib/index.js"
9
12
  }
10
13
  },
11
- "files": [
12
- "lib"
13
- ],
14
14
  "dependencies": {
15
15
  "@hono/node-server": "^2.1.1",
16
16
  "@tanstack/node-db-sqlite-persistence": "0.2.30",
17
- "better-sqlite3": "^12.4.6",
17
+ "better-sqlite3": "^12.9.0",
18
18
  "cross-keychain": "^1.1.0",
19
19
  "hono": "^4.13.5",
20
20
  "open": "^11.0.1",
21
21
  "temporal-polyfill": "^0.3.0",
22
- "@party-stack/coordination": "0.3.0",
23
- "@party-stack/runtime": "0.4.0"
22
+ "@party-stack/coordination": "0.3.1",
23
+ "@party-stack/runtime": "0.4.1"
24
24
  },
25
25
  "devDependencies": {
26
- "@bobbyfidz/universal-build-config": "^0.1.1",
27
26
  "@tanstack/db-sqlite-persistence-core": "0.4.5",
28
27
  "@types/better-sqlite3": "^7.6.13",
29
28
  "@types/node": "^24.10.1",
30
- "eslint": "^9.25.0",
31
- "typescript": "~5.8.3",
32
- "vitest": "^3.1.1"
33
- },
34
- "scripts": {
35
- "build": "tsc",
36
- "lint": "eslint",
37
- "test": "vitest run"
29
+ "typescript": "~7.0.2",
30
+ "vite-plus": "1.1.0",
31
+ "@party-stack/build-config": "0.1.1"
38
32
  }
39
33
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=NodeFileSystemBlobBytesStore.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeFileSystemBlobBytesStore.test.d.ts","sourceRoot":"","sources":["../src/NodeFileSystemBlobBytesStore.test.ts"],"names":[],"mappings":""}
@@ -1,38 +0,0 @@
1
- import { mkdtemp } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterEach, describe, expect, it } from "vitest";
5
- import { NodeFileSystemBlobBytesStore } from "./NodeFileSystemBlobBytesStore.js";
6
- const directories = [];
7
- afterEach(async () => {
8
- await Promise.all(directories.splice(0).map(async (directory) => {
9
- const store = new NodeFileSystemBlobBytesStore({
10
- directory,
11
- });
12
- await store.clear();
13
- }));
14
- });
15
- describe("NodeFileSystemBlobBytesStore", () => {
16
- it("round-trips bytes and treats ids as opaque values", async () => {
17
- const directory = await mkdtemp(join(tmpdir(), "party-stack-blobs-"));
18
- directories.push(directory);
19
- const store = new NodeFileSystemBlobBytesStore({
20
- directory,
21
- });
22
- await store.write("../../outside", new Blob(["hello"]));
23
- await expect((await store.read("../../outside")).text()).resolves.toBe("hello");
24
- await expect(store.read("outside")).rejects.toThrow('Blob bytes not found for "outside".');
25
- });
26
- it("deletes missing and existing blobs idempotently", async () => {
27
- const directory = await mkdtemp(join(tmpdir(), "party-stack-blobs-"));
28
- directories.push(directory);
29
- const store = new NodeFileSystemBlobBytesStore({
30
- directory,
31
- });
32
- await store.write("one", new Blob(["one"]));
33
- await store.delete("one");
34
- await store.delete("one");
35
- await expect(store.read("one")).rejects.toThrow('Blob bytes not found for "one".');
36
- });
37
- });
38
- //# sourceMappingURL=NodeFileSystemBlobBytesStore.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeFileSystemBlobBytesStore.test.js","sourceRoot":"","sources":["../src/NodeFileSystemBlobBytesStore.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,MAAM,WAAW,GAAa,EAAE,CAAC;AAEjC,SAAS,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,CAAC,GAAG,CACb,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,IAAI,4BAA4B,CAAC;YAC3C,SAAS;SACZ,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,CACL,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACtE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,4BAA4B,CAAC;YAC3C,SAAS;SACZ,CAAC,CAAC;QAEH,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAExD,MAAM,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChF,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACtE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,4BAA4B,CAAC;YAC3C,SAAS;SACZ,CAAC,CAAC;QAEH,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=NodeSecretStore.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeSecretStore.test.d.ts","sourceRoot":"","sources":["../src/NodeSecretStore.test.ts"],"names":[],"mappings":""}
@@ -1,69 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from "vitest";
2
- import { NodeSecretStore } from "./NodeSecretStore.js";
3
- const keychain = vi.hoisted(() => ({
4
- getAllBackends: vi.fn(),
5
- }));
6
- vi.mock("cross-keychain", () => keychain);
7
- function memoryBackend(id = "native-macos") {
8
- const values = new Map();
9
- return {
10
- id,
11
- name: id,
12
- priority: 10,
13
- getPassword(service, account) {
14
- return Promise.resolve(values.get(`${service}:${account}`) ?? null);
15
- },
16
- setPassword(service, account, password) {
17
- values.set(`${service}:${account}`, password);
18
- return Promise.resolve();
19
- },
20
- deletePassword(service, account) {
21
- values.delete(`${service}:${account}`);
22
- return Promise.resolve();
23
- },
24
- getCredential() {
25
- return Promise.resolve(null);
26
- },
27
- withProperties() {
28
- return this;
29
- },
30
- diagnose() {
31
- return Promise.resolve({});
32
- },
33
- };
34
- }
35
- describe("NodeSecretStore", () => {
36
- beforeEach(() => {
37
- keychain.getAllBackends.mockReset();
38
- });
39
- it("namespaces and hashes keychain accounts", async () => {
40
- const backend = memoryBackend();
41
- keychain.getAllBackends.mockResolvedValue([backend]);
42
- const setPassword = vi.spyOn(backend, "setPassword");
43
- const store = new NodeSecretStore({
44
- service: "party-stack:test:secrets",
45
- });
46
- await store.set("tokens/client:id", "secret");
47
- expect(setPassword).toHaveBeenCalledWith(expect.stringMatching(/^party-stack\.[a-f0-9]{64}$/), expect.stringMatching(/^party-stack\.[a-f0-9]{64}$/), "secret");
48
- await expect(store.get("tokens/client:id")).resolves.toBe("secret");
49
- await store.delete("tokens/client:id");
50
- await store.delete("tokens/client:id");
51
- });
52
- it("rejects file-only keychain availability", async () => {
53
- keychain.getAllBackends.mockResolvedValue([memoryBackend("file")]);
54
- const store = new NodeSecretStore({
55
- service: "party-stack:test:secrets",
56
- });
57
- await expect(store.get("token")).rejects.toThrow("No OS keychain is available");
58
- });
59
- it("selects the Linux Secret Service lazily", async () => {
60
- keychain.getAllBackends.mockResolvedValue([memoryBackend("secret-service")]);
61
- const store = new NodeSecretStore({
62
- service: "party-stack:test:secrets",
63
- });
64
- expect(keychain.getAllBackends).not.toHaveBeenCalled();
65
- await expect(store.get("token")).resolves.toBeUndefined();
66
- expect(keychain.getAllBackends).toHaveBeenCalledOnce();
67
- });
68
- });
69
- //# sourceMappingURL=NodeSecretStore.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeSecretStore.test.js","sourceRoot":"","sources":["../src/NodeSecretStore.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=createNodeBrowserAuthentication.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createNodeBrowserAuthentication.test.d.ts","sourceRoot":"","sources":["../src/createNodeBrowserAuthentication.test.ts"],"names":[],"mappings":""}
@@ -1,74 +0,0 @@
1
- import { createServer } from "node:net";
2
- import { BrowserAuthenticationCancelledError } from "@party-stack/runtime";
3
- import { describe, expect, it, vi } from "vitest";
4
- import { createNodeBrowserAuthentication } from "./createNodeBrowserAuthentication.js";
5
- async function availablePort() {
6
- const server = createServer();
7
- await new Promise((resolve, reject) => {
8
- server.once("error", reject);
9
- server.listen(0, "127.0.0.1", resolve);
10
- });
11
- const address = server.address();
12
- const port = typeof address === "object" && address ? address.port : 0;
13
- await new Promise((resolve, reject) => {
14
- server.close((error) => {
15
- if (error)
16
- reject(error);
17
- else
18
- resolve();
19
- });
20
- });
21
- return port;
22
- }
23
- describe("createNodeBrowserAuthentication", () => {
24
- it("opens the browser and resolves the loopback callback", async () => {
25
- const port = await availablePort();
26
- const redirectUrl = `http://127.0.0.1:${port}/oauth/callback`;
27
- let responseText;
28
- const openUrl = vi.fn(async (authorizationUrl) => {
29
- expect(authorizationUrl).toBe("https://auth.example/authorize");
30
- const response = await fetch(`${redirectUrl}?code=code&state=state`);
31
- responseText = await response.text();
32
- });
33
- const authentication = createNodeBrowserAuthentication({
34
- openUrl,
35
- });
36
- const session = authentication.start({
37
- redirectUrl,
38
- });
39
- await expect(session.open("https://auth.example/authorize")).resolves.toEqual({
40
- callbackUrl: `${redirectUrl}?code=code&state=state`,
41
- });
42
- await vi.waitFor(() => {
43
- expect(responseText).toContain("window.close()");
44
- });
45
- expect(openUrl).toHaveBeenCalledOnce();
46
- });
47
- it("rejects a pending session when closed", async () => {
48
- const port = await availablePort();
49
- let opened;
50
- const didOpen = new Promise((resolve) => {
51
- opened = resolve;
52
- });
53
- const authentication = createNodeBrowserAuthentication({
54
- openUrl: () => {
55
- opened?.();
56
- return Promise.resolve();
57
- },
58
- });
59
- const session = authentication.start({
60
- redirectUrl: `http://127.0.0.1:${port}/callback`,
61
- });
62
- const result = session.open("https://auth.example/authorize");
63
- await didOpen;
64
- await session.close();
65
- await expect(result).rejects.toBeInstanceOf(BrowserAuthenticationCancelledError);
66
- });
67
- it("rejects non-loopback redirects", () => {
68
- const authentication = createNodeBrowserAuthentication();
69
- expect(() => authentication.start({
70
- redirectUrl: "https://app.example/callback",
71
- })).toThrow("requires an http:// loopback redirect URL");
72
- });
73
- });
74
- //# sourceMappingURL=createNodeBrowserAuthentication.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createNodeBrowserAuthentication.test.js","sourceRoot":"","sources":["../src/createNodeBrowserAuthentication.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=createNodeRuntime.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createNodeRuntime.test.d.ts","sourceRoot":"","sources":["../src/createNodeRuntime.test.ts"],"names":[],"mappings":""}
@@ -1,172 +0,0 @@
1
- import { mkdtemp, rm } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { createLocalCollection } from "@party-stack/runtime";
5
- import { SQLiteCorePersistenceAdapter } from "@tanstack/db-sqlite-persistence-core";
6
- import { Temporal } from "temporal-polyfill";
7
- import { afterEach, describe, expect, it } from "vitest";
8
- import { createNodeRuntimeWithOptions } from "./createNodeRuntime.js";
9
- const directories = [];
10
- afterEach(async () => {
11
- await Promise.all(directories.splice(0).map((directory) => rm(directory, {
12
- recursive: true,
13
- force: true,
14
- })));
15
- });
16
- function createItems(runtime) {
17
- return createLocalCollection({
18
- name: "items",
19
- getKey: (item) => item.id,
20
- runtime,
21
- schemaVersion: 1,
22
- });
23
- }
24
- describe("createNodeRuntime", () => {
25
- it("reopens raw Temporal rows, metadata, and replay without an application codec", async () => {
26
- const directory = await mkdtemp(join(tmpdir(), "party-stack-temporal-"));
27
- directories.push(directory);
28
- const provider = createNodeRuntimeWithOptions({ dataDirectory: directory });
29
- const instant = Temporal.Instant.from("2026-10-07T12:00:00.123456789Z");
30
- const date = Temporal.PlainDate.from("2026-10-07");
31
- const open = (runtime) => createLocalCollection({
32
- name: "temporal", getKey: (item) => item.id, runtime, schemaVersion: 1,
33
- });
34
- const firstRuntime = await provider("owner", "temporal");
35
- const first = open(firstRuntime);
36
- const collectionId = first.id;
37
- try {
38
- await first.preload();
39
- await first.insert({ id: "one", instant, nested: { dates: [date] } }).isPersisted.promise;
40
- await first.cleanup();
41
- const adapter = firstRuntime.persistence.adapter;
42
- const position = await adapter.loadResumeSnapshot(collectionId);
43
- await adapter.applyCommittedTx(collectionId, {
44
- txId: "temporal-metadata", term: position.latestTerm,
45
- seq: position.latestSeq + 1, rowVersion: position.latestRowVersion + 1,
46
- mutations: [],
47
- rowMetadataMutations: [{ type: "set", key: "one", value: { date } }],
48
- collectionMetadataMutations: [{ type: "set", key: "cursor", value: { instant } }],
49
- });
50
- }
51
- finally {
52
- await first.cleanup();
53
- await firstRuntime.cleanup?.();
54
- }
55
- const secondRuntime = await provider("owner", "temporal");
56
- const second = open(secondRuntime);
57
- try {
58
- await second.preload();
59
- expect(second.get("one")?.instant).toBeInstanceOf(Temporal.Instant);
60
- expect(second.get("one")?.instant.epochNanoseconds).toBe(instant.epochNanoseconds);
61
- expect(second.get("one")?.nested.dates[0]).toBeInstanceOf(Temporal.PlainDate);
62
- expect(second.get("one")?.nested.dates[0]?.toString()).toBe(date.toString());
63
- const adapter = secondRuntime.persistence.adapter;
64
- const snapshot = await adapter.loadResumeSnapshot(collectionId);
65
- const rowMetadata = snapshot.rows[0]?.metadata;
66
- expect(rowMetadata.date).toBeInstanceOf(Temporal.PlainDate);
67
- expect(String(rowMetadata.date)).toBe(date.toString());
68
- const cursor = snapshot.collectionMetadata.find((entry) => entry.key === "cursor")?.value;
69
- expect(cursor.instant).toBeInstanceOf(Temporal.Instant);
70
- expect(String(cursor.instant)).toBe(instant.toString());
71
- if (!(adapter instanceof SQLiteCorePersistenceAdapter))
72
- throw new Error("Expected SQLite persistence");
73
- const replay = await adapter.pullSince(collectionId, 0);
74
- expect(replay.requiresFullReload).toBe(false);
75
- if (!replay.requiresFullReload) {
76
- const row = replay.deltas?.flatMap((delta) => delta.changedRows)[0];
77
- expect(row?.value.instant).toBeInstanceOf(Temporal.Instant);
78
- expect(String(row?.value.instant)).toBe(instant.toString());
79
- const rowMetadataDelta = replay.deltas?.flatMap((delta) => delta.rowMetadataMutations)
80
- .find((mutation) => mutation.type === "set" && mutation.key === "one");
81
- const metadata = rowMetadataDelta?.type === "set" ? rowMetadataDelta.value : undefined;
82
- expect(metadata?.date).toBeInstanceOf(Temporal.PlainDate);
83
- expect(String(metadata?.date)).toBe(date.toString());
84
- const cursorDelta = replay.deltas?.flatMap((delta) => delta.collectionMetadataMutations)
85
- .find((mutation) => mutation.type === "set" && mutation.key === "cursor");
86
- const replayCursor = cursorDelta?.type === "set" ? cursorDelta.value : undefined;
87
- expect(replayCursor?.instant).toBeInstanceOf(Temporal.Instant);
88
- expect(String(replayCursor?.instant)).toBe(instant.toString());
89
- }
90
- }
91
- finally {
92
- await second.cleanup();
93
- await secondRuntime.cleanup?.();
94
- }
95
- });
96
- it("reopens persisted SQLite collections", async () => {
97
- const directory = await mkdtemp(join(tmpdir(), "party-stack-runtime-"));
98
- directories.push(directory);
99
- const provider = createNodeRuntimeWithOptions({
100
- dataDirectory: directory,
101
- });
102
- const firstRuntime = await provider("owner", "namespace");
103
- const first = createItems(firstRuntime);
104
- await first.preload();
105
- await first.insert({
106
- id: "one",
107
- title: "Persisted",
108
- }).isPersisted.promise;
109
- await first.cleanup();
110
- await firstRuntime.cleanup?.();
111
- const secondRuntime = await provider("owner", "namespace");
112
- const second = createItems(secondRuntime);
113
- await second.preload();
114
- expect(second.get("one")).toMatchObject({
115
- id: "one",
116
- title: "Persisted",
117
- });
118
- await second.cleanup();
119
- await secondRuntime.destroy?.();
120
- });
121
- it("resolves independent collection schemas on one database and preserves local data on mismatch", async () => {
122
- const directory = await mkdtemp(join(tmpdir(), "party-stack-runtime-"));
123
- directories.push(directory);
124
- const runtime = await createNodeRuntimeWithOptions({ dataDirectory: directory })("owner", "schemas");
125
- const open = (name, schemaVersion) => createLocalCollection({
126
- name, schemaVersion, runtime, getKey: (item) => item.id,
127
- });
128
- const tasks = open("tasks", 2);
129
- const settings = open("settings", 7);
130
- try {
131
- await Promise.all([tasks.preload(), settings.preload()]);
132
- await tasks.insert({ id: "task", title: "Task" }).isPersisted.promise;
133
- await settings.insert({ id: "setting", title: "Setting" }).isPersisted.promise;
134
- const resolve = runtime.persistence.resolvePersistenceForCollection;
135
- const current = resolve({ collectionId: tasks.id, mode: "sync-absent", schemaVersion: 2 }).adapter;
136
- const incompatible = resolve({ collectionId: tasks.id, mode: "sync-absent", schemaVersion: 3 }).adapter;
137
- await tasks.cleanup();
138
- await expect(incompatible.loadResumeSnapshot(tasks.id)).rejects.toThrow("Schema version mismatch");
139
- expect((await current.loadResumeSnapshot(tasks.id)).rows).toHaveLength(1);
140
- await settings.insert({ id: "other", title: "Still active" }).isPersisted.promise;
141
- const reopened = open("tasks", 2);
142
- try {
143
- await reopened.preload();
144
- expect(reopened.get("task")?.title).toBe("Task");
145
- }
146
- finally {
147
- await reopened.cleanup();
148
- }
149
- }
150
- finally {
151
- await tasks.cleanup();
152
- await settings.cleanup();
153
- await runtime.cleanup?.();
154
- }
155
- });
156
- it("isolates runtime namespaces", async () => {
157
- const directory = await mkdtemp(join(tmpdir(), "party-stack-runtime-"));
158
- directories.push(directory);
159
- const provider = createNodeRuntimeWithOptions({
160
- dataDirectory: directory,
161
- });
162
- const first = await provider("owner", "one");
163
- const second = await provider("owner", "two");
164
- await first.blobBytes.write("blob", new Blob(["first"]));
165
- await second.blobBytes.write("blob", new Blob(["second"]));
166
- await expect((await first.blobBytes.read("blob")).text()).resolves.toBe("first");
167
- await expect((await second.blobBytes.read("blob")).text()).resolves.toBe("second");
168
- await first.destroy?.();
169
- await second.destroy?.();
170
- });
171
- });
172
- //# sourceMappingURL=createNodeRuntime.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createNodeRuntime.test.js","sourceRoot":"","sources":["../src/createNodeRuntime.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,4BAA4B,EAC5B,KAAK,wBAAwB,GAChC,MAAM,wBAAwB,CAAC"}