@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
|
@@ -10,8 +10,17 @@ CREATE TABLE IF NOT EXISTS data_files (
|
|
|
10
10
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
|
|
11
11
|
size_bytes INTEGER NOT NULL DEFAULT 0,
|
|
12
12
|
version INTEGER NOT NULL DEFAULT 1,
|
|
13
|
+
cas_revision INTEGER NOT NULL DEFAULT 1,
|
|
13
14
|
data_point_id TEXT,
|
|
14
|
-
after_tombstone_version INTEGER
|
|
15
|
+
after_tombstone_version INTEGER,
|
|
16
|
+
producer TEXT,
|
|
17
|
+
producer_provenance TEXT
|
|
18
|
+
)`;
|
|
19
|
+
const CREATE_SCOPE_REVISIONS_SQL = `
|
|
20
|
+
CREATE TABLE IF NOT EXISTS scope_revisions (
|
|
21
|
+
scope TEXT PRIMARY KEY,
|
|
22
|
+
cas_revision INTEGER NOT NULL,
|
|
23
|
+
closed_for_writes INTEGER NOT NULL DEFAULT 0
|
|
15
24
|
)`;
|
|
16
25
|
const CREATE_INDEXES_SQL = [
|
|
17
26
|
"CREATE INDEX IF NOT EXISTS idx_data_files_scope ON data_files (scope)",
|
|
@@ -19,12 +28,53 @@ const CREATE_INDEXES_SQL = [
|
|
|
19
28
|
"CREATE INDEX IF NOT EXISTS idx_data_files_file_id ON data_files (file_id)",
|
|
20
29
|
"CREATE INDEX IF NOT EXISTS idx_data_files_schema_id ON data_files (schema_id)",
|
|
21
30
|
"CREATE INDEX IF NOT EXISTS idx_data_files_data_point_id ON data_files (data_point_id)",
|
|
31
|
+
"CREATE INDEX IF NOT EXISTS idx_data_files_scope_cas_revision ON data_files (scope, cas_revision)",
|
|
22
32
|
];
|
|
23
|
-
export const INDEX_SCHEMA_VERSION =
|
|
33
|
+
export const INDEX_SCHEMA_VERSION = 14;
|
|
34
|
+
const CREATE_LEGACY_SCOPE_TAKEOVERS_SQL = `
|
|
35
|
+
CREATE TABLE IF NOT EXISTS legacy_scope_takeovers (
|
|
36
|
+
scope TEXT NOT NULL,
|
|
37
|
+
instance TEXT NOT NULL DEFAULT '',
|
|
38
|
+
generation INTEGER NOT NULL DEFAULT 1,
|
|
39
|
+
superseded_version INTEGER NOT NULL,
|
|
40
|
+
superseded_cas_revision INTEGER NOT NULL,
|
|
41
|
+
superseded_collected_at TEXT NOT NULL,
|
|
42
|
+
superseded_path TEXT NOT NULL,
|
|
43
|
+
taken_over_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
44
|
+
PRIMARY KEY (scope, instance, generation, superseded_path)
|
|
45
|
+
)`;
|
|
46
|
+
const CREATE_LEGACY_SCOPE_VERDICTS_SQL = `
|
|
47
|
+
CREATE TABLE IF NOT EXISTS legacy_scope_takeover_verdicts (
|
|
48
|
+
scope TEXT NOT NULL,
|
|
49
|
+
instance TEXT NOT NULL,
|
|
50
|
+
generation INTEGER NOT NULL DEFAULT 1,
|
|
51
|
+
legacy_version_id INTEGER NOT NULL,
|
|
52
|
+
canonical_cursor TEXT NOT NULL,
|
|
53
|
+
verdict TEXT NOT NULL CHECK (verdict IN ('covered', 'not_covered')),
|
|
54
|
+
comparison_case TEXT NOT NULL,
|
|
55
|
+
reason_counts_json TEXT NOT NULL,
|
|
56
|
+
applied_exceptions_json TEXT NOT NULL,
|
|
57
|
+
reason_json TEXT,
|
|
58
|
+
legacy_bytes INTEGER NOT NULL,
|
|
59
|
+
canonical_bytes INTEGER NOT NULL,
|
|
60
|
+
byte_delta INTEGER NOT NULL,
|
|
61
|
+
evaluated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
62
|
+
PRIMARY KEY (scope, instance, generation)
|
|
63
|
+
)`;
|
|
64
|
+
const CREATE_LEGACY_SCOPE_RESETS_SQL = `
|
|
65
|
+
CREATE TABLE IF NOT EXISTS legacy_scope_takeover_resets (
|
|
66
|
+
scope TEXT PRIMARY KEY,
|
|
67
|
+
reset_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
68
|
+
)`;
|
|
24
69
|
function hasColumn(db, table, column) {
|
|
25
70
|
const rows = db.pragma(`table_info(${table})`);
|
|
26
71
|
return rows.some((row) => row.name === column);
|
|
27
72
|
}
|
|
73
|
+
function hasTable(db, table) {
|
|
74
|
+
return (db
|
|
75
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?")
|
|
76
|
+
.get(table) !== undefined);
|
|
77
|
+
}
|
|
28
78
|
function migrateSchema(db, currentVersion) {
|
|
29
79
|
if (currentVersion < 2 && !hasColumn(db, "data_files", "schema_id")) {
|
|
30
80
|
db.exec("ALTER TABLE data_files ADD COLUMN schema_id TEXT");
|
|
@@ -46,6 +96,94 @@ function migrateSchema(db, currentVersion) {
|
|
|
46
96
|
// existed can claim to post-date a tombstone.
|
|
47
97
|
db.exec("ALTER TABLE data_files ADD COLUMN after_tombstone_version INTEGER");
|
|
48
98
|
}
|
|
99
|
+
// `< 6`, not `< 5`: owner-import builds stamped version 5 without these
|
|
100
|
+
// columns, so a version-5 database cannot be trusted to have them.
|
|
101
|
+
if (currentVersion < 6) {
|
|
102
|
+
if (!hasColumn(db, "data_files", "producer")) {
|
|
103
|
+
db.exec("ALTER TABLE data_files ADD COLUMN producer TEXT");
|
|
104
|
+
}
|
|
105
|
+
if (!hasColumn(db, "data_files", "producer_provenance")) {
|
|
106
|
+
db.exec("ALTER TABLE data_files ADD COLUMN producer_provenance TEXT");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (currentVersion < 6) {
|
|
110
|
+
if (!hasColumn(db, "data_files", "cas_revision")) {
|
|
111
|
+
db.exec("ALTER TABLE data_files ADD COLUMN cas_revision INTEGER NOT NULL DEFAULT 1");
|
|
112
|
+
db.exec("UPDATE data_files SET cas_revision = version");
|
|
113
|
+
}
|
|
114
|
+
db.exec(CREATE_SCOPE_REVISIONS_SQL);
|
|
115
|
+
db.exec(`
|
|
116
|
+
INSERT OR IGNORE INTO scope_revisions (scope, cas_revision)
|
|
117
|
+
SELECT scope, MAX(cas_revision) FROM data_files GROUP BY scope
|
|
118
|
+
`);
|
|
119
|
+
}
|
|
120
|
+
if (currentVersion < 7 &&
|
|
121
|
+
!hasColumn(db, "scope_revisions", "closed_for_writes")) {
|
|
122
|
+
db.exec("ALTER TABLE scope_revisions ADD COLUMN closed_for_writes INTEGER NOT NULL DEFAULT 0");
|
|
123
|
+
}
|
|
124
|
+
if (currentVersion < 10 &&
|
|
125
|
+
!hasColumn(db, "legacy_scope_takeovers", "instance")) {
|
|
126
|
+
db.exec("ALTER TABLE legacy_scope_takeovers ADD COLUMN instance TEXT");
|
|
127
|
+
}
|
|
128
|
+
if (currentVersion < 11 &&
|
|
129
|
+
!hasColumn(db, "legacy_scope_takeover_verdicts", "comparison_case")) {
|
|
130
|
+
db.exec("ALTER TABLE legacy_scope_takeover_verdicts ADD COLUMN comparison_case TEXT NOT NULL DEFAULT 'same_time'");
|
|
131
|
+
}
|
|
132
|
+
if (currentVersion < 11 &&
|
|
133
|
+
!hasColumn(db, "legacy_scope_takeover_verdicts", "reason_counts_json")) {
|
|
134
|
+
db.exec("ALTER TABLE legacy_scope_takeover_verdicts ADD COLUMN reason_counts_json TEXT NOT NULL DEFAULT '{}'");
|
|
135
|
+
}
|
|
136
|
+
if (currentVersion < 12 &&
|
|
137
|
+
!hasColumn(db, "legacy_scope_takeover_verdicts", "applied_exceptions_json")) {
|
|
138
|
+
db.exec("ALTER TABLE legacy_scope_takeover_verdicts ADD COLUMN applied_exceptions_json TEXT NOT NULL DEFAULT '[]'");
|
|
139
|
+
}
|
|
140
|
+
if (currentVersion < 13) {
|
|
141
|
+
const columns = db.pragma("table_info(legacy_scope_takeovers)");
|
|
142
|
+
if (columns.find((column) => column.name === "instance")?.pk !== 2) {
|
|
143
|
+
db.transaction(() => {
|
|
144
|
+
db.exec("ALTER TABLE legacy_scope_takeovers RENAME TO legacy_scope_takeovers_old");
|
|
145
|
+
db.exec(CREATE_LEGACY_SCOPE_TAKEOVERS_SQL);
|
|
146
|
+
db.exec(`INSERT INTO legacy_scope_takeovers
|
|
147
|
+
(scope, instance, superseded_version, superseded_cas_revision,
|
|
148
|
+
superseded_collected_at, superseded_path, taken_over_at)
|
|
149
|
+
SELECT scope, COALESCE(instance, ''), superseded_version,
|
|
150
|
+
superseded_cas_revision, superseded_collected_at,
|
|
151
|
+
superseded_path, taken_over_at
|
|
152
|
+
FROM legacy_scope_takeovers_old`);
|
|
153
|
+
db.exec("DROP TABLE legacy_scope_takeovers_old");
|
|
154
|
+
})();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (currentVersion < 14) {
|
|
158
|
+
db.transaction(() => {
|
|
159
|
+
db.exec("ALTER TABLE legacy_scope_takeovers RENAME TO legacy_scope_takeovers_old");
|
|
160
|
+
db.exec(CREATE_LEGACY_SCOPE_TAKEOVERS_SQL);
|
|
161
|
+
const takeoverGeneration = hasTable(db, "pdpp_instance_binding")
|
|
162
|
+
? "COALESCE((SELECT generation FROM pdpp_instance_binding WHERE instance = legacy_scope_takeovers_old.instance), 1)"
|
|
163
|
+
: "1";
|
|
164
|
+
db.exec(`INSERT INTO legacy_scope_takeovers
|
|
165
|
+
(scope, instance, generation, superseded_version, superseded_cas_revision,
|
|
166
|
+
superseded_collected_at, superseded_path, taken_over_at)
|
|
167
|
+
SELECT scope, instance, ${takeoverGeneration}, superseded_version, superseded_cas_revision,
|
|
168
|
+
superseded_collected_at, superseded_path, taken_over_at
|
|
169
|
+
FROM legacy_scope_takeovers_old`);
|
|
170
|
+
db.exec("DROP TABLE legacy_scope_takeovers_old");
|
|
171
|
+
db.exec("ALTER TABLE legacy_scope_takeover_verdicts RENAME TO legacy_scope_takeover_verdicts_old");
|
|
172
|
+
db.exec(CREATE_LEGACY_SCOPE_VERDICTS_SQL);
|
|
173
|
+
const verdictGeneration = hasTable(db, "pdpp_instance_binding")
|
|
174
|
+
? "COALESCE((SELECT generation FROM pdpp_instance_binding WHERE instance = legacy_scope_takeover_verdicts_old.instance), 1)"
|
|
175
|
+
: "1";
|
|
176
|
+
db.exec(`INSERT INTO legacy_scope_takeover_verdicts
|
|
177
|
+
(scope, instance, generation, legacy_version_id, canonical_cursor,
|
|
178
|
+
verdict, comparison_case, reason_counts_json, applied_exceptions_json,
|
|
179
|
+
reason_json, legacy_bytes, canonical_bytes, byte_delta, evaluated_at)
|
|
180
|
+
SELECT scope, instance, ${verdictGeneration}, legacy_version_id, canonical_cursor, verdict,
|
|
181
|
+
comparison_case, reason_counts_json, applied_exceptions_json,
|
|
182
|
+
reason_json, legacy_bytes, canonical_bytes, byte_delta, evaluated_at
|
|
183
|
+
FROM legacy_scope_takeover_verdicts_old`);
|
|
184
|
+
db.exec("DROP TABLE legacy_scope_takeover_verdicts_old");
|
|
185
|
+
})();
|
|
186
|
+
}
|
|
49
187
|
}
|
|
50
188
|
function ensureSchemaVersion(db) {
|
|
51
189
|
const currentVersion = db.pragma("user_version", { simple: true });
|
|
@@ -58,12 +196,55 @@ function ensureSchemaVersion(db) {
|
|
|
58
196
|
/** Open/create SQLite database, run CREATE TABLE IF NOT EXISTS, set WAL mode */
|
|
59
197
|
export function initializeDatabase(dbPath) {
|
|
60
198
|
const db = new Database(dbPath);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
199
|
+
try {
|
|
200
|
+
db.pragma("busy_timeout = 5000");
|
|
201
|
+
const deadline = performance.now() + 5000;
|
|
202
|
+
const pause = new Int32Array(new SharedArrayBuffer(4));
|
|
203
|
+
for (;;) {
|
|
204
|
+
try {
|
|
205
|
+
if (db.pragma("journal_mode", { simple: true }) !== "wal") {
|
|
206
|
+
db.pragma("journal_mode = WAL");
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
if (err.code !== "SQLITE_BUSY" ||
|
|
212
|
+
performance.now() >= deadline)
|
|
213
|
+
throw err;
|
|
214
|
+
Atomics.wait(pause, 0, 0, Math.min(50, deadline - performance.now()));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
db.pragma("synchronous = FULL");
|
|
218
|
+
db.exec(CREATE_TABLE_SQL);
|
|
219
|
+
db.exec(CREATE_SCOPE_REVISIONS_SQL);
|
|
220
|
+
db.exec(CREATE_LEGACY_SCOPE_TAKEOVERS_SQL);
|
|
221
|
+
db.exec(CREATE_LEGACY_SCOPE_VERDICTS_SQL);
|
|
222
|
+
db.exec(CREATE_LEGACY_SCOPE_RESETS_SQL);
|
|
223
|
+
ensureSchemaVersion(db);
|
|
224
|
+
db.exec(`CREATE TABLE IF NOT EXISTS owner_import_operations (
|
|
225
|
+
authority TEXT NOT NULL,
|
|
226
|
+
owner TEXT NOT NULL,
|
|
227
|
+
scope TEXT NOT NULL,
|
|
228
|
+
operation TEXT NOT NULL,
|
|
229
|
+
body_sha256 TEXT NOT NULL,
|
|
230
|
+
state TEXT NOT NULL CHECK(state IN ('prepared', 'accepted', 'deleted', 'cancelled')),
|
|
231
|
+
collected_at TEXT NOT NULL,
|
|
232
|
+
path TEXT NOT NULL,
|
|
233
|
+
envelope_bytes BLOB,
|
|
234
|
+
metadata_json TEXT,
|
|
235
|
+
receipt_json TEXT,
|
|
236
|
+
PRIMARY KEY(authority, owner, scope, operation)
|
|
237
|
+
)`);
|
|
238
|
+
db.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_owner_import_operations_path ON owner_import_operations(path)");
|
|
239
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_owner_import_operations_recovery ON owner_import_operations(operation) WHERE state = 'prepared' OR (state IN ('deleted', 'cancelled') AND metadata_json IS NOT NULL)");
|
|
240
|
+
for (const sql of CREATE_INDEXES_SQL) {
|
|
241
|
+
db.exec(sql);
|
|
242
|
+
}
|
|
243
|
+
return db;
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
db.close();
|
|
247
|
+
throw err;
|
|
66
248
|
}
|
|
67
|
-
return db;
|
|
68
249
|
}
|
|
69
250
|
//# sourceMappingURL=index-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-schema.js","sourceRoot":"","sources":["../../src/storage/index-schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"index-schema.js","sourceRoot":"","sources":["../../src/storage/index-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Database } from "better-sqlite3";
|
|
2
|
+
import type { LegacyScopeAuthority } from "@opendatalabs/personal-server-ts-core/storage/legacy-scope-view";
|
|
3
|
+
/**
|
|
4
|
+
* Registry facts for the legacy scope view, plus its durable takeover ledger.
|
|
5
|
+
* It does not open the record store: opening it migrates and sweeps, and this
|
|
6
|
+
* must also answer when PDPP is disabled. A table that was never created
|
|
7
|
+
* holds no connection and no evidence.
|
|
8
|
+
*
|
|
9
|
+
* It shares the record store's database connection, so its reads inside
|
|
10
|
+
* `readSnapshot` see that same snapshot. Takeover writes only the separate
|
|
11
|
+
* diagnostic ledger; it never changes the legacy index or its files.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createLegacyScopeAuthority(db: Database): LegacyScopeAuthority;
|
|
14
|
+
//# sourceMappingURL=legacy-scope-authority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-scope-authority.d.ts","sourceRoot":"","sources":["../../src/storage/legacy-scope-authority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,iEAAiE,CAAC;AAmDzE;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,GAAG,oBAAoB,CA+W7E"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
function reasonForRow(row) {
|
|
2
|
+
return row.reason_json
|
|
3
|
+
? JSON.parse(row.reason_json)
|
|
4
|
+
: null;
|
|
5
|
+
}
|
|
6
|
+
function coverageFromRow(row) {
|
|
7
|
+
const reason = reasonForRow(row);
|
|
8
|
+
return {
|
|
9
|
+
covered: row.verdict === "covered",
|
|
10
|
+
comparisonCase: row.comparison_case,
|
|
11
|
+
reasonCounts: JSON.parse(row.reason_counts_json),
|
|
12
|
+
appliedExceptions: JSON.parse(row.applied_exceptions_json),
|
|
13
|
+
reason: (row.verdict === "covered"
|
|
14
|
+
? null
|
|
15
|
+
: (reason?.reason ?? null)),
|
|
16
|
+
missingEntityCount: reason?.missingEntityCount ?? 0,
|
|
17
|
+
mismatchedFieldPaths: reason?.mismatchedFieldPaths ?? [],
|
|
18
|
+
legacyBytes: row.legacy_bytes,
|
|
19
|
+
canonicalBytes: row.canonical_bytes,
|
|
20
|
+
byteDelta: row.byte_delta,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Registry facts for the legacy scope view, plus its durable takeover ledger.
|
|
25
|
+
* It does not open the record store: opening it migrates and sweeps, and this
|
|
26
|
+
* must also answer when PDPP is disabled. A table that was never created
|
|
27
|
+
* holds no connection and no evidence.
|
|
28
|
+
*
|
|
29
|
+
* It shares the record store's database connection, so its reads inside
|
|
30
|
+
* `readSnapshot` see that same snapshot. Takeover writes only the separate
|
|
31
|
+
* diagnostic ledger; it never changes the legacy index or its files.
|
|
32
|
+
*/
|
|
33
|
+
export function createLegacyScopeAuthority(db) {
|
|
34
|
+
const hasTable = (name) => db
|
|
35
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?")
|
|
36
|
+
.get(name) !== undefined;
|
|
37
|
+
const isReset = (scope) => hasTable("legacy_scope_takeover_resets") &&
|
|
38
|
+
db
|
|
39
|
+
.prepare("SELECT 1 FROM legacy_scope_takeover_resets WHERE scope = ?")
|
|
40
|
+
.get(scope) !== undefined;
|
|
41
|
+
return {
|
|
42
|
+
listMethodConnections(methods) {
|
|
43
|
+
if (methods.length === 0 || !hasTable("pdpp_instance_binding")) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
// `listConnections` hides deleted connections; a deleted one is still
|
|
47
|
+
// evidence that the scope's data lived in the registry.
|
|
48
|
+
const rows = db
|
|
49
|
+
.prepare(`SELECT * FROM pdpp_instance_binding
|
|
50
|
+
WHERE method IN (${methods.map(() => "?").join(", ")})
|
|
51
|
+
ORDER BY instance`)
|
|
52
|
+
.all(...methods);
|
|
53
|
+
return rows.map((row) => ({
|
|
54
|
+
instance: row.instance,
|
|
55
|
+
sourceId: row.source_id ?? null,
|
|
56
|
+
method: row.method,
|
|
57
|
+
deletedAt: row.deleted_at ?? null,
|
|
58
|
+
generation: row.generation,
|
|
59
|
+
resetClock: row.reset_clock,
|
|
60
|
+
}));
|
|
61
|
+
},
|
|
62
|
+
hasHeldData(instance, streams) {
|
|
63
|
+
if (streams?.length === 0)
|
|
64
|
+
return false;
|
|
65
|
+
const streamFilter = streams
|
|
66
|
+
? ` AND stream IN (${streams.map(() => "?").join(", ")})`
|
|
67
|
+
: "";
|
|
68
|
+
const tables = [
|
|
69
|
+
"pdpp_records",
|
|
70
|
+
"pdpp_record_changes",
|
|
71
|
+
"pdpp_stream_completion",
|
|
72
|
+
].filter(hasTable);
|
|
73
|
+
return tables.some((table) => db
|
|
74
|
+
.prepare(`SELECT 1 FROM ${table} WHERE instance = ?${streamFilter} LIMIT 1`)
|
|
75
|
+
.get(instance, ...(streams ?? [])) !== undefined);
|
|
76
|
+
},
|
|
77
|
+
readSnapshot: (read) => db.transaction(read).deferred(),
|
|
78
|
+
writeClock() {
|
|
79
|
+
if (!hasTable("pdpp_write_clock"))
|
|
80
|
+
return 0;
|
|
81
|
+
return (db
|
|
82
|
+
.prepare("SELECT value FROM pdpp_write_clock WHERE id = 1")
|
|
83
|
+
.get()?.value ?? 0);
|
|
84
|
+
},
|
|
85
|
+
arrivalRevision() {
|
|
86
|
+
if (!hasTable("pdpp_record_arrival_clock"))
|
|
87
|
+
return 0;
|
|
88
|
+
return (db
|
|
89
|
+
.prepare("SELECT value FROM pdpp_record_arrival_clock WHERE id = 1")
|
|
90
|
+
.get()?.value ?? 0);
|
|
91
|
+
},
|
|
92
|
+
hasTakeover(scope, instance, generation) {
|
|
93
|
+
const instanceFilter = instance === undefined
|
|
94
|
+
? ""
|
|
95
|
+
: generation === undefined
|
|
96
|
+
? " AND (instance = ? OR instance = '')"
|
|
97
|
+
: " AND ((instance = ? AND generation = ?) OR instance = '')";
|
|
98
|
+
const params = instance === undefined
|
|
99
|
+
? [scope]
|
|
100
|
+
: generation === undefined
|
|
101
|
+
? [scope, instance]
|
|
102
|
+
: [scope, instance, generation];
|
|
103
|
+
return (hasTable("legacy_scope_takeovers") &&
|
|
104
|
+
db
|
|
105
|
+
.prepare(`SELECT 1 FROM legacy_scope_takeovers WHERE scope = ?${instanceFilter}`)
|
|
106
|
+
.get(...params) !== undefined);
|
|
107
|
+
},
|
|
108
|
+
hasCoveredHead(scope, head, instance) {
|
|
109
|
+
const instanceFilter = instance === undefined ? "" : " AND (instance = ? OR instance = '')";
|
|
110
|
+
const params = instance === undefined
|
|
111
|
+
? [scope, head.path]
|
|
112
|
+
: [scope, head.path, instance];
|
|
113
|
+
return (hasTable("legacy_scope_takeovers") &&
|
|
114
|
+
db
|
|
115
|
+
.prepare(`SELECT 1 FROM legacy_scope_takeovers WHERE scope = ? AND superseded_path = ?${instanceFilter}`)
|
|
116
|
+
.get(...params) !== undefined);
|
|
117
|
+
},
|
|
118
|
+
isReset(scope) {
|
|
119
|
+
return isReset(scope);
|
|
120
|
+
},
|
|
121
|
+
cachedVerdict(scope, instance, generation, legacyVersionId, canonicalCursor) {
|
|
122
|
+
if (!hasTable("legacy_scope_takeover_verdicts"))
|
|
123
|
+
return null;
|
|
124
|
+
const row = db
|
|
125
|
+
.prepare(`SELECT * FROM legacy_scope_takeover_verdicts
|
|
126
|
+
WHERE scope = ? AND instance = ? AND generation = ? AND legacy_version_id = ? AND canonical_cursor = ?`)
|
|
127
|
+
.get(scope, instance, generation, legacyVersionId, canonicalCursor);
|
|
128
|
+
return row ? coverageFromRow(row) : null;
|
|
129
|
+
},
|
|
130
|
+
verdictFor(scope) {
|
|
131
|
+
if (!hasTable("legacy_scope_takeover_verdicts"))
|
|
132
|
+
return [];
|
|
133
|
+
const rows = db
|
|
134
|
+
.prepare("SELECT * FROM legacy_scope_takeover_verdicts WHERE scope = ? ORDER BY instance")
|
|
135
|
+
.all(scope);
|
|
136
|
+
return rows.map((row) => ({
|
|
137
|
+
scope: row.scope,
|
|
138
|
+
instance: row.instance,
|
|
139
|
+
generation: row.generation,
|
|
140
|
+
legacyVersionId: row.legacy_version_id,
|
|
141
|
+
canonicalCursor: row.canonical_cursor,
|
|
142
|
+
verdict: row.verdict,
|
|
143
|
+
comparisonCase: row.comparison_case,
|
|
144
|
+
reasonCounts: JSON.parse(row.reason_counts_json),
|
|
145
|
+
appliedExceptions: JSON.parse(row.applied_exceptions_json),
|
|
146
|
+
reason: reasonForRow(row),
|
|
147
|
+
legacyBytes: row.legacy_bytes,
|
|
148
|
+
canonicalBytes: row.canonical_bytes,
|
|
149
|
+
byteDelta: row.byte_delta,
|
|
150
|
+
evaluatedAt: row.evaluated_at,
|
|
151
|
+
}));
|
|
152
|
+
},
|
|
153
|
+
resetTakeover(scope) {
|
|
154
|
+
db.transaction(() => {
|
|
155
|
+
if (hasTable("legacy_scope_takeover_verdicts"))
|
|
156
|
+
db.prepare("DELETE FROM legacy_scope_takeover_verdicts WHERE scope = ?").run(scope);
|
|
157
|
+
if (hasTable("legacy_scope_takeovers"))
|
|
158
|
+
db.prepare("DELETE FROM legacy_scope_takeovers WHERE scope = ?").run(scope);
|
|
159
|
+
if (hasTable("legacy_scope_takeover_resets"))
|
|
160
|
+
db.prepare("INSERT OR REPLACE INTO legacy_scope_takeover_resets (scope) VALUES (?)").run(scope);
|
|
161
|
+
}).immediate();
|
|
162
|
+
},
|
|
163
|
+
eligibleLegacyHead(scope) {
|
|
164
|
+
return readEligibleLegacyHead(scope);
|
|
165
|
+
},
|
|
166
|
+
confirmRead(scope, expectedHead, selectionIsCurrent, verdict) {
|
|
167
|
+
if (!hasTable("data_files"))
|
|
168
|
+
return expectedHead === null;
|
|
169
|
+
const validate = () => {
|
|
170
|
+
if (isReset(scope))
|
|
171
|
+
return false;
|
|
172
|
+
const currentHead = readEligibleLegacyHead(scope);
|
|
173
|
+
if (!sameHead(currentHead, expectedHead) || !selectionIsCurrent()) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
if (verdict &&
|
|
177
|
+
verdict.writeClock !==
|
|
178
|
+
db
|
|
179
|
+
.prepare("SELECT value FROM pdpp_write_clock WHERE id = 1")
|
|
180
|
+
.get().value)
|
|
181
|
+
return false;
|
|
182
|
+
if (verdict &&
|
|
183
|
+
verdict.arrivalRevision !==
|
|
184
|
+
db
|
|
185
|
+
.prepare("SELECT value FROM pdpp_record_arrival_clock WHERE id = 1")
|
|
186
|
+
.get().value)
|
|
187
|
+
return false;
|
|
188
|
+
if (expectedHead === null)
|
|
189
|
+
return true;
|
|
190
|
+
if (verdict?.cached)
|
|
191
|
+
return true;
|
|
192
|
+
if (!hasTable("legacy_scope_takeovers"))
|
|
193
|
+
return false;
|
|
194
|
+
if (verdict) {
|
|
195
|
+
if (!hasTable("legacy_scope_takeover_verdicts"))
|
|
196
|
+
return false;
|
|
197
|
+
const coverage = verdict.coverage;
|
|
198
|
+
db.prepare(`INSERT INTO legacy_scope_takeover_verdicts
|
|
199
|
+
(scope, instance, generation, legacy_version_id, canonical_cursor, verdict, comparison_case, reason_counts_json, applied_exceptions_json, reason_json,
|
|
200
|
+
legacy_bytes, canonical_bytes, byte_delta)
|
|
201
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
202
|
+
ON CONFLICT(scope, instance, generation) DO UPDATE SET
|
|
203
|
+
legacy_version_id = excluded.legacy_version_id,
|
|
204
|
+
canonical_cursor = excluded.canonical_cursor,
|
|
205
|
+
verdict = excluded.verdict,
|
|
206
|
+
comparison_case = excluded.comparison_case,
|
|
207
|
+
reason_counts_json = excluded.reason_counts_json,
|
|
208
|
+
applied_exceptions_json = excluded.applied_exceptions_json,
|
|
209
|
+
reason_json = excluded.reason_json,
|
|
210
|
+
legacy_bytes = excluded.legacy_bytes,
|
|
211
|
+
canonical_bytes = excluded.canonical_bytes,
|
|
212
|
+
byte_delta = excluded.byte_delta,
|
|
213
|
+
evaluated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
214
|
+
`).run(scope, verdict.instance, verdict.generation, expectedHead.id, verdict.canonicalCursor, coverage.covered ? "covered" : "not_covered", coverage.comparisonCase, JSON.stringify(coverage.reasonCounts), JSON.stringify(coverage.appliedExceptions), coverage.covered && coverage.missingEntityCount === 0
|
|
215
|
+
? null
|
|
216
|
+
: JSON.stringify({
|
|
217
|
+
reason: coverage.covered
|
|
218
|
+
? "proven_deletion"
|
|
219
|
+
: coverage.reason,
|
|
220
|
+
missingEntityCount: coverage.missingEntityCount,
|
|
221
|
+
mismatchedFieldPaths: coverage.mismatchedFieldPaths,
|
|
222
|
+
}), coverage.legacyBytes, coverage.canonicalBytes, coverage.byteDelta);
|
|
223
|
+
if (!coverage.covered)
|
|
224
|
+
return true;
|
|
225
|
+
db.prepare(`INSERT OR IGNORE INTO legacy_scope_takeovers
|
|
226
|
+
(scope, instance, generation, superseded_version, superseded_cas_revision, superseded_collected_at, superseded_path)
|
|
227
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(scope, verdict.instance, verdict.generation, expectedHead.version, expectedHead.casRevision, expectedHead.collectedAt, expectedHead.path);
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
// A non-null producer is explicit ownership evidence from another
|
|
231
|
+
// legacy pipeline. Null covers manual and old connector files.
|
|
232
|
+
db.prepare(`
|
|
233
|
+
INSERT OR IGNORE INTO legacy_scope_takeovers (
|
|
234
|
+
scope, superseded_version, superseded_cas_revision,
|
|
235
|
+
superseded_collected_at, superseded_path
|
|
236
|
+
)
|
|
237
|
+
SELECT scope, version, cas_revision, collected_at, path
|
|
238
|
+
FROM data_files
|
|
239
|
+
WHERE scope = ?
|
|
240
|
+
AND (producer IS NULL OR producer NOT IN ('pdpp-projector', 'pdpp-import-projection'))
|
|
241
|
+
ORDER BY julianday(collected_at) DESC, id DESC
|
|
242
|
+
`).run(scope);
|
|
243
|
+
return true;
|
|
244
|
+
};
|
|
245
|
+
try {
|
|
246
|
+
return expectedHead === null || verdict?.cached
|
|
247
|
+
? db.transaction(validate).deferred()
|
|
248
|
+
: db.transaction(validate).immediate();
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
if (expectedHead !== null &&
|
|
252
|
+
typeof error === "object" &&
|
|
253
|
+
error !== null &&
|
|
254
|
+
"code" in error &&
|
|
255
|
+
(error.code === "SQLITE_BUSY" || error.code === "SQLITE_LOCKED")) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
function readEligibleLegacyHead(scope) {
|
|
263
|
+
if (!hasTable("data_files"))
|
|
264
|
+
return null;
|
|
265
|
+
const latest = db
|
|
266
|
+
.prepare(`
|
|
267
|
+
SELECT id, path, version, cas_revision, collected_at, producer
|
|
268
|
+
FROM data_files
|
|
269
|
+
WHERE scope = ?
|
|
270
|
+
ORDER BY julianday(collected_at) DESC, id DESC
|
|
271
|
+
LIMIT 1
|
|
272
|
+
`)
|
|
273
|
+
.get(scope);
|
|
274
|
+
if (!latest ||
|
|
275
|
+
latest.producer === "pdpp-projector" ||
|
|
276
|
+
latest.producer === "pdpp-import-projection") {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
id: latest.id,
|
|
281
|
+
path: latest.path,
|
|
282
|
+
version: latest.version,
|
|
283
|
+
casRevision: latest.cas_revision,
|
|
284
|
+
collectedAt: latest.collected_at,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function sameHead(left, right) {
|
|
289
|
+
return left === null
|
|
290
|
+
? right === null
|
|
291
|
+
: right !== null &&
|
|
292
|
+
left.id === right.id &&
|
|
293
|
+
left.path === right.path &&
|
|
294
|
+
left.version === right.version &&
|
|
295
|
+
left.casRevision === right.casRevision &&
|
|
296
|
+
left.collectedAt === right.collectedAt;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=legacy-scope-authority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-scope-authority.js","sourceRoot":"","sources":["../../src/storage/legacy-scope-authority.ts"],"names":[],"mappings":"AAwBA,SAAS,YAAY,CAAC,GAAe;IACnC,OAAO,GAAG,CAAC,WAAW;QACpB,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAIzB;QACJ,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,GAAe;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS;QAClC,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CACtB,GAAG,CAAC,kBAAkB,CACkB;QAC1C,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAC3B,GAAG,CAAC,uBAAuB,CACkB;QAC/C,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS;YAChC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,CAAoC;QAChE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,IAAI,CAAC;QACnD,oBAAoB,EAAE,MAAM,EAAE,oBAAoB,IAAI,EAAE;QACxD,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAY;IACrD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAChC,EAAE;SACC,OAAO,CAAC,+DAA+D,CAAC;SACxE,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAC7B,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE,CAChC,QAAQ,CAAC,8BAA8B,CAAC;QACxC,EAAE;aACC,OAAO,CAAC,4DAA4D,CAAC;aACrE,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAE9B,OAAO;QACL,qBAAqB,CAAC,OAAO;YAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,sEAAsE;YACtE,wDAAwD;YACxD,MAAM,IAAI,GAAG,EAAE;iBACZ,OAAO,CACN;+BACqB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;8BAClC,CACrB;iBACA,GAAG,CAAC,GAAG,OAAO,CAOd,CAAC;YACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;gBAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;gBACjC,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,UAAU,EAAE,GAAG,CAAC,WAAW;aAC5B,CAAC,CAAC,CAAC;QACN,CAAC;QAED,WAAW,CAAC,QAAQ,EAAE,OAAO;YAC3B,IAAI,OAAO,EAAE,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACxC,MAAM,YAAY,GAAG,OAAO;gBAC1B,CAAC,CAAC,mBAAmB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACzD,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,MAAM,GAAG;gBACb,cAAc;gBACd,qBAAqB;gBACrB,wBAAwB;aACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO,MAAM,CAAC,IAAI,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,EAAE;iBACC,OAAO,CACN,iBAAiB,KAAK,sBAAsB,YAAY,UAAU,CACnE;iBACA,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,CACrD,CAAC;QACJ,CAAC;QAED,YAAY,EAAE,CAAI,IAAa,EAAK,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAEtE,UAAU;YACR,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC5C,OAAO,CAEH,EAAE;iBACC,OAAO,CAAC,iDAAiD,CAAC;iBAC1D,GAAG,EACP,EAAE,KAAK,IAAI,CAAC,CACd,CAAC;QACJ,CAAC;QAED,eAAe;YACb,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;gBAAE,OAAO,CAAC,CAAC;YACrD,OAAO,CAEH,EAAE;iBACC,OAAO,CAAC,0DAA0D,CAAC;iBACnE,GAAG,EACP,EAAE,KAAK,IAAI,CAAC,CACd,CAAC;QACJ,CAAC;QAED,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU;YACrC,MAAM,cAAc,GAClB,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,UAAU,KAAK,SAAS;oBACxB,CAAC,CAAC,sCAAsC;oBACxC,CAAC,CAAC,2DAA2D,CAAC;YACpE,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,CAAC,KAAK,CAAC;gBACT,CAAC,CAAC,UAAU,KAAK,SAAS;oBACxB,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC;oBACnB,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtC,OAAO,CACL,QAAQ,CAAC,wBAAwB,CAAC;gBAClC,EAAE;qBACC,OAAO,CACN,uDAAuD,cAAc,EAAE,CACxE;qBACA,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,SAAS,CAChC,CAAC;QACJ,CAAC;QAED,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ;YAClC,MAAM,cAAc,GAClB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sCAAsC,CAAC;YACvE,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;gBACpB,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACnC,OAAO,CACL,QAAQ,CAAC,wBAAwB,CAAC;gBAClC,EAAE;qBACC,OAAO,CACN,+EAA+E,cAAc,EAAE,CAChG;qBACA,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,SAAS,CAChC,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,KAAK;YACX,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,aAAa,CACX,KAAK,EACL,QAAQ,EACR,UAAU,EACV,eAAe,EACf,eAAe;YAEf,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC7D,MAAM,GAAG,GAAG,EAAE;iBACX,OAAO,CACN;+GACqG,CACtG;iBACA,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,CAC5C,CAAC;YACzB,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,CAAC;QAED,UAAU,CAAC,KAAK;YACd,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,EAAE;iBACZ,OAAO,CACN,gFAAgF,CACjF;iBACA,GAAG,CAAC,KAAK,CAAiB,CAAC;YAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,eAAe,EAAE,GAAG,CAAC,iBAAiB;gBACtC,eAAe,EAAE,GAAG,CAAC,gBAAgB;gBACrC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,cAAc,EAAE,GAAG,CAAC,eAAe;gBACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAG9C;gBACD,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAC3B,GAAG,CAAC,uBAAuB,CACkB;gBAC/C,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC;gBACzB,WAAW,EAAE,GAAG,CAAC,YAAY;gBAC7B,cAAc,EAAE,GAAG,CAAC,eAAe;gBACnC,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,WAAW,EAAE,GAAG,CAAC,YAAY;aAC9B,CAAC,CAAC,CAAC;QACN,CAAC;QAED,aAAa,CAAC,KAAK;YACjB,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBAClB,IAAI,QAAQ,CAAC,gCAAgC,CAAC;oBAC5C,EAAE,CAAC,OAAO,CACR,4DAA4D,CAC7D,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,IAAI,QAAQ,CAAC,wBAAwB,CAAC;oBACpC,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,CAClE,KAAK,CACN,CAAC;gBACJ,IAAI,QAAQ,CAAC,8BAA8B,CAAC;oBAC1C,EAAE,CAAC,OAAO,CACR,wEAAwE,CACzE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACjB,CAAC;QAED,kBAAkB,CAAC,KAAK;YACtB,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,OAAO;YAC1D,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAAE,OAAO,YAAY,KAAK,IAAI,CAAC;YAC1D,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACpB,IAAI,OAAO,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACjC,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;oBAClE,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IACE,OAAO;oBACP,OAAO,CAAC,UAAU;wBAEd,EAAE;6BACC,OAAO,CAAC,iDAAiD,CAAC;6BAC1D,GAAG,EACP,CAAC,KAAK;oBAET,OAAO,KAAK,CAAC;gBACf,IACE,OAAO;oBACP,OAAO,CAAC,eAAe;wBAEnB,EAAE;6BACC,OAAO,CACN,0DAA0D,CAC3D;6BACA,GAAG,EACP,CAAC,KAAK;oBAET,OAAO,KAAK,CAAC;gBACf,IAAI,YAAY,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvC,IAAI,OAAO,EAAE,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAEtD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;oBAClC,EAAE,CAAC,OAAO,CACR;;;;;;;;;;;;;;;;WAgBD,CACA,CAAC,GAAG,CACH,KAAK,EACL,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,UAAU,EAClB,YAAY,CAAC,EAAE,EACf,OAAO,CAAC,eAAe,EACvB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAC5C,QAAQ,CAAC,cAAc,EACvB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC1C,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,kBAAkB,KAAK,CAAC;wBACnD,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;4BACb,MAAM,EAAE,QAAQ,CAAC,OAAO;gCACtB,CAAC,CAAC,iBAAiB;gCACnB,CAAC,CAAC,QAAQ,CAAC,MAAM;4BACnB,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;4BAC/C,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;yBACpD,CAAC,EACN,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,cAAc,EACvB,QAAQ,CAAC,SAAS,CACnB,CAAC;oBACF,IAAI,CAAC,QAAQ,CAAC,OAAO;wBAAE,OAAO,IAAI,CAAC;oBACnC,EAAE,CAAC,OAAO,CACR;;yCAE6B,CAC9B,CAAC,GAAG,CACH,KAAK,EACL,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,UAAU,EAClB,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,WAAW,EACxB,YAAY,CAAC,WAAW,EACxB,YAAY,CAAC,IAAI,CAClB,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,kEAAkE;gBAClE,+DAA+D;gBAC/D,EAAE,CAAC,OAAO,CACR;;;;;;;;;;SAUD,CACA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACb,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YACF,IAAI,CAAC;gBACH,OAAO,YAAY,KAAK,IAAI,IAAI,OAAO,EAAE,MAAM;oBAC7C,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;oBACrC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IACE,YAAY,KAAK,IAAI;oBACrB,OAAO,KAAK,KAAK,QAAQ;oBACzB,KAAK,KAAK,IAAI;oBACd,MAAM,IAAI,KAAK;oBACf,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,EAChE,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;IAEF,SAAS,sBAAsB,CAAC,KAAa;QAC3C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,MAAM,GAAG,EAAE;aACd,OAAO,CACN;;;;;;OAMD,CACA;aACA,GAAG,CAAC,KAAK,CASC,CAAC;QACd,IACE,CAAC,MAAM;YACP,MAAM,CAAC,QAAQ,KAAK,gBAAgB;YACpC,MAAM,CAAC,QAAQ,KAAK,wBAAwB,EAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,YAAY;YAChC,WAAW,EAAE,MAAM,CAAC,YAAY;SACjC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,IAA4B,EAC5B,KAA6B;IAE7B,OAAO,IAAI,KAAK,IAAI;QAClB,CAAC,CAAC,KAAK,KAAK,IAAI;QAChB,CAAC,CAAC,KAAK,KAAK,IAAI;YACZ,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;YACpB,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YACxB,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;YAC9B,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;YACtC,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC;AAC/C,CAAC"}
|
|
@@ -5,5 +5,11 @@ export interface NodeDataStorageDeps {
|
|
|
5
5
|
indexManager: IndexManager;
|
|
6
6
|
hierarchyOptions: HierarchyManagerOptions;
|
|
7
7
|
}
|
|
8
|
+
/** Finish committed stages and discard stages that lost their index race. */
|
|
9
|
+
export declare function recoverStagedDataFiles(deps: NodeDataStorageDeps): Promise<void>;
|
|
10
|
+
/** Rebuild a lost legacy index from finalized envelopes, never from stages. */
|
|
11
|
+
export declare function reindexLegacyDataFiles(deps: NodeDataStorageDeps & {
|
|
12
|
+
closeRecoveredScopeForWrites?: (scope: string) => boolean | Promise<boolean>;
|
|
13
|
+
}): Promise<number>;
|
|
8
14
|
export declare function createNodeDataStorage(deps: NodeDataStorageDeps): DataStoragePort;
|
|
9
15
|
//# sourceMappingURL=node-data-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-data-storage.d.ts","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-data-storage.d.ts","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,6CAA6C,CAAC;AAKrD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C;AAED,6EAA6E;AAC7E,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED,+EAA+E;AAC/E,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,mBAAmB,GAAG;IAC1B,4BAA4B,CAAC,EAAE,CAC7B,KAAK,EAAE,MAAM,KACV,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC,GACA,OAAO,CAAC,MAAM,CAAC,CA+DjB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,mBAAmB,GACxB,eAAe,CA2OjB"}
|