@x12i/catalox 2.2.2 → 2.4.0

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 (75) hide show
  1. package/README.md +42 -7
  2. package/dist/src/catalox/backup-data.d.ts +40 -0
  3. package/dist/src/catalox/backup-data.d.ts.map +1 -0
  4. package/dist/src/catalox/backup-data.js +522 -0
  5. package/dist/src/catalox/backup-data.js.map +1 -0
  6. package/dist/src/catalox/catalox.d.ts +25 -0
  7. package/dist/src/catalox/catalox.d.ts.map +1 -1
  8. package/dist/src/catalox/catalox.js +63 -1
  9. package/dist/src/catalox/catalox.js.map +1 -1
  10. package/dist/src/catalox/index.d.ts +3 -0
  11. package/dist/src/catalox/index.d.ts.map +1 -1
  12. package/dist/src/catalox/index.js +3 -0
  13. package/dist/src/catalox/index.js.map +1 -1
  14. package/dist/src/catalox/native-catalog-layout-diagnostics.d.ts +29 -0
  15. package/dist/src/catalox/native-catalog-layout-diagnostics.d.ts.map +1 -0
  16. package/dist/src/catalox/native-catalog-layout-diagnostics.js +55 -0
  17. package/dist/src/catalox/native-catalog-layout-diagnostics.js.map +1 -0
  18. package/dist/src/catalox/restore-firestore-backup.d.ts +13 -0
  19. package/dist/src/catalox/restore-firestore-backup.d.ts.map +1 -0
  20. package/dist/src/catalox/restore-firestore-backup.js +326 -0
  21. package/dist/src/catalox/restore-firestore-backup.js.map +1 -0
  22. package/dist/src/cli/index.js +156 -5
  23. package/dist/src/cli/index.js.map +1 -1
  24. package/dist/src/contracts/backup.d.ts +36 -0
  25. package/dist/src/contracts/backup.d.ts.map +1 -0
  26. package/dist/src/contracts/backup.js +2 -0
  27. package/dist/src/contracts/backup.js.map +1 -0
  28. package/dist/src/contracts/catalog-data-index.d.ts +13 -0
  29. package/dist/src/contracts/catalog-data-index.d.ts.map +1 -0
  30. package/dist/src/contracts/catalog-data-index.js +2 -0
  31. package/dist/src/contracts/catalog-data-index.js.map +1 -0
  32. package/dist/src/contracts/catalogs.d.ts +2 -1
  33. package/dist/src/contracts/catalogs.d.ts.map +1 -1
  34. package/dist/src/contracts/index.d.ts +3 -0
  35. package/dist/src/contracts/index.d.ts.map +1 -1
  36. package/dist/src/contracts/index.js.map +1 -1
  37. package/dist/src/contracts/restore.d.ts +44 -0
  38. package/dist/src/contracts/restore.d.ts.map +1 -0
  39. package/dist/src/contracts/restore.js +2 -0
  40. package/dist/src/contracts/restore.js.map +1 -0
  41. package/dist/src/firebase/catalog-data-index-store.d.ts +14 -0
  42. package/dist/src/firebase/catalog-data-index-store.d.ts.map +1 -0
  43. package/dist/src/firebase/catalog-data-index-store.js +33 -0
  44. package/dist/src/firebase/catalog-data-index-store.js.map +1 -0
  45. package/dist/src/firebase/catalog-data-paths.d.ts +14 -0
  46. package/dist/src/firebase/catalog-data-paths.d.ts.map +1 -0
  47. package/dist/src/firebase/catalog-data-paths.js +31 -0
  48. package/dist/src/firebase/catalog-data-paths.js.map +1 -0
  49. package/dist/src/firebase/index.d.ts +2 -0
  50. package/dist/src/firebase/index.d.ts.map +1 -1
  51. package/dist/src/firebase/index.js +2 -0
  52. package/dist/src/firebase/index.js.map +1 -1
  53. package/dist/src/firebase/native-item-store.d.ts +5 -1
  54. package/dist/src/firebase/native-item-store.d.ts.map +1 -1
  55. package/dist/src/firebase/native-item-store.js +33 -15
  56. package/dist/src/firebase/native-item-store.js.map +1 -1
  57. package/dist/src/migrations/index.d.ts +1 -0
  58. package/dist/src/migrations/index.d.ts.map +1 -1
  59. package/dist/src/migrations/index.js +1 -0
  60. package/dist/src/migrations/index.js.map +1 -1
  61. package/dist/src/migrations/migrate-native-catalog-layout.d.ts +51 -0
  62. package/dist/src/migrations/migrate-native-catalog-layout.d.ts.map +1 -0
  63. package/dist/src/migrations/migrate-native-catalog-layout.js +224 -0
  64. package/dist/src/migrations/migrate-native-catalog-layout.js.map +1 -0
  65. package/dist/test/integration/firestore.emulator.test.js +10 -2
  66. package/dist/test/integration/firestore.emulator.test.js.map +1 -1
  67. package/dist/test/unit/backup-timestamp.test.d.ts +2 -0
  68. package/dist/test/unit/backup-timestamp.test.d.ts.map +1 -0
  69. package/dist/test/unit/backup-timestamp.test.js +11 -0
  70. package/dist/test/unit/backup-timestamp.test.js.map +1 -0
  71. package/dist/test/unit/resolve-native-items-layout.test.d.ts +2 -0
  72. package/dist/test/unit/resolve-native-items-layout.test.d.ts.map +1 -0
  73. package/dist/test/unit/resolve-native-items-layout.test.js +50 -0
  74. package/dist/test/unit/resolve-native-items-layout.test.js.map +1 -0
  75. package/package.json +2 -1
