@x12i/catalox 3.2.0 → 3.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.
- package/README.md +9 -0
- package/dist/src/catalox/authorization.d.ts +9 -0
- package/dist/src/catalox/authorization.d.ts.map +1 -1
- package/dist/src/catalox/authorization.js +18 -0
- package/dist/src/catalox/authorization.js.map +1 -1
- package/dist/src/catalox/backup-data.d.ts +1 -0
- package/dist/src/catalox/backup-data.d.ts.map +1 -1
- package/dist/src/catalox/backup-data.js +69 -5
- package/dist/src/catalox/backup-data.js.map +1 -1
- package/dist/src/catalox/catalox-bound.d.ts +5 -1
- package/dist/src/catalox/catalox-bound.d.ts.map +1 -1
- package/dist/src/catalox/catalox-bound.js +12 -0
- package/dist/src/catalox/catalox-bound.js.map +1 -1
- package/dist/src/catalox/catalox.d.ts +19 -2
- package/dist/src/catalox/catalox.d.ts.map +1 -1
- package/dist/src/catalox/catalox.js +167 -27
- package/dist/src/catalox/catalox.js.map +1 -1
- package/dist/src/catalox/create-catalox.d.ts.map +1 -1
- package/dist/src/catalox/create-catalox.js +7 -1
- package/dist/src/catalox/create-catalox.js.map +1 -1
- package/dist/src/catalox/native-catalog-merge.d.ts.map +1 -1
- package/dist/src/catalox/native-catalog-merge.js +21 -1
- package/dist/src/catalox/native-catalog-merge.js.map +1 -1
- package/dist/src/catalox/native-scope.d.ts +11 -10
- package/dist/src/catalox/native-scope.d.ts.map +1 -1
- package/dist/src/catalox/native-scope.js +154 -14
- package/dist/src/catalox/native-scope.js.map +1 -1
- package/dist/src/catalox/record-history.d.ts.map +1 -1
- package/dist/src/catalox/record-history.js +34 -0
- package/dist/src/catalox/record-history.js.map +1 -1
- package/dist/src/cli/index.js +13 -24
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/contracts/bindings.d.ts +26 -0
- package/dist/src/contracts/bindings.d.ts.map +1 -1
- package/dist/src/contracts/bootstrap.d.ts +26 -0
- package/dist/src/contracts/bootstrap.d.ts.map +1 -1
- package/dist/src/contracts/catalogs.d.ts +29 -5
- package/dist/src/contracts/catalogs.d.ts.map +1 -1
- package/dist/src/contracts/catalogs.js.map +1 -1
- package/dist/src/contracts/context.d.ts +17 -0
- package/dist/src/contracts/context.d.ts.map +1 -1
- package/dist/src/contracts/discovery.d.ts +35 -0
- package/dist/src/contracts/discovery.d.ts.map +1 -1
- package/dist/src/contracts/errors.d.ts +5 -0
- package/dist/src/contracts/errors.d.ts.map +1 -1
- package/dist/src/contracts/index.d.ts +6 -5
- package/dist/src/contracts/index.d.ts.map +1 -1
- package/dist/src/contracts/index.js.map +1 -1
- package/dist/src/contracts/items.d.ts +35 -2
- package/dist/src/contracts/items.d.ts.map +1 -1
- package/dist/src/firebase/catalog-item-history-store.d.ts.map +1 -1
- package/dist/src/firebase/catalog-item-history-store.js +35 -6
- package/dist/src/firebase/catalog-item-history-store.js.map +1 -1
- package/dist/src/firebase/identity-binding-store.d.ts +18 -0
- package/dist/src/firebase/identity-binding-store.d.ts.map +1 -0
- package/dist/src/firebase/identity-binding-store.js +34 -0
- package/dist/src/firebase/identity-binding-store.js.map +1 -0
- package/docs/catalox-ui-contract.md +127 -0
- package/package.json +7 -3
- package/dist/adapters/api/api-adapter.d.ts +0 -22
- package/dist/adapters/api/api-adapter.d.ts.map +0 -1
- package/dist/adapters/api/api-adapter.js +0 -60
- package/dist/adapters/api/api-adapter.js.map +0 -1
- package/dist/adapters/api/index.d.ts +0 -2
- package/dist/adapters/api/index.d.ts.map +0 -1
- package/dist/adapters/api/index.js +0 -2
- package/dist/adapters/api/index.js.map +0 -1
- package/dist/adapters/mongo/index.d.ts +0 -3
- package/dist/adapters/mongo/index.d.ts.map +0 -1
- package/dist/adapters/mongo/index.js +0 -3
- package/dist/adapters/mongo/index.js.map +0 -1
- package/dist/adapters/mongo/mongo-adapter.d.ts +0 -21
- package/dist/adapters/mongo/mongo-adapter.d.ts.map +0 -1
- package/dist/adapters/mongo/mongo-adapter.js +0 -57
- package/dist/adapters/mongo/mongo-adapter.js.map +0 -1
- package/dist/adapters/mongo/resolve-db.d.ts +0 -4
- package/dist/adapters/mongo/resolve-db.d.ts.map +0 -1
- package/dist/adapters/mongo/resolve-db.js +0 -10
- package/dist/adapters/mongo/resolve-db.js.map +0 -1
- package/dist/bindings/index.d.ts +0 -2
- package/dist/bindings/index.d.ts.map +0 -1
- package/dist/bindings/index.js +0 -3
- package/dist/bindings/index.js.map +0 -1
- package/dist/catalox/authorization.d.ts +0 -11
- package/dist/catalox/authorization.d.ts.map +0 -1
- package/dist/catalox/authorization.js +0 -37
- package/dist/catalox/authorization.js.map +0 -1
- package/dist/catalox/catalox.d.ts +0 -80
- package/dist/catalox/catalox.d.ts.map +0 -1
- package/dist/catalox/catalox.js +0 -492
- package/dist/catalox/catalox.js.map +0 -1
- package/dist/catalox/context.d.ts +0 -17
- package/dist/catalox/context.d.ts.map +0 -1
- package/dist/catalox/context.js +0 -21
- package/dist/catalox/context.js.map +0 -1
- package/dist/catalox/identity.d.ts +0 -7
- package/dist/catalox/identity.d.ts.map +0 -1
- package/dist/catalox/identity.js +0 -26
- package/dist/catalox/identity.js.map +0 -1
- package/dist/catalox/index.d.ts +0 -6
- package/dist/catalox/index.d.ts.map +0 -1
- package/dist/catalox/index.js +0 -6
- package/dist/catalox/index.js.map +0 -1
- package/dist/catalox/json-io.d.ts +0 -3
- package/dist/catalox/json-io.d.ts.map +0 -1
- package/dist/catalox/json-io.js +0 -7
- package/dist/catalox/json-io.js.map +0 -1
- package/dist/contracts/adapters.d.ts +0 -40
- package/dist/contracts/adapters.d.ts.map +0 -1
- package/dist/contracts/adapters.js +0 -2
- package/dist/contracts/adapters.js.map +0 -1
- package/dist/contracts/apps.d.ts +0 -11
- package/dist/contracts/apps.d.ts.map +0 -1
- package/dist/contracts/apps.js +0 -2
- package/dist/contracts/apps.js.map +0 -1
- package/dist/contracts/bindings.d.ts +0 -26
- package/dist/contracts/bindings.d.ts.map +0 -1
- package/dist/contracts/bindings.js +0 -2
- package/dist/contracts/bindings.js.map +0 -1
- package/dist/contracts/bootstrap.d.ts +0 -7
- package/dist/contracts/bootstrap.d.ts.map +0 -1
- package/dist/contracts/bootstrap.js +0 -2
- package/dist/contracts/bootstrap.js.map +0 -1
- package/dist/contracts/catalogs.d.ts +0 -51
- package/dist/contracts/catalogs.d.ts.map +0 -1
- package/dist/contracts/catalogs.js +0 -2
- package/dist/contracts/catalogs.js.map +0 -1
- package/dist/contracts/config.d.ts +0 -14
- package/dist/contracts/config.d.ts.map +0 -1
- package/dist/contracts/config.js +0 -2
- package/dist/contracts/config.js.map +0 -1
- package/dist/contracts/context.d.ts +0 -11
- package/dist/contracts/context.d.ts.map +0 -1
- package/dist/contracts/context.js +0 -2
- package/dist/contracts/context.js.map +0 -1
- package/dist/contracts/descriptors.d.ts +0 -73
- package/dist/contracts/descriptors.d.ts.map +0 -1
- package/dist/contracts/descriptors.js +0 -2
- package/dist/contracts/descriptors.js.map +0 -1
- package/dist/contracts/discovery.d.ts +0 -25
- package/dist/contracts/discovery.d.ts.map +0 -1
- package/dist/contracts/discovery.js +0 -2
- package/dist/contracts/discovery.js.map +0 -1
- package/dist/contracts/errors.d.ts +0 -32
- package/dist/contracts/errors.d.ts.map +0 -1
- package/dist/contracts/errors.js +0 -53
- package/dist/contracts/errors.js.map +0 -1
- package/dist/contracts/ids.d.ts +0 -7
- package/dist/contracts/ids.d.ts.map +0 -1
- package/dist/contracts/ids.js +0 -2
- package/dist/contracts/ids.js.map +0 -1
- package/dist/contracts/index.d.ts +0 -21
- package/dist/contracts/index.d.ts.map +0 -1
- package/dist/contracts/index.js +0 -2
- package/dist/contracts/index.js.map +0 -1
- package/dist/contracts/inputs.d.ts +0 -19
- package/dist/contracts/inputs.d.ts.map +0 -1
- package/dist/contracts/inputs.js +0 -2
- package/dist/contracts/inputs.js.map +0 -1
- package/dist/contracts/item-validation.d.ts +0 -11
- package/dist/contracts/item-validation.d.ts.map +0 -1
- package/dist/contracts/item-validation.js +0 -2
- package/dist/contracts/item-validation.js.map +0 -1
- package/dist/contracts/items.d.ts +0 -49
- package/dist/contracts/items.d.ts.map +0 -1
- package/dist/contracts/items.js +0 -2
- package/dist/contracts/items.js.map +0 -1
- package/dist/contracts/mappings.d.ts +0 -35
- package/dist/contracts/mappings.d.ts.map +0 -1
- package/dist/contracts/mappings.js +0 -2
- package/dist/contracts/mappings.js.map +0 -1
- package/dist/contracts/query.d.ts +0 -10
- package/dist/contracts/query.d.ts.map +0 -1
- package/dist/contracts/query.js +0 -2
- package/dist/contracts/query.js.map +0 -1
- package/dist/contracts/references.d.ts +0 -11
- package/dist/contracts/references.d.ts.map +0 -1
- package/dist/contracts/references.js +0 -2
- package/dist/contracts/references.js.map +0 -1
- package/dist/contracts/sync.d.ts +0 -7
- package/dist/contracts/sync.d.ts.map +0 -1
- package/dist/contracts/sync.js +0 -2
- package/dist/contracts/sync.js.map +0 -1
- package/dist/contracts/validation.d.ts +0 -12
- package/dist/contracts/validation.d.ts.map +0 -1
- package/dist/contracts/validation.js +0 -2
- package/dist/contracts/validation.js.map +0 -1
- package/dist/errors/index.d.ts +0 -2
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -3
- package/dist/errors/index.js.map +0 -1
- package/dist/firebase/adapter-store.d.ts +0 -15
- package/dist/firebase/adapter-store.d.ts.map +0 -1
- package/dist/firebase/adapter-store.js +0 -18
- package/dist/firebase/adapter-store.js.map +0 -1
- package/dist/firebase/app-store.d.ts +0 -11
- package/dist/firebase/app-store.d.ts.map +0 -1
- package/dist/firebase/app-store.js +0 -18
- package/dist/firebase/app-store.js.map +0 -1
- package/dist/firebase/binding-store.d.ts +0 -13
- package/dist/firebase/binding-store.d.ts.map +0 -1
- package/dist/firebase/binding-store.js +0 -35
- package/dist/firebase/binding-store.js.map +0 -1
- package/dist/firebase/catalog-store.d.ts +0 -12
- package/dist/firebase/catalog-store.d.ts.map +0 -1
- package/dist/firebase/catalog-store.js +0 -22
- package/dist/firebase/catalog-store.js.map +0 -1
- package/dist/firebase/definition-store.d.ts +0 -39
- package/dist/firebase/definition-store.d.ts.map +0 -1
- package/dist/firebase/definition-store.js +0 -18
- package/dist/firebase/definition-store.js.map +0 -1
- package/dist/firebase/descriptor-store.d.ts +0 -11
- package/dist/firebase/descriptor-store.d.ts.map +0 -1
- package/dist/firebase/descriptor-store.js +0 -18
- package/dist/firebase/descriptor-store.js.map +0 -1
- package/dist/firebase/firestore-store.d.ts +0 -14
- package/dist/firebase/firestore-store.d.ts.map +0 -1
- package/dist/firebase/firestore-store.js +0 -15
- package/dist/firebase/firestore-store.js.map +0 -1
- package/dist/firebase/index.d.ts +0 -12
- package/dist/firebase/index.d.ts.map +0 -1
- package/dist/firebase/index.js +0 -12
- package/dist/firebase/index.js.map +0 -1
- package/dist/firebase/mapping-store.d.ts +0 -11
- package/dist/firebase/mapping-store.d.ts.map +0 -1
- package/dist/firebase/mapping-store.js +0 -18
- package/dist/firebase/mapping-store.js.map +0 -1
- package/dist/firebase/native-item-store.d.ts +0 -20
- package/dist/firebase/native-item-store.d.ts.map +0 -1
- package/dist/firebase/native-item-store.js +0 -55
- package/dist/firebase/native-item-store.js.map +0 -1
- package/dist/firebase/reference-store.d.ts +0 -17
- package/dist/firebase/reference-store.d.ts.map +0 -1
- package/dist/firebase/reference-store.js +0 -27
- package/dist/firebase/reference-store.js.map +0 -1
- package/dist/firebase/snapshot-store.d.ts +0 -11
- package/dist/firebase/snapshot-store.d.ts.map +0 -1
- package/dist/firebase/snapshot-store.js +0 -22
- package/dist/firebase/snapshot-store.js.map +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +0 -1
- package/dist/mapping/execute-mapping.d.ts +0 -8
- package/dist/mapping/execute-mapping.d.ts.map +0 -1
- package/dist/mapping/execute-mapping.js +0 -78
- package/dist/mapping/execute-mapping.js.map +0 -1
- package/dist/mapping/helper-gap-report.d.ts +0 -7
- package/dist/mapping/helper-gap-report.d.ts.map +0 -1
- package/dist/mapping/helper-gap-report.js +0 -2
- package/dist/mapping/helper-gap-report.js.map +0 -1
- package/dist/mapping/index.d.ts +0 -4
- package/dist/mapping/index.d.ts.map +0 -1
- package/dist/mapping/index.js +0 -4
- package/dist/mapping/index.js.map +0 -1
- package/dist/mapping/validate-mapping.d.ts +0 -3
- package/dist/mapping/validate-mapping.d.ts.map +0 -1
- package/dist/mapping/validate-mapping.js +0 -32
- package/dist/mapping/validate-mapping.js.map +0 -1
- package/dist/test/integration/backup-data-gcs.live.test.d.ts +0 -2
- package/dist/test/integration/backup-data-gcs.live.test.d.ts.map +0 -1
- package/dist/test/integration/backup-data-gcs.live.test.js +0 -98
- package/dist/test/integration/backup-data-gcs.live.test.js.map +0 -1
- package/dist/test/integration/firestore.emulator.test.d.ts +0 -2
- package/dist/test/integration/firestore.emulator.test.d.ts.map +0 -1
- package/dist/test/integration/firestore.emulator.test.js +0 -132
- package/dist/test/integration/firestore.emulator.test.js.map +0 -1
- package/dist/test/integration/record-history.live.test.d.ts +0 -2
- package/dist/test/integration/record-history.live.test.d.ts.map +0 -1
- package/dist/test/integration/record-history.live.test.js +0 -141
- package/dist/test/integration/record-history.live.test.js.map +0 -1
- package/dist/test/unit/backup-timestamp.test.d.ts +0 -2
- package/dist/test/unit/backup-timestamp.test.d.ts.map +0 -1
- package/dist/test/unit/backup-timestamp.test.js +0 -11
- package/dist/test/unit/backup-timestamp.test.js.map +0 -1
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.d.ts +0 -2
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.d.ts.map +0 -1
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.js +0 -20
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.js.map +0 -1
- package/dist/test/unit/compact-catalog-filter.test.d.ts +0 -2
- package/dist/test/unit/compact-catalog-filter.test.d.ts.map +0 -1
- package/dist/test/unit/compact-catalog-filter.test.js +0 -18
- package/dist/test/unit/compact-catalog-filter.test.js.map +0 -1
- package/dist/test/unit/field-source-resolution.test.d.ts +0 -2
- package/dist/test/unit/field-source-resolution.test.d.ts.map +0 -1
- package/dist/test/unit/field-source-resolution.test.js +0 -45
- package/dist/test/unit/field-source-resolution.test.js.map +0 -1
- package/dist/test/unit/gcs-backup-run-folder.test.d.ts +0 -2
- package/dist/test/unit/gcs-backup-run-folder.test.d.ts.map +0 -1
- package/dist/test/unit/gcs-backup-run-folder.test.js +0 -10
- package/dist/test/unit/gcs-backup-run-folder.test.js.map +0 -1
- package/dist/test/unit/gcs-firestore-compare.test.d.ts +0 -2
- package/dist/test/unit/gcs-firestore-compare.test.d.ts.map +0 -1
- package/dist/test/unit/gcs-firestore-compare.test.js +0 -14
- package/dist/test/unit/gcs-firestore-compare.test.js.map +0 -1
- package/dist/test/unit/gcs-firestore-paths.test.d.ts +0 -2
- package/dist/test/unit/gcs-firestore-paths.test.d.ts.map +0 -1
- package/dist/test/unit/gcs-firestore-paths.test.js +0 -16
- package/dist/test/unit/gcs-firestore-paths.test.js.map +0 -1
- package/dist/test/unit/identity.test.d.ts +0 -2
- package/dist/test/unit/identity.test.d.ts.map +0 -1
- package/dist/test/unit/identity.test.js +0 -18
- package/dist/test/unit/identity.test.js.map +0 -1
- package/dist/test/unit/jsx-snippets.test.d.ts +0 -2
- package/dist/test/unit/jsx-snippets.test.d.ts.map +0 -1
- package/dist/test/unit/jsx-snippets.test.js +0 -35
- package/dist/test/unit/jsx-snippets.test.js.map +0 -1
- package/dist/test/unit/mapping.test.d.ts +0 -2
- package/dist/test/unit/mapping.test.d.ts.map +0 -1
- package/dist/test/unit/mapping.test.js +0 -19
- package/dist/test/unit/mapping.test.js.map +0 -1
- package/dist/test/unit/markdown-and-diagrams.test.d.ts +0 -2
- package/dist/test/unit/markdown-and-diagrams.test.d.ts.map +0 -1
- package/dist/test/unit/markdown-and-diagrams.test.js +0 -62
- package/dist/test/unit/markdown-and-diagrams.test.js.map +0 -1
- package/dist/test/unit/native-catalog-merge.test.d.ts +0 -2
- package/dist/test/unit/native-catalog-merge.test.d.ts.map +0 -1
- package/dist/test/unit/native-catalog-merge.test.js +0 -33
- package/dist/test/unit/native-catalog-merge.test.js.map +0 -1
- package/dist/test/unit/native-scope.test.d.ts +0 -2
- package/dist/test/unit/native-scope.test.d.ts.map +0 -1
- package/dist/test/unit/native-scope.test.js +0 -29
- package/dist/test/unit/native-scope.test.js.map +0 -1
- package/dist/test/unit/record-history-path.test.d.ts +0 -2
- package/dist/test/unit/record-history-path.test.d.ts.map +0 -1
- package/dist/test/unit/record-history-path.test.js +0 -24
- package/dist/test/unit/record-history-path.test.js.map +0 -1
- package/dist/test/unit/renderer-metadata-migration.test.d.ts +0 -2
- package/dist/test/unit/renderer-metadata-migration.test.d.ts.map +0 -1
- package/dist/test/unit/renderer-metadata-migration.test.js +0 -33
- package/dist/test/unit/renderer-metadata-migration.test.js.map +0 -1
- package/dist/test/unit/renderer-metadata.test.d.ts +0 -2
- package/dist/test/unit/renderer-metadata.test.d.ts.map +0 -1
- package/dist/test/unit/renderer-metadata.test.js +0 -10
- package/dist/test/unit/renderer-metadata.test.js.map +0 -1
- package/dist/test/unit/resolve-native-items-layout.test.d.ts +0 -2
- package/dist/test/unit/resolve-native-items-layout.test.d.ts.map +0 -1
- package/dist/test/unit/resolve-native-items-layout.test.js +0 -50
- package/dist/test/unit/resolve-native-items-layout.test.js.map +0 -1
- package/dist/test/unit/ui-spec-validation.test.d.ts +0 -2
- package/dist/test/unit/ui-spec-validation.test.d.ts.map +0 -1
- package/dist/test/unit/ui-spec-validation.test.js +0 -90
- package/dist/test/unit/ui-spec-validation.test.js.map +0 -1
- package/dist/validation/index.d.ts +0 -2
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -3
- package/dist/validation/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEnG,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAsGrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAuH1E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AppId, CatalogId, ItemId } from "./ids.js";
|
|
2
2
|
/** Persisted on native catalog item documents (Firestore). */
|
|
3
|
-
export type
|
|
3
|
+
export type NativeCatalogStoredScopeV1 = {
|
|
4
4
|
kind: "global";
|
|
5
5
|
} | {
|
|
6
6
|
kind: "account";
|
|
@@ -16,6 +16,39 @@ export type NativeCatalogStoredScope = {
|
|
|
16
16
|
accountId: string;
|
|
17
17
|
userId: string;
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* vNext: orthogonal scope coordinates for native items.
|
|
21
|
+
*
|
|
22
|
+
* - Tenant axis: account/group/user + channel/visitor
|
|
23
|
+
* - Agent axis: domain/agent (not under account)
|
|
24
|
+
*
|
|
25
|
+
* This type is **additive** in v3.x: runtime still persists `NativeCatalogStoredScope`.
|
|
26
|
+
* Phase 3 migrates storage+code to a coordinate-pair encoding with a legacy reader.
|
|
27
|
+
*/
|
|
28
|
+
export type NativeCatalogScopeCoordinates = {
|
|
29
|
+
tenant?: {
|
|
30
|
+
accountId?: string;
|
|
31
|
+
groupId?: string;
|
|
32
|
+
userId?: string;
|
|
33
|
+
channelId?: string;
|
|
34
|
+
visitorId?: string;
|
|
35
|
+
};
|
|
36
|
+
agent?: {
|
|
37
|
+
domainId?: string;
|
|
38
|
+
agentId?: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Persisted on native catalog item documents (Firestore) — vNext storage contract.
|
|
43
|
+
*
|
|
44
|
+
* - `global` is catalog-wide.
|
|
45
|
+
* - `scoped` constrains visibility to the provided coordinate subset.
|
|
46
|
+
*/
|
|
47
|
+
export type NativeCatalogStoredScope = {
|
|
48
|
+
kind: "global";
|
|
49
|
+
} | ({
|
|
50
|
+
kind: "scoped";
|
|
51
|
+
} & NativeCatalogScopeCoordinates);
|
|
19
52
|
export type UnifiedCatalogItem<TData = Record<string, unknown>> = {
|
|
20
53
|
itemId: ItemId;
|
|
21
54
|
catalogId: CatalogId;
|
|
@@ -45,7 +78,7 @@ export type NativeCatalogItemRecord = {
|
|
|
45
78
|
itemId: ItemId;
|
|
46
79
|
catalogId: CatalogId;
|
|
47
80
|
/** When set, describes tenant scope for this physical row. Omitted or global = catalog-wide defaults. */
|
|
48
|
-
scope?: NativeCatalogStoredScope;
|
|
81
|
+
scope?: NativeCatalogStoredScope | NativeCatalogStoredScopeV1;
|
|
49
82
|
appScopedOwnerId?: AppId;
|
|
50
83
|
version?: number;
|
|
51
84
|
createdBy?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../src/contracts/items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEzD,8DAA8D;AAC9D,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../src/contracts/items.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-item-history-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/catalog-item-history-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AAEpE,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,GAAG;IAIL,WAAW,CAAC,GAAG,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC;IAKzE;;;OAGG;IACG,aAAa,CACjB,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,2BAA2B,GAClC,OAAO,CAAC,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog-item-history-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/catalog-item-history-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AAEpE,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,GAAG;IAIL,WAAW,CAAC,GAAG,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC;IAKzE;;;OAGG;IACG,aAAa,CACjB,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,2BAA2B,GAClC,OAAO,CAAC,4BAA4B,CAAC;IAyDxC;;OAEG;IACG,+BAA+B,CACnC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,SAAO,GACb,OAAO,CAAC,6BAA6B,EAAE,CAAC;CAS5C"}
|
|
@@ -21,12 +21,20 @@ export class CatalogItemHistoryStore {
|
|
|
21
21
|
*/
|
|
22
22
|
async listByCatalog(catalogId, input) {
|
|
23
23
|
const limit = Math.min(Math.max(input?.limit ?? 50, 1), 500);
|
|
24
|
+
const baseFilters = {
|
|
25
|
+
catalogId: String(catalogId),
|
|
26
|
+
itemId: input?.itemId != null && String(input.itemId).length ? String(input.itemId) : undefined,
|
|
27
|
+
op: input?.itemId != null && String(input.itemId).length ? undefined : input?.op,
|
|
28
|
+
since: input?.since,
|
|
29
|
+
until: input?.until,
|
|
30
|
+
};
|
|
31
|
+
// Preferred indexed query. This requires composite indexes in some projects.
|
|
24
32
|
let q = this.col().where("catalogId", "==", catalogId);
|
|
25
|
-
if (
|
|
26
|
-
q = q.where("itemId", "==",
|
|
33
|
+
if (baseFilters.itemId != null) {
|
|
34
|
+
q = q.where("itemId", "==", baseFilters.itemId);
|
|
27
35
|
}
|
|
28
|
-
else if (
|
|
29
|
-
q = q.where("op", "==",
|
|
36
|
+
else if (baseFilters.op != null) {
|
|
37
|
+
q = q.where("op", "==", baseFilters.op);
|
|
30
38
|
}
|
|
31
39
|
q = q.orderBy("ts", "desc").limit(limit);
|
|
32
40
|
if (input?.startAfterEventId) {
|
|
@@ -34,8 +42,29 @@ export class CatalogItemHistoryStore {
|
|
|
34
42
|
if (cur.exists)
|
|
35
43
|
q = q.startAfter(cur);
|
|
36
44
|
}
|
|
37
|
-
|
|
38
|
-
let rows =
|
|
45
|
+
let snap;
|
|
46
|
+
let rows = [];
|
|
47
|
+
try {
|
|
48
|
+
snap = await q.get();
|
|
49
|
+
rows = snap.docs.map((d) => d.data());
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
// If the project is missing composite indexes (common in brand new test projects),
|
|
53
|
+
// fall back to a broad time-ordered scan and filter client-side.
|
|
54
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
55
|
+
if (!msg.includes("requires an index"))
|
|
56
|
+
throw e;
|
|
57
|
+
const broad = await this.col().orderBy("ts", "desc").limit(500).get();
|
|
58
|
+
rows = broad.docs.map((d) => d.data());
|
|
59
|
+
rows = rows.filter((r) => r.catalogId === baseFilters.catalogId);
|
|
60
|
+
if (baseFilters.itemId != null)
|
|
61
|
+
rows = rows.filter((r) => r.itemId === baseFilters.itemId);
|
|
62
|
+
if (baseFilters.op != null)
|
|
63
|
+
rows = rows.filter((r) => r.op === baseFilters.op);
|
|
64
|
+
// emulate limit for callers
|
|
65
|
+
rows = rows.slice(0, limit);
|
|
66
|
+
snap = broad;
|
|
67
|
+
}
|
|
39
68
|
if (input?.since) {
|
|
40
69
|
rows = rows.filter((r) => r.ts >= input.since);
|
|
41
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-item-history-store.js","sourceRoot":"","sources":["../../../src/firebase/catalog-item-history-store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC;AAEpE,MAAM,OAAO,uBAAuB;IACL;IAA7B,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,GAAG;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAkC;QAClD,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAAoC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CACjB,SAAoB,EACpB,KAAmC;QAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,
|
|
1
|
+
{"version":3,"file":"catalog-item-history-store.js","sourceRoot":"","sources":["../../../src/firebase/catalog-item-history-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CatalogId } from "../contracts/ids.js";
|
|
2
|
+
import type { IdentityCatalogBindingRecord } from "../contracts/bindings.js";
|
|
3
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
4
|
+
/**
|
|
5
|
+
* Store for catalog↔identity bindings (tenant/agent axes).
|
|
6
|
+
*
|
|
7
|
+
* Collection name is intentionally explicit and separate from `catalogBindings` (app↔catalog).
|
|
8
|
+
*/
|
|
9
|
+
export declare class IdentityBindingStore {
|
|
10
|
+
private readonly store;
|
|
11
|
+
constructor(store: FirestoreStore);
|
|
12
|
+
private docRef;
|
|
13
|
+
get(bindingId: string): Promise<IdentityCatalogBindingRecord | null>;
|
|
14
|
+
listAll(): Promise<IdentityCatalogBindingRecord[]>;
|
|
15
|
+
listByCatalog(catalogId: CatalogId): Promise<IdentityCatalogBindingRecord[]>;
|
|
16
|
+
upsert(record: IdentityCatalogBindingRecord): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=identity-binding-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-binding-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/identity-binding-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAKpE,OAAO,IAAI,OAAO,CAAC,4BAA4B,EAAE,CAAC;IAKlD,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,4BAA4B,EAAE,CAAC;IAQ5E,MAAM,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
2
|
+
/**
|
|
3
|
+
* Store for catalog↔identity bindings (tenant/agent axes).
|
|
4
|
+
*
|
|
5
|
+
* Collection name is intentionally explicit and separate from `catalogBindings` (app↔catalog).
|
|
6
|
+
*/
|
|
7
|
+
export class IdentityBindingStore {
|
|
8
|
+
store;
|
|
9
|
+
constructor(store) {
|
|
10
|
+
this.store = store;
|
|
11
|
+
}
|
|
12
|
+
docRef(bindingId) {
|
|
13
|
+
return this.store.collection("catalogIdentityBindings").doc(bindingId);
|
|
14
|
+
}
|
|
15
|
+
async get(bindingId) {
|
|
16
|
+
const snap = await this.docRef(bindingId).get();
|
|
17
|
+
return snap.exists ? snap.data() : null;
|
|
18
|
+
}
|
|
19
|
+
async listAll() {
|
|
20
|
+
const snap = await this.store.collection("catalogIdentityBindings").get();
|
|
21
|
+
return snap.docs.map((d) => d.data());
|
|
22
|
+
}
|
|
23
|
+
async listByCatalog(catalogId) {
|
|
24
|
+
const snap = await this.store
|
|
25
|
+
.collection("catalogIdentityBindings")
|
|
26
|
+
.where("catalogId", "==", catalogId)
|
|
27
|
+
.get();
|
|
28
|
+
return snap.docs.map((d) => d.data());
|
|
29
|
+
}
|
|
30
|
+
async upsert(record) {
|
|
31
|
+
await this.docRef(record.bindingId).set(record, { merge: true });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=identity-binding-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-binding-store.js","sourceRoot":"","sources":["../../../src/firebase/identity-binding-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,MAAM,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAAmC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAkC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAoB;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK;aAC1B,UAAU,CAAC,yBAAyB,CAAC;aACrC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC;aACnC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAkC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoC;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;CACF"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Catalox contract for catalox-ui (embedder + BFF)
|
|
2
|
+
|
|
3
|
+
This document is the **consumer-facing contract** catalox-ui (browser + embedded BFF) can rely on when embedding `@x12i/catalox`.
|
|
4
|
+
|
|
5
|
+
It is intentionally focused on:
|
|
6
|
+
|
|
7
|
+
- **Tenancy / identity axes**
|
|
8
|
+
- **Catalog discovery and bootstrap entrypoints**
|
|
9
|
+
- **Item visibility scoping (native catalogs)**
|
|
10
|
+
- **Outcome semantics** (empty vs denied vs misconfigured)
|
|
11
|
+
- **Operator elevation** (`superAdmin`) and audit identity (`actor`)
|
|
12
|
+
|
|
13
|
+
Related upstream docs:
|
|
14
|
+
|
|
15
|
+
- [`docs/identity-model.md`](docs/identity-model.md)
|
|
16
|
+
- [`docs/authorization.md`](docs/authorization.md)
|
|
17
|
+
- [`docs/outcomes.md`](docs/outcomes.md)
|
|
18
|
+
|
|
19
|
+
## 1) Identity model (axes)
|
|
20
|
+
|
|
21
|
+
Catalox treats identity as **three orthogonal axes**:
|
|
22
|
+
|
|
23
|
+
- **App axis**: `storeId` → `appId`
|
|
24
|
+
- **Tenant axis**: `accountId` → `groupId` → `userId` and `accountId` → `channelId` → `visitorId`
|
|
25
|
+
- **Agent axis**: `domainId` → `agentId` (**agent is NOT under account**)
|
|
26
|
+
|
|
27
|
+
### What catalox-ui should send
|
|
28
|
+
|
|
29
|
+
Your BFF constructs a `CataloxContext` and passes it to Catalox (or binds it once via `withContext`).
|
|
30
|
+
|
|
31
|
+
Key fields (current):
|
|
32
|
+
|
|
33
|
+
- **Required**: `appId`
|
|
34
|
+
- **Optional app/store**: `storeId`
|
|
35
|
+
- **Optional tenant coords**: `accountId`, `groupId`, `userId`, `channelId`, `visitorId`
|
|
36
|
+
- **Optional agent coords**: `domainId`, `agentId`
|
|
37
|
+
- **Operator/elevation**: `superAdmin` (host-controlled only)
|
|
38
|
+
- **Audit identity**: `actor` (preferred) and `userId` (legacy convenience)
|
|
39
|
+
- **Advisory**: `roles?: string[]`
|
|
40
|
+
|
|
41
|
+
## 2) Catalog discovery / bootstrap entrypoints
|
|
42
|
+
|
|
43
|
+
catalox-ui typically needs a first hop that answers: “what catalogs can I show, and how do I render/query them?”
|
|
44
|
+
|
|
45
|
+
### App-first (classic)
|
|
46
|
+
|
|
47
|
+
- **List catalogs**: `listAppCatalogs(context, { appId })`
|
|
48
|
+
- **Bootstrap descriptors**: `getAppCatalogBootstrap(context, appId)`
|
|
49
|
+
|
|
50
|
+
These are driven by **app↔catalog bindings** (`catalogBindings`).
|
|
51
|
+
|
|
52
|
+
### Store-first
|
|
53
|
+
|
|
54
|
+
- **List apps**: `listAppsForStore(context, storeId)`
|
|
55
|
+
- **Bootstrap store**: `getStoreCatalogBootstrap(context, storeId)`
|
|
56
|
+
|
|
57
|
+
Notes:
|
|
58
|
+
|
|
59
|
+
- Non-`superAdmin` callers may only see store memberships that include their own `context.appId`.
|
|
60
|
+
- Store membership is a discovery dimension; catalog visibility is still governed by binding/policy.
|
|
61
|
+
|
|
62
|
+
### Identity-first (tenant/agent axes)
|
|
63
|
+
|
|
64
|
+
- **List catalogs**: `listCatalogsForIdentity(context, { identity, includeDisabled?, includeHidden? })`
|
|
65
|
+
|
|
66
|
+
This is driven by **catalog↔identity bindings** (`catalogIdentityBindings`).
|
|
67
|
+
|
|
68
|
+
## 3) Item visibility (native catalogs)
|
|
69
|
+
|
|
70
|
+
Native catalogs may contain multiple physical rows per logical `itemId`. Visibility is controlled by a stored scope on each physical row.
|
|
71
|
+
|
|
72
|
+
### Stored scope (vNext)
|
|
73
|
+
|
|
74
|
+
Native rows may use:
|
|
75
|
+
|
|
76
|
+
- `scope.kind === "global"` (catalog-wide)
|
|
77
|
+
- `scope.kind === "scoped"` with optional coordinate constraints:
|
|
78
|
+
- `tenant`: `accountId`, `groupId`, `userId`, `channelId`, `visitorId`
|
|
79
|
+
- `agent`: `domainId`, `agentId`
|
|
80
|
+
|
|
81
|
+
### Legacy scope (v3 back-compat)
|
|
82
|
+
|
|
83
|
+
Existing rows may still use legacy v3 shapes (`account` / `agent` / `user`). Catalox reads those and continues to support them while the ecosystem migrates.
|
|
84
|
+
|
|
85
|
+
## 4) Empty vs denied vs misconfigured (BFF UX-critical)
|
|
86
|
+
|
|
87
|
+
The goal for catalox-ui is to avoid “empty list” ambiguity for operators.
|
|
88
|
+
|
|
89
|
+
### Preferred: use outcome-wrapper APIs
|
|
90
|
+
|
|
91
|
+
catalox-ui BFF should prefer these methods when it needs UX-relevant distinctions:
|
|
92
|
+
|
|
93
|
+
- `listCatalogItemsWithOutcome(context, catalogId, options?)`
|
|
94
|
+
- `getCatalogItemWithOutcome(context, catalogId, itemId, options?)`
|
|
95
|
+
|
|
96
|
+
They return:
|
|
97
|
+
|
|
98
|
+
- `outcome: "ok" | "empty" | "denied" | "misconfigured" | "mapping_blocked"`
|
|
99
|
+
- plus `result` when available, or `error` for denied/misconfigured cases
|
|
100
|
+
|
|
101
|
+
### Mapping-blocked is a distinct operator signal
|
|
102
|
+
|
|
103
|
+
Mapped catalogs can return `mapping_blocked` when the mapping spec fails validation. catalox-ui should surface issues to operators rather than treating it as “no data”.
|
|
104
|
+
|
|
105
|
+
## 5) Suggested HTTP mapping (BFF)
|
|
106
|
+
|
|
107
|
+
For a catalox-ui BFF, a practical mapping is:
|
|
108
|
+
|
|
109
|
+
- **denied** → HTTP 403
|
|
110
|
+
- **misconfigured** → HTTP 409 (or 500 if you treat it as server fault)
|
|
111
|
+
- **mapping_blocked** → HTTP 422 (or 409), include issues
|
|
112
|
+
- **empty** → HTTP 200 with empty payload
|
|
113
|
+
- **ok** → HTTP 200
|
|
114
|
+
|
|
115
|
+
This is a host choice; the important part is that catalox-ui can distinguish these outcomes.
|
|
116
|
+
|
|
117
|
+
## 6) Operator elevation and audit identity
|
|
118
|
+
|
|
119
|
+
- `superAdmin` is an explicit host-controlled elevation flag. Do not accept it directly from browser input.
|
|
120
|
+
- Prefer `actor: { type, id }` for audit overloading; `userId` exists as a legacy convenience.
|
|
121
|
+
|
|
122
|
+
## 7) Migration notes (from catalox-ui perspective)
|
|
123
|
+
|
|
124
|
+
- **Agent axis correction**: agent identity belongs under `domainId → agentId`, not under `accountId`.
|
|
125
|
+
- Native item scopes may exist in legacy v3 shapes; readers support them during migration.
|
|
126
|
+
- Adopt the outcome-wrapper APIs in the BFF when you need to show operators “why nothing is visible”.
|
|
127
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/catalox",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "Catalox: Firebase-native catalog metadata + unification package.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -49,13 +49,15 @@
|
|
|
49
49
|
"types": "./dist/src/index.d.ts",
|
|
50
50
|
"files": [
|
|
51
51
|
"dist",
|
|
52
|
+
"docs/catalox-ui-contract.md",
|
|
52
53
|
"README.md",
|
|
53
54
|
"LICENSE",
|
|
54
55
|
"firestore.indexes.json"
|
|
55
56
|
],
|
|
56
57
|
"scripts": {
|
|
57
58
|
"cli": "node dist/src/cli/index.js",
|
|
58
|
-
"
|
|
59
|
+
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
60
|
+
"build": "npm run clean && tsc -p tsconfig.build.json",
|
|
59
61
|
"prepublishOnly": "npm run build && npm test",
|
|
60
62
|
"test": "npm run test:unit",
|
|
61
63
|
"test:unit": "node --import tsx --test \"test/unit/**/*.test.ts\"",
|
|
@@ -64,12 +66,14 @@
|
|
|
64
66
|
},
|
|
65
67
|
"dependencies": {
|
|
66
68
|
"@google-cloud/storage": "^7.19.0",
|
|
67
|
-
"@x12i/helpers": "^1.
|
|
69
|
+
"@x12i/helpers": "^1.5.2",
|
|
70
|
+
"@x12i/logxer": "^4.0.2",
|
|
68
71
|
"ajv": "^8.18.0",
|
|
69
72
|
"ajv-formats": "^3.0.1",
|
|
70
73
|
"commander": "^14.0.0",
|
|
71
74
|
"esbuild": "^0.25.0",
|
|
72
75
|
"firebase-admin": "^13.0.0",
|
|
76
|
+
"html-entities": "^2.6.0",
|
|
73
77
|
"mongodb": "^6.0.0"
|
|
74
78
|
},
|
|
75
79
|
"optionalDependencies": {
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { ApiCatalogAdapterConfig } from "../../contracts/adapters.js";
|
|
2
|
-
import type { CatalogQueryOptions } from "../../contracts/catalogs.js";
|
|
3
|
-
import type { CataloxContext } from "../../contracts/context.js";
|
|
4
|
-
import type { CatalogId } from "../../contracts/ids.js";
|
|
5
|
-
import type { UnifiedCatalogItem } from "../../contracts/items.js";
|
|
6
|
-
import type { CatalogFieldMappingSpec, MappingExecutionOptions } from "../../contracts/mappings.js";
|
|
7
|
-
export type ApiAdapterRuntime = {
|
|
8
|
-
fetchImpl?: typeof fetch;
|
|
9
|
-
};
|
|
10
|
-
export declare class ApiCatalogAdapter {
|
|
11
|
-
private readonly runtime;
|
|
12
|
-
constructor(runtime?: ApiAdapterRuntime);
|
|
13
|
-
listItems(context: CataloxContext, catalogId: CatalogId, config: ApiCatalogAdapterConfig, mapping: {
|
|
14
|
-
responseMapping: CatalogFieldMappingSpec[];
|
|
15
|
-
options?: MappingExecutionOptions;
|
|
16
|
-
}, options?: CatalogQueryOptions): Promise<{
|
|
17
|
-
items: UnifiedCatalogItem[];
|
|
18
|
-
nextCursor?: string;
|
|
19
|
-
issues?: import("../../contracts/mappings.js").CatalogMappingIssue[];
|
|
20
|
-
}>;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=api-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/api/api-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGpG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,CAAC;AAYF,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,GAAE,iBAAsB;IAEtD,SAAS,CACb,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE;QAAE,eAAe,EAAE,uBAAuB,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,uBAAuB,CAAA;KAAE,EAC1F,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,6BAA6B,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;CAgDvI"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { executeMapping } from "../../mapping/execute-mapping.js";
|
|
2
|
-
function deepGetFallback(obj, path) {
|
|
3
|
-
const parts = path.split(".").map((p) => p.trim()).filter(Boolean);
|
|
4
|
-
let cur = obj;
|
|
5
|
-
for (const p of parts) {
|
|
6
|
-
if (cur == null)
|
|
7
|
-
return undefined;
|
|
8
|
-
cur = cur[p];
|
|
9
|
-
}
|
|
10
|
-
return cur;
|
|
11
|
-
}
|
|
12
|
-
export class ApiCatalogAdapter {
|
|
13
|
-
runtime;
|
|
14
|
-
constructor(runtime = {}) {
|
|
15
|
-
this.runtime = runtime;
|
|
16
|
-
}
|
|
17
|
-
async listItems(context, catalogId, config, mapping, options) {
|
|
18
|
-
const fetchImpl = this.runtime.fetchImpl ?? fetch;
|
|
19
|
-
if (!config.endpoint)
|
|
20
|
-
throw new Error("API adapter missing endpoint.");
|
|
21
|
-
const url = new URL(config.endpoint);
|
|
22
|
-
if (options?.limit != null)
|
|
23
|
-
url.searchParams.set("limit", String(options.limit));
|
|
24
|
-
if (options?.offset != null)
|
|
25
|
-
url.searchParams.set("offset", String(options.offset));
|
|
26
|
-
const res = await fetchImpl(url.toString(), { method: config.method ?? "GET" });
|
|
27
|
-
if (!res.ok)
|
|
28
|
-
throw new Error(`API request failed: ${res.status}`);
|
|
29
|
-
const body = (await res.json());
|
|
30
|
-
const itemsPath = config.pagination?.itemsPath;
|
|
31
|
-
const rawItems = itemsPath ? deepGetFallback(body, itemsPath) : body;
|
|
32
|
-
const arr = Array.isArray(rawItems) ? rawItems : [];
|
|
33
|
-
const out = [];
|
|
34
|
-
const issues = [];
|
|
35
|
-
for (const row of arr) {
|
|
36
|
-
const source = row;
|
|
37
|
-
const mapped = executeMapping(source, mapping.responseMapping, mapping.options);
|
|
38
|
-
if (mapped.issues)
|
|
39
|
-
issues.push(...mapped.issues);
|
|
40
|
-
const itemId = config.itemIdSourcePath ? deepGetFallback(source, config.itemIdSourcePath) : undefined;
|
|
41
|
-
out.push({
|
|
42
|
-
itemId: itemId != null ? String(itemId) : JSON.stringify(source),
|
|
43
|
-
catalogId,
|
|
44
|
-
appId: context.appId,
|
|
45
|
-
sourceMode: "mapped",
|
|
46
|
-
sourceType: "api",
|
|
47
|
-
sourceRef: { endpoint: config.endpoint },
|
|
48
|
-
data: mapped.data,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
const nextCursorPath = config.pagination?.nextCursorPath;
|
|
52
|
-
const nextCursor = nextCursorPath ? deepGetFallback(body, nextCursorPath) : undefined;
|
|
53
|
-
return {
|
|
54
|
-
items: out,
|
|
55
|
-
...(typeof nextCursor === "string" ? { nextCursor } : {}),
|
|
56
|
-
...(issues.length ? { issues } : {}),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=api-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-adapter.js","sourceRoot":"","sources":["../../../src/adapters/api/api-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/mongo/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/mongo/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { MongoCatalogAdapterConfig } from "../../contracts/adapters.js";
|
|
2
|
-
import type { CatalogQueryOptions } from "../../contracts/catalogs.js";
|
|
3
|
-
import type { CataloxContext } from "../../contracts/context.js";
|
|
4
|
-
import type { CatalogId } from "../../contracts/ids.js";
|
|
5
|
-
import type { UnifiedCatalogItem } from "../../contracts/items.js";
|
|
6
|
-
import type { MappingExecutionOptions } from "../../contracts/mappings.js";
|
|
7
|
-
export type MongoAdapterRuntime = {
|
|
8
|
-
mongoUri: string;
|
|
9
|
-
};
|
|
10
|
-
export declare class MongoCatalogAdapter {
|
|
11
|
-
private readonly runtime;
|
|
12
|
-
constructor(runtime: MongoAdapterRuntime);
|
|
13
|
-
listItems(context: CataloxContext, catalogId: CatalogId, config: MongoCatalogAdapterConfig, mapping: {
|
|
14
|
-
mapping: import("../../contracts/mappings.js").CatalogFieldMappingSpec[];
|
|
15
|
-
options?: MappingExecutionOptions;
|
|
16
|
-
}, options?: CatalogQueryOptions): Promise<{
|
|
17
|
-
items: UnifiedCatalogItem[];
|
|
18
|
-
issues?: import("../../contracts/mappings.js").CatalogMappingIssue[];
|
|
19
|
-
}>;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=mongo-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mongo-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/mongo/mongo-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAI3E,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,mBAAmB;IAEnD,SAAS,CACb,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,6BAA6B,EAAE,uBAAuB,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,uBAAuB,CAAA;KAAE,EACxH,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,6BAA6B,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;CAyDlH"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { MongoClient } from "mongodb";
|
|
2
|
-
import { executeMapping } from "../../mapping/execute-mapping.js";
|
|
3
|
-
import { resolveMongoDbName } from "./resolve-db.js";
|
|
4
|
-
export class MongoCatalogAdapter {
|
|
5
|
-
runtime;
|
|
6
|
-
constructor(runtime) {
|
|
7
|
-
this.runtime = runtime;
|
|
8
|
-
}
|
|
9
|
-
async listItems(context, catalogId, config, mapping, options) {
|
|
10
|
-
const client = new MongoClient(this.runtime.mongoUri);
|
|
11
|
-
await client.connect();
|
|
12
|
-
try {
|
|
13
|
-
const dbName = config.databaseResolution.kind === "lookup"
|
|
14
|
-
? resolveMongoDbName(context.appId, { kind: "appId-direct" })
|
|
15
|
-
: resolveMongoDbName(context.appId, config.databaseResolution);
|
|
16
|
-
const db = client.db(dbName);
|
|
17
|
-
const coll = db.collection(config.collection);
|
|
18
|
-
const filter = {
|
|
19
|
-
...(config.queryDefaults?.filter ?? {}),
|
|
20
|
-
...(options?.filter ?? {}),
|
|
21
|
-
};
|
|
22
|
-
const sort = (options?.sort ?? config.queryDefaults?.sort ?? {});
|
|
23
|
-
const limit = options?.limit ?? 100;
|
|
24
|
-
const skip = options?.offset ?? 0;
|
|
25
|
-
const cursor = coll.find(filter).sort(sort).skip(skip).limit(limit);
|
|
26
|
-
const docs = (await cursor.toArray());
|
|
27
|
-
const items = [];
|
|
28
|
-
const issues = [];
|
|
29
|
-
for (const doc of docs) {
|
|
30
|
-
const source = doc;
|
|
31
|
-
const mapped = executeMapping(source, mapping.mapping, mapping.options);
|
|
32
|
-
if (mapped.issues)
|
|
33
|
-
issues.push(...mapped.issues);
|
|
34
|
-
const itemId = (config.idSourcePath ? source?.[config.idSourcePath] : undefined) ??
|
|
35
|
-
String(doc._id);
|
|
36
|
-
items.push({
|
|
37
|
-
itemId: String(itemId),
|
|
38
|
-
catalogId,
|
|
39
|
-
appId: context.appId,
|
|
40
|
-
sourceMode: "mapped",
|
|
41
|
-
sourceType: "mongo",
|
|
42
|
-
sourceRef: {
|
|
43
|
-
database: dbName,
|
|
44
|
-
collection: config.collection,
|
|
45
|
-
sourceRecordId: String(doc._id),
|
|
46
|
-
},
|
|
47
|
-
data: mapped.data,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
return issues.length ? { items, issues } : { items };
|
|
51
|
-
}
|
|
52
|
-
finally {
|
|
53
|
-
await client.close();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=mongo-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mongo-adapter.js","sourceRoot":"","sources":["../../../src/adapters/mongo/mongo-adapter.ts"],"names":[],"mappings":"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"}
|