@opendatalabs/personal-server-ts-server 1.33.8 → 1.34.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 (167) hide show
  1. package/dist/__fixtures__/bound-record-store.d.ts +19 -0
  2. package/dist/__fixtures__/bound-record-store.d.ts.map +1 -0
  3. package/dist/__fixtures__/bound-record-store.js +60 -0
  4. package/dist/__fixtures__/bound-record-store.js.map +1 -0
  5. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts +41 -0
  6. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts.map +1 -0
  7. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js +34 -0
  8. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js.map +1 -0
  9. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts +112 -0
  10. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts.map +1 -0
  11. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js +226 -0
  12. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js.map +1 -0
  13. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts +135 -0
  14. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts.map +1 -0
  15. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js +21 -0
  16. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js.map +1 -0
  17. package/dist/api-auth.d.ts +18 -2
  18. package/dist/api-auth.d.ts.map +1 -1
  19. package/dist/api-auth.js +114 -22
  20. package/dist/api-auth.js.map +1 -1
  21. package/dist/app.d.ts +60 -1
  22. package/dist/app.d.ts.map +1 -1
  23. package/dist/app.js +139 -1
  24. package/dist/app.js.map +1 -1
  25. package/dist/bootstrap.d.ts +10 -0
  26. package/dist/bootstrap.d.ts.map +1 -1
  27. package/dist/bootstrap.js +359 -8
  28. package/dist/bootstrap.js.map +1 -1
  29. package/dist/enclave-main.d.ts +4 -0
  30. package/dist/enclave-main.d.ts.map +1 -1
  31. package/dist/enclave-main.js +152 -1
  32. package/dist/enclave-main.js.map +1 -1
  33. package/dist/middleware/body-limit.d.ts +1 -1
  34. package/dist/middleware/body-limit.d.ts.map +1 -1
  35. package/dist/middleware/body-limit.js +8 -3
  36. package/dist/middleware/body-limit.js.map +1 -1
  37. package/dist/middleware/cors.d.ts.map +1 -1
  38. package/dist/middleware/cors.js +1 -0
  39. package/dist/middleware/cors.js.map +1 -1
  40. package/dist/package.json +9 -1
  41. package/dist/pdpp/bootstrap.d.ts +72 -0
  42. package/dist/pdpp/bootstrap.d.ts.map +1 -0
  43. package/dist/pdpp/bootstrap.js +270 -0
  44. package/dist/pdpp/bootstrap.js.map +1 -0
  45. package/dist/pdpp/chain-enforcement.d.ts +95 -0
  46. package/dist/pdpp/chain-enforcement.d.ts.map +1 -0
  47. package/dist/pdpp/chain-enforcement.js +145 -0
  48. package/dist/pdpp/chain-enforcement.js.map +1 -0
  49. package/dist/pdpp/client-document-fetch.d.ts +63 -0
  50. package/dist/pdpp/client-document-fetch.d.ts.map +1 -0
  51. package/dist/pdpp/client-document-fetch.js +254 -0
  52. package/dist/pdpp/client-document-fetch.js.map +1 -0
  53. package/dist/pdpp/declaration-registry.d.ts +83 -0
  54. package/dist/pdpp/declaration-registry.d.ts.map +1 -0
  55. package/dist/pdpp/declaration-registry.js +251 -0
  56. package/dist/pdpp/declaration-registry.js.map +1 -0
  57. package/dist/pdpp/deployment.d.ts +70 -0
  58. package/dist/pdpp/deployment.d.ts.map +1 -0
  59. package/dist/pdpp/deployment.js +104 -0
  60. package/dist/pdpp/deployment.js.map +1 -0
  61. package/dist/pdpp/record-schema.d.ts +2 -0
  62. package/dist/pdpp/record-schema.d.ts.map +1 -0
  63. package/dist/pdpp/record-schema.js +2 -0
  64. package/dist/pdpp/record-schema.js.map +1 -0
  65. package/dist/pdpp/records-bootstrap.d.ts +111 -0
  66. package/dist/pdpp/records-bootstrap.d.ts.map +1 -0
  67. package/dist/pdpp/records-bootstrap.js +353 -0
  68. package/dist/pdpp/records-bootstrap.js.map +1 -0
  69. package/dist/pdpp/source-id-compat.d.ts +5 -0
  70. package/dist/pdpp/source-id-compat.d.ts.map +1 -0
  71. package/dist/pdpp/source-id-compat.js +16 -0
  72. package/dist/pdpp/source-id-compat.js.map +1 -0
  73. package/dist/pdpp/test-connections.d.ts +6 -0
  74. package/dist/pdpp/test-connections.d.ts.map +1 -0
  75. package/dist/pdpp/test-connections.js +37 -0
  76. package/dist/pdpp/test-connections.js.map +1 -0
  77. package/dist/routes/auth-device.d.ts.map +1 -1
  78. package/dist/routes/auth-device.js +3 -0
  79. package/dist/routes/auth-device.js.map +1 -1
  80. package/dist/routes/chunked-scope-import.d.ts +41 -0
  81. package/dist/routes/chunked-scope-import.d.ts.map +1 -0
  82. package/dist/routes/chunked-scope-import.js +901 -0
  83. package/dist/routes/chunked-scope-import.js.map +1 -0
  84. package/dist/routes/data.d.ts +23 -1
  85. package/dist/routes/data.d.ts.map +1 -1
  86. package/dist/routes/data.js +112 -1
  87. package/dist/routes/data.js.map +1 -1
  88. package/dist/routes/grants.d.ts.map +1 -1
  89. package/dist/routes/grants.js +2 -0
  90. package/dist/routes/grants.js.map +1 -1
  91. package/dist/routes/mcp.d.ts.map +1 -1
  92. package/dist/routes/mcp.js +3 -0
  93. package/dist/routes/mcp.js.map +1 -1
  94. package/dist/routes/pdpp-auth.d.ts +157 -0
  95. package/dist/routes/pdpp-auth.d.ts.map +1 -0
  96. package/dist/routes/pdpp-auth.js +953 -0
  97. package/dist/routes/pdpp-auth.js.map +1 -0
  98. package/dist/routes/pdpp-blobs.d.ts +26 -0
  99. package/dist/routes/pdpp-blobs.d.ts.map +1 -0
  100. package/dist/routes/pdpp-blobs.js +179 -0
  101. package/dist/routes/pdpp-blobs.js.map +1 -0
  102. package/dist/routes/pdpp-connections.d.ts +28 -0
  103. package/dist/routes/pdpp-connections.d.ts.map +1 -0
  104. package/dist/routes/pdpp-connections.js +144 -0
  105. package/dist/routes/pdpp-connections.js.map +1 -0
  106. package/dist/routes/pdpp-declarations.d.ts +58 -0
  107. package/dist/routes/pdpp-declarations.d.ts.map +1 -0
  108. package/dist/routes/pdpp-declarations.js +94 -0
  109. package/dist/routes/pdpp-declarations.js.map +1 -0
  110. package/dist/routes/pdpp-instance-bindings.d.ts +26 -0
  111. package/dist/routes/pdpp-instance-bindings.d.ts.map +1 -0
  112. package/dist/routes/pdpp-instance-bindings.js +124 -0
  113. package/dist/routes/pdpp-instance-bindings.js.map +1 -0
  114. package/dist/routes/pdpp-records.d.ts +158 -0
  115. package/dist/routes/pdpp-records.d.ts.map +1 -0
  116. package/dist/routes/pdpp-records.js +1537 -0
  117. package/dist/routes/pdpp-records.js.map +1 -0
  118. package/dist/routes/pdpp-well-known.d.ts +13 -0
  119. package/dist/routes/pdpp-well-known.d.ts.map +1 -0
  120. package/dist/routes/pdpp-well-known.js +20 -0
  121. package/dist/routes/pdpp-well-known.js.map +1 -0
  122. package/dist/storage/declaration-witness.d.ts +56 -0
  123. package/dist/storage/declaration-witness.d.ts.map +1 -0
  124. package/dist/storage/declaration-witness.js +273 -0
  125. package/dist/storage/declaration-witness.js.map +1 -0
  126. package/dist/storage/hierarchy.d.ts +25 -1
  127. package/dist/storage/hierarchy.d.ts.map +1 -1
  128. package/dist/storage/hierarchy.js +210 -16
  129. package/dist/storage/hierarchy.js.map +1 -1
  130. package/dist/storage/import-operations.d.ts +11 -0
  131. package/dist/storage/import-operations.d.ts.map +1 -0
  132. package/dist/storage/import-operations.js +261 -0
  133. package/dist/storage/import-operations.js.map +1 -0
  134. package/dist/storage/index-manager.d.ts +24 -2
  135. package/dist/storage/index-manager.d.ts.map +1 -1
  136. package/dist/storage/index-manager.js +279 -30
  137. package/dist/storage/index-manager.js.map +1 -1
  138. package/dist/storage/index-schema.d.ts +1 -1
  139. package/dist/storage/index-schema.d.ts.map +1 -1
  140. package/dist/storage/index-schema.js +189 -8
  141. package/dist/storage/index-schema.js.map +1 -1
  142. package/dist/storage/legacy-scope-authority.d.ts +14 -0
  143. package/dist/storage/legacy-scope-authority.d.ts.map +1 -0
  144. package/dist/storage/legacy-scope-authority.js +298 -0
  145. package/dist/storage/legacy-scope-authority.js.map +1 -0
  146. package/dist/storage/node-data-storage.d.ts +6 -0
  147. package/dist/storage/node-data-storage.d.ts.map +1 -1
  148. package/dist/storage/node-data-storage.js +161 -2
  149. package/dist/storage/node-data-storage.js.map +1 -1
  150. package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts +17 -0
  151. package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts.map +1 -0
  152. package/dist/storage/pdpp-grant-binding-sqlite-store.js +159 -0
  153. package/dist/storage/pdpp-grant-binding-sqlite-store.js.map +1 -0
  154. package/dist/storage/pdpp-records-sqlite-store.d.ts +112 -0
  155. package/dist/storage/pdpp-records-sqlite-store.d.ts.map +1 -0
  156. package/dist/storage/pdpp-records-sqlite-store.js +1440 -0
  157. package/dist/storage/pdpp-records-sqlite-store.js.map +1 -0
  158. package/dist/storage/pdpp-stream-completion.d.ts +5 -0
  159. package/dist/storage/pdpp-stream-completion.d.ts.map +1 -0
  160. package/dist/storage/pdpp-stream-completion.js +10 -0
  161. package/dist/storage/pdpp-stream-completion.js.map +1 -0
  162. package/dist/storage/scope-deletion-history.d.ts +8 -0
  163. package/dist/storage/scope-deletion-history.d.ts.map +1 -0
  164. package/dist/storage/scope-deletion-history.js +40 -0
  165. package/dist/storage/scope-deletion-history.js.map +1 -0
  166. package/dist/ui/ps-lite-debug.js +3981 -1109
  167. package/package.json +12 -4