@@ -0,0 +1,522 @@
1
+ import { FieldPath } from "firebase-admin/firestore";
2
+ import { MongoClient } from "mongodb";
3
+ import { CatalogStore } from "../firebase/catalog-store.js";
4
+ import { BindingStore } from "../firebase/binding-store.js";
5
+ import { FirestoreStore } from "../firebase/firestore-store.js";
6
+ import { flatNativeItemsCollectionRef, legacyNativeItemsCollectionRef, nativeItemsCollectionId, resolveNativeItemsLayout, } from "../firebase/catalog-data-paths.js";
7
+ const MONGO_BACKUP_DB = "catalox-backups";
8
+ export const BACKUP_METADATA_SOURCE_NAMES = [
9
+ "apps",
10
+ "catalogs",
11
+ "catalogBindings",
12
+ "storeAppBindings",
13
+ "catalogDefinitions",
14
+ "catalogDescriptors",
15
+ "catalogMappings",
16
+ "catalogAdapters",
17
+ "catalogReferences",
18
+ /** Parent docs only (`catalogData/{catalogId}`); subcollections are not copied. */
19
+ "catalogData",
20
+ ];
21
+ export function formatBackupTimestamp(versionOverride, d = new Date()) {
22
+ if (versionOverride?.trim()) {
23
+ return versionOverride.trim().replace(/[/\\]/g, "_");
24
+ }
25
+ const iso = d.toISOString().replace(/\.\d{3}Z$/, "Z");
26
+ return iso.replace(/[-:]/g, "_").replace(/\./g, "_");
27
+ }
28
+ function firebaseTmpName(logical) {
29
+ return `tmp-backup-${logical}`;
30
+ }
31
+ /** Latest Firebase backup mirror collection id for a logical source (e.g. `apps`, `catalogData--{id}`). */
32
+ export function firebaseLatestName(logical) {
33
+ return `backup-${logical}`;
34
+ }
35
+ /** Versioned Firebase backup collection id. */
36
+ export function firebaseVersionedName(ts, logical) {
37
+ return `${ts}__backup-${logical}`;
38
+ }
39
+ function mongoTmpName(logical) {
40
+ return `__tmp_backup_${logical}`;
41
+ }
42
+ function mongoVersionedName(ts, logical) {
43
+ return `${ts}__${logical}`;
44
+ }
45
+ function mongoNativeItemsCollectionName(catalogId) {
46
+ return `catalogData__${sanitizeMongoCollectionPart(catalogId)}`;
47
+ }
48
+ function mongoSnapshotCollectionName(catalogId) {
49
+ return `catalogSnapshots__${sanitizeMongoCollectionPart(catalogId)}`;
50
+ }
51
+ function mongoSnapshotRunCollectionName(catalogId, runId) {
52
+ return `catalogSnapshotsRun__${sanitizeMongoCollectionPart(catalogId)}__${sanitizeMongoCollectionPart(runId)}`;
53
+ }
54
+ function sanitizeMongoCollectionPart(s) {
55
+ return String(s).replace(/[^a-zA-Z0-9_-]/g, "_");
56
+ }
57
+ export function firebaseNativeLogical(catalogId) {
58
+ return `catalogData--${catalogId}`;
59
+ }
60
+ export function firebaseSnapshotLogical(catalogId) {
61
+ return `catalogSnapshots--${catalogId}`;
62
+ }
63
+ export function firebaseSnapshotRunLogical(catalogId, runId) {
64
+ return `catalogSnapshotsRun--${catalogId}--${runId}`;
65
+ }
66
+ export async function paginatedCopyFirestoreToFirestore(fs, sourceCollectionPath, destCollectionPath, counts, countKey) {
67
+ const src = fs.collection(sourceCollectionPath);
68
+ const dst = fs.collection(destCollectionPath);
69
+ let last;
70
+ let total = 0;
71
+ while (true) {
72
+ let q = src.orderBy(FieldPath.documentId()).limit(400);
73
+ if (last)
74
+ q = q.startAfter(last);
75
+ const snap = await q.get();
76
+ if (snap.empty)
77
+ break;
78
+ const batch = fs.batch();
79
+ for (const d of snap.docs) {
80
+ batch.set(dst.doc(d.id), d.data(), { merge: false });
81
+ total += 1;
82
+ }
83
+ await batch.commit();
84
+ last = snap.docs[snap.docs.length - 1];
85
+ }
86
+ counts[countKey] = (counts[countKey] ?? 0) + total;
87
+ }
88
+ export async function deleteAllDocsInFirestoreCollection(fs, collectionPath) {
89
+ const col = fs.collection(collectionPath);
90
+ while (true) {
91
+ const snap = await col.limit(450).get();
92
+ if (snap.empty)
93
+ break;
94
+ const batch = fs.batch();
95
+ for (const d of snap.docs)
96
+ batch.delete(d.ref);
97
+ await batch.commit();
98
+ }
99
+ }
100
+ export async function discoverNativeCatalogIds(fs, catalogs, opts) {
101
+ const ids = new Set();
102
+ for (const c of catalogs) {
103
+ if (c.sourceMode === "native")
104
+ ids.add(String(c.catalogId));
105
+ }
106
+ const parentRefs = await fs.collection("catalogData").listDocuments();
107
+ for (const pref of parentRefs) {
108
+ const cid = pref.id;
109
+ const leg = await pref.collection("items").limit(1).get();
110
+ const flat = await fs.collection(nativeItemsCollectionId(cid)).limit(1).get();
111
+ if (!leg.empty || !flat.empty)
112
+ ids.add(cid);
113
+ }
114
+ let list = [...ids];
115
+ if (opts.appId) {
116
+ const binds = await opts.bindings.listByApp(opts.appId);
117
+ const allowed = new Set(binds.map((b) => String(b.catalogId)));
118
+ list = list.filter((id) => allowed.has(id));
119
+ }
120
+ if (opts.catalogIds?.length) {
121
+ const allow = new Set(opts.catalogIds.map(String));
122
+ list = list.filter((id) => allow.has(id));
123
+ }
124
+ return list;
125
+ }
126
+ async function copyNativeCatalogToFirestoreBackup(fs, catalogId, destCollectionPath, counts, layout) {
127
+ const src = layout === "legacy"
128
+ ? legacyNativeItemsCollectionRef(fs, catalogId)
129
+ : flatNativeItemsCollectionRef(fs, catalogId);
130
+ await paginatedCopyFirestoreToFirestore(fs, src.path, destCollectionPath, counts, destCollectionPath);
131
+ }
132
+ async function mongoReplacePage(col, docs) {
133
+ const bulk = docs.map((d) => {
134
+ const payload = { ...d.data() };
135
+ delete payload._id;
136
+ return {
137
+ replaceOne: {
138
+ filter: { _id: d.id },
139
+ replacement: { _id: d.id, ...payload },
140
+ upsert: true,
141
+ },
142
+ };
143
+ });
144
+ if (bulk.length)
145
+ await col.bulkWrite(bulk);
146
+ }
147
+ async function paginatedCopyFirestoreToMongo(fs, sourceCollectionPath, db, destCollectionName, counts, countKey) {
148
+ const src = fs.collection(sourceCollectionPath);
149
+ const col = db.collection(destCollectionName);
150
+ let last;
151
+ let total = 0;
152
+ while (true) {
153
+ let q = src.orderBy(FieldPath.documentId()).limit(200);
154
+ if (last)
155
+ q = q.startAfter(last);
156
+ const snap = await q.get();
157
+ if (snap.empty)
158
+ break;
159
+ await mongoReplacePage(col, snap.docs);
160
+ total += snap.docs.length;
161
+ last = snap.docs[snap.docs.length - 1];
162
+ }
163
+ counts[countKey] = (counts[countKey] ?? 0) + total;
164
+ }
165
+ async function promoteMongoLatest(db, tmpName, latestName) {
166
+ const n = await db.collection(tmpName).countDocuments();
167
+ if (n === 0) {
168
+ await db.collection(latestName).drop().catch(() => undefined);
169
+ return;
170
+ }
171
+ await db.collection(latestName).drop().catch(() => undefined);
172
+ await db.collection(tmpName).rename(latestName, { dropTarget: true });
173
+ }
174
+ async function backupMetadataMongo(fs, db, ts, counts, collectionsWritten, versionedWritten, issues) {
175
+ for (const name of BACKUP_METADATA_SOURCE_NAMES) {
176
+ const tmp = mongoTmpName(name);
177
+ const versioned = mongoVersionedName(ts, name);
178
+ try {
179
+ await db.collection(tmp).drop().catch(() => undefined);
180
+ await paginatedCopyFirestoreToMongo(fs, name, db, tmp, counts, tmp);
181
+ await db.collection(versioned).drop().catch(() => undefined);
182
+ await paginatedCopyFirestoreToMongo(fs, name, db, versioned, counts, versioned);
183
+ await promoteMongoLatest(db, tmp, name);
184
+ collectionsWritten.push(name);
185
+ versionedWritten.push(versioned);
186
+ }
187
+ catch (e) {
188
+ issues.push({
189
+ code: "mongo_metadata_copy_failed",
190
+ message: e instanceof Error ? e.message : String(e),
191
+ detail: { name },
192
+ });
193
+ throw e;
194
+ }
195
+ }
196
+ }
197
+ async function backupMetadataFirebase(fs, ts, counts, collectionsWritten, versionedWritten, issues) {
198
+ for (const name of BACKUP_METADATA_SOURCE_NAMES) {
199
+ const tmp = firebaseTmpName(name);
200
+ const latest = firebaseLatestName(name);
201
+ const ver = firebaseVersionedName(ts, name);
202
+ try {
203
+ await deleteAllDocsInFirestoreCollection(fs, tmp);
204
+ await paginatedCopyFirestoreToFirestore(fs, name, tmp, counts, tmp);
205
+ await paginatedCopyFirestoreToFirestore(fs, name, ver, counts, ver);
206
+ await deleteAllDocsInFirestoreCollection(fs, latest);
207
+ await paginatedCopyFirestoreToFirestore(fs, tmp, latest, counts, latest);
208
+ await deleteAllDocsInFirestoreCollection(fs, tmp);
209
+ collectionsWritten.push(latest);
210
+ versionedWritten.push(ver);
211
+ }
212
+ catch (e) {
213
+ issues.push({
214
+ code: "firebase_metadata_copy_failed",
215
+ message: e instanceof Error ? e.message : String(e),
216
+ detail: { name },
217
+ });
218
+ throw e;
219
+ }
220
+ }
221
+ }
222
+ async function backupSnapshotsFirebase(fs, ts, counts, collectionsWritten, versionedWritten, issues) {
223
+ const roots = await fs.collection("catalogSnapshots").listDocuments();
224
+ for (const pref of roots) {
225
+ const catalogId = pref.id;
226
+ const logical = firebaseSnapshotLogical(catalogId);
227
+ const itemsPath = pref.collection("items").path;
228
+ const tmp = firebaseTmpName(logical);
229
+ const latest = firebaseLatestName(logical);
230
+ const ver = firebaseVersionedName(ts, logical);
231
+ try {
232
+ await deleteAllDocsInFirestoreCollection(fs, tmp);
233
+ await paginatedCopyFirestoreToFirestore(fs, itemsPath, tmp, counts, tmp);
234
+ await paginatedCopyFirestoreToFirestore(fs, itemsPath, ver, counts, ver);
235
+ await deleteAllDocsInFirestoreCollection(fs, latest);
236
+ await paginatedCopyFirestoreToFirestore(fs, tmp, latest, counts, latest);
237
+ await deleteAllDocsInFirestoreCollection(fs, tmp);
238
+ collectionsWritten.push(latest);
239
+ versionedWritten.push(ver);
240
+ const runs = await pref.collection("runs").listDocuments();
241
+ for (const runRef of runs) {
242
+ const runId = runRef.id;
243
+ const runLogical = firebaseSnapshotRunLogical(catalogId, runId);
244
+ const runItemsPath = runRef.collection("items").path;
245
+ const rtmp = firebaseTmpName(runLogical);
246
+ const rlatest = firebaseLatestName(runLogical);
247
+ const rver = firebaseVersionedName(ts, runLogical);
248
+ await deleteAllDocsInFirestoreCollection(fs, rtmp);
249
+ await paginatedCopyFirestoreToFirestore(fs, runItemsPath, rtmp, counts, rtmp);
250
+ await paginatedCopyFirestoreToFirestore(fs, runItemsPath, rver, counts, rver);
251
+ await deleteAllDocsInFirestoreCollection(fs, rlatest);
252
+ await paginatedCopyFirestoreToFirestore(fs, rtmp, rlatest, counts, rlatest);
253
+ await deleteAllDocsInFirestoreCollection(fs, rtmp);
254
+ collectionsWritten.push(rlatest);
255
+ versionedWritten.push(rver);
256
+ }
257
+ }
258
+ catch (e) {
259
+ issues.push({
260
+ code: "firebase_snapshot_copy_failed",
261
+ message: e instanceof Error ? e.message : String(e),
262
+ detail: { catalogId },
263
+ });
264
+ throw e;
265
+ }
266
+ }
267
+ }
268
+ async function backupSnapshotsMongo(fs, db, ts, counts, collectionsWritten, versionedWritten, issues) {
269
+ const roots = await fs.collection("catalogSnapshots").listDocuments();
270
+ for (const pref of roots) {
271
+ const catalogId = pref.id;
272
+ const itemsPath = pref.collection("items").path;
273
+ const latestName = mongoSnapshotCollectionName(catalogId);
274
+ const versionedName = mongoVersionedName(ts, latestName);
275
+ const tmpName = mongoTmpName(latestName);
276
+ try {
277
+ await db.collection(tmpName).drop().catch(() => undefined);
278
+ await paginatedCopyFirestoreToMongo(fs, itemsPath, db, tmpName, counts, tmpName);
279
+ await db.collection(versionedName).drop().catch(() => undefined);
280
+ await paginatedCopyFirestoreToMongo(fs, itemsPath, db, versionedName, counts, versionedName);
281
+ await promoteMongoLatest(db, tmpName, latestName);
282
+ collectionsWritten.push(latestName);
283
+ versionedWritten.push(versionedName);
284
+ const runs = await pref.collection("runs").listDocuments();
285
+ for (const runRef of runs) {
286
+ const runId = runRef.id;
287
+ const runItemsPath = runRef.collection("items").path;
288
+ const runLatest = mongoSnapshotRunCollectionName(catalogId, runId);
289
+ const runVer = mongoVersionedName(ts, runLatest);
290
+ const runTmp = mongoTmpName(runLatest);
291
+ await db.collection(runTmp).drop().catch(() => undefined);
292
+ await paginatedCopyFirestoreToMongo(fs, runItemsPath, db, runTmp, counts, runTmp);
293
+ await db.collection(runVer).drop().catch(() => undefined);
294
+ await paginatedCopyFirestoreToMongo(fs, runItemsPath, db, runVer, counts, runVer);
295
+ await promoteMongoLatest(db, runTmp, runLatest);
296
+ collectionsWritten.push(runLatest);
297
+ versionedWritten.push(runVer);
298
+ }
299
+ }
300
+ catch (e) {
301
+ issues.push({
302
+ code: "mongo_snapshot_copy_failed",
303
+ message: e instanceof Error ? e.message : String(e),
304
+ detail: { catalogId },
305
+ });
306
+ throw e;
307
+ }
308
+ }
309
+ }
310
+ async function writeBackupManifestFirebase(fs, payload) {
311
+ await fs.collection("backup-backupRuns").add({
312
+ ...payload,
313
+ createdAt: new Date().toISOString(),
314
+ });
315
+ }
316
+ async function writeBackupManifestMongo(db, payload) {
317
+ await db.collection("backupRuns").insertOne({
318
+ ...payload,
319
+ createdAt: new Date().toISOString(),
320
+ });
321
+ }
322
+ /** Delete Mongo `backupRuns` documents with createdAt older than cutoff ISO string. */
323
+ export async function pruneMongoBackupRuns(db, createdBeforeIso) {
324
+ const res = await db.collection("backupRuns").deleteMany({
325
+ createdAt: { $lt: createdBeforeIso },
326
+ });
327
+ return res.deletedCount ?? 0;
328
+ }
329
+ /**
330
+ * Delete documents in oldest Firestore versioned backup collections matching `{ts}__backup-*`
331
+ * until at most `keepLast` such collections remain.
332
+ */
333
+ export async function pruneFirebaseVersionedBackups(firestore, keepLast) {
334
+ const cols = await firestore.listCollections();
335
+ const versioned = cols
336
+ .map((c) => c.id)
337
+ .filter((id) => /^\d{4}_\d{2}_\d{2}T.*__backup-/.test(id))
338
+ .sort();
339
+ if (versioned.length <= keepLast)
340
+ return { deleted: [] };
341
+ const toRemove = versioned.slice(0, versioned.length - keepLast);
342
+ const deleted = [];
343
+ for (const id of toRemove) {
344
+ await deleteAllDocsInFirestoreCollection(firestore, id);
345
+ deleted.push(id);
346
+ }
347
+ return { deleted };
348
+ }
349
+ export async function runBackupData(deps, input) {
350
+ const issues = [];
351
+ const collectionsWritten = [];
352
+ const versionedCollectionsWritten = [];
353
+ const counts = {};
354
+ const nativeItemSourceLayoutByCatalogId = {};
355
+ const fs = deps.firestoreStore.firestore;
356
+ const ts = formatBackupTimestamp(input.versionTimestamp);
357
+ const includeSnapshots = Boolean(input.includeSnapshots);
358
+ const allCatalogs = await deps.catalogs.listAll();
359
+ const nativeCatalogIds = await discoverNativeCatalogIds(fs, allCatalogs, {
360
+ bindings: deps.bindings,
361
+ ...(input.catalogIds != null && input.catalogIds.length ? { catalogIds: input.catalogIds } : {}),
362
+ ...(input.appId != null && input.appId !== "" ? { appId: input.appId } : {}),
363
+ });
364
+ if (input.mode === "mongo") {
365
+ if (!input.mongoBackupUri?.trim()) {
366
+ return {
367
+ ok: false,
368
+ mode: "mongo",
369
+ databaseName: MONGO_BACKUP_DB,
370
+ backupTimestamp: new Date().toISOString(),
371
+ ...(input.backupLabel != null ? { backupLabel: input.backupLabel } : {}),
372
+ includeSnapshots,
373
+ collectionsWritten: [],
374
+ versionedCollectionsWritten: [],
375
+ counts: {},
376
+ issues: [{ code: "missing_mongo_uri", message: "mongoBackupUri is required for mongo mode" }],
377
+ nativeItemSourceLayoutByCatalogId: {},
378
+ };
379
+ }
380
+ const client = new MongoClient(input.mongoBackupUri);
381
+ try {
382
+ await client.connect();
383
+ const db = client.db(MONGO_BACKUP_DB);
384
+ await backupMetadataMongo(fs, db, ts, counts, collectionsWritten, versionedCollectionsWritten, issues);
385
+ for (const catalogId of nativeCatalogIds) {
386
+ const layout = await resolveNativeItemsLayout(fs, catalogId);
387
+ nativeItemSourceLayoutByCatalogId[String(catalogId)] = layout;
388
+ const logical = mongoNativeItemsCollectionName(String(catalogId));
389
+ const tmp = mongoTmpName(logical);
390
+ const versioned = mongoVersionedName(ts, logical);
391
+ await db.collection(tmp).drop().catch(() => undefined);
392
+ await copyNativeCatalogToMongo(fs, db, catalogId, tmp, counts, layout);
393
+ await db.collection(versioned).drop().catch(() => undefined);
394
+ await copyNativeCatalogToMongo(fs, db, catalogId, versioned, counts, layout);
395
+ await promoteMongoLatest(db, tmp, logical);
396
+ collectionsWritten.push(logical);
397
+ versionedCollectionsWritten.push(versioned);
398
+ }
399
+ if (includeSnapshots) {
400
+ await backupSnapshotsMongo(fs, db, ts, counts, collectionsWritten, versionedCollectionsWritten, issues);
401
+ }
402
+ await writeBackupManifestMongo(db, {
403
+ backupTimestamp: new Date().toISOString(),
404
+ mode: "mongo",
405
+ backupLabel: input.backupLabel,
406
+ includeSnapshots,
407
+ collectionsWritten,
408
+ versionedCollectionsWritten,
409
+ counts,
410
+ issues,
411
+ nativeItemSourceLayoutByCatalogId,
412
+ });
413
+ return {
414
+ ok: true,
415
+ mode: "mongo",
416
+ databaseName: MONGO_BACKUP_DB,
417
+ backupTimestamp: new Date().toISOString(),
418
+ ...(input.backupLabel != null ? { backupLabel: input.backupLabel } : {}),
419
+ includeSnapshots,
420
+ collectionsWritten,
421
+ versionedCollectionsWritten,
422
+ counts,
423
+ issues,
424
+ nativeItemSourceLayoutByCatalogId,
425
+ };
426
+ }
427
+ catch (e) {
428
+ issues.push({
429
+ code: "mongo_backup_failed",
430
+ message: e instanceof Error ? e.message : String(e),
431
+ });
432
+ return {
433
+ ok: false,
434
+ mode: "mongo",
435
+ databaseName: MONGO_BACKUP_DB,
436
+ backupTimestamp: new Date().toISOString(),
437
+ ...(input.backupLabel != null ? { backupLabel: input.backupLabel } : {}),
438
+ includeSnapshots,
439
+ collectionsWritten,
440
+ versionedCollectionsWritten,
441
+ counts,
442
+ issues,
443
+ nativeItemSourceLayoutByCatalogId,
444
+ };
445
+ }
446
+ finally {
447
+ await client.close().catch(() => undefined);
448
+ }
449
+ }
450
+ try {
451
+ await backupMetadataFirebase(fs, ts, counts, collectionsWritten, versionedCollectionsWritten, issues);
452
+ for (const catalogId of nativeCatalogIds) {
453
+ const layout = await resolveNativeItemsLayout(fs, catalogId);
454
+ nativeItemSourceLayoutByCatalogId[String(catalogId)] = layout;
455
+ const logical = firebaseNativeLogical(String(catalogId));
456
+ const tmp = firebaseTmpName(logical);
457
+ const latest = firebaseLatestName(logical);
458
+ const ver = firebaseVersionedName(ts, logical);
459
+ await deleteAllDocsInFirestoreCollection(fs, tmp);
460
+ await copyNativeCatalogToFirestoreBackup(fs, catalogId, tmp, counts, layout);
461
+ await copyNativeCatalogToFirestoreBackup(fs, catalogId, ver, counts, layout);
462
+ await deleteAllDocsInFirestoreCollection(fs, latest);
463
+ await paginatedCopyFirestoreToFirestore(fs, tmp, latest, counts, latest);
464
+ await deleteAllDocsInFirestoreCollection(fs, tmp);
465
+ collectionsWritten.push(latest);
466
+ versionedCollectionsWritten.push(ver);
467
+ }
468
+ if (includeSnapshots) {
469
+ await backupSnapshotsFirebase(fs, ts, counts, collectionsWritten, versionedCollectionsWritten, issues);
470
+ }
471
+ await writeBackupManifestFirebase(fs, {
472
+ backupTimestamp: new Date().toISOString(),
473
+ mode: "firebase",
474
+ backupLabel: input.backupLabel,
475
+ includeSnapshots,
476
+ collectionsWritten,
477
+ versionedCollectionsWritten,
478
+ counts,
479
+ issues,
480
+ nativeItemSourceLayoutByCatalogId,
481
+ });
482
+ return {
483
+ ok: true,
484
+ mode: "firebase",
485
+ databaseName: "(same-firestore-target)",
486
+ backupTimestamp: new Date().toISOString(),
487
+ ...(input.backupLabel != null ? { backupLabel: input.backupLabel } : {}),
488
+ includeSnapshots,
489
+ collectionsWritten,
490
+ versionedCollectionsWritten,
491
+ counts,
492
+ issues,
493
+ nativeItemSourceLayoutByCatalogId,
494
+ };
495
+ }
496
+ catch (e) {
497
+ issues.push({
498
+ code: "firebase_backup_failed",
499
+ message: e instanceof Error ? e.message : String(e),
500
+ });
501
+ return {
502
+ ok: false,
503
+ mode: "firebase",
504
+ databaseName: "(same-firestore-target)",
505
+ backupTimestamp: new Date().toISOString(),
506
+ ...(input.backupLabel != null ? { backupLabel: input.backupLabel } : {}),
507
+ includeSnapshots,
508
+ collectionsWritten,
509
+ versionedCollectionsWritten,
510
+ counts,
511
+ issues,
512
+ nativeItemSourceLayoutByCatalogId,
513
+ };
514
+ }
515
+ }
516
+ async function copyNativeCatalogToMongo(fs, db, catalogId, destCollection, counts, layout) {
517
+ const src = layout === "legacy"
518
+ ? legacyNativeItemsCollectionRef(fs, catalogId)
519
+ : flatNativeItemsCollectionRef(fs, catalogId);
520
+ await paginatedCopyFirestoreToMongo(fs, src.path, db, destCollection, counts, destCollection);
521
+ }
522
+ //# sourceMappingURL=backup-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-data.js","sourceRoot":"","sources":["../../../src/catalox/backup-data.ts"],"names":[],"mappings":"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"}
@@ -9,14 +9,20 @@ import { AppStore } from "../firebase/app-store.js";
9
9
  import { AdapterStore } from "../firebase/adapter-store.js";
