@x12i/catalox 1.1.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/LICENSE +22 -0
- package/README.md +222 -0
- package/dist/adapters/api/api-adapter.d.ts +22 -0
- package/dist/adapters/api/api-adapter.d.ts.map +1 -0
- package/dist/adapters/api/api-adapter.js +60 -0
- package/dist/adapters/api/api-adapter.js.map +1 -0
- package/dist/adapters/api/index.d.ts +2 -0
- package/dist/adapters/api/index.d.ts.map +1 -0
- package/dist/adapters/api/index.js +2 -0
- package/dist/adapters/api/index.js.map +1 -0
- package/dist/adapters/mongo/index.d.ts +3 -0
- package/dist/adapters/mongo/index.d.ts.map +1 -0
- package/dist/adapters/mongo/index.js +3 -0
- package/dist/adapters/mongo/index.js.map +1 -0
- package/dist/adapters/mongo/mongo-adapter.d.ts +21 -0
- package/dist/adapters/mongo/mongo-adapter.d.ts.map +1 -0
- package/dist/adapters/mongo/mongo-adapter.js +57 -0
- package/dist/adapters/mongo/mongo-adapter.js.map +1 -0
- package/dist/adapters/mongo/resolve-db.d.ts +4 -0
- package/dist/adapters/mongo/resolve-db.d.ts.map +1 -0
- package/dist/adapters/mongo/resolve-db.js +10 -0
- package/dist/adapters/mongo/resolve-db.js.map +1 -0
- package/dist/bindings/index.d.ts +2 -0
- package/dist/bindings/index.d.ts.map +1 -0
- package/dist/bindings/index.js +3 -0
- package/dist/bindings/index.js.map +1 -0
- package/dist/catalox/authorization.d.ts +11 -0
- package/dist/catalox/authorization.d.ts.map +1 -0
- package/dist/catalox/authorization.js +37 -0
- package/dist/catalox/authorization.js.map +1 -0
- package/dist/catalox/catalox.d.ts +80 -0
- package/dist/catalox/catalox.d.ts.map +1 -0
- package/dist/catalox/catalox.js +492 -0
- package/dist/catalox/catalox.js.map +1 -0
- package/dist/catalox/context.d.ts +17 -0
- package/dist/catalox/context.d.ts.map +1 -0
- package/dist/catalox/context.js +21 -0
- package/dist/catalox/context.js.map +1 -0
- package/dist/catalox/identity.d.ts +7 -0
- package/dist/catalox/identity.d.ts.map +1 -0
- package/dist/catalox/identity.js +26 -0
- package/dist/catalox/identity.js.map +1 -0
- package/dist/catalox/index.d.ts +6 -0
- package/dist/catalox/index.d.ts.map +1 -0
- package/dist/catalox/index.js +6 -0
- package/dist/catalox/index.js.map +1 -0
- package/dist/catalox/json-io.d.ts +3 -0
- package/dist/catalox/json-io.d.ts.map +1 -0
- package/dist/catalox/json-io.js +7 -0
- package/dist/catalox/json-io.js.map +1 -0
- package/dist/contracts/adapters.d.ts +40 -0
- package/dist/contracts/adapters.d.ts.map +1 -0
- package/dist/contracts/adapters.js +2 -0
- package/dist/contracts/adapters.js.map +1 -0
- package/dist/contracts/apps.d.ts +11 -0
- package/dist/contracts/apps.d.ts.map +1 -0
- package/dist/contracts/apps.js +2 -0
- package/dist/contracts/apps.js.map +1 -0
- package/dist/contracts/bindings.d.ts +26 -0
- package/dist/contracts/bindings.d.ts.map +1 -0
- package/dist/contracts/bindings.js +2 -0
- package/dist/contracts/bindings.js.map +1 -0
- package/dist/contracts/bootstrap.d.ts +7 -0
- package/dist/contracts/bootstrap.d.ts.map +1 -0
- package/dist/contracts/bootstrap.js +2 -0
- package/dist/contracts/bootstrap.js.map +1 -0
- package/dist/contracts/catalogs.d.ts +51 -0
- package/dist/contracts/catalogs.d.ts.map +1 -0
- package/dist/contracts/catalogs.js +2 -0
- package/dist/contracts/catalogs.js.map +1 -0
- package/dist/contracts/config.d.ts +14 -0
- package/dist/contracts/config.d.ts.map +1 -0
- package/dist/contracts/config.js +2 -0
- package/dist/contracts/config.js.map +1 -0
- package/dist/contracts/context.d.ts +11 -0
- package/dist/contracts/context.d.ts.map +1 -0
- package/dist/contracts/context.js +2 -0
- package/dist/contracts/context.js.map +1 -0
- package/dist/contracts/descriptors.d.ts +73 -0
- package/dist/contracts/descriptors.d.ts.map +1 -0
- package/dist/contracts/descriptors.js +2 -0
- package/dist/contracts/descriptors.js.map +1 -0
- package/dist/contracts/discovery.d.ts +25 -0
- package/dist/contracts/discovery.d.ts.map +1 -0
- package/dist/contracts/discovery.js +2 -0
- package/dist/contracts/discovery.js.map +1 -0
- package/dist/contracts/errors.d.ts +32 -0
- package/dist/contracts/errors.d.ts.map +1 -0
- package/dist/contracts/errors.js +53 -0
- package/dist/contracts/errors.js.map +1 -0
- package/dist/contracts/ids.d.ts +7 -0
- package/dist/contracts/ids.d.ts.map +1 -0
- package/dist/contracts/ids.js +2 -0
- package/dist/contracts/ids.js.map +1 -0
- package/dist/contracts/index.d.ts +21 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/inputs.d.ts +19 -0
- package/dist/contracts/inputs.d.ts.map +1 -0
- package/dist/contracts/inputs.js +2 -0
- package/dist/contracts/inputs.js.map +1 -0
- package/dist/contracts/item-validation.d.ts +11 -0
- package/dist/contracts/item-validation.d.ts.map +1 -0
- package/dist/contracts/item-validation.js +2 -0
- package/dist/contracts/item-validation.js.map +1 -0
- package/dist/contracts/items.d.ts +49 -0
- package/dist/contracts/items.d.ts.map +1 -0
- package/dist/contracts/items.js +2 -0
- package/dist/contracts/items.js.map +1 -0
- package/dist/contracts/mappings.d.ts +35 -0
- package/dist/contracts/mappings.d.ts.map +1 -0
- package/dist/contracts/mappings.js +2 -0
- package/dist/contracts/mappings.js.map +1 -0
- package/dist/contracts/query.d.ts +10 -0
- package/dist/contracts/query.d.ts.map +1 -0
- package/dist/contracts/query.js +2 -0
- package/dist/contracts/query.js.map +1 -0
- package/dist/contracts/references.d.ts +11 -0
- package/dist/contracts/references.d.ts.map +1 -0
- package/dist/contracts/references.js +2 -0
- package/dist/contracts/references.js.map +1 -0
- package/dist/contracts/sync.d.ts +7 -0
- package/dist/contracts/sync.d.ts.map +1 -0
- package/dist/contracts/sync.js +2 -0
- package/dist/contracts/sync.js.map +1 -0
- package/dist/contracts/validation.d.ts +12 -0
- package/dist/contracts/validation.d.ts.map +1 -0
- package/dist/contracts/validation.js +2 -0
- package/dist/contracts/validation.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/firebase/adapter-store.d.ts +15 -0
- package/dist/firebase/adapter-store.d.ts.map +1 -0
- package/dist/firebase/adapter-store.js +18 -0
- package/dist/firebase/adapter-store.js.map +1 -0
- package/dist/firebase/app-store.d.ts +11 -0
- package/dist/firebase/app-store.d.ts.map +1 -0
- package/dist/firebase/app-store.js +18 -0
- package/dist/firebase/app-store.js.map +1 -0
- package/dist/firebase/binding-store.d.ts +13 -0
- package/dist/firebase/binding-store.d.ts.map +1 -0
- package/dist/firebase/binding-store.js +35 -0
- package/dist/firebase/binding-store.js.map +1 -0
- package/dist/firebase/catalog-store.d.ts +12 -0
- package/dist/firebase/catalog-store.d.ts.map +1 -0
- package/dist/firebase/catalog-store.js +22 -0
- package/dist/firebase/catalog-store.js.map +1 -0
- package/dist/firebase/definition-store.d.ts +39 -0
- package/dist/firebase/definition-store.d.ts.map +1 -0
- package/dist/firebase/definition-store.js +18 -0
- package/dist/firebase/definition-store.js.map +1 -0
- package/dist/firebase/descriptor-store.d.ts +11 -0
- package/dist/firebase/descriptor-store.d.ts.map +1 -0
- package/dist/firebase/descriptor-store.js +18 -0
- package/dist/firebase/descriptor-store.js.map +1 -0
- package/dist/firebase/firestore-store.d.ts +14 -0
- package/dist/firebase/firestore-store.d.ts.map +1 -0
- package/dist/firebase/firestore-store.js +15 -0
- package/dist/firebase/firestore-store.js.map +1 -0
- package/dist/firebase/index.d.ts +12 -0
- package/dist/firebase/index.d.ts.map +1 -0
- package/dist/firebase/index.js +12 -0
- package/dist/firebase/index.js.map +1 -0
- package/dist/firebase/mapping-store.d.ts +11 -0
- package/dist/firebase/mapping-store.d.ts.map +1 -0
- package/dist/firebase/mapping-store.js +18 -0
- package/dist/firebase/mapping-store.js.map +1 -0
- package/dist/firebase/native-item-store.d.ts +20 -0
- package/dist/firebase/native-item-store.d.ts.map +1 -0
- package/dist/firebase/native-item-store.js +55 -0
- package/dist/firebase/native-item-store.js.map +1 -0
- package/dist/firebase/reference-store.d.ts +17 -0
- package/dist/firebase/reference-store.d.ts.map +1 -0
- package/dist/firebase/reference-store.js +27 -0
- package/dist/firebase/reference-store.js.map +1 -0
- package/dist/firebase/snapshot-store.d.ts +11 -0
- package/dist/firebase/snapshot-store.d.ts.map +1 -0
- package/dist/firebase/snapshot-store.js +22 -0
- package/dist/firebase/snapshot-store.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mapping/execute-mapping.d.ts +8 -0
- package/dist/mapping/execute-mapping.d.ts.map +1 -0
- package/dist/mapping/execute-mapping.js +78 -0
- package/dist/mapping/execute-mapping.js.map +1 -0
- package/dist/mapping/helper-gap-report.d.ts +7 -0
- package/dist/mapping/helper-gap-report.d.ts.map +1 -0
- package/dist/mapping/helper-gap-report.js +2 -0
- package/dist/mapping/helper-gap-report.js.map +1 -0
- package/dist/mapping/index.d.ts +4 -0
- package/dist/mapping/index.d.ts.map +1 -0
- package/dist/mapping/index.js +4 -0
- package/dist/mapping/index.js.map +1 -0
- package/dist/mapping/validate-mapping.d.ts +3 -0
- package/dist/mapping/validate-mapping.d.ts.map +1 -0
- package/dist/mapping/validate-mapping.js +32 -0
- package/dist/mapping/validate-mapping.js.map +1 -0
- package/dist/src/adapters/api/api-adapter.d.ts +22 -0
- package/dist/src/adapters/api/api-adapter.d.ts.map +1 -0
- package/dist/src/adapters/api/api-adapter.js +60 -0
- package/dist/src/adapters/api/api-adapter.js.map +1 -0
- package/dist/src/adapters/api/index.d.ts +2 -0
- package/dist/src/adapters/api/index.d.ts.map +1 -0
- package/dist/src/adapters/api/index.js +2 -0
- package/dist/src/adapters/api/index.js.map +1 -0
- package/dist/src/adapters/mongo/index.d.ts +3 -0
- package/dist/src/adapters/mongo/index.d.ts.map +1 -0
- package/dist/src/adapters/mongo/index.js +3 -0
- package/dist/src/adapters/mongo/index.js.map +1 -0
- package/dist/src/adapters/mongo/mongo-adapter.d.ts +21 -0
- package/dist/src/adapters/mongo/mongo-adapter.d.ts.map +1 -0
- package/dist/src/adapters/mongo/mongo-adapter.js +57 -0
- package/dist/src/adapters/mongo/mongo-adapter.js.map +1 -0
- package/dist/src/adapters/mongo/resolve-db.d.ts +4 -0
- package/dist/src/adapters/mongo/resolve-db.d.ts.map +1 -0
- package/dist/src/adapters/mongo/resolve-db.js +10 -0
- package/dist/src/adapters/mongo/resolve-db.js.map +1 -0
- package/dist/src/bindings/index.d.ts +2 -0
- package/dist/src/bindings/index.d.ts.map +1 -0
- package/dist/src/bindings/index.js +3 -0
- package/dist/src/bindings/index.js.map +1 -0
- package/dist/src/catalox/authorization.d.ts +11 -0
- package/dist/src/catalox/authorization.d.ts.map +1 -0
- package/dist/src/catalox/authorization.js +37 -0
- package/dist/src/catalox/authorization.js.map +1 -0
- package/dist/src/catalox/catalox.d.ts +81 -0
- package/dist/src/catalox/catalox.d.ts.map +1 -0
- package/dist/src/catalox/catalox.js +513 -0
- package/dist/src/catalox/catalox.js.map +1 -0
- package/dist/src/catalox/context.d.ts +17 -0
- package/dist/src/catalox/context.d.ts.map +1 -0
- package/dist/src/catalox/context.js +21 -0
- package/dist/src/catalox/context.js.map +1 -0
- package/dist/src/catalox/identity.d.ts +7 -0
- package/dist/src/catalox/identity.d.ts.map +1 -0
- package/dist/src/catalox/identity.js +26 -0
- package/dist/src/catalox/identity.js.map +1 -0
- package/dist/src/catalox/index.d.ts +6 -0
- package/dist/src/catalox/index.d.ts.map +1 -0
- package/dist/src/catalox/index.js +6 -0
- package/dist/src/catalox/index.js.map +1 -0
- package/dist/src/catalox/json-io.d.ts +3 -0
- package/dist/src/catalox/json-io.d.ts.map +1 -0
- package/dist/src/catalox/json-io.js +7 -0
- package/dist/src/catalox/json-io.js.map +1 -0
- package/dist/src/contracts/adapters.d.ts +40 -0
- package/dist/src/contracts/adapters.d.ts.map +1 -0
- package/dist/src/contracts/adapters.js +2 -0
- package/dist/src/contracts/adapters.js.map +1 -0
- package/dist/src/contracts/apps.d.ts +11 -0
- package/dist/src/contracts/apps.d.ts.map +1 -0
- package/dist/src/contracts/apps.js +2 -0
- package/dist/src/contracts/apps.js.map +1 -0
- package/dist/src/contracts/bindings.d.ts +26 -0
- package/dist/src/contracts/bindings.d.ts.map +1 -0
- package/dist/src/contracts/bindings.js +2 -0
- package/dist/src/contracts/bindings.js.map +1 -0
- package/dist/src/contracts/bootstrap.d.ts +7 -0
- package/dist/src/contracts/bootstrap.d.ts.map +1 -0
- package/dist/src/contracts/bootstrap.js +2 -0
- package/dist/src/contracts/bootstrap.js.map +1 -0
- package/dist/src/contracts/catalogs.d.ts +51 -0
- package/dist/src/contracts/catalogs.d.ts.map +1 -0
- package/dist/src/contracts/catalogs.js +2 -0
- package/dist/src/contracts/catalogs.js.map +1 -0
- package/dist/src/contracts/config.d.ts +14 -0
- package/dist/src/contracts/config.d.ts.map +1 -0
- package/dist/src/contracts/config.js +2 -0
- package/dist/src/contracts/config.js.map +1 -0
- package/dist/src/contracts/context.d.ts +11 -0
- package/dist/src/contracts/context.d.ts.map +1 -0
- package/dist/src/contracts/context.js +2 -0
- package/dist/src/contracts/context.js.map +1 -0
- package/dist/src/contracts/descriptors.d.ts +73 -0
- package/dist/src/contracts/descriptors.d.ts.map +1 -0
- package/dist/src/contracts/descriptors.js +2 -0
- package/dist/src/contracts/descriptors.js.map +1 -0
- package/dist/src/contracts/discovery.d.ts +25 -0
- package/dist/src/contracts/discovery.d.ts.map +1 -0
- package/dist/src/contracts/discovery.js +2 -0
- package/dist/src/contracts/discovery.js.map +1 -0
- package/dist/src/contracts/errors.d.ts +32 -0
- package/dist/src/contracts/errors.d.ts.map +1 -0
- package/dist/src/contracts/errors.js +53 -0
- package/dist/src/contracts/errors.js.map +1 -0
- package/dist/src/contracts/ids.d.ts +7 -0
- package/dist/src/contracts/ids.d.ts.map +1 -0
- package/dist/src/contracts/ids.js +2 -0
- package/dist/src/contracts/ids.js.map +1 -0
- package/dist/src/contracts/index.d.ts +21 -0
- package/dist/src/contracts/index.d.ts.map +1 -0
- package/dist/src/contracts/index.js +2 -0
- package/dist/src/contracts/index.js.map +1 -0
- package/dist/src/contracts/inputs.d.ts +19 -0
- package/dist/src/contracts/inputs.d.ts.map +1 -0
- package/dist/src/contracts/inputs.js +2 -0
- package/dist/src/contracts/inputs.js.map +1 -0
- package/dist/src/contracts/item-validation.d.ts +11 -0
- package/dist/src/contracts/item-validation.d.ts.map +1 -0
- package/dist/src/contracts/item-validation.js +2 -0
- package/dist/src/contracts/item-validation.js.map +1 -0
- package/dist/src/contracts/items.d.ts +49 -0
- package/dist/src/contracts/items.d.ts.map +1 -0
- package/dist/src/contracts/items.js +2 -0
- package/dist/src/contracts/items.js.map +1 -0
- package/dist/src/contracts/mappings.d.ts +35 -0
- package/dist/src/contracts/mappings.d.ts.map +1 -0
- package/dist/src/contracts/mappings.js +2 -0
- package/dist/src/contracts/mappings.js.map +1 -0
- package/dist/src/contracts/query.d.ts +10 -0
- package/dist/src/contracts/query.d.ts.map +1 -0
- package/dist/src/contracts/query.js +2 -0
- package/dist/src/contracts/query.js.map +1 -0
- package/dist/src/contracts/references.d.ts +11 -0
- package/dist/src/contracts/references.d.ts.map +1 -0
- package/dist/src/contracts/references.js +2 -0
- package/dist/src/contracts/references.js.map +1 -0
- package/dist/src/contracts/sync.d.ts +7 -0
- package/dist/src/contracts/sync.d.ts.map +1 -0
- package/dist/src/contracts/sync.js +2 -0
- package/dist/src/contracts/sync.js.map +1 -0
- package/dist/src/contracts/validation.d.ts +12 -0
- package/dist/src/contracts/validation.d.ts.map +1 -0
- package/dist/src/contracts/validation.js +2 -0
- package/dist/src/contracts/validation.js.map +1 -0
- package/dist/src/errors/index.d.ts +2 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +3 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/firebase/adapter-store.d.ts +15 -0
- package/dist/src/firebase/adapter-store.d.ts.map +1 -0
- package/dist/src/firebase/adapter-store.js +18 -0
- package/dist/src/firebase/adapter-store.js.map +1 -0
- package/dist/src/firebase/app-store.d.ts +11 -0
- package/dist/src/firebase/app-store.d.ts.map +1 -0
- package/dist/src/firebase/app-store.js +18 -0
- package/dist/src/firebase/app-store.js.map +1 -0
- package/dist/src/firebase/binding-store.d.ts +13 -0
- package/dist/src/firebase/binding-store.d.ts.map +1 -0
- package/dist/src/firebase/binding-store.js +35 -0
- package/dist/src/firebase/binding-store.js.map +1 -0
- package/dist/src/firebase/catalog-store.d.ts +12 -0
- package/dist/src/firebase/catalog-store.d.ts.map +1 -0
- package/dist/src/firebase/catalog-store.js +22 -0
- package/dist/src/firebase/catalog-store.js.map +1 -0
- package/dist/src/firebase/definition-store.d.ts +39 -0
- package/dist/src/firebase/definition-store.d.ts.map +1 -0
- package/dist/src/firebase/definition-store.js +18 -0
- package/dist/src/firebase/definition-store.js.map +1 -0
- package/dist/src/firebase/descriptor-store.d.ts +11 -0
- package/dist/src/firebase/descriptor-store.d.ts.map +1 -0
- package/dist/src/firebase/descriptor-store.js +18 -0
- package/dist/src/firebase/descriptor-store.js.map +1 -0
- package/dist/src/firebase/firestore-store.d.ts +14 -0
- package/dist/src/firebase/firestore-store.d.ts.map +1 -0
- package/dist/src/firebase/firestore-store.js +15 -0
- package/dist/src/firebase/firestore-store.js.map +1 -0
- package/dist/src/firebase/index.d.ts +12 -0
- package/dist/src/firebase/index.d.ts.map +1 -0
- package/dist/src/firebase/index.js +12 -0
- package/dist/src/firebase/index.js.map +1 -0
- package/dist/src/firebase/mapping-store.d.ts +11 -0
- package/dist/src/firebase/mapping-store.d.ts.map +1 -0
- package/dist/src/firebase/mapping-store.js +18 -0
- package/dist/src/firebase/mapping-store.js.map +1 -0
- package/dist/src/firebase/native-item-store.d.ts +20 -0
- package/dist/src/firebase/native-item-store.d.ts.map +1 -0
- package/dist/src/firebase/native-item-store.js +55 -0
- package/dist/src/firebase/native-item-store.js.map +1 -0
- package/dist/src/firebase/reference-store.d.ts +17 -0
- package/dist/src/firebase/reference-store.d.ts.map +1 -0
- package/dist/src/firebase/reference-store.js +27 -0
- package/dist/src/firebase/reference-store.js.map +1 -0
- package/dist/src/firebase/snapshot-store.d.ts +11 -0
- package/dist/src/firebase/snapshot-store.d.ts.map +1 -0
- package/dist/src/firebase/snapshot-store.js +22 -0
- package/dist/src/firebase/snapshot-store.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +10 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mapping/execute-mapping.d.ts +8 -0
- package/dist/src/mapping/execute-mapping.d.ts.map +1 -0
- package/dist/src/mapping/execute-mapping.js +78 -0
- package/dist/src/mapping/execute-mapping.js.map +1 -0
- package/dist/src/mapping/helper-gap-report.d.ts +7 -0
- package/dist/src/mapping/helper-gap-report.d.ts.map +1 -0
- package/dist/src/mapping/helper-gap-report.js +2 -0
- package/dist/src/mapping/helper-gap-report.js.map +1 -0
- package/dist/src/mapping/index.d.ts +4 -0
- package/dist/src/mapping/index.d.ts.map +1 -0
- package/dist/src/mapping/index.js +4 -0
- package/dist/src/mapping/index.js.map +1 -0
- package/dist/src/mapping/validate-mapping.d.ts +3 -0
- package/dist/src/mapping/validate-mapping.d.ts.map +1 -0
- package/dist/src/mapping/validate-mapping.js +32 -0
- package/dist/src/mapping/validate-mapping.js.map +1 -0
- package/dist/src/validation/index.d.ts +2 -0
- package/dist/src/validation/index.d.ts.map +1 -0
- package/dist/src/validation/index.js +3 -0
- package/dist/src/validation/index.js.map +1 -0
- package/dist/test/integration/firestore.emulator.test.d.ts +2 -0
- package/dist/test/integration/firestore.emulator.test.d.ts.map +1 -0
- package/dist/test/integration/firestore.emulator.test.js +122 -0
- package/dist/test/integration/firestore.emulator.test.js.map +1 -0
- package/dist/test/unit/identity.test.d.ts +2 -0
- package/dist/test/unit/identity.test.d.ts.map +1 -0
- package/dist/test/unit/identity.test.js +18 -0
- package/dist/test/unit/identity.test.js.map +1 -0
- package/dist/test/unit/mapping.test.d.ts +2 -0
- package/dist/test/unit/mapping.test.d.ts.map +1 -0
- package/dist/test/unit/mapping.test.js +19 -0
- package/dist/test/unit/mapping.test.js.map +1 -0
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +3 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
import { CatalogAccessDeniedError, CatalogAdapterError, CatalogNotFoundError } from "../contracts/errors.js";
|
|
2
|
+
import { validateMappingSpec } from "../mapping/validate-mapping.js";
|
|
3
|
+
import { executeMapping } from "../mapping/execute-mapping.js";
|
|
4
|
+
import { ApiCatalogAdapter } from "../adapters/api/api-adapter.js";
|
|
5
|
+
import { MongoCatalogAdapter } from "../adapters/mongo/mongo-adapter.js";
|
|
6
|
+
import { AuthorizationService } from "./authorization.js";
|
|
7
|
+
import { resolveCatalogItemId } from "./identity.js";
|
|
8
|
+
import { parseJson, toJson } from "./json-io.js";
|
|
9
|
+
import { randomUUID } from "node:crypto";
|
|
10
|
+
import { AppStore } from "../firebase/app-store.js";
|
|
11
|
+
import { AdapterStore } from "../firebase/adapter-store.js";
|
|
12
|
+
import { BindingStore } from "../firebase/binding-store.js";
|
|
13
|
+
import { CatalogStore } from "../firebase/catalog-store.js";
|
|
14
|
+
import { DefinitionStore } from "../firebase/definition-store.js";
|
|
15
|
+
import { DescriptorStore } from "../firebase/descriptor-store.js";
|
|
16
|
+
import { MappingStore } from "../firebase/mapping-store.js";
|
|
17
|
+
import { NativeItemStore } from "../firebase/native-item-store.js";
|
|
18
|
+
import { ReferenceStore } from "../firebase/reference-store.js";
|
|
19
|
+
import { SnapshotStore } from "../firebase/snapshot-store.js";
|
|
20
|
+
export class Catalox {
|
|
21
|
+
deps;
|
|
22
|
+
constructor(deps) {
|
|
23
|
+
this.deps = deps;
|
|
24
|
+
}
|
|
25
|
+
async decorateItem(catalogId, item) {
|
|
26
|
+
const descriptor = await this.deps.descriptors.get(catalogId);
|
|
27
|
+
if (!descriptor)
|
|
28
|
+
return item;
|
|
29
|
+
const identity = descriptor.descriptor.identity;
|
|
30
|
+
const data = item.data;
|
|
31
|
+
const title = identity.titleField ? data[identity.titleField] : undefined;
|
|
32
|
+
const subtitle = identity.subtitleField ? data[identity.subtitleField] : undefined;
|
|
33
|
+
const status = identity.statusField ? data[identity.statusField] : undefined;
|
|
34
|
+
const updatedAt = identity.updatedAtField ? data[identity.updatedAtField] : undefined;
|
|
35
|
+
return {
|
|
36
|
+
...item,
|
|
37
|
+
...(title != null ? { title: String(title) } : {}),
|
|
38
|
+
...(subtitle != null ? { subtitle: String(subtitle) } : {}),
|
|
39
|
+
...(status != null ? { status: String(status) } : {}),
|
|
40
|
+
...(updatedAt != null && item.updatedAt == null ? { updatedAt: String(updatedAt) } : {}),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async listAppCatalogs(context, input) {
|
|
44
|
+
const appId = input?.appId ?? context.appId;
|
|
45
|
+
const bindings = await this.deps.bindings.listByApp(appId);
|
|
46
|
+
const catalogs = await this.deps.catalogs.listAll();
|
|
47
|
+
const byId = new Map(catalogs.map((c) => [c.catalogId, c]));
|
|
48
|
+
const out = [];
|
|
49
|
+
for (const b of bindings) {
|
|
50
|
+
const cat = byId.get(b.catalogId);
|
|
51
|
+
if (!cat)
|
|
52
|
+
continue;
|
|
53
|
+
if (!input?.includeDisabled && cat.status !== "active")
|
|
54
|
+
continue;
|
|
55
|
+
const descriptor = await this.deps.descriptors.get(cat.catalogId);
|
|
56
|
+
const description = descriptor?.descriptor.description ?? cat.description;
|
|
57
|
+
const itemLabel = descriptor?.descriptor.itemLabel ?? cat.itemLabel;
|
|
58
|
+
const visibility = descriptor?.descriptor.visibility;
|
|
59
|
+
const descriptorVersion = descriptor?.descriptorVersion;
|
|
60
|
+
const metadata = descriptor?.descriptor.metadata ?? cat.metadata;
|
|
61
|
+
out.push({
|
|
62
|
+
catalogId: cat.catalogId,
|
|
63
|
+
label: descriptor?.descriptor.label ?? cat.name,
|
|
64
|
+
...(description != null ? { description } : {}),
|
|
65
|
+
...(itemLabel != null ? { itemLabel } : {}),
|
|
66
|
+
sourceMode: cat.sourceMode,
|
|
67
|
+
...(cat.mappedSourceType != null ? { mappedSourceType: cat.mappedSourceType } : {}),
|
|
68
|
+
status: cat.status,
|
|
69
|
+
...(visibility != null ? { visibility } : {}),
|
|
70
|
+
access: b.access,
|
|
71
|
+
...(descriptorVersion != null ? { descriptorVersion } : {}),
|
|
72
|
+
...(metadata != null ? { metadata } : {}),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return out.filter((e) => (input?.includeHidden ? true : e.visibility !== "hidden"));
|
|
76
|
+
}
|
|
77
|
+
async getCatalogDescriptor(context, catalogId) {
|
|
78
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
|
|
79
|
+
const rec = await this.deps.descriptors.get(catalogId);
|
|
80
|
+
return rec?.descriptor ?? null;
|
|
81
|
+
}
|
|
82
|
+
async getAppCatalogBootstrap(context, appId) {
|
|
83
|
+
const resolved = appId ?? context.appId;
|
|
84
|
+
const entries = await this.listAppCatalogs(context, { appId: resolved });
|
|
85
|
+
const descriptors = [];
|
|
86
|
+
for (const e of entries) {
|
|
87
|
+
const d = await this.deps.descriptors.get(e.catalogId);
|
|
88
|
+
if (d)
|
|
89
|
+
descriptors.push(d.descriptor);
|
|
90
|
+
}
|
|
91
|
+
return { appId: resolved, catalogs: descriptors };
|
|
92
|
+
}
|
|
93
|
+
async listCatalogItems(context, catalogId, options) {
|
|
94
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
|
|
95
|
+
const catalog = await this.deps.catalogs.get(catalogId);
|
|
96
|
+
if (!catalog)
|
|
97
|
+
throw new CatalogNotFoundError({ catalogId });
|
|
98
|
+
if (catalog.sourceMode === "native") {
|
|
99
|
+
const filterEq = (options?.filter ?? {});
|
|
100
|
+
const listOpts = {
|
|
101
|
+
...(options?.limit != null ? { limit: options.limit } : {}),
|
|
102
|
+
...(options?.offset != null ? { offset: options.offset } : {}),
|
|
103
|
+
...(Object.keys(filterEq).length ? { filterEq } : {}),
|
|
104
|
+
...(options?.sort ? { sort: options.sort } : {}),
|
|
105
|
+
};
|
|
106
|
+
const records = await this.deps.nativeItems.list(catalogId, listOpts);
|
|
107
|
+
const items = records.map((r) => ({
|
|
108
|
+
itemId: r.itemId,
|
|
109
|
+
catalogId: r.catalogId,
|
|
110
|
+
appId: context.appId,
|
|
111
|
+
sourceMode: "native",
|
|
112
|
+
sourceType: "firebase",
|
|
113
|
+
data: r.data,
|
|
114
|
+
...(r.metadata != null ? { metadata: r.metadata } : {}),
|
|
115
|
+
createdAt: r.createdAt,
|
|
116
|
+
updatedAt: r.updatedAt,
|
|
117
|
+
}));
|
|
118
|
+
return { items };
|
|
119
|
+
}
|
|
120
|
+
const def = await this.deps.definitions.get(catalogId);
|
|
121
|
+
if (!def || def.type !== "mapped")
|
|
122
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_definition" });
|
|
123
|
+
const mapping = await this.deps.mappings.get(def.mappingId);
|
|
124
|
+
if (!mapping)
|
|
125
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_mapping" });
|
|
126
|
+
const mappingIssues = validateMappingSpec(mapping.mapping);
|
|
127
|
+
if (mappingIssues.some((i) => i.severity === "error")) {
|
|
128
|
+
return { items: [], issues: mappingIssues };
|
|
129
|
+
}
|
|
130
|
+
if (def.adapterType === "mongo") {
|
|
131
|
+
if (!this.deps.mongoAdapter)
|
|
132
|
+
throw new CatalogAdapterError({ catalogId, reason: "mongo_adapter_unconfigured" });
|
|
133
|
+
const adapterConfig = await this.deps.adapters.get(def.adapterId);
|
|
134
|
+
if (!adapterConfig)
|
|
135
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_adapter" });
|
|
136
|
+
const result = await this.deps.mongoAdapter.listItems(context, catalogId, adapterConfig, { mapping: mapping.mapping, ...(mapping.options ? { options: mapping.options } : {}) }, options);
|
|
137
|
+
return result.issues ? { items: result.items, issues: result.issues } : { items: result.items };
|
|
138
|
+
}
|
|
139
|
+
if (def.adapterType === "api") {
|
|
140
|
+
if (!this.deps.apiAdapter)
|
|
141
|
+
throw new CatalogAdapterError({ catalogId, reason: "api_adapter_unconfigured" });
|
|
142
|
+
const adapterConfig = await this.deps.adapters.get(def.adapterId);
|
|
143
|
+
if (!adapterConfig)
|
|
144
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_adapter" });
|
|
145
|
+
const result = await this.deps.apiAdapter.listItems(context, catalogId, adapterConfig, { responseMapping: mapping.mapping, ...(mapping.options ? { options: mapping.options } : {}) }, options);
|
|
146
|
+
return {
|
|
147
|
+
items: result.items,
|
|
148
|
+
...(result.nextCursor ? { nextCursor: result.nextCursor } : {}),
|
|
149
|
+
...(result.issues ? { issues: result.issues } : {}),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
throw new CatalogAdapterError({ catalogId, reason: "unknown_adapter_type" });
|
|
153
|
+
}
|
|
154
|
+
async getCatalogItem(context, catalogId, itemId) {
|
|
155
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
|
|
156
|
+
const catalog = await this.deps.catalogs.get(catalogId);
|
|
157
|
+
if (!catalog)
|
|
158
|
+
throw new CatalogNotFoundError({ catalogId });
|
|
159
|
+
if (catalog.sourceMode === "native") {
|
|
160
|
+
const rec = await this.deps.nativeItems.get(catalogId, itemId);
|
|
161
|
+
if (!rec)
|
|
162
|
+
return null;
|
|
163
|
+
const base = {
|
|
164
|
+
itemId: rec.itemId,
|
|
165
|
+
catalogId: rec.catalogId,
|
|
166
|
+
appId: context.appId,
|
|
167
|
+
sourceMode: "native",
|
|
168
|
+
sourceType: "firebase",
|
|
169
|
+
data: rec.data,
|
|
170
|
+
...(rec.metadata != null ? { metadata: rec.metadata } : {}),
|
|
171
|
+
createdAt: rec.createdAt,
|
|
172
|
+
updatedAt: rec.updatedAt,
|
|
173
|
+
};
|
|
174
|
+
return this.decorateItem(catalogId, base);
|
|
175
|
+
}
|
|
176
|
+
// For mapped catalogs, use list path with filter if adapter supports.
|
|
177
|
+
const result = await this.listCatalogItems(context, catalogId, {
|
|
178
|
+
limit: 1,
|
|
179
|
+
filter: { itemId },
|
|
180
|
+
});
|
|
181
|
+
const first = result.items[0];
|
|
182
|
+
return first ? this.decorateItem(catalogId, first) : null;
|
|
183
|
+
}
|
|
184
|
+
async validateCatalog(_context, _catalogId) {
|
|
185
|
+
return { isValid: true, issues: [] };
|
|
186
|
+
}
|
|
187
|
+
async validateCatalogItem(_context, _catalogId, _itemId) {
|
|
188
|
+
return { isValid: true, issues: [] };
|
|
189
|
+
}
|
|
190
|
+
async getCatalogItemReferences(context, catalogId, itemId) {
|
|
191
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
|
|
192
|
+
const refs = await this.deps.references.listByItem(catalogId, itemId);
|
|
193
|
+
return refs;
|
|
194
|
+
}
|
|
195
|
+
async listCatalogReferences(context, catalogId) {
|
|
196
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
|
|
197
|
+
const refs = await this.deps.references.listByCatalog(catalogId);
|
|
198
|
+
return refs;
|
|
199
|
+
}
|
|
200
|
+
// Spec methods below are stubs for now; filled in by later todos.
|
|
201
|
+
async getApp(_context, appId) {
|
|
202
|
+
return appId ? this.deps.apps.get(appId) : this.deps.apps.get(_context.appId);
|
|
203
|
+
}
|
|
204
|
+
async createCatalog(_context, _input) {
|
|
205
|
+
const now = new Date().toISOString();
|
|
206
|
+
const catalogId = (_input.catalogId ?? randomUUID());
|
|
207
|
+
await this.deps.catalogs.upsert({
|
|
208
|
+
catalogId,
|
|
209
|
+
name: _input.name,
|
|
210
|
+
...(_input.description != null ? { description: _input.description } : {}),
|
|
211
|
+
sourceMode: _input.sourceMode,
|
|
212
|
+
...(_input.sourceMode === "mapped" && _input.mapped?.sourceType
|
|
213
|
+
? { mappedSourceType: _input.mapped.sourceType }
|
|
214
|
+
: {}),
|
|
215
|
+
status: "active",
|
|
216
|
+
...(_input.metadata != null ? { metadata: _input.metadata } : {}),
|
|
217
|
+
createdAt: now,
|
|
218
|
+
updatedAt: now,
|
|
219
|
+
});
|
|
220
|
+
if (_input.sourceMode === "native") {
|
|
221
|
+
if (!_input.native)
|
|
222
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_native_config" });
|
|
223
|
+
await this.deps.definitions.upsert({
|
|
224
|
+
catalogId,
|
|
225
|
+
type: "native",
|
|
226
|
+
storage: {
|
|
227
|
+
provider: "firestore",
|
|
228
|
+
collectionPath: _input.native.firestoreCollectionPath,
|
|
229
|
+
},
|
|
230
|
+
...(_input.native.itemSchema != null ? { itemSchema: _input.native.itemSchema } : {}),
|
|
231
|
+
createdAt: now,
|
|
232
|
+
updatedAt: now,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
if (!_input.mapped)
|
|
237
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_mapped_config" });
|
|
238
|
+
const adapterId = randomUUID();
|
|
239
|
+
const mappingId = randomUUID();
|
|
240
|
+
await this.deps.adapters.upsert({
|
|
241
|
+
adapterId,
|
|
242
|
+
type: _input.mapped.sourceType,
|
|
243
|
+
..._input.mapped.adapter,
|
|
244
|
+
});
|
|
245
|
+
await this.deps.mappings.upsert({
|
|
246
|
+
mappingId,
|
|
247
|
+
mapping: _input.mapped.mapping,
|
|
248
|
+
createdAt: now,
|
|
249
|
+
updatedAt: now,
|
|
250
|
+
});
|
|
251
|
+
await this.deps.definitions.upsert({
|
|
252
|
+
catalogId,
|
|
253
|
+
type: "mapped",
|
|
254
|
+
adapterType: _input.mapped.sourceType,
|
|
255
|
+
adapterId,
|
|
256
|
+
mappingId,
|
|
257
|
+
...(_input.mapped.syncMode
|
|
258
|
+
? { sync: { mode: _input.mapped.syncMode, syncStatus: "idle" } }
|
|
259
|
+
: {}),
|
|
260
|
+
createdAt: now,
|
|
261
|
+
updatedAt: now,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
// Seed a minimal descriptor if none exists.
|
|
265
|
+
const existingDescriptor = await this.deps.descriptors.get(catalogId);
|
|
266
|
+
if (!existingDescriptor) {
|
|
267
|
+
await this.deps.descriptors.upsert({
|
|
268
|
+
catalogId,
|
|
269
|
+
descriptorVersion: "1",
|
|
270
|
+
descriptor: {
|
|
271
|
+
catalogId,
|
|
272
|
+
label: _input.name,
|
|
273
|
+
...(_input.description != null ? { description: _input.description } : {}),
|
|
274
|
+
sourceMode: _input.sourceMode,
|
|
275
|
+
...(_input.sourceMode === "mapped" && _input.mapped?.sourceType
|
|
276
|
+
? { mappedSourceType: _input.mapped.sourceType }
|
|
277
|
+
: {}),
|
|
278
|
+
status: "active",
|
|
279
|
+
capabilities: {
|
|
280
|
+
canList: true,
|
|
281
|
+
canGet: true,
|
|
282
|
+
canCreate: _input.sourceMode === "native",
|
|
283
|
+
canEdit: _input.sourceMode === "native",
|
|
284
|
+
canDelete: _input.sourceMode === "native",
|
|
285
|
+
canImport: _input.sourceMode === "native",
|
|
286
|
+
canExport: true,
|
|
287
|
+
canSync: _input.sourceMode === "mapped",
|
|
288
|
+
canValidate: true,
|
|
289
|
+
canViewReferences: true,
|
|
290
|
+
},
|
|
291
|
+
queryableFields: [],
|
|
292
|
+
identity: {
|
|
293
|
+
itemIdStrategy: "generated",
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
createdAt: now,
|
|
297
|
+
updatedAt: now,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
const created = await this.deps.catalogs.get(catalogId);
|
|
301
|
+
if (!created)
|
|
302
|
+
throw new CatalogNotFoundError({ catalogId });
|
|
303
|
+
return created;
|
|
304
|
+
}
|
|
305
|
+
async updateCatalog(_context, _catalogId, _patch) {
|
|
306
|
+
const existing = await this.deps.catalogs.get(_catalogId);
|
|
307
|
+
if (!existing)
|
|
308
|
+
throw new CatalogNotFoundError({ catalogId: _catalogId });
|
|
309
|
+
const now = new Date().toISOString();
|
|
310
|
+
await this.deps.catalogs.upsert({
|
|
311
|
+
...existing,
|
|
312
|
+
...(_patch.name != null ? { name: _patch.name } : {}),
|
|
313
|
+
...(_patch.description != null ? { description: _patch.description } : {}),
|
|
314
|
+
...(_patch.metadata != null ? { metadata: _patch.metadata } : {}),
|
|
315
|
+
updatedAt: now,
|
|
316
|
+
});
|
|
317
|
+
return (await this.deps.catalogs.get(_catalogId));
|
|
318
|
+
}
|
|
319
|
+
async getCatalog(_context, catalogId) {
|
|
320
|
+
return this.deps.catalogs.get(catalogId);
|
|
321
|
+
}
|
|
322
|
+
async listCatalogs(_context, _options) {
|
|
323
|
+
return this.deps.catalogs.listAll();
|
|
324
|
+
}
|
|
325
|
+
async bindCatalogToApp(_context, _input) {
|
|
326
|
+
const existing = await this.deps.bindings.findByAppCatalog(_input.appId, _input.catalogId);
|
|
327
|
+
if (existing)
|
|
328
|
+
return existing;
|
|
329
|
+
const now = new Date().toISOString();
|
|
330
|
+
const record = {
|
|
331
|
+
bindingId: `${String(_input.appId)}:${String(_input.catalogId)}`,
|
|
332
|
+
appId: _input.appId,
|
|
333
|
+
catalogId: _input.catalogId,
|
|
334
|
+
access: {
|
|
335
|
+
canRead: _input.access?.canRead ?? true,
|
|
336
|
+
canWrite: _input.access?.canWrite ?? false,
|
|
337
|
+
...(_input.access?.canAdmin != null ? { canAdmin: _input.access.canAdmin } : {}),
|
|
338
|
+
},
|
|
339
|
+
status: "active",
|
|
340
|
+
...(_input.metadata != null ? { metadata: _input.metadata } : {}),
|
|
341
|
+
createdAt: now,
|
|
342
|
+
updatedAt: now,
|
|
343
|
+
};
|
|
344
|
+
await this.deps.bindings.upsert(record);
|
|
345
|
+
return record;
|
|
346
|
+
}
|
|
347
|
+
async unbindCatalogFromApp(_context, _appId, _catalogId) {
|
|
348
|
+
const existing = await this.deps.bindings.findByAppCatalog(_appId, _catalogId);
|
|
349
|
+
if (!existing)
|
|
350
|
+
return;
|
|
351
|
+
await this.deps.bindings.upsert({
|
|
352
|
+
...existing,
|
|
353
|
+
status: "disabled",
|
|
354
|
+
updatedAt: new Date().toISOString(),
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
async ensureCatalog(context, catalog) {
|
|
358
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalog.catalogId, "admin");
|
|
359
|
+
const existing = await this.deps.catalogs.get(catalog.catalogId);
|
|
360
|
+
const now = new Date().toISOString();
|
|
361
|
+
if (existing)
|
|
362
|
+
return;
|
|
363
|
+
await this.deps.catalogs.upsert({
|
|
364
|
+
catalogId: catalog.catalogId,
|
|
365
|
+
name: catalog.name,
|
|
366
|
+
sourceMode: "native",
|
|
367
|
+
status: catalog.status ?? "active",
|
|
368
|
+
createdAt: now,
|
|
369
|
+
updatedAt: now,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
async ensureBinding(context, input) {
|
|
373
|
+
// only god-mode apps can provision cross-app bindings.
|
|
374
|
+
if (!context.isGodMode && input.appId !== context.appId) {
|
|
375
|
+
throw new CatalogAccessDeniedError({ reason: "not_god_mode" });
|
|
376
|
+
}
|
|
377
|
+
const existing = await this.deps.bindings.findByAppCatalog(input.appId, input.catalogId);
|
|
378
|
+
if (existing)
|
|
379
|
+
return;
|
|
380
|
+
const now = new Date().toISOString();
|
|
381
|
+
await this.deps.bindings.upsert({
|
|
382
|
+
bindingId: `${String(input.appId)}:${String(input.catalogId)}`,
|
|
383
|
+
appId: input.appId,
|
|
384
|
+
catalogId: input.catalogId,
|
|
385
|
+
access: {
|
|
386
|
+
canRead: input.access?.canRead ?? true,
|
|
387
|
+
canWrite: input.access?.canWrite ?? false,
|
|
388
|
+
...(input.access?.canAdmin != null ? { canAdmin: input.access.canAdmin } : {}),
|
|
389
|
+
},
|
|
390
|
+
status: "active",
|
|
391
|
+
createdAt: now,
|
|
392
|
+
updatedAt: now,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
async createNativeCatalogItem(_context, _catalogId, _input) {
|
|
396
|
+
return this.upsertNativeCatalogItem(_context, _catalogId, _input);
|
|
397
|
+
}
|
|
398
|
+
async updateNativeCatalogItem(_context, _catalogId, _itemId, _patch) {
|
|
399
|
+
await this.deps.authz.requireBindingAccess(_context, _context.appId, _catalogId, "write");
|
|
400
|
+
const existing = await this.deps.nativeItems.get(_catalogId, _itemId);
|
|
401
|
+
if (!existing)
|
|
402
|
+
throw new CatalogNotFoundError({ catalogId: _catalogId, itemId: _itemId });
|
|
403
|
+
const updatedAt = new Date().toISOString();
|
|
404
|
+
const merged = { ...(existing.data ?? {}), ..._patch };
|
|
405
|
+
await this.deps.nativeItems.upsert(_catalogId, {
|
|
406
|
+
...existing,
|
|
407
|
+
data: merged,
|
|
408
|
+
updatedAt,
|
|
409
|
+
});
|
|
410
|
+
const out = {
|
|
411
|
+
itemId: _itemId,
|
|
412
|
+
catalogId: _catalogId,
|
|
413
|
+
appId: _context.appId,
|
|
414
|
+
sourceMode: "native",
|
|
415
|
+
sourceType: "firebase",
|
|
416
|
+
data: merged,
|
|
417
|
+
createdAt: existing.createdAt,
|
|
418
|
+
updatedAt,
|
|
419
|
+
};
|
|
420
|
+
return this.decorateItem(_catalogId, out);
|
|
421
|
+
}
|
|
422
|
+
async deleteNativeCatalogItem(_context, _catalogId, _itemId) {
|
|
423
|
+
await this.deps.authz.requireBindingAccess(_context, _context.appId, _catalogId, "write");
|
|
424
|
+
await this.deps.nativeItems.delete(_catalogId, _itemId);
|
|
425
|
+
}
|
|
426
|
+
async upsertNativeCatalogItem(context, catalogId, input) {
|
|
427
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "write");
|
|
428
|
+
const descriptor = await this.deps.descriptors.get(catalogId);
|
|
429
|
+
if (!descriptor)
|
|
430
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_descriptor" });
|
|
431
|
+
const itemId = resolveCatalogItemId({ identity: descriptor.descriptor.identity, data: input });
|
|
432
|
+
const now = new Date().toISOString();
|
|
433
|
+
await this.deps.nativeItems.upsert(catalogId, {
|
|
434
|
+
itemId,
|
|
435
|
+
catalogId,
|
|
436
|
+
appScopedOwnerId: context.appId,
|
|
437
|
+
indexed: input.indexed,
|
|
438
|
+
data: input,
|
|
439
|
+
createdAt: now,
|
|
440
|
+
updatedAt: now,
|
|
441
|
+
});
|
|
442
|
+
return {
|
|
443
|
+
itemId,
|
|
444
|
+
catalogId,
|
|
445
|
+
appId: context.appId,
|
|
446
|
+
sourceMode: "native",
|
|
447
|
+
sourceType: "firebase",
|
|
448
|
+
data: input,
|
|
449
|
+
createdAt: now,
|
|
450
|
+
updatedAt: now,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
async batchUpsertNativeCatalogItems(context, catalogId, items) {
|
|
454
|
+
await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "write");
|
|
455
|
+
const descriptor = await this.deps.descriptors.get(catalogId);
|
|
456
|
+
if (!descriptor)
|
|
457
|
+
throw new CatalogAdapterError({ catalogId, reason: "missing_descriptor" });
|
|
458
|
+
const now = new Date().toISOString();
|
|
459
|
+
const records = items.map((data) => {
|
|
460
|
+
const itemId = resolveCatalogItemId({ identity: descriptor.descriptor.identity, data });
|
|
461
|
+
return {
|
|
462
|
+
itemId,
|
|
463
|
+
catalogId,
|
|
464
|
+
appScopedOwnerId: context.appId,
|
|
465
|
+
indexed: data.indexed,
|
|
466
|
+
data,
|
|
467
|
+
createdAt: now,
|
|
468
|
+
updatedAt: now,
|
|
469
|
+
};
|
|
470
|
+
});
|
|
471
|
+
await this.deps.nativeItems.batchUpsert(catalogId, records);
|
|
472
|
+
}
|
|
473
|
+
importCatalogItemsFromJson(json) {
|
|
474
|
+
return parseJson(json);
|
|
475
|
+
}
|
|
476
|
+
exportCatalogItemsToJson(value, pretty = true) {
|
|
477
|
+
return toJson(value, pretty);
|
|
478
|
+
}
|
|
479
|
+
async syncMappedCatalog(_context, _catalogId) {
|
|
480
|
+
const catalog = await this.deps.catalogs.get(_catalogId);
|
|
481
|
+
if (!catalog)
|
|
482
|
+
throw new CatalogNotFoundError({ catalogId: _catalogId });
|
|
483
|
+
const def = await this.deps.definitions.get(_catalogId);
|
|
484
|
+
if (!def || def.type !== "mapped")
|
|
485
|
+
throw new CatalogAdapterError({ catalogId: _catalogId, reason: "not_mapped" });
|
|
486
|
+
const mode = def.sync?.mode;
|
|
487
|
+
if (mode !== "snapshot")
|
|
488
|
+
return { syncStatus: "idle" };
|
|
489
|
+
const now = new Date().toISOString();
|
|
490
|
+
const list = await this.listCatalogItems(_context, _catalogId, { limit: 500 });
|
|
491
|
+
for (const item of list.items) {
|
|
492
|
+
await this.deps.snapshots.upsert(_catalogId, {
|
|
493
|
+
itemId: item.itemId,
|
|
494
|
+
catalogId: _catalogId,
|
|
495
|
+
data: item.data,
|
|
496
|
+
sync: { lastSyncedAt: now, syncStatus: "success" },
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
await this.deps.definitions.upsert({
|
|
500
|
+
...def,
|
|
501
|
+
sync: {
|
|
502
|
+
...(def.sync ?? { mode: "snapshot" }),
|
|
503
|
+
mode: "snapshot",
|
|
504
|
+
lastSyncedAt: now,
|
|
505
|
+
syncStatus: "success",
|
|
506
|
+
},
|
|
507
|
+
updatedAt: now,
|
|
508
|
+
});
|
|
509
|
+
return { syncStatus: "success", lastSyncedAt: now };
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
// (moved to `src/contracts/bootstrap.ts`)
|
|
513
|
+
//# sourceMappingURL=catalox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalox.js","sourceRoot":"","sources":["../../../src/catalox/catalox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AppRecord } from "../contracts/apps.js";
|
|
2
|
+
import type { AppId } from "../contracts/ids.js";
|
|
3
|
+
import type { CataloxContext } from "../contracts/context.js";
|
|
4
|
+
import { AppStore } from "../firebase/app-store.js";
|
|
5
|
+
export type ResolveContextOptions = {
|
|
6
|
+
appId: AppId;
|
|
7
|
+
actor?: CataloxContext["actor"];
|
|
8
|
+
};
|
|
9
|
+
export declare class ContextResolver {
|
|
10
|
+
private readonly apps;
|
|
11
|
+
constructor(apps: AppStore);
|
|
12
|
+
resolve(options: ResolveContextOptions): Promise<{
|
|
13
|
+
context: CataloxContext;
|
|
14
|
+
app: AppRecord | null;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/catalox/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,QAAQ;IAErC,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACrD,OAAO,EAAE,cAAc,CAAC;QACxB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;KACvB,CAAC;CAaH"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AppStore } from "../firebase/app-store.js";
|
|
2
|
+
export class ContextResolver {
|
|
3
|
+
apps;
|
|
4
|
+
constructor(apps) {
|
|
5
|
+
this.apps = apps;
|
|
6
|
+
}
|
|
7
|
+
async resolve(options) {
|
|
8
|
+
const app = await this.apps.get(options.appId);
|
|
9
|
+
const isGodMode = Boolean(app?.isGodModeApp);
|
|
10
|
+
const actor = options.actor;
|
|
11
|
+
return {
|
|
12
|
+
context: {
|
|
13
|
+
appId: options.appId,
|
|
14
|
+
isGodMode,
|
|
15
|
+
...(actor ? { actor } : {}),
|
|
16
|
+
},
|
|
17
|
+
app,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/catalox/context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOpD,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,IAAc;QAAd,SAAI,GAAJ,IAAI,CAAU;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,OAA8B;QAI1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE;gBACP,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS;gBACT,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5B;YACD,GAAG;SACJ,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CatalogIdentityDescriptor } from "../contracts/descriptors.js";
|
|
2
|
+
export type ResolveCatalogItemIdInput = {
|
|
3
|
+
identity: CatalogIdentityDescriptor;
|
|
4
|
+
data: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
export declare function resolveCatalogItemId(input: ResolveCatalogItemIdInput): string;
|
|
7
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/catalox/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM,CAsB7E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function resolveCatalogItemId(input) {
|
|
2
|
+
const { identity, data } = input;
|
|
3
|
+
if (identity.itemIdStrategy === "generated") {
|
|
4
|
+
// Deterministic generation is handled by callers when needed; default to missing.
|
|
5
|
+
throw new Error("Generated itemIdStrategy requires caller-supplied id.");
|
|
6
|
+
}
|
|
7
|
+
if (identity.itemIdStrategy === "natural") {
|
|
8
|
+
if (!identity.itemIdField)
|
|
9
|
+
throw new Error("Natural identity requires itemIdField.");
|
|
10
|
+
const v = data[identity.itemIdField];
|
|
11
|
+
if (v == null || v === "")
|
|
12
|
+
throw new Error("Natural identity value missing.");
|
|
13
|
+
return String(v);
|
|
14
|
+
}
|
|
15
|
+
const fields = identity.compositeFields ?? [];
|
|
16
|
+
if (!fields.length)
|
|
17
|
+
throw new Error("Composite identity requires compositeFields.");
|
|
18
|
+
const parts = fields.map((f) => {
|
|
19
|
+
const v = data[f];
|
|
20
|
+
if (v == null || v === "")
|
|
21
|
+
throw new Error(`Composite identity missing field: ${f}`);
|
|
22
|
+
return String(v);
|
|
23
|
+
});
|
|
24
|
+
return parts.join(":");
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/catalox/identity.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACnE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,QAAQ,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;QAC5C,kFAAkF;QAClF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACrF,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|