@@ -1,6 +1,114 @@
1
- import { deleteAllForScope, deleteDataFile, deleteFirstSeenLedger, readFirstSeenLedger, writeFirstSeenLedger, readDataFile, readDataFileBytes, readDataFileStream, readDataFilePreview, hasScopeBlocks, readScopeBlockManifest, readScopeBlocks, writeBlockManifest, writeDataFile, } from "./hierarchy.js";
1
+ import { deleteAllForScope, deleteDataFile, deleteFirstSeenLedger, readFirstSeenLedger, writeFirstSeenLedger, readDataFile, readDataFileBytes, readDataFileStream, readDataFilePreview, hasScopeBlocks, readScopeBlockManifest, readScopeBlocks, writeBlockManifest, writeDataFile, stageDataFile, publishStagedDataFile, } from "./hierarchy.js";
2
+ import { readFile, readdir, stat, unlink } from "node:fs/promises";
3
+ import { join, relative } from "node:path";
4
+ import { DataFileEnvelopeSchema } from "@opendatalabs/vana-sdk/browser";
5
+ import { IngestPersistedError } from "@opendatalabs/personal-server-ts-core/contracts";
6
+ import { buildDataFilePath } from "@opendatalabs/personal-server-ts-core/storage/hierarchy";
2
7
  import { withScopeLock } from "@opendatalabs/personal-server-ts-core/additions";