10
10
  import { BindingStore } from "../firebase/binding-store.js";
11
11
  import { CatalogStore } from "../firebase/catalog-store.js";
12
+ import { CatalogDataIndexStore } from "../firebase/catalog-data-index-store.js";
12
13
  import { DefinitionStore } from "../firebase/definition-store.js";
13
14
  import { DescriptorStore } from "../firebase/descriptor-store.js";
15
+ import { FirestoreStore } from "../firebase/firestore-store.js";
14
16
  import { MappingStore } from "../firebase/mapping-store.js";
15
17
  import { NativeItemStore } from "../firebase/native-item-store.js";
16
18
  import { ReferenceStore } from "../firebase/reference-store.js";
17
19
  import { RendererSnippetStore } from "../firebase/renderer-snippet-store.js";
18
20
  import { SnapshotStore } from "../firebase/snapshot-store.js";
19
21
  import { StoreAppBindingStore } from "../firebase/store-app-binding-store.js";
22
+ import type { BackupDataInput, BackupDataResult } from "../contracts/backup.js";
23
+ import type { RestoreFirestoreBackupInput, RestoreFirestoreBackupResult, UndoFirestoreRestoreInput, UndoFirestoreRestoreResult } from "../contracts/restore.js";
24
+ import { type MigrateNativeCatalogLayoutInput, type MigrateNativeCatalogLayoutResult } from "../migrations/migrate-native-catalog-layout.js";
25
+ import { type NativeCatalogLayoutDiagnosticRow } from "./native-catalog-layout-diagnostics.js";
20
26
  export type CataloxDependencies = {
21
27
  apps: AppStore;
22
28
  catalogs: CatalogStore;
@@ -30,6 +36,8 @@ export type CataloxDependencies = {
30
36
  nativeItems: NativeItemStore;
31
37
  snapshots: SnapshotStore;
32
38
  adapters: AdapterStore;
39
+ firestoreStore: FirestoreStore;
40
+ catalogDataIndex: CatalogDataIndexStore;
33
41
  authz: AuthorizationService;
34
42
  mongoAdapter?: MongoCatalogAdapter;
35
43
  apiAdapter?: ApiCatalogAdapter;
@@ -117,5 +125,22 @@ export declare class Catalox {
117
125
  syncStatus: "success";
118
126
  lastSyncedAt: string;
119
127
  }>;
128
+ backupData(_context: CataloxContext, input: BackupDataInput): Promise<BackupDataResult>;
129
+ /**
130
+ * Restore Firestore live collections from Firebase-mode `backup-*` mirrors in the same database.
131
+ * Always snapshots current live data into `{restoreSessionId}__preRestore-*` first so `undoFirestoreRestore` can revert.
132
+ */
133
+ restoreFirestoreBackup(_context: CataloxContext, input: RestoreFirestoreBackupInput): Promise<RestoreFirestoreBackupResult>;
134
+ /** Revert a prior `restoreFirestoreBackup` using the manifest and `restoreSessionId__preRestore-*` collections. */
135
+ undoFirestoreRestore(_context: CataloxContext, input: UndoFirestoreRestoreInput): Promise<UndoFirestoreRestoreResult>;
136
+ /**
137
+ * For each discovered native catalog: counts in legacy `catalogData/{id}/items` vs flat `catalogData-{id}-items`,
138
+ * and the resolver layout. Use when the console still shows the **legacy** subcollection `items` under `catalogData/{catalogId}`.
139
+ */
140
+ reportNativeCatalogLayoutDiagnostics(_context: CataloxContext, input?: {
141
+ catalogIds?: CatalogId[];
142
+ appId?: string;
143
+ }): Promise<NativeCatalogLayoutDiagnosticRow[]>;
144
+ migrateNativeCatalogLayout(_context: CataloxContext, input: MigrateNativeCatalogLayoutInput): Promise<MigrateNativeCatalogLayoutResult>;
120
145
  }
121
146
  //# sourceMappingURL=catalox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalox.d.ts","sourceRoot":"","sources":["../../../src/catalox/catalox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalox.d.ts","sourceRoot":"","sources":["../../../src/catalox/catalox.ts"],"names":[],"mappings":"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"}