@x12i/catalox 2.3.0 → 2.5.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.
- package/README.md +60 -7
- package/dist/src/catalox/backup-data.d.ts +40 -0
- package/dist/src/catalox/backup-data.d.ts.map +1 -0
- package/dist/src/catalox/backup-data.js +522 -0
- package/dist/src/catalox/backup-data.js.map +1 -0
- package/dist/src/catalox/catalox.d.ts +42 -0
- package/dist/src/catalox/catalox.d.ts.map +1 -1
- package/dist/src/catalox/catalox.js +127 -7
- package/dist/src/catalox/catalox.js.map +1 -1
- package/dist/src/catalox/firestore-gcs-compare.d.ts +15 -0
- package/dist/src/catalox/firestore-gcs-compare.d.ts.map +1 -0
- package/dist/src/catalox/firestore-gcs-compare.js +221 -0
- package/dist/src/catalox/firestore-gcs-compare.js.map +1 -0
- package/dist/src/catalox/firestore-gcs-transfer.d.ts +24 -0
- package/dist/src/catalox/firestore-gcs-transfer.d.ts.map +1 -0
- package/dist/src/catalox/firestore-gcs-transfer.js +346 -0
- package/dist/src/catalox/firestore-gcs-transfer.js.map +1 -0
- package/dist/src/catalox/index.d.ts +5 -0
- package/dist/src/catalox/index.d.ts.map +1 -1
- package/dist/src/catalox/index.js +5 -0
- package/dist/src/catalox/index.js.map +1 -1
- package/dist/src/catalox/native-catalog-layout-diagnostics.d.ts +29 -0
- package/dist/src/catalox/native-catalog-layout-diagnostics.d.ts.map +1 -0
- package/dist/src/catalox/native-catalog-layout-diagnostics.js +55 -0
- package/dist/src/catalox/native-catalog-layout-diagnostics.js.map +1 -0
- package/dist/src/catalox/restore-firestore-backup.d.ts +13 -0
- package/dist/src/catalox/restore-firestore-backup.d.ts.map +1 -0
- package/dist/src/catalox/restore-firestore-backup.js +326 -0
- package/dist/src/catalox/restore-firestore-backup.js.map +1 -0
- package/dist/src/cli/index.js +312 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/contracts/backup.d.ts +36 -0
- package/dist/src/contracts/backup.d.ts.map +1 -0
- package/dist/src/contracts/backup.js +2 -0
- package/dist/src/contracts/backup.js.map +1 -0
- package/dist/src/contracts/catalog-data-index.d.ts +13 -0
- package/dist/src/contracts/catalog-data-index.d.ts.map +1 -0
- package/dist/src/contracts/catalog-data-index.js +2 -0
- package/dist/src/contracts/catalog-data-index.js.map +1 -0
- package/dist/src/contracts/catalogs.d.ts +8 -1
- package/dist/src/contracts/catalogs.d.ts.map +1 -1
- package/dist/src/contracts/catalogs.js +18 -1
- package/dist/src/contracts/catalogs.js.map +1 -1
- package/dist/src/contracts/gcs-firestore-compare.d.ts +64 -0
- package/dist/src/contracts/gcs-firestore-compare.d.ts.map +1 -0
- package/dist/src/contracts/gcs-firestore-compare.js +2 -0
- package/dist/src/contracts/gcs-firestore-compare.js.map +1 -0
- package/dist/src/contracts/gcs-firestore-transfer.d.ts +94 -0
- package/dist/src/contracts/gcs-firestore-transfer.d.ts.map +1 -0
- package/dist/src/contracts/gcs-firestore-transfer.js +2 -0
- package/dist/src/contracts/gcs-firestore-transfer.js.map +1 -0
- package/dist/src/contracts/index.d.ts +6 -0
- package/dist/src/contracts/index.d.ts.map +1 -1
- package/dist/src/contracts/index.js +1 -0
- package/dist/src/contracts/index.js.map +1 -1
- package/dist/src/contracts/restore.d.ts +44 -0
- package/dist/src/contracts/restore.d.ts.map +1 -0
- package/dist/src/contracts/restore.js +2 -0
- package/dist/src/contracts/restore.js.map +1 -0
- package/dist/src/firebase/catalog-data-index-store.d.ts +14 -0
- package/dist/src/firebase/catalog-data-index-store.d.ts.map +1 -0
- package/dist/src/firebase/catalog-data-index-store.js +33 -0
- package/dist/src/firebase/catalog-data-index-store.js.map +1 -0
- package/dist/src/firebase/catalog-data-paths.d.ts +14 -0
- package/dist/src/firebase/catalog-data-paths.d.ts.map +1 -0
- package/dist/src/firebase/catalog-data-paths.js +31 -0
- package/dist/src/firebase/catalog-data-paths.js.map +1 -0
- package/dist/src/firebase/index.d.ts +2 -0
- package/dist/src/firebase/index.d.ts.map +1 -1
- package/dist/src/firebase/index.js +2 -0
- package/dist/src/firebase/index.js.map +1 -1
- package/dist/src/firebase/native-item-store.d.ts +11 -1
- package/dist/src/firebase/native-item-store.d.ts.map +1 -1
- package/dist/src/firebase/native-item-store.js +51 -16
- package/dist/src/firebase/native-item-store.js.map +1 -1
- package/dist/src/migrations/index.d.ts +1 -0
- package/dist/src/migrations/index.d.ts.map +1 -1
- package/dist/src/migrations/index.js +1 -0
- package/dist/src/migrations/index.js.map +1 -1
- package/dist/src/migrations/migrate-native-catalog-layout.d.ts +51 -0
- package/dist/src/migrations/migrate-native-catalog-layout.d.ts.map +1 -0
- package/dist/src/migrations/migrate-native-catalog-layout.js +224 -0
- package/dist/src/migrations/migrate-native-catalog-layout.js.map +1 -0
- package/dist/test/integration/firestore.emulator.test.js +10 -2
- package/dist/test/integration/firestore.emulator.test.js.map +1 -1
- package/dist/test/unit/backup-timestamp.test.d.ts +2 -0
- package/dist/test/unit/backup-timestamp.test.d.ts.map +1 -0
- package/dist/test/unit/backup-timestamp.test.js +11 -0
- package/dist/test/unit/backup-timestamp.test.js.map +1 -0
- package/dist/test/unit/compact-catalog-filter.test.d.ts +2 -0
- package/dist/test/unit/compact-catalog-filter.test.d.ts.map +1 -0
- package/dist/test/unit/compact-catalog-filter.test.js +18 -0
- package/dist/test/unit/compact-catalog-filter.test.js.map +1 -0
- package/dist/test/unit/gcs-firestore-compare.test.d.ts +2 -0
- package/dist/test/unit/gcs-firestore-compare.test.d.ts.map +1 -0
- package/dist/test/unit/gcs-firestore-compare.test.js +14 -0
- package/dist/test/unit/gcs-firestore-compare.test.js.map +1 -0
- package/dist/test/unit/gcs-firestore-paths.test.d.ts +2 -0
- package/dist/test/unit/gcs-firestore-paths.test.d.ts.map +1 -0
- package/dist/test/unit/gcs-firestore-paths.test.js +16 -0
- package/dist/test/unit/gcs-firestore-paths.test.js.map +1 -0
- package/dist/test/unit/resolve-native-items-layout.test.d.ts +2 -0
- package/dist/test/unit/resolve-native-items-layout.test.d.ts.map +1 -0
- package/dist/test/unit/resolve-native-items-layout.test.js +50 -0
- package/dist/test/unit/resolve-native-items-layout.test.js.map +1 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ Catalox is a **data-tier** package for managing **app-scoped catalogs** in Fireb
|
|
|
8
8
|
- **Mapped catalogs** (items normalized from MongoDB or APIs)
|
|
9
9
|
- **References + validation contracts** (standardized cross-catalog shapes)
|
|
10
10
|
- **Seed/import/export + batch upsert** workflows for native catalogs
|
|
11
|
+
- **Optional GCS tools** — NDJSON export/import of Firestore collections to a bucket, **compare** live data vs bucket snapshots, and matching CLI commands (`firestore export-gcs`, `import-gcs`, `compare-gcs`; see [`docs/firestore-gcs-export.md`](docs/firestore-gcs-export.md))
|
|
11
12
|
|
|
12
13
|
Catalox **does not** own UI, workflow orchestration, remote execution, artifact blobs, or secret storage.
|
|
13
14
|
|
|
@@ -20,6 +21,8 @@ This repo is currently set up as a workspace package.
|
|
|
20
21
|
|
|
21
22
|
`@x12i/helpers` is a **required dependency** (installed as `@x12i/helpers@^1.2.0`).
|
|
22
23
|
|
|
24
|
+
**Direct dependency:** `@google-cloud/storage` is declared for GCS export/import/compare; it uses the same **Application Default Credentials** pattern as Firestore Admin (bucket IAM required).
|
|
25
|
+
|
|
23
26
|
## Configuration (real connections)
|
|
24
27
|
|
|
25
28
|
Catalox is a library: you provide initialized clients + runtime env. For a **full list of environment variables**, CLI vs library behavior, and integration-test requirements, see [`docs/environment.md`](docs/environment.md).
|
|
@@ -51,6 +54,10 @@ initializeApp({ credential: applicationDefault() });
|
|
|
51
54
|
const firestore = getFirestore();
|
|
52
55
|
```
|
|
53
56
|
|
|
57
|
+
### Google Cloud Storage (optional export / import / compare)
|
|
58
|
+
|
|
59
|
+
When you use **`catalox firestore export-gcs`**, **`import-gcs`**, **`compare-gcs`**, or the matching **`Catalox`** methods, the runtime needs a GCS bucket and a credential that can **read/write objects** there (typically the same service account as Firestore, with **Storage** roles on that bucket). See [`docs/firestore-gcs-export.md`](docs/firestore-gcs-export.md) and [`docs/environment.md`](docs/environment.md).
|
|
60
|
+
|
|
54
61
|
### Mongo (mapped catalogs)
|
|
55
62
|
|
|
56
63
|
For Mongo-mapped catalogs, provide:
|
|
@@ -82,13 +89,34 @@ The `catalox` binary loads `.env` via `dotenv`. Use **`CATALOX_*`** for **Catalo
|
|
|
82
89
|
- **`CATALOX_USER_ID`** — Optional user id / actor for authz-sensitive CLI paths.
|
|
83
90
|
- **`CATALOX_MONGO_URI`** — If set, enables the Mongo catalog adapter in the CLI (see `createCatalox()` in `src/cli/index.ts`).
|
|
84
91
|
|
|
92
|
+
**Running commands from this repository:** the shell command `catalox` is only on your `PATH` if the package is installed globally (`npm i -g @x12i/catalox`) or linked (`npm link` from this repo). Otherwise, after `npm run build`, use:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm run cli -- firestore report-native-layout --app "narrix"
|
|
96
|
+
# same as: node dist/src/cli/index.js firestore report-native-layout --app "narrix"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### `firestore` CLI quick reference
|
|
100
|
+
|
|
101
|
+
| Command | Purpose |
|
|
102
|
+
|---------|---------|
|
|
103
|
+
| `firestore backup` | Mirror metadata + native rows to Mongo or `backup-*` collections in Firestore ([`docs/backup.md`](docs/backup.md)). |
|
|
104
|
+
| `firestore restore-backup` / `undo-restore-backup` | Restore from `backup-*` with undo sidecars ([`docs/restore-firestore-backup.md`](docs/restore-firestore-backup.md)). |
|
|
105
|
+
| `firestore report-native-layout` | Legacy vs flat native layout diagnostics. |
|
|
106
|
+
| `firestore migrate-native-catalog-data` | Legacy `catalogData/{id}/items` → flat `catalogData-{id}-items` ([`docs/migration-native-catalog-data.md`](docs/migration-native-catalog-data.md)). |
|
|
107
|
+
| `firestore export-gcs` / `import-gcs` | NDJSON per collection + optional manifest ([`docs/firestore-gcs-export.md`](docs/firestore-gcs-export.md)). |
|
|
108
|
+
| `firestore compare-gcs` | Diff live Firestore vs bucket NDJSON (single collection or manifest). |
|
|
109
|
+
|
|
85
110
|
## Firestore data model (logical collections)
|
|
86
111
|
|
|
112
|
+
For a **full layout** (subcollections, document id conventions, snapshot runs, and query notes), see [`docs/firestore-data-model.md`](docs/firestore-data-model.md). For **native** catalogs specifically (per-catalog `catalogData-*-items`, layout resolution, `listCatalogItems`, filters, troubleshooting), see [`docs/native-catalog-storage-and-api.md`](docs/native-catalog-storage-and-api.md).
|
|
113
|
+
|
|
87
114
|
Metadata:
|
|
88
115
|
|
|
89
116
|
- `apps/{appId}`
|
|
90
117
|
- `catalogs/{catalogId}`
|
|
91
118
|
- `catalogBindings/{bindingId}` (many-to-many app↔catalog)
|
|
119
|
+
- `storeAppBindings/{bindingId}` (store↔app, multi-app export/report)
|
|
92
120
|
- `catalogDefinitions/{catalogId}` (native vs mapped specifics)
|
|
93
121
|
- `catalogAdapters/{adapterId}` (mongo/api adapter definitions)
|
|
94
122
|
- `catalogMappings/{mappingId}` (field mapping specs)
|
|
@@ -98,16 +126,24 @@ Metadata:
|
|
|
98
126
|
|
|
99
127
|
Data:
|
|
100
128
|
|
|
101
|
-
- `catalogData
|
|
129
|
+
- `catalogData-{catalogId}-items/{itemId}` (native item rows; top-level collection per catalog)
|
|
130
|
+
- `catalogData/{catalogId}` (index and metadata for that catalog’s native storage; not item payloads)
|
|
102
131
|
- `catalogSnapshots/{catalogId}/items/{itemId}` (mapped snapshot mode)
|
|
103
132
|
|
|
133
|
+
Backups (optional operator feature):
|
|
134
|
+
|
|
135
|
+
- `backup-*` and `{timestamp}__backup-*` (Firebase mode, same database)
|
|
136
|
+
- Mongo database `catalox-backups` (Mongo mode)
|
|
137
|
+
|
|
138
|
+
See [`docs/backup.md`](docs/backup.md) for `backupData` / CLI backup, [`docs/restore-firestore-backup.md`](docs/restore-firestore-backup.md) for restoring Firebase mirrors to live data with undo, [`docs/migration-native-catalog-data.md`](docs/migration-native-catalog-data.md) for moving legacy native rows into `catalogData-{catalogId}-items`, and [`docs/firestore-native-layout-vs-backup.md`](docs/firestore-native-layout-vs-backup.md) for how live paths differ from `backup-*` mirrors and what `backupData` reports in `nativeItemSourceLayoutByCatalogId`. For **how native storage, layout resolution, `listCatalogItems`, and filters work together**, read [`docs/native-catalog-storage-and-api.md`](docs/native-catalog-storage-and-api.md). For **NDJSON export/import of Firestore collections to a GCS bucket** (single collection, all roots, optional recursive subcollections, manifest restore) and **compare live data vs bucket NDJSON** (`firestore compare-gcs`), see [`docs/firestore-gcs-export.md`](docs/firestore-gcs-export.md) and CLI `firestore export-gcs` / `firestore import-gcs` / `firestore compare-gcs`. If the console still shows **`catalogData/{catalogId}/items`**, run **`catalox firestore report-native-layout`** then **`catalox firestore migrate-native-catalog-data`** (backup + copy to flat; optional `--delete-legacy` after you trust backups).
|
|
139
|
+
|
|
104
140
|
## Core usage (generic from `appId`)
|
|
105
141
|
|
|
106
142
|
### Create stores and `Catalox`
|
|
107
143
|
|
|
108
144
|
```ts
|
|
109
145
|
import { FirestoreStore } from "@x12i/catalox";
|
|
110
|
-
import { AppStore, CatalogStore, BindingStore, DefinitionStore, MappingStore, DescriptorStore, ReferenceStore, NativeItemStore, SnapshotStore, AdapterStore } from "@x12i/catalox";
|
|
146
|
+
import { AppStore, CatalogStore, BindingStore, DefinitionStore, MappingStore, DescriptorStore, ReferenceStore, NativeItemStore, CatalogDataIndexStore, SnapshotStore, AdapterStore } from "@x12i/catalox";
|
|
111
147
|
import { AuthorizationService, Catalox } from "@x12i/catalox";
|
|
112
148
|
|
|
113
149
|
// firebase-admin initialization is up to the consumer
|
|
@@ -116,18 +152,21 @@ import { getFirestore } from "firebase-admin/firestore";
|
|
|
116
152
|
const firestore = getFirestore();
|
|
117
153
|
const store = new FirestoreStore({ firestore });
|
|
118
154
|
|
|
155
|
+
const bindings = new BindingStore(store);
|
|
119
156
|
const deps = {
|
|
120
157
|
apps: new AppStore(store),
|
|
121
158
|
catalogs: new CatalogStore(store),
|
|
122
|
-
bindings
|
|
159
|
+
bindings,
|
|
123
160
|
definitions: new DefinitionStore(store),
|
|
124
161
|
mappings: new MappingStore(store),
|
|
125
162
|
descriptors: new DescriptorStore(store),
|
|
126
163
|
references: new ReferenceStore(store),
|
|
127
164
|
nativeItems: new NativeItemStore(store),
|
|
165
|
+
catalogDataIndex: new CatalogDataIndexStore(store),
|
|
128
166
|
snapshots: new SnapshotStore(store),
|
|
129
167
|
adapters: new AdapterStore(store),
|
|
130
|
-
|
|
168
|
+
firestoreStore: store,
|
|
169
|
+
authz: new AuthorizationService(bindings),
|
|
131
170
|
};
|
|
132
171
|
|
|
133
172
|
const catalox = new Catalox(deps);
|
|
@@ -320,7 +359,7 @@ await catalox.createCatalog(ctx, {
|
|
|
320
359
|
catalogId: "signals",
|
|
321
360
|
name: "Signals",
|
|
322
361
|
sourceMode: "native",
|
|
323
|
-
native: { type: "native"
|
|
362
|
+
native: { type: "native" },
|
|
324
363
|
});
|
|
325
364
|
```
|
|
326
365
|
|
|
@@ -412,7 +451,7 @@ const res = await catalox.listCatalogItems({ appId: "myAppId" }, "signals", {
|
|
|
412
451
|
});
|
|
413
452
|
```
|
|
414
453
|
|
|
415
|
-
Filtering is performed on `indexed.<field>` in stored native records (payload remains in `data`).
|
|
454
|
+
Filtering is performed on `indexed.<field>` in stored native records (payload remains in `data`). **Blank filter values** (`""`, whitespace-only strings, `null`, `undefined`) are **not** sent as Firestore constraints so empty UI fields do not zero out lists; see [`docs/native-catalog-storage-and-api.md`](docs/native-catalog-storage-and-api.md) and **`compactCatalogFilter`** in the published API.
|
|
416
455
|
|
|
417
456
|
### Canonical `indexed` rule (native catalogs)
|
|
418
457
|
|
|
@@ -441,6 +480,10 @@ Validation APIs exist with standardized contracts, but **current behavior is min
|
|
|
441
480
|
- `validateCatalog(...)` and `validateCatalogItem(...)` currently return `{ isValid: true, issues: [] }`.
|
|
442
481
|
- Upstream domain validation is expected to be layered on in later work while keeping the response contract stable.
|
|
443
482
|
|
|
483
|
+
## Publishing
|
|
484
|
+
|
|
485
|
+
From a clean tree, **`npm publish`** runs **`prepublishOnly`**, which executes **`npm run build`** then **`npm test`** (unit tests). Ensure `dist/` is build output only; the published tarball includes **`dist`**, **`README.md`**, and **`LICENSE`** per `package.json` **`files`**.
|
|
486
|
+
|
|
444
487
|
## Tests
|
|
445
488
|
|
|
446
489
|
Unit tests (default):
|
|
@@ -464,9 +507,19 @@ Integration tests are **live-only** (no mocks, no emulators). They require:
|
|
|
464
507
|
### Live test safety (read before running)
|
|
465
508
|
|
|
466
509
|
- **Never run against production credentials/projects.** Use a dedicated Firebase project for tests.
|
|
467
|
-
- **Touched collections**: `apps`, `catalogs`, `catalogBindings`, `catalogDefinitions`, `catalogDescriptors`, and `catalogData
|
|
510
|
+
- **Touched collections**: `apps`, `catalogs`, `catalogBindings`, `catalogDefinitions`, `catalogDescriptors`, `catalogData/{catalogId}`, and `catalogData-{catalogId}-items/...`. The **`catalox firestore restore-backup`** / **`undo-restore-backup`** commands additionally write `backup-restoreSessions` and `{restoreSessionId}__preRestore-*` sidecar collections (see [`docs/restore-firestore-backup.md`](docs/restore-firestore-backup.md)).
|
|
468
511
|
- **Cleanup**: tests do best-effort deletes of the docs they created, but do not guarantee full teardown.
|
|
469
512
|
|
|
513
|
+
## Changelog
|
|
514
|
+
|
|
515
|
+
### 2.5.0
|
|
516
|
+
|
|
517
|
+
- **GCS:** NDJSON export/import for one or many Firestore collections (`exportFirestoreCollectionToGcs`, `exportAllFirestoreCollectionsToGcs`, restore helpers, CLI `firestore export-gcs` / `import-gcs`). Optional **`gcsPrefix`** and **`objectNamePostfix`** on object keys; manifest-driven restore-all.
|
|
518
|
+
- **GCS:** Compare live collections to bucket NDJSON — identical / changed / only-in-Firestore / only-in-bucket (`compareFirestoreCollectionWithGcsNdjson`, manifest mode, CLI `firestore compare-gcs`). Helpers **`normalizeForCompare`**, **`dataFingerprint`** exported for tooling.
|
|
519
|
+
- **Native:** `listCatalogItems` compacts inert filter entries before Firestore queries; `NativeItemStore.list` can re-resolve flat vs legacy layout after an unconstrained empty first page.
|
|
520
|
+
- **Docs:** [`docs/native-catalog-storage-and-api.md`](docs/native-catalog-storage-and-api.md), [`docs/firestore-gcs-export.md`](docs/firestore-gcs-export.md); README and environment docs updated for GCS.
|
|
521
|
+
- **Dependency:** `@google-cloud/storage` (^7.19).
|
|
522
|
+
|
|
470
523
|
## Boundaries (important)
|
|
471
524
|
|
|
472
525
|
- **Secrets**: do not store secret material (API keys, cloud creds) in Catalox. Store only non-secret refs like `credentialsRef`.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type Firestore } from "firebase-admin/firestore";
|
|
2
|
+
import { type Db } from "mongodb";
|
|
3
|
+
import type { CatalogId } from "../contracts/ids.js";
|
|
4
|
+
import type { BackupDataInput, BackupDataResult } from "../contracts/backup.js";
|
|
5
|
+
import type { CatalogRecord } from "../contracts/catalogs.js";
|
|
6
|
+
import { CatalogStore } from "../firebase/catalog-store.js";
|
|
7
|
+
import { BindingStore } from "../firebase/binding-store.js";
|
|
8
|
+
import { FirestoreStore } from "../firebase/firestore-store.js";
|
|
9
|
+
export declare const BACKUP_METADATA_SOURCE_NAMES: readonly ["apps", "catalogs", "catalogBindings", "storeAppBindings", "catalogDefinitions", "catalogDescriptors", "catalogMappings", "catalogAdapters", "catalogReferences", "catalogData"];
|
|
10
|
+
export type BackupDataDeps = {
|
|
11
|
+
firestoreStore: FirestoreStore;
|
|
12
|
+
catalogs: CatalogStore;
|
|
13
|
+
bindings: BindingStore;
|
|
14
|
+
};
|
|
15
|
+
export declare function formatBackupTimestamp(versionOverride?: string, d?: Date): string;
|
|
16
|
+
/** Latest Firebase backup mirror collection id for a logical source (e.g. `apps`, `catalogData--{id}`). */
|
|
17
|
+
export declare function firebaseLatestName(logical: string): string;
|
|
18
|
+
/** Versioned Firebase backup collection id. */
|
|
19
|
+
export declare function firebaseVersionedName(ts: string, logical: string): string;
|
|
20
|
+
export declare function firebaseNativeLogical(catalogId: string): string;
|
|
21
|
+
export declare function firebaseSnapshotLogical(catalogId: string): string;
|
|
22
|
+
export declare function firebaseSnapshotRunLogical(catalogId: string, runId: string): string;
|
|
23
|
+
export declare function paginatedCopyFirestoreToFirestore(fs: Firestore, sourceCollectionPath: string, destCollectionPath: string, counts: Record<string, number>, countKey: string): Promise<void>;
|
|
24
|
+
export declare function deleteAllDocsInFirestoreCollection(fs: Firestore, collectionPath: string): Promise<void>;
|
|
25
|
+
export declare function discoverNativeCatalogIds(fs: Firestore, catalogs: CatalogRecord[], opts: {
|
|
26
|
+
bindings: BindingStore;
|
|
27
|
+
catalogIds?: CatalogId[];
|
|
28
|
+
appId?: string;
|
|
29
|
+
}): Promise<CatalogId[]>;
|
|
30
|
+
/** Delete Mongo `backupRuns` documents with createdAt older than cutoff ISO string. */
|
|
31
|
+
export declare function pruneMongoBackupRuns(db: Db, createdBeforeIso: string): Promise<number>;
|
|
32
|
+
/**
|
|
33
|
+
* Delete documents in oldest Firestore versioned backup collections matching `{ts}__backup-*`
|
|
34
|
+
* until at most `keepLast` such collections remain.
|
|
35
|
+
*/
|
|
36
|
+
export declare function pruneFirebaseVersionedBackups(firestore: Firestore, keepLast: number): Promise<{
|
|
37
|
+
deleted: string[];
|
|
38
|
+
}>;
|
|
39
|
+
export declare function runBackupData(deps: BackupDataDeps, input: BackupDataInput): Promise<BackupDataResult>;
|
|
40
|
+
//# sourceMappingURL=backup-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-data.d.ts","sourceRoot":"","sources":["../../../src/catalox/backup-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAe,KAAK,EAAE,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAmB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAWhE,eAAO,MAAM,4BAA4B,4LAY/B,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,OAAa,GAAG,MAAM,CAMtF;AAMD,2GAA2G;AAC3G,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AA0BD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAsB,iCAAiC,CACrD,EAAE,EAAE,SAAS,EACb,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,kCAAkC,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7G;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,aAAa,EAAE,EACzB,IAAI,EAAE;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,SAAS,EAAE,CAAC,CAwBtB;AA0PD,uFAAuF;AACvF,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK5F;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAchC;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA+K3B"}
|