8
+ import { indexDatabase } from "./index-manager.js";
9
+ import { createImportOperations } from "./import-operations.js";
10
+ /** Finish committed stages and discard stages that lost their index race. */
11
+ export async function recoverStagedDataFiles(deps) {
12
+ const visit = async (dir) => {
13
+ for (const item of await readdir(dir, { withFileTypes: true })) {
14
+ const path = join(dir, item.name);
15
+ if (item.isDirectory()) {
16
+ await visit(path);
17
+ }
18
+ else if (item.isFile()) {
19
+ const marker = item.name.indexOf(".json.pending.");
20
+ if (marker < 0)
21
+ continue;
22
+ const finalPath = join(dir, item.name.slice(0, marker + ".json".length));
23
+ const indexed = deps.indexManager.findByPath(relative(deps.hierarchyOptions.dataDir, finalPath));
24
+ if (!indexed) {
25
+ await unlink(path);
26
+ continue;
27
+ }
28
+ // A leftover stage can share the final path of a prior committed
29
+ // write after a restart. The existing final file wins: this stage
30
+ // cannot be identified as the one that created the older index row.
31
+ try {
32
+ await stat(finalPath);
33
+ await unlink(path);
34
+ }
35
+ catch (error) {
36
+ if (error.code !== "ENOENT")
37
+ throw error;
38
+ await publishStagedDataFile(path, finalPath);
39
+ }
40
+ }
41
+ }
42
+ };
43
+ await visit(deps.hierarchyOptions.dataDir);
44
+ }
45
+ /** Rebuild a lost legacy index from finalized envelopes, never from stages. */
46
+ export async function reindexLegacyDataFiles(deps) {
47
+ const dataDir = deps.hierarchyOptions.dataDir;
48
+ let recovered = 0;
49
+ const recoveredScopes = new Set();
50
+ const visit = async (dir) => {
51
+ for (const item of (await readdir(dir, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {
52
+ if (dir === dataDir && item.name === "blocks")
53
+ continue;
54
+ const path = join(dir, item.name);
55
+ if (item.isDirectory()) {
56
+ await visit(path);
57
+ continue;
58
+ }
59
+ if (!item.isFile() || !item.name.endsWith(".json"))
60
+ continue;
61
+ const relativePath = relative(dataDir, path);
62
+ if (deps.indexManager.findByPath(relativePath))
63
+ continue;
64
+ let raw;
65
+ try {
66
+ raw = JSON.parse(await readFile(path, "utf8"));
67
+ }
68
+ catch {
69
+ continue;
70
+ }
71
+ const parsed = DataFileEnvelopeSchema.passthrough().safeParse(raw);
72
+ if (!parsed.success)
73
+ continue;
74
+ const envelope = parsed.data;
75
+ if (buildDataFilePath(dataDir, envelope.scope, envelope.collectedAt) !==
76
+ path) {
77
+ continue;
78
+ }
79
+ const bytes = (await stat(path)).size;
80
+ const closeAfterInsert = await deps.closeRecoveredScopeForWrites?.(envelope.scope);
81
+ deps.indexManager.insertRecovered({
82
+ fileId: null,
83
+ schemaId: envelope.schemaId ?? null,
84
+ path: relativePath,
85
+ scope: envelope.scope,
86
+ collectedAt: envelope.collectedAt,
87
+ sizeBytes: bytes,
88
+ producer: envelope.producer === "pdpp-projector" ||
89
+ envelope.producer === "pdpp-import-projection"
90
+ ? envelope.producer
91
+ : null,
92
+ producerProvenance: envelope.producer_provenance &&
93
+ typeof envelope.producer_provenance === "object"
94
+ ? JSON.stringify(envelope.producer_provenance)
95
+ : null,
96
+ });
97
+ if (closeAfterInsert && !recoveredScopes.has(envelope.scope)) {
98
+ deps.indexManager.closeScopeForWrites(envelope.scope);
99
+ recoveredScopes.add(envelope.scope);
100
+ }
101
+ recovered++;
102
+ }
103
+ };
104
+ await visit(dataDir);
105
+ return recovered;
106
+ }
3
107
  export function createNodeDataStorage(deps) {
108
+ const db = indexDatabase(deps.indexManager);
109
+ const operations = db
110
+ ? createImportOperations(db, deps.indexManager, deps.hierarchyOptions)
111
+ : undefined;
4
112
  async function dropLedgerIfEmpty(scope) {
5
113
  if (deps.indexManager.countByScope(scope) === 0) {
6
114
  await deleteFirstSeenLedger(deps.hierarchyOptions, scope);
@@ -8,6 +116,7 @@ export function createNodeDataStorage(deps) {
8
116
  }
9
117
  return {
10
118
  kind: "node-fs-sqlite",
119
+ ...(operations ? { commitVersion: operations.commitVersion } : {}),
11
120
  listScopes(options) {
12
121
  return deps.indexManager.listDistinctScopes(options);
13
122
  },
@@ -59,6 +168,40 @@ export function createNodeDataStorage(deps) {
59
168
  writeEnvelope(envelope) {
60
169
  return writeDataFile(deps.hierarchyOptions, envelope);
61
170
  },
171
+ async commitEnvelope(envelope, entry, precondition) {
172
+ const staged = await stageDataFile(deps.hierarchyOptions, envelope);
173
+ let indexed = false;
174
+ try {
175
+ const result = deps.indexManager.insertIfCurrent({
176
+ ...entry,
177
+ path: staged.relativePath,
178
+ sizeBytes: entry.sizeBytes ?? staged.sizeBytes,
179
+ }, precondition);
180
+ if (!result.ok) {
181
+ return result;
182
+ }
183
+ indexed = true;
184
+ await publishStagedDataFile(staged.stagePath, staged.finalPath);
185
+ return {
186
+ ok: true,
187
+ writeResult: {
188
+ path: staged.finalPath,
189
+ relativePath: staged.relativePath,
190
+ sizeBytes: staged.sizeBytes,
191
+ },
192
+ };
193
+ }
194
+ catch (err) {
195
+ if (indexed)
196
+ throw new IngestPersistedError(staged.relativePath, err);
197
+ throw err;
198
+ }
199
+ finally {
200
+ // An indexed stage must survive a failed rename for boot recovery.
201
+ if (!indexed)
202
+ await unlink(staged.stagePath);
203
+ }
204
+ },
62
205
  writeBlockManifest(scope, collectedAt, manifest, blocks) {
63
206
  return writeBlockManifest(deps.hierarchyOptions, scope, collectedAt, manifest, blocks);
64
207
  },
@@ -91,6 +234,8 @@ export function createNodeDataStorage(deps) {
91
234
  // version, so no delete path can leave a stale ledger behind.
92
235
  deleteScope(scope) {
93
236
  return withScopeLock(scope, async () => {
237
+ if (operations)
238
+ return operations.deleteScope(scope);
94
239
  // The sidecar first: it holds record ids, so it must not survive a
95
240
  // data delete that fails half way. A sidecar that cannot be removed
96
241
  // never blocks the data delete; it is tried once more afterwards, and
@@ -110,6 +255,11 @@ export function createNodeDataStorage(deps) {
110
255
  if (!entry)
111
256
  return false;
112
257
  return withScopeLock(entry.scope, async () => {
258
+ if (operations) {
259
+ const removed = operations.deleteVersion(entry.scope, entry.collectedAt, entry.path);
260
+ await dropLedgerIfEmpty(entry.scope);
261
+ return removed;
262
+ }
113
263
  // Delete the blob FIRST; only drop the index row once it's gone (deleteDataFile is
114
264
  // ENOENT-tolerant). If blob deletion fails for a real reason, the row is preserved so the next
115
265
  // sync retry re-attempts — rather than the row vanishing and the cursor advancing past an
@@ -122,6 +272,13 @@ export function createNodeDataStorage(deps) {
122
272
  },
123
273
  async deleteVersion(scope, collectedAt) {
124
274
  const entry = deps.indexManager.findClosestByScope(scope, collectedAt);
275
+ if (operations) {
276
+ return withScopeLock(scope, async () => {
277
+ const removed = operations.deleteVersion(scope, collectedAt, entry?.collectedAt === collectedAt ? entry.path : undefined);
278
+ await dropLedgerIfEmpty(scope);
279
+ return removed;
280
+ });
281
+ }
125
282
  if (!entry || entry.collectedAt !== collectedAt)
126
283
  return false;
127
284
  return withScopeLock(scope, async () => {
@@ -140,7 +297,9 @@ export function createNodeDataStorage(deps) {
140
297
  // and this returns false, so the caller surfaces the real error instead
141
298
  // of silently discarding registered data.
142
299
  const entry = deps.indexManager.findByPath(path);
143
- const removed = deps.indexManager.deleteUnsyncedByPath(path);
300
+ const removed = operations
301
+ ? operations.dropUnsyncedEntry(path)
302
+ : deps.indexManager.deleteUnsyncedByPath(path);
144
303
  if (removed && entry) {
145
304
  await withScopeLock(entry.scope, () => dropLedgerIfEmpty(entry.scope));
146
305
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node-data-storage.js","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-data-storage.js","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Database } from "better-sqlite3";
2
+ import { type PdppGrantBindingStore } from "@opendatalabs/personal-server-ts-core/grants";
3
+ /**
4
+ * SQLite-backed PdppGrantBindingStore for desktop persistence. Backs the same
5
+ * port as `createInMemoryPdppGrantBindingStore` (packages/core/src/grants/
6
+ * pdpp-binding-store.ts) — append-only identity binding, idempotent identical
7
+ * re-put, conflicting-rewrite rejection, no mirrored revocation status.
8
+ *
9
+ * `pdpp_grant_id` stays the sole unique identity (PRIMARY KEY) — a conflicting
10
+ * insert for the same grant id fails inside the same transaction as the
11
+ * pre-check, so no partial row is ever visible to a concurrent reader.
12
+ * `permission_key` is a plain (non-unique) index: distinct PDPP grants may
13
+ * legitimately bind the same chain permission over time, each retaining its
14
+ * own observed `grant_version`.
15
+ */
16
+ export declare function createSqlitePdppGrantBindingStore(db: Database): PdppGrantBindingStore;
17
+ //# sourceMappingURL=pdpp-grant-binding-sqlite-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdpp-grant-binding-sqlite-store.d.ts","sourceRoot":"","sources":["../../src/storage/pdpp-grant-binding-sqlite-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAML,KAAK,qBAAqB,EAC3B,MAAM,8CAA8C,CAAC;AA+GtD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iCAAiC,CAC/C,EAAE,EAAE,QAAQ,GACX,qBAAqB,CAwEvB"}
@@ -0,0 +1,159 @@
1
+ import { InvalidSignatureError } from "@opendatalabs/personal-server-ts-core/errors";
2
+ import { assertWritableGrantVersion, bindingsAgree, permissionKey, } from "@opendatalabs/personal-server-ts-core/grants";
3
+ const MIGRATIONS = [
4
+ `
5
+ CREATE TABLE IF NOT EXISTS pdpp_grant_bindings (
6
+ pdpp_grant_id TEXT PRIMARY KEY,
7
+ permission_key TEXT NOT NULL UNIQUE,
8
+ chain_id INTEGER NOT NULL,
9
+ contract_address TEXT NOT NULL,
10
+ permission_id TEXT NOT NULL,
11
+ owner_address TEXT NOT NULL,
12
+ grantee_address TEXT NOT NULL,
13
+ pdpp_client_id TEXT NOT NULL,
14
+ grantee_id TEXT NOT NULL,
15
+ bound_at TEXT NOT NULL
16
+ );
17
+ `,
18
+ // Drops the permission_key UNIQUE constraint (multiple grants may now bind
19
+ // the same permission) and adds the nullable grant_version column. SQLite
20
+ // has no ALTER TABLE DROP CONSTRAINT, so the table is rebuilt. Existing
21
+ // rows are preserved with grant_version = NULL (legacy, unversioned).
22
+ `
23
+ CREATE TABLE pdpp_grant_bindings_v2 (
24
+ pdpp_grant_id TEXT PRIMARY KEY,
25
+ permission_key TEXT NOT NULL,
26
+ chain_id INTEGER NOT NULL,
27
+ contract_address TEXT NOT NULL,
28
+ permission_id TEXT NOT NULL,
29
+ owner_address TEXT NOT NULL,
30
+ grantee_address TEXT NOT NULL,
31
+ pdpp_client_id TEXT NOT NULL,
32
+ grantee_id TEXT NOT NULL,
33
+ bound_at TEXT NOT NULL,
34
+ grant_version TEXT
35
+ );
36
+ INSERT INTO pdpp_grant_bindings_v2
37
+ (pdpp_grant_id, permission_key, chain_id, contract_address, permission_id,
38
+ owner_address, grantee_address, pdpp_client_id, grantee_id, bound_at, grant_version)
39
+ SELECT pdpp_grant_id, permission_key, chain_id, contract_address, permission_id,
40
+ owner_address, grantee_address, pdpp_client_id, grantee_id, bound_at, NULL
41
+ FROM pdpp_grant_bindings;
42
+ DROP TABLE pdpp_grant_bindings;
43
+ ALTER TABLE pdpp_grant_bindings_v2 RENAME TO pdpp_grant_bindings;
44
+ CREATE INDEX IF NOT EXISTS pdpp_grant_bindings_permission_key
45
+ ON pdpp_grant_bindings (permission_key);
46
+ `,
47
+ ];
48
+ function migrate(db) {
49
+ db.exec(`
50
+ CREATE TABLE IF NOT EXISTS pdpp_grant_bindings_schema_version (
51
+ id INTEGER PRIMARY KEY CHECK (id = 1),
52
+ version INTEGER NOT NULL
53
+ );
54
+ INSERT OR IGNORE INTO pdpp_grant_bindings_schema_version (id, version) VALUES (1, 0);
55
+ `);
56
+ const current = db
57
+ .prepare("SELECT version FROM pdpp_grant_bindings_schema_version WHERE id = 1")
58
+ .get();
59
+ const applyFrom = db.transaction((fromVersion) => {
60
+ for (let v = fromVersion; v < MIGRATIONS.length; v++) {
61
+ db.exec(MIGRATIONS[v]);
62
+ }
63
+ db.prepare("UPDATE pdpp_grant_bindings_schema_version SET version = ? WHERE id = 1").run(MIGRATIONS.length);
64
+ });
65
+ if (current.version < MIGRATIONS.length) {
66
+ applyFrom(current.version);
67
+ }
68
+ else if (current.version > MIGRATIONS.length) {
69
+ throw new Error(`pdpp_grant_bindings database schema version ${current.version} is newer than this build supports (${MIGRATIONS.length}). Refusing to open — upgrade this build before opening this database.`);
70
+ }
71
+ }
72
+ function toBinding(row) {
73
+ return Object.freeze({
74
+ pdppGrantId: row.pdpp_grant_id,
75
+ permission: {
76
+ chainId: row.chain_id,
77
+ contractAddress: row.contract_address,
78
+ permissionId: row.permission_id,
79
+ },
80
+ ownerAddress: row.owner_address,
81
+ granteeAddress: row.grantee_address,
82
+ pdppClientId: row.pdpp_client_id,
83
+ granteeId: row.grantee_id,
84
+ grantVersion: row.grant_version,
85
+ boundAt: row.bound_at,
86
+ });
87
+ }
88
+ /**
89
+ * SQLite-backed PdppGrantBindingStore for desktop persistence. Backs the same
90
+ * port as `createInMemoryPdppGrantBindingStore` (packages/core/src/grants/
91
+ * pdpp-binding-store.ts) — append-only identity binding, idempotent identical
92
+ * re-put, conflicting-rewrite rejection, no mirrored revocation status.
93
+ *
94
+ * `pdpp_grant_id` stays the sole unique identity (PRIMARY KEY) — a conflicting
95
+ * insert for the same grant id fails inside the same transaction as the
96
+ * pre-check, so no partial row is ever visible to a concurrent reader.
97
+ * `permission_key` is a plain (non-unique) index: distinct PDPP grants may
98
+ * legitimately bind the same chain permission over time, each retaining its
99
+ * own observed `grant_version`.
100
+ */
101
+ export function createSqlitePdppGrantBindingStore(db) {
102
+ db.pragma("journal_mode = WAL");
103
+ migrate(db);
104
+ const getByGrantIdStmt = db.prepare("SELECT * FROM pdpp_grant_bindings WHERE pdpp_grant_id = ?");
105
+ const getByPermissionKeyStmt = db.prepare("SELECT * FROM pdpp_grant_bindings WHERE permission_key = ? ORDER BY bound_at ASC, pdpp_grant_id ASC");
106
+ const insertStmt = db.prepare(`
107
+ INSERT INTO pdpp_grant_bindings
108
+ (pdpp_grant_id, permission_key, chain_id, contract_address, permission_id,
109
+ owner_address, grantee_address, pdpp_client_id, grantee_id, bound_at, grant_version)
110
+ VALUES
111
+ (@pdpp_grant_id, @permission_key, @chain_id, @contract_address, @permission_id,
112
+ @owner_address, @grantee_address, @pdpp_client_id, @grantee_id, @bound_at, @grant_version)
113
+ `);
114
+ function putBinding(binding) {
115
+ const runPut = db.transaction(() => {
116
+ const existingByGrant = getByGrantIdStmt.get(binding.pdppGrantId);
117
+ if (existingByGrant) {
118
+ if (!bindingsAgree(toBinding(existingByGrant), binding)) {
119
+ throw new InvalidSignatureError({
120
+ reason: "A different binding already exists for this PDPP grant id",
121
+ pdppGrantId: binding.pdppGrantId,
122
+ });
123
+ }
124
+ return;
125
+ }
126
+ // Only reached for a genuinely new row: a `null`/malformed
127
+ // grantVersion is refused here, same as `createPdppGrantBinding`.
128
+ // `null` may only ever be read back from a preserved legacy row
129
+ // (see `MIGRATIONS[1]`) — it must never be written by `putBinding`.
130
+ assertWritableGrantVersion(binding);
131
+ insertStmt.run({
132
+ pdpp_grant_id: binding.pdppGrantId,
133
+ permission_key: permissionKey(binding.permission),
134
+ chain_id: binding.permission.chainId,
135
+ contract_address: binding.permission.contractAddress,
136
+ permission_id: binding.permission.permissionId,
137
+ owner_address: binding.ownerAddress,
138
+ grantee_address: binding.granteeAddress,
139
+ pdpp_client_id: binding.pdppClientId,
140
+ grantee_id: binding.granteeId,
141
+ bound_at: binding.boundAt,
142
+ grant_version: binding.grantVersion,
143
+ });
144
+ });
145
+ runPut();
146
+ }
147
+ return {
148
+ putBinding,
149
+ getByPdppGrantId(pdppGrantId) {
150
+ const row = getByGrantIdStmt.get(pdppGrantId);
151
+ return row ? toBinding(row) : null;
152
+ },
153
+ getBindingsForPermission(permission) {
154
+ const rows = getByPermissionKeyStmt.all(permissionKey(permission));
155
+ return rows.map(toBinding);
156
+ },
157
+ };
158
+ }
159
+ //# sourceMappingURL=pdpp-grant-binding-sqlite-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdpp-grant-binding-sqlite-store.js","sourceRoot":"","sources":["../../src/storage/pdpp-grant-binding-sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import type { Database } from "better-sqlite3";
2
+ import { type PdppRecordStore, type IngestResult, type PdppBlobMeta, type PdppRecordEnvelopeInput, type RecordDataValidator } from "@opendatalabs/personal-server-ts-core/storage/pdpp-records";
3
+ import { type NativeStreamCompletionReceipt, type StreamCompletionRequest, type StreamDeclarationResolver } from "./pdpp-stream-completion.js";
4
+ export { StreamCompletionError, type NativeStreamCompletionReceipt, type StreamCompletionFailure, type StreamCompletionProof, type StreamCompletionRequest, type StreamDeclarationResolver, } from "./pdpp-stream-completion.js";
5
+ export interface PdppInstanceBinding {
6
+ instance: string;
7
+ sourceId: string | null;
8
+ label: string;
9
+ deletedAt: string | null;
10
+ method: string | null;
11
+ generation: number;
12
+ resetClock: number;
13
+ empty?: boolean;
14
+ }
15
+ /** Outcome of a P7 stream replace. `applied: false` means nothing was written. */
16
+ export interface ReplaceStreamResult extends IngestResult {
17
+ applied: boolean;
18
+ /** Live keys tombstoned because the snapshot lacked them. */
19
+ deleted: number;
20
+ }
21
+ /** One P7 completion receipt, see migration v7. */
22
+ export interface StreamCompletionReceipt {
23
+ instance: string;
24
+ stream: string;
25
+ method: string;
26
+ generation: number;
27
+ sourceCollectedAt: string;
28
+ /** Write clock value when the replace committed. */
29
+ writeSeq: number;
30
+ liveCount: number;
31
+ }
32
+ /** RFC 3339 `date-time`, with calendar-valid fields. No clock check. */
33
+ export declare function isRfc3339DateTime(value: unknown): value is string;
34
+ export declare class PdppBindingError extends Error {
35
+ readonly reason: string;
36
+ constructor(reason: string);
37
+ }
38
+ /**
39
+ * SQLite-backed PdppRecordStore for desktop persistence. Requires
40
+ * `better-sqlite3` (already a `packages/server` dependency in this repo).
41
+ * A readonly database must already have the current schema; no migration,
42
+ * journal-mode change or stale-blob sweep runs. SQLite rejects write methods.
43
+ */
44
+ export declare function createSqliteRecordStore(db: Database): PdppRecordStore & {
45
+ listConnections(sourceId: string): PdppInstanceBinding[];
46
+ registerConnection(input: {
47
+ instance: string;
48
+ sourceId: string;
49
+ method: string;
50
+ label: string;
51
+ }): PdppInstanceBinding;
52
+ deleteConnection(instance: string): PdppInstanceBinding;
53
+ getInstanceBinding(instance: string): PdppInstanceBinding;
54
+ /**
55
+ * Run synchronous reads against one SQLite read snapshot. A write from any
56
+ * connection that commits while `read` runs stays invisible to it, so the
57
+ * bindings, listings and pages it sees belong to one point in time.
58
+ */
59
+ readSnapshot<T>(read: () => T): T;
60
+ resetInstanceBinding(input: {
61
+ instance: string;
62
+ expectedMethod: string | null;
63
+ expectedGeneration: number;
64
+ nextMethod: string | null;
65
+ }): {
66
+ binding: PdppInstanceBinding;
67
+ alreadyReset: boolean;
68
+ };
69
+ storeBlobBytesForInstance(input: {
70
+ instance: string;
71
+ method: string;
72
+ generation: number;
73
+ bytes: Uint8Array;
74
+ mimeType: string;
75
+ }): PdppBlobMeta;
76
+ replaceStream(input: {
77
+ instance: string;
78
+ stream: string;
79
+ method: string;
80
+ generation: number;
81
+ emittedAt: string;
82
+ envelopes: PdppRecordEnvelopeInput[];
83
+ primaryKey: string[];
84
+ validateData?: RecordDataValidator;
85
+ sourceCollectedAt?: string;
86
+ completionPolicy?: "preserve_if_unchanged";
87
+ }): ReplaceStreamResult;
88
+ /** Completion receipts of one instance, as stored. */
89
+ listStreamCompletions(instance: string): StreamCompletionReceipt[];
90
+ /**
91
+ * Metadata-only completion: proves, for each requested stream, that the
92
+ * live set SQLite holds is exactly the one the digest names, then stores
93
+ * every receipt in one immediate transaction. It writes no rows, history,
94
+ * arrival or clock. The binding must already be registered, undeleted and
95
+ * equal to the request's source, method and generation; nothing is
96
+ * registered here. The caller is not authenticated at this seam.
97
+ * Throws `PdppBindingError` for the binding and `StreamCompletionError`
98
+ * for a malformed request, declaration, stored data or receipt, or a
99
+ * conflicting proof. SQLite failures (busy, trigger aborts) propagate
100
+ * unchanged. Any throw rolls the transaction back.
101
+ */
102
+ completeStreams(request: StreamCompletionRequest, declarations: StreamDeclarationResolver): {
103
+ receipts: NativeStreamCompletionReceipt[];
104
+ };
105
+ /**
106
+ * Live record keys of one stream in the order each last arrived in the
107
+ * current generation, for the legacy view only. A key with no arrival
108
+ * since v8 is absent.
109
+ */
110
+ listArrivalOrder(instance: string, stream: string): string[];
111
+ };
112
+ //# sourceMappingURL=pdpp-records-sqlite-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdpp-records-sqlite-store.d.ts","sourceRoot":"","sources":["../../src/storage/pdpp-records-sqlite-store.ts"],"names":[],"mappings":"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"}