@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.
- package/dist/__fixtures__/bound-record-store.d.ts +19 -0
- package/dist/__fixtures__/bound-record-store.d.ts.map +1 -0
- package/dist/__fixtures__/bound-record-store.js +60 -0
- package/dist/__fixtures__/bound-record-store.js.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts +41 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js +34 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts +112 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js +226 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts +135 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js +21 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js.map +1 -0
- package/dist/api-auth.d.ts +18 -2
- package/dist/api-auth.d.ts.map +1 -1
- package/dist/api-auth.js +114 -22
- package/dist/api-auth.js.map +1 -1
- package/dist/app.d.ts +60 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +139 -1
- package/dist/app.js.map +1 -1
- package/dist/bootstrap.d.ts +10 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +359 -8
- package/dist/bootstrap.js.map +1 -1
- package/dist/enclave-main.d.ts +4 -0
- package/dist/enclave-main.d.ts.map +1 -1
- package/dist/enclave-main.js +152 -1
- package/dist/enclave-main.js.map +1 -1
- package/dist/middleware/body-limit.d.ts +1 -1
- package/dist/middleware/body-limit.d.ts.map +1 -1
- package/dist/middleware/body-limit.js +8 -3
- package/dist/middleware/body-limit.js.map +1 -1
- package/dist/middleware/cors.d.ts.map +1 -1
- package/dist/middleware/cors.js +1 -0
- package/dist/middleware/cors.js.map +1 -1
- package/dist/package.json +9 -1
- package/dist/pdpp/bootstrap.d.ts +72 -0
- package/dist/pdpp/bootstrap.d.ts.map +1 -0
- package/dist/pdpp/bootstrap.js +270 -0
- package/dist/pdpp/bootstrap.js.map +1 -0
- package/dist/pdpp/chain-enforcement.d.ts +95 -0
- package/dist/pdpp/chain-enforcement.d.ts.map +1 -0
- package/dist/pdpp/chain-enforcement.js +145 -0
- package/dist/pdpp/chain-enforcement.js.map +1 -0
- package/dist/pdpp/client-document-fetch.d.ts +63 -0
- package/dist/pdpp/client-document-fetch.d.ts.map +1 -0
- package/dist/pdpp/client-document-fetch.js +254 -0
- package/dist/pdpp/client-document-fetch.js.map +1 -0
- package/dist/pdpp/declaration-registry.d.ts +83 -0
- package/dist/pdpp/declaration-registry.d.ts.map +1 -0
- package/dist/pdpp/declaration-registry.js +251 -0
- package/dist/pdpp/declaration-registry.js.map +1 -0
- package/dist/pdpp/deployment.d.ts +70 -0
- package/dist/pdpp/deployment.d.ts.map +1 -0
- package/dist/pdpp/deployment.js +104 -0
- package/dist/pdpp/deployment.js.map +1 -0
- package/dist/pdpp/record-schema.d.ts +2 -0
- package/dist/pdpp/record-schema.d.ts.map +1 -0
- package/dist/pdpp/record-schema.js +2 -0
- package/dist/pdpp/record-schema.js.map +1 -0
- package/dist/pdpp/records-bootstrap.d.ts +111 -0
- package/dist/pdpp/records-bootstrap.d.ts.map +1 -0
- package/dist/pdpp/records-bootstrap.js +353 -0
- package/dist/pdpp/records-bootstrap.js.map +1 -0
- package/dist/pdpp/source-id-compat.d.ts +5 -0
- package/dist/pdpp/source-id-compat.d.ts.map +1 -0
- package/dist/pdpp/source-id-compat.js +16 -0
- package/dist/pdpp/source-id-compat.js.map +1 -0
- package/dist/pdpp/test-connections.d.ts +6 -0
- package/dist/pdpp/test-connections.d.ts.map +1 -0
- package/dist/pdpp/test-connections.js +37 -0
- package/dist/pdpp/test-connections.js.map +1 -0
- package/dist/routes/auth-device.d.ts.map +1 -1
- package/dist/routes/auth-device.js +3 -0
- package/dist/routes/auth-device.js.map +1 -1
- package/dist/routes/chunked-scope-import.d.ts +41 -0
- package/dist/routes/chunked-scope-import.d.ts.map +1 -0
- package/dist/routes/chunked-scope-import.js +901 -0
- package/dist/routes/chunked-scope-import.js.map +1 -0
- package/dist/routes/data.d.ts +23 -1
- package/dist/routes/data.d.ts.map +1 -1
- package/dist/routes/data.js +112 -1
- package/dist/routes/data.js.map +1 -1
- package/dist/routes/grants.d.ts.map +1 -1
- package/dist/routes/grants.js +2 -0
- package/dist/routes/grants.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +3 -0
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/pdpp-auth.d.ts +157 -0
- package/dist/routes/pdpp-auth.d.ts.map +1 -0
- package/dist/routes/pdpp-auth.js +953 -0
- package/dist/routes/pdpp-auth.js.map +1 -0
- package/dist/routes/pdpp-blobs.d.ts +26 -0
- package/dist/routes/pdpp-blobs.d.ts.map +1 -0
- package/dist/routes/pdpp-blobs.js +179 -0
- package/dist/routes/pdpp-blobs.js.map +1 -0
- package/dist/routes/pdpp-connections.d.ts +28 -0
- package/dist/routes/pdpp-connections.d.ts.map +1 -0
- package/dist/routes/pdpp-connections.js +144 -0
- package/dist/routes/pdpp-connections.js.map +1 -0
- package/dist/routes/pdpp-declarations.d.ts +58 -0
- package/dist/routes/pdpp-declarations.d.ts.map +1 -0
- package/dist/routes/pdpp-declarations.js +94 -0
- package/dist/routes/pdpp-declarations.js.map +1 -0
- package/dist/routes/pdpp-instance-bindings.d.ts +26 -0
- package/dist/routes/pdpp-instance-bindings.d.ts.map +1 -0
- package/dist/routes/pdpp-instance-bindings.js +124 -0
- package/dist/routes/pdpp-instance-bindings.js.map +1 -0
- package/dist/routes/pdpp-records.d.ts +158 -0
- package/dist/routes/pdpp-records.d.ts.map +1 -0
- package/dist/routes/pdpp-records.js +1537 -0
- package/dist/routes/pdpp-records.js.map +1 -0
- package/dist/routes/pdpp-well-known.d.ts +13 -0
- package/dist/routes/pdpp-well-known.d.ts.map +1 -0
- package/dist/routes/pdpp-well-known.js +20 -0
- package/dist/routes/pdpp-well-known.js.map +1 -0
- package/dist/storage/declaration-witness.d.ts +56 -0
- package/dist/storage/declaration-witness.d.ts.map +1 -0
- package/dist/storage/declaration-witness.js +273 -0
- package/dist/storage/declaration-witness.js.map +1 -0
- package/dist/storage/hierarchy.d.ts +25 -1
- package/dist/storage/hierarchy.d.ts.map +1 -1
- package/dist/storage/hierarchy.js +210 -16
- package/dist/storage/hierarchy.js.map +1 -1
- package/dist/storage/import-operations.d.ts +11 -0
- package/dist/storage/import-operations.d.ts.map +1 -0
- package/dist/storage/import-operations.js +261 -0
- package/dist/storage/import-operations.js.map +1 -0
- package/dist/storage/index-manager.d.ts +24 -2
- package/dist/storage/index-manager.d.ts.map +1 -1
- package/dist/storage/index-manager.js +279 -30
- package/dist/storage/index-manager.js.map +1 -1
- package/dist/storage/index-schema.d.ts +1 -1
- package/dist/storage/index-schema.d.ts.map +1 -1
- package/dist/storage/index-schema.js +189 -8
- package/dist/storage/index-schema.js.map +1 -1
- package/dist/storage/legacy-scope-authority.d.ts +14 -0
- package/dist/storage/legacy-scope-authority.d.ts.map +1 -0
- package/dist/storage/legacy-scope-authority.js +298 -0
- package/dist/storage/legacy-scope-authority.js.map +1 -0
- package/dist/storage/node-data-storage.d.ts +6 -0
- package/dist/storage/node-data-storage.d.ts.map +1 -1
- package/dist/storage/node-data-storage.js +161 -2
- package/dist/storage/node-data-storage.js.map +1 -1
- package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts +17 -0
- package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts.map +1 -0
- package/dist/storage/pdpp-grant-binding-sqlite-store.js +159 -0
- package/dist/storage/pdpp-grant-binding-sqlite-store.js.map +1 -0
- package/dist/storage/pdpp-records-sqlite-store.d.ts +112 -0
- package/dist/storage/pdpp-records-sqlite-store.d.ts.map +1 -0
- package/dist/storage/pdpp-records-sqlite-store.js +1440 -0
- package/dist/storage/pdpp-records-sqlite-store.js.map +1 -0
- package/dist/storage/pdpp-stream-completion.d.ts +5 -0
- package/dist/storage/pdpp-stream-completion.d.ts.map +1 -0
- package/dist/storage/pdpp-stream-completion.js +10 -0
- package/dist/storage/pdpp-stream-completion.js.map +1 -0
- package/dist/storage/scope-deletion-history.d.ts +8 -0
- package/dist/storage/scope-deletion-history.d.ts.map +1 -0
- package/dist/storage/scope-deletion-history.js +40 -0
- package/dist/storage/scope-deletion-history.js.map +1 -0
- package/dist/ui/ps-lite-debug.js +3981 -1109
- 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 =
|
|
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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"}
|