@wildo-ai/saas-backend-lib 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/__tests__/fixture-deep-partial.d.ts.map +1 -1
- package/dist/esm/__tests__/integration/redis-integration-gate.d.ts.map +1 -1
- package/dist/esm/__tests__/setup.d.ts.map +1 -1
- package/dist/esm/__tests__/test-container.d.ts.map +1 -1
- package/dist/esm/applications/models/applications.backend.schemas.d.ts.map +1 -1
- package/dist/esm/applications/seeds/application-metadata-defaults.seeds.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
- package/dist/esm/base-classes/models/repositories.backend.schemas.d.ts.map +1 -1
- package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts +1 -1
- package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +210 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
- package/dist/esm/base-classes/services/batches/resource-retention-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/suspension-reactivation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +27 -6
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/utils/audit-access-fields.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/utils/operation-response-serializer.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/__tests__/method-span-scan.guard-helpers.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-filter-translation.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +220 -25
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-query.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +191 -26
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +47 -4
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +96 -29
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-row-projection.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-subject-erasure-effect.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odoo-jsonrpc-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/rest-json-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +9 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +106 -0
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +266 -20
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +23 -3
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-guarded-mutation.backend.types.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +5 -2
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +34 -3
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-version-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/resource-write-integrity.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts +72 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js +88 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/unique-constraint-conflict-reference.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/resource-operations-helper.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/__tests__/mock-system-access.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/read-only-field-change.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-audit-emission.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-server-injected-fields.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-transaction-persistence.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +571 -45
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
- package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
- package/dist/esm/base-classes/utils/backend-type-utils.d.ts.map +1 -1
- package/dist/esm/base-classes/utils/single-subject-addressing.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
- package/dist/esm/billing/services/back-office/abstract-billing.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +475 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
- package/dist/esm/billing/services/back-office/billing-state.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-state.backend.service.js +11 -1
- package/dist/esm/billing/services/back-office/billing-state.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/billing-subject-erasure-effect.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
- package/dist/esm/billing/services/billing.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +48 -7
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +70 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +98 -2
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +21 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +109 -2
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
- package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +310 -29
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
- package/dist/esm/billing/testing/billing-test-fixtures.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
- package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
- package/dist/esm/charts/controllers/chart.backend.controller.d.ts.map +1 -1
- package/dist/esm/charts/services/chart-registry.backend.service.d.ts +80 -7
- package/dist/esm/charts/services/chart-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/charts/services/chart-registry.backend.service.js +115 -8
- package/dist/esm/charts/services/chart-registry.backend.service.js.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/immudb-audit-reconcile.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/siem-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +225 -13
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +340 -62
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +350 -10
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +562 -10
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +6 -2
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +31 -9
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +57 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +52 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-class-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-dictionary.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-ocsf-projection.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-projection-contract.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/utils/audit-actor.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/utils/layer2-audit-provider-boot-diagnostic.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/index.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-hide-predicate.backend.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/services/subject-erasure-external-effects.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/services/subject-session-revocation.backend.service.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
- package/dist/esm/config/bootstrap/minion-initialization-projection.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js +3 -0
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal.backend.service.d.ts.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/config/models/app-config-secrets.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend-authored.definitions.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +145 -49
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
- package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/app-env-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts +36 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.js +36 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.js.map +1 -0
- package/dist/esm/config/models/config-mutation-boundary.utils.d.ts.map +1 -1
- package/dist/esm/config/models/postgresql-env-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/runtime-topology.backend.contracts.d.ts.map +1 -1
- package/dist/esm/config/services/__tests__/mock-app-configuration.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.js +71 -76
- package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
- package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts +33 -0
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +39 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +37 -0
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js +69 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
- package/dist/esm/data-seeding/batches/data-seeding-run-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/batches/data-seeding-scheduled-rerun.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.contracts.d.ts.map +1 -1
- package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.controller.d.ts.map +1 -1
- package/dist/esm/data-seeding/data-seeding-models.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/business-key-resolver.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-execution-context.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-migrator-runner.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-reconciler.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-run.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-run.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-trigger-mode-matrix.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-application-bootstrap.backend.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-scope-resolver-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/additive-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/lazy-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/manual-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/sync-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/upgrade-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-business-key.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-error.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-run-counters.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-run-ledger.backend.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-anchor.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-resolution.backend.d.ts.map +1 -1
- package/dist/esm/databases/models/aggregation.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/databases.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/filter.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/resolve-persistence-adapter.backend.utils.d.ts.map +1 -1
- package/dist/esm/databases/models/sql.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/transaction.shared.schemas.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongodb.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/topn-processor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/db-utils.d.ts.map +1 -1
- package/dist/esm/databases/services/mongo-aggregation.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/mongodb.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-aggregation.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-database.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-development-provisioning.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-filter.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-migration-runner.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-ddl.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-migration-sql.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-lockfile.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/resource-persistence-unit-of-work.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/schema-planning-standalone.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.d.ts.map +1 -1
- package/dist/esm/databases/utils/postgresql-identifier.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/services/__tests__/mock-error-builder.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
- package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js +129 -8
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
- package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
- package/dist/esm/external-data/batches/external-data-pipeline-scheduled-run.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-extraction-source.backend.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-models.exports.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +59 -2
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +52 -17
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/models/external-providers.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +306 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +379 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js +235 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts +81 -34
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +181 -100
- package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
- package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/external-api-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +413 -7
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +684 -45
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts +15 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +84 -5
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
- package/dist/esm/features/controllers/features.backend.controller.d.ts.map +1 -1
- package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.d.ts.map +1 -1
- package/dist/esm/features/services/__tests__/mock-feature-resolution.service.d.ts.map +1 -1
- package/dist/esm/features/services/application-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-definition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-gate.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-resolution.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/organization-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/scope-feature-ledger-relationship.backend.utils.d.ts.map +1 -1
- package/dist/esm/features/services/scope-features-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/testing/feature-test-utils.d.ts.map +1 -1
- package/dist/esm/files/batches/files-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-analyzers.types.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-constraint.types.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-validation.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +21 -13
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +37 -0
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +260 -36
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/scanning/clamav-scanner.backend.service.d.ts.map +1 -1
- package/dist/esm/files/scanning/file-scan.types.d.ts.map +1 -1
- package/dist/esm/files/scanning/yara-scanner.backend.service.d.ts.map +1 -1
- package/dist/esm/files/scanning/yara-scanner.backend.service.js +20 -2
- package/dist/esm/files/scanning/yara-scanner.backend.service.js.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-field-detection.service.d.ts.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.d.ts.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-repository.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-field-detection.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-population.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
- package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.js +202 -17
- package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.js +175 -13
- package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +53 -2
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.js +127 -3
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
- package/dist/esm/files/services/files.backend.service.d.ts +68 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +177 -5
- package/dist/esm/files/services/files.backend.service.js.map +1 -1
- package/dist/esm/files/services/rag-source-field-detection.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
- package/dist/esm/files/storage/file-storage-path-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.d.ts +52 -11
- package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
- package/dist/esm/files/storage/file-storage-router.backend.service.d.ts +21 -3
- package/dist/esm/files/storage/file-storage-router.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-router.backend.service.js +38 -5
- package/dist/esm/files/storage/file-storage-router.backend.service.js.map +1 -1
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts +87 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts.map +1 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js +340 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js.map +1 -0
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/storage/storage-credential-provider.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-platform-sts-credential-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js +10 -3
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
- package/dist/esm/files/utils/file-upload.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
- package/dist/esm/files/utils/file-validation.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/image-derivation.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/image-thumbnail.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
- package/dist/esm/files/utils/rag-source-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/storage-application-identity.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-push-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-dialect.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-push-notification-delivery.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-push-notification.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-push-delivery-log.repository.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-push-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +196 -40
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/controllers/flows-actors.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/agent-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agents.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +179 -8
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +436 -34
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
- package/dist/esm/flows-actors/services/__tests__/fixtures/meta-workflow-evaluation-treatment.test-fixture.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
- package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agent-facets.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +132 -6
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +467 -49
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/context-curation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +50 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +270 -20
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
- package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js +371 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts +99 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js +155 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/meta-workflow-evaluation-treatment-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-standard-action-contracts.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-standard-evaluation-contracts.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-structured-artifact-action-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +17 -4
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/bounded-subprocess.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts +77 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js +164 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts +48 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js +101 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js.map +1 -0
- package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-scope-id.backend.utils.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-condition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-definition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
- package/dist/esm/guidance/services/scoped-state-read-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
- package/dist/esm/i18n/services/i18n.backend.service.d.ts.map +1 -1
- package/dist/esm/index.d.ts +11 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +31 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts +10 -0
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +126 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +20 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +22 -3
- package/dist/esm/inject/models/service-types.js.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.js +70 -3
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/models/mcp-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +56 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.js +107 -11
- package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +22 -0
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/resource-server-instances-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/utils/zod-to-mcp-json-schema.backend.utils.d.ts.map +1 -1
- package/dist/esm/meta-workflow-runtime.exports.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.d.ts +24 -0
- package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
- package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-value-normalization.backend.utils.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +313 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +389 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/observability/otel-preload.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/otel-sdk-global-handle.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/__tests__/mock-metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/monitoring/observability/services/observability.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/components/email-components.d.ts.map +1 -1
- package/dist/esm/notifications/email/models/email-template-definition.d.ts.map +1 -1
- package/dist/esm/notifications/email/models/email-transport.backend.definitions.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.d.ts +102 -5
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +222 -70
- package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
- package/dist/esm/notifications/email/utils/interpolate-email-label.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/zod-to-typescript.utils.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
- package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +99 -13
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +422 -66
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts +32 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js +32 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js.map +1 -0
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +64 -10
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +277 -82
- package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +46 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +16 -6
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.repository.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-public-key.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +12 -12
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
- package/dist/esm/organizations/batches/organization-member-invitation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/authority-change-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/invitation-acceptance.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-onboarding-operation.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-member-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/user-org-type-grant.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.d.ts.map +1 -1
- package/dist/esm/pdf-templates/__tests__/fixtures/tiny-pdf-template.fixture.d.ts.map +1 -1
- package/dist/esm/pdf-templates/models/pdf-template-binding.d.ts.map +1 -1
- package/dist/esm/pdf-templates/models/pdf-template-definition.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-generated-file-writer.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-generation-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-renderer.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-template-binding.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/apps-crontabs-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/cron-job-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
- package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-completion-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.js +1 -4
- package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.js +1 -4
- package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
- package/dist/esm/queue/job-payload-storage.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-status-tracking.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
- package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
- package/dist/esm/queue/queue.backend.service.d.ts +3 -3
- package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue.backend.service.js +26 -4
- package/dist/esm/queue/queue.backend.service.js.map +1 -1
- package/dist/esm/queue/scheduled-message-verifier.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
- package/dist/esm/rag/batches/rag-embedding-drain.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/batches/rag-reconciliation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/models/rag-chunk-store.backend.types.d.ts.map +1 -1
- package/dist/esm/rag/models/rag-retrieval.backend.types.d.ts.map +1 -1
- package/dist/esm/rag/services/mongodb-rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/postgresql-rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-collection.mongodb-ddl.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-retrieval.mongodb-query.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-retrieval.postgresql-query.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-table.postgresql-ddl.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-ingestion.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-retrieval.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-fusion.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-removal.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-row-shaping.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-ingestion-trigger.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-retrieval-scope.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-source-field-value.backend.utils.d.ts.map +1 -1
- package/dist/esm/requests/models/api-routes.backend.defintions.d.ts.map +1 -1
- package/dist/esm/requests/models/requests.backend.schemas.d.ts.map +1 -1
- package/dist/esm/requests/service/platform-mutualized-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/platform-requests.backend.utils.d.ts.map +1 -1
- package/dist/esm/requests/service/remote-client-base.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/serverless-services-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts +9 -0
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +81 -9
- package/dist/esm/requests/service/websocket.service.js.map +1 -1
- package/dist/esm/resources/backend-resource-registry.exports.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +16 -2
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/models/index.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
- package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
- package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
- package/dist/esm/resources/models/resources.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/virtual-fields.backend.types.d.ts.map +1 -1
- package/dist/esm/resources/services/__tests__/mock-resources-registry.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-context.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-id.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-population.backend.service.d.ts +17 -2
- package/dist/esm/resources/services/resource-population.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-population.backend.service.js +74 -18
- package/dist/esm/resources/services/resource-population.backend.service.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts +83 -5
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +121 -6
- package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
- package/dist/esm/resources/services/virtual-fields.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-retention.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
- package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
- package/dist/esm/runtime/models/execution-context.backend.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/models/request-context.als.backend.d.ts.map +1 -1
- package/dist/esm/runtime/models/runtime.backend.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/execution-context-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
- package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +191 -1
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts +19 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.js +287 -89
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/utils/oauth-body-cap.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/testing/execution-context-test-fixtures.d.ts.map +1 -1
- package/dist/esm/runtime/testing/mock-execution-context-creator.service.d.ts.map +1 -1
- package/dist/esm/runtime/utils/application-startup-config-access.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/feature-gated-core-resource-exclusions.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/request-client-ip.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/scan-default-exports.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-key-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts +22 -0
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +113 -4
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/auth-constants.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/authentications.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/authorization-client.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts +37 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js +37 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js.map +1 -0
- package/dist/esm/security/authentications/models/identity-persistence-boundaries.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +30 -0
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/sso-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/user-authorization-version.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/seeds/enterprise-config-defaults.seeds.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/oauth-provider-audit-spies.mock.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js +2 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +197 -0
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +384 -53
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +68 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts +97 -0
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +260 -27
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts +14 -0
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +70 -4
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-session-store.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +17 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +49 -17
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +339 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js +11 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/email-verification-initiator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/machine-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-user-claims.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/resolve-active-member-orgs.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-controller.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/concurrent-session-eviction.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/ensure-user-profile.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/machine-auth-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/pkce.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/saml-java-availability.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/application-auth-policy-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/utils/one-off-session-lifetime.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/social-oauth2-purpose.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts +59 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js +111 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js.map +1 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts +57 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js +133 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js.map +1 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts +41 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js +157 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js.map +1 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts +84 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.js +99 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.js.map +1 -0
- package/dist/esm/security/authorizations/authorization-denial-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/junction-scope-resolution.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/organization-unit-narrowing-enforcement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +37 -124
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/relationship-foreign-key-filter.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +133 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js +137 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +134 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +152 -5
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +146 -8
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +328 -29
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +299 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +953 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +99 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +210 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +423 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +282 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +125 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +123 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +214 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +430 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +98 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts +34 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js +39 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js.map +1 -0
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/index.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +21 -3
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +26 -16
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts +13 -0
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js +14 -0
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js.map +1 -1
- package/dist/esm/security/jwt/utils/jwt-verification-error-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts +39 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js +60 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js.map +1 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts +66 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js +75 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js.map +1 -0
- package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
- package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
- package/dist/esm/security/scim/utils/scim-attribute-path-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/scim/utils/scim-filter-parser.d.ts.map +1 -1
- package/dist/esm/security/scim/utils/scim-response-formatter.d.ts.map +1 -1
- package/dist/esm/security/session-invalidation-fence.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
- package/dist/esm/security/token-invalidation-fence.backend.utils.d.ts.map +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/users/services/inbound-contact-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts +0 -45
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts.map +0 -1
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.js +0 -22
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
- package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
|
@@ -18,7 +18,7 @@ import { projectCaughtErrorLogFields } from '../../errors/utils/error-log-level-
|
|
|
18
18
|
import { RepositoriesRegistryHandlerBackendService, } from '../../base-classes/services/repositories/repositories-registry-handler.backend.service.js';
|
|
19
19
|
import { ResourcesRegistryBackendService } from '../../resources/services/resources-registry.backend.service.js';
|
|
20
20
|
import { ExecutionContextCreatorBackendService } from '../../runtime/services/execution-context-creator.backend.service.js';
|
|
21
|
-
import { ResourcePrimaryScope, NotificationBadgeOperation, NotificationBadgeSourceKind, CoreResourceType, CoreResourceOperation, CoreWebSocketEvent, } from '@wildo-ai/saas-models';
|
|
21
|
+
import { ResourcePrimaryScope, NotificationBadgeOperation, NotificationBadgeSourceKind, CoreResourceType, CoreResourceOperation, buildNotificationBadgeReference, parseNotificationBadgeReference, CoreWebSocketEvent, } from '@wildo-ai/saas-models';
|
|
22
22
|
import { WebSocketService } from '../../requests/service/websocket.service.js';
|
|
23
23
|
/**
|
|
24
24
|
* The derived-badge SOURCE count passes a fully explicit, self-scoped filter
|
|
@@ -29,6 +29,22 @@ import { WebSocketService } from '../../requests/service/websocket.service.js';
|
|
|
29
29
|
* FK is injected/filtered correctly rather than bypassed.)
|
|
30
30
|
*/
|
|
31
31
|
const EXPLICIT_SCOPE_REPO_OPTIONS = { excludeContextualFilter: true };
|
|
32
|
+
/**
|
|
33
|
+
* How many times a RELATIVE badge write (increment / decrement) re-attempts its guarded statement
|
|
34
|
+
* before giving up and reporting the count it can observe.
|
|
35
|
+
*
|
|
36
|
+
* Two is what the mechanism needs and three is the margin. A first pass misses only when the badge
|
|
37
|
+
* row does not exist yet; the pass then materializes a ZERO row and the SECOND pass applies the
|
|
38
|
+
* delta to it. The only other way a pass can miss is the decrement's two-statement floor (see
|
|
39
|
+
* {@link NotificationBadgeBackendService.applyGuardedCountDelta}) losing a race in the window
|
|
40
|
+
* between its two statements — that is a genuine retry, and one spare pass is generous for a
|
|
41
|
+
* contention window measured in a single round trip.
|
|
42
|
+
*
|
|
43
|
+
* The loop terminates on its own budget rather than on a condition, because the exhaustion outcome
|
|
44
|
+
* is deliberately NOT a throw: a badge is a decoration, and failing a domain mutation because a
|
|
45
|
+
* counter could not be advanced would trade a cosmetic defect for a functional one.
|
|
46
|
+
*/
|
|
47
|
+
const RELATIVE_BADGE_WRITE_PASSES = 3;
|
|
32
48
|
/**
|
|
33
49
|
* NotificationBadgeBackendService
|
|
34
50
|
*
|
|
@@ -91,10 +107,14 @@ let NotificationBadgeBackendService = class NotificationBadgeBackendService {
|
|
|
91
107
|
});
|
|
92
108
|
}
|
|
93
109
|
/**
|
|
94
|
-
* Build a badge reference string
|
|
110
|
+
* Build a badge reference string.
|
|
111
|
+
*
|
|
112
|
+
* Delegates to the shared builder rather than re-templating the format: the browser reduces this
|
|
113
|
+
* exact string to a badge KEY on arrival, so the producer and the consumer must be reading one
|
|
114
|
+
* definition of where the parts are.
|
|
95
115
|
*/
|
|
96
116
|
buildBadgeReference(scope, scopeId, identifier) {
|
|
97
|
-
return
|
|
117
|
+
return buildNotificationBadgeReference(scope, scopeId, identifier);
|
|
98
118
|
}
|
|
99
119
|
/**
|
|
100
120
|
* Parse a badge reference string.
|
|
@@ -106,18 +126,7 @@ let NotificationBadgeBackendService = class NotificationBadgeBackendService {
|
|
|
106
126
|
* to fail fast at parse time rather than later during dispatch.
|
|
107
127
|
*/
|
|
108
128
|
parseBadgeReference(badgeReference) {
|
|
109
|
-
|
|
110
|
-
if (parts.length !== 3)
|
|
111
|
-
return null;
|
|
112
|
-
const [scope, scopeId, identifier] = parts;
|
|
113
|
-
if (!this.isSupportedScope(scope)) {
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
scope: scope,
|
|
118
|
-
scopeId,
|
|
119
|
-
identifier: identifier,
|
|
120
|
-
};
|
|
129
|
+
return parseNotificationBadgeReference(badgeReference);
|
|
121
130
|
}
|
|
122
131
|
/**
|
|
123
132
|
* Get badge count for a specific identifier and scope
|
|
@@ -165,51 +174,73 @@ let NotificationBadgeBackendService = class NotificationBadgeBackendService {
|
|
|
165
174
|
}
|
|
166
175
|
}
|
|
167
176
|
/**
|
|
168
|
-
* Execute a badge operation (increment, decrement, set, reset)
|
|
177
|
+
* Execute a badge operation (increment, decrement, set, reset).
|
|
178
|
+
*
|
|
179
|
+
* ## Two write shapes, because the vocabulary carries two kinds of change
|
|
180
|
+
*
|
|
181
|
+
* `SET` and `RESET` are ABSOLUTE: the value written does not depend on the value read, so a plain
|
|
182
|
+
* read-then-write is already correct — concurrent absolute writes are last-writer-wins, which is
|
|
183
|
+
* what "set it to N" means.
|
|
184
|
+
*
|
|
185
|
+
* `INCREMENT` and `DECREMENT` are RELATIVE, and that is where this method used to lose data. It
|
|
186
|
+
* read `count`, computed `count ± value` in JavaScript, and wrote the result back. Two operations
|
|
187
|
+
* committing concurrently both read the SAME previous value, so the second write overwrote the
|
|
188
|
+
* first and one increment vanished — with no error, no log, and a badge that is simply too low
|
|
189
|
+
* forever after (an EVENT_COUNTER badge is never re-derived; that is the whole distinction
|
|
190
|
+
* `NotificationBadgeSourceKind` draws, and it is why the drift is permanent here and self-healing
|
|
191
|
+
* on a DERIVED_QUERY badge).
|
|
192
|
+
*
|
|
193
|
+
* More checking cannot fix that — the two writers have nothing to collide on. So the relative arms
|
|
194
|
+
* now go through the adapter-neutral guarded mutation, where the STORE performs the arithmetic in
|
|
195
|
+
* one statement (`$inc` on MongoDB, `COALESCE(col, 0) + delta` on PostgreSQL) and the two writers
|
|
196
|
+
* collide on the row itself. See {@link applyRelativeCountChange}.
|
|
169
197
|
*/
|
|
170
198
|
async executeBadgeOperation(executionContext, scope, scopeId, identifier, operation, value = 1) {
|
|
199
|
+
const resourceType = this.resolveResourceType(scope);
|
|
171
200
|
const repository = this.resolveRepository(scope);
|
|
172
|
-
if (!repository) {
|
|
201
|
+
if (!resourceType || !repository) {
|
|
173
202
|
throw this.errorBuilder.buildError('INTERNAL', executionContext, {
|
|
174
203
|
customMessageReference: 'NOTIFICATION_BADGES_REPOSITORY_NOT_FOUND',
|
|
175
204
|
context: { scope },
|
|
176
205
|
});
|
|
177
206
|
}
|
|
178
|
-
|
|
179
|
-
let badge = await this.findBadge(executionContext, scope, scopeId, identifier);
|
|
180
|
-
const previousCount = badge?.count ?? 0;
|
|
207
|
+
let previousCount;
|
|
181
208
|
let newCount;
|
|
182
|
-
// Calculate new count based on operation
|
|
183
209
|
switch (operation) {
|
|
184
210
|
case NotificationBadgeOperation.INCREMENT:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
newCount = Math.max(0, previousCount - value);
|
|
211
|
+
case NotificationBadgeOperation.DECREMENT: {
|
|
212
|
+
const delta = operation === NotificationBadgeOperation.INCREMENT ? value : -value;
|
|
213
|
+
({ previousCount, newCount } = await this.applyRelativeCountChange(resourceType, scope, scopeId, identifier, delta));
|
|
189
214
|
break;
|
|
215
|
+
}
|
|
190
216
|
case NotificationBadgeOperation.SET:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
newCount = 0;
|
|
217
|
+
case NotificationBadgeOperation.RESET: {
|
|
218
|
+
const absoluteCount = operation === NotificationBadgeOperation.SET ? Math.max(0, value) : 0;
|
|
219
|
+
({ previousCount, newCount } = await this.writeAbsoluteCount(repository, scope, scopeId, identifier, absoluteCount));
|
|
195
220
|
break;
|
|
196
|
-
|
|
221
|
+
}
|
|
222
|
+
default: {
|
|
223
|
+
/**
|
|
224
|
+
* The vocabulary is closed, but the dispatcher reaches this method through
|
|
225
|
+
* `badgeOp.operation as NotificationBadgeOperation` — an unchecked cast over an authored
|
|
226
|
+
* string — so an unknown member can arrive at runtime.
|
|
227
|
+
*
|
|
228
|
+
* It now reads the count and writes NOTHING. The previous behaviour wrote `previousCount`
|
|
229
|
+
* back over itself, which on an absent badge MATERIALIZED a zero row for an operation
|
|
230
|
+
* nobody could name: a write performed because the switch had no other arm to fall into.
|
|
231
|
+
* The event is still emitted below, so a client that asked for an unknown operation is
|
|
232
|
+
* told the current value rather than left silent.
|
|
233
|
+
*/
|
|
234
|
+
previousCount = await this.getBadgeCount(executionContext, scope, scopeId, identifier);
|
|
197
235
|
newCount = previousCount;
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
updatedAt: new Date(),
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
// Create new badge
|
|
211
|
-
const newBadge = this.buildNewBadge(scope, scopeId, identifier, newCount);
|
|
212
|
-
await repository.create(badgeExecutionContext, newBadge);
|
|
236
|
+
this.logger.warn('Unknown notification badge operation — reporting the current count without writing', {
|
|
237
|
+
scope,
|
|
238
|
+
scopeId,
|
|
239
|
+
identifier,
|
|
240
|
+
operation: String(operation),
|
|
241
|
+
});
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
213
244
|
}
|
|
214
245
|
const badgeReference = this.buildBadgeReference(scope, scopeId, identifier);
|
|
215
246
|
// Emit WebSocket event
|
|
@@ -226,6 +257,182 @@ let NotificationBadgeBackendService = class NotificationBadgeBackendService {
|
|
|
226
257
|
newCount,
|
|
227
258
|
};
|
|
228
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Apply a RELATIVE change (`+value` / `-value`) to a badge counter without ever reading it into
|
|
262
|
+
* JavaScript first.
|
|
263
|
+
*
|
|
264
|
+
* ## The shape, and why it is a loop rather than a straight line
|
|
265
|
+
*
|
|
266
|
+
* A guarded mutation only mutates a row that ALREADY EXISTS — it returns `null` when its filter
|
|
267
|
+
* matched nothing, and it cannot insert. A badge row, meanwhile, is materialized lazily on its
|
|
268
|
+
* first write. So the write is "apply the delta; if there was no row, materialize one at ZERO and
|
|
269
|
+
* apply the delta to that".
|
|
270
|
+
*
|
|
271
|
+
* **Materializing at ZERO rather than at the target is the load-bearing detail.** Creating the row
|
|
272
|
+
* already carrying `value` would mean two racing first-increments each insert a row holding `1`,
|
|
273
|
+
* and one of the two increments is lost exactly as before — the defect would simply have moved
|
|
274
|
+
* from the update to the insert. Creating at zero and then letting BOTH callers apply their own
|
|
275
|
+
* delta through the atomic statement keeps every increment: the store matches one row for both,
|
|
276
|
+
* and it ends at 2.
|
|
277
|
+
*
|
|
278
|
+
* ## The residual, stated rather than hidden
|
|
279
|
+
*
|
|
280
|
+
* Two racing materializations can still leave a DUPLICATE badge row, because nothing in the schema
|
|
281
|
+
* makes `(scopeId, identifier)` unique — `identifier` carries `.isSummaryField()` and no
|
|
282
|
+
* `.isUnique()`, so the store has no constraint to refuse the second insert with. That duplicate
|
|
283
|
+
* hazard is older than this method and is not what this change is about: it costs a stray row,
|
|
284
|
+
* whereas the read-modify-write cost a permanently wrong number. Closing it means a unique index,
|
|
285
|
+
* which is an engine resource change owing a migration in every PostgreSQL-backed surface
|
|
286
|
+
* (`.claude/rules/engine-resource-changes-owe-migrations.md`) and belongs with the badge-identity
|
|
287
|
+
* work, not here.
|
|
288
|
+
*
|
|
289
|
+
* @returns the count before and after, as observed from the row the store returned.
|
|
290
|
+
*/
|
|
291
|
+
async applyRelativeCountChange(resourceType, scope, scopeId, identifier, delta) {
|
|
292
|
+
/**
|
|
293
|
+
* The identity of the ONE row this write may touch.
|
|
294
|
+
*
|
|
295
|
+
* Tenant scoping is preserved BY CONSTRUCTION rather than by the execution context: the guarded
|
|
296
|
+
* mutation is an infrastructure-tier door whose contract puts scope-aware filter construction on
|
|
297
|
+
* the caller, and the scope key (`userId` / `organizationId`) is right here in the filter, so
|
|
298
|
+
* the statement cannot reach another tenant's badge. That is the same posture the promotion
|
|
299
|
+
* redemption counter and the credit pool take.
|
|
300
|
+
*/
|
|
301
|
+
const identityFilter = { ...this.buildScopeFilter(scope, scopeId), identifier };
|
|
302
|
+
for (let pass = 0; pass < RELATIVE_BADGE_WRITE_PASSES; pass += 1) {
|
|
303
|
+
const applied = await this.applyGuardedCountDelta(resourceType, identityFilter, delta);
|
|
304
|
+
if (applied) {
|
|
305
|
+
return applied;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Nothing matched. There are exactly two reasons, and they need opposite responses, so ask
|
|
309
|
+
* which one it is instead of assuming.
|
|
310
|
+
*
|
|
311
|
+
* - The badge row does not exist yet — materialize it and let the next pass apply the delta.
|
|
312
|
+
* - A DECREMENT lost the race between its two floor statements (see
|
|
313
|
+
* {@link applyGuardedCountDelta}) — the row exists, and materializing would duplicate it.
|
|
314
|
+
* Retry the pair instead.
|
|
315
|
+
*
|
|
316
|
+
* The read costs a round trip on a path taken once per badge lifetime (plus a genuinely rare
|
|
317
|
+
* contention window), which is why it is affordable here and would not be on the hot arm.
|
|
318
|
+
*/
|
|
319
|
+
const existing = await this.findBadgeByIdentity(scope, scopeId, identifier);
|
|
320
|
+
if (!existing) {
|
|
321
|
+
await this.materializeZeroBadge(scope, scopeId, identifier);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Every pass lost its race. Report what the row currently holds and write nothing further: a
|
|
326
|
+
* badge is a decoration, and the caller is a domain mutation that has already committed, so
|
|
327
|
+
* throwing here would turn a cosmetic loss into a failed user action. The warning is what makes
|
|
328
|
+
* the loss visible — silence is what let the original read-modify-write defect live.
|
|
329
|
+
*/
|
|
330
|
+
const current = await this.findBadgeByIdentity(scope, scopeId, identifier);
|
|
331
|
+
const currentCount = current?.count ?? 0;
|
|
332
|
+
this.logger.warn('Notification badge counter change was dropped after exhausting its atomic write passes', {
|
|
333
|
+
scope,
|
|
334
|
+
scopeId,
|
|
335
|
+
identifier,
|
|
336
|
+
delta,
|
|
337
|
+
currentCount,
|
|
338
|
+
passes: RELATIVE_BADGE_WRITE_PASSES,
|
|
339
|
+
});
|
|
340
|
+
return { previousCount: currentCount, newCount: currentCount };
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* ONE attempt at the atomic delta. Returns the before/after counts, or `null` when no row matched.
|
|
344
|
+
*
|
|
345
|
+
* ## The decrement floor lives in the FILTER, not in `Math.max`
|
|
346
|
+
*
|
|
347
|
+
* `Math.max(0, previousCount - value)` computes the floor from a value read moments earlier, which
|
|
348
|
+
* is the very read this change exists to remove. The floor is therefore expressed as a GUARD the
|
|
349
|
+
* store evaluates in the same statement as the write — `count: { $gte: magnitude }` — which is the
|
|
350
|
+
* idiom the promotion redemption counter uses for its `maxRedemptions` ceiling.
|
|
351
|
+
*
|
|
352
|
+
* That guard alone would REFUSE a decrement that cannot be taken in full, where the previous
|
|
353
|
+
* behaviour CLAMPED it to zero. Preserving the clamp needs a second statement, because neither
|
|
354
|
+
* adapter's neutral vocabulary can express "subtract, floored at zero" in one (there is no `$max`
|
|
355
|
+
* in `RepositoryGuardedMutation`, deliberately — an operator no adapter pair can honour identically
|
|
356
|
+
* does not get a name there). So a below-floor row is set to zero by a SECOND guarded statement,
|
|
357
|
+
* itself conditioned on the row still being below the floor. Each statement is atomic, and the
|
|
358
|
+
* pair is safe in every interleaving:
|
|
359
|
+
*
|
|
360
|
+
* - first matched → the count fell by exactly `magnitude`;
|
|
361
|
+
* - first missed, second matched → the count was below the floor at the moment of the write and is
|
|
362
|
+
* now zero, which is what `Math.max(0, count - value)` meant for that count;
|
|
363
|
+
* - both missed → either no row, or a concurrent INCREMENT crossed the floor between the two
|
|
364
|
+
* statements. The caller distinguishes those and retries rather than concluding.
|
|
365
|
+
*
|
|
366
|
+
* ## `updatedAt` is deliberately absent from the descriptor
|
|
367
|
+
*
|
|
368
|
+
* Both adapters bump it themselves — mongoose's `timestamps` hook on one, an explicit
|
|
369
|
+
* planned-column assignment inside `prepareGuardedUpdate` on the other. Passing it here would be a
|
|
370
|
+
* second authority for the same field, and the two would disagree the day either arm changes.
|
|
371
|
+
*/
|
|
372
|
+
async applyGuardedCountDelta(resourceType, identityFilter, delta) {
|
|
373
|
+
if (delta >= 0) {
|
|
374
|
+
const incremented = await this.repositoriesRegistry.atomicGuardedMutation(resourceType, identityFilter, { increment: { count: delta } });
|
|
375
|
+
if (!incremented)
|
|
376
|
+
return null;
|
|
377
|
+
return { previousCount: incremented.count - delta, newCount: incremented.count };
|
|
378
|
+
}
|
|
379
|
+
const magnitude = -delta;
|
|
380
|
+
const decremented = await this.repositoriesRegistry.atomicGuardedMutation(resourceType, { ...identityFilter, count: { $gte: magnitude } }, { increment: { count: delta } });
|
|
381
|
+
if (decremented) {
|
|
382
|
+
return { previousCount: decremented.count + magnitude, newCount: decremented.count };
|
|
383
|
+
}
|
|
384
|
+
const clamped = await this.repositoriesRegistry.atomicGuardedMutation(resourceType, { ...identityFilter, count: { $lt: magnitude } }, { set: { count: 0 } });
|
|
385
|
+
if (!clamped)
|
|
386
|
+
return null;
|
|
387
|
+
/**
|
|
388
|
+
* `previousCount` is reported as the post-write zero rather than as an estimate. The row's
|
|
389
|
+
* pre-write count was somewhere in `[0, magnitude)` and the statement that overwrote it cannot
|
|
390
|
+
* report the value it replaced — a guarded mutation returns the row AFTER the write on both
|
|
391
|
+
* adapters. Nothing reads this field (it exists on `BadgeUpdateResult` and is consumed only by
|
|
392
|
+
* this service's own debug line), and an invented number would be worse than a floor.
|
|
393
|
+
*/
|
|
394
|
+
return { previousCount: clamped.count, newCount: clamped.count };
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Insert the badge row at ZERO so a subsequent atomic delta has something to mutate.
|
|
398
|
+
*
|
|
399
|
+
* Goes through the SERVICE tier (`repository.create` with the badge-scoped execution context)
|
|
400
|
+
* rather than a raw insert, so the row is schema-validated and gets its scope FK injected by
|
|
401
|
+
* context enrichment at birth — see {@link buildBadgeExecutionContext} for why the triggering
|
|
402
|
+
* operation's own context cannot serve here.
|
|
403
|
+
*/
|
|
404
|
+
async materializeZeroBadge(scope, scopeId, identifier) {
|
|
405
|
+
const repository = this.resolveRepository(scope);
|
|
406
|
+
if (!repository)
|
|
407
|
+
return;
|
|
408
|
+
const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);
|
|
409
|
+
await repository.create(badgeExecutionContext, this.buildNewBadge(scope, scopeId, identifier, 0));
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Write an ABSOLUTE count (`SET` / `RESET`).
|
|
413
|
+
*
|
|
414
|
+
* The read here is NOT a read-modify-write: the value written is fixed by the caller, so a
|
|
415
|
+
* concurrent absolute write can only replace it wholesale, which is what an absolute write means.
|
|
416
|
+
* The read decides update-versus-insert and supplies the reported `previousCount`.
|
|
417
|
+
*/
|
|
418
|
+
async writeAbsoluteCount(repository, scope, scopeId, identifier, absoluteCount) {
|
|
419
|
+
const badge = await this.findBadgeByIdentity(scope, scopeId, identifier);
|
|
420
|
+
const previousCount = badge?.count ?? 0;
|
|
421
|
+
// Update or create badge through a badge-resource-scoped EC (see
|
|
422
|
+
// buildBadgeExecutionContext) so context enrichment injects the scope FK
|
|
423
|
+
// (userId / organizationId) that the create DTO auto-excludes.
|
|
424
|
+
const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);
|
|
425
|
+
if (badge) {
|
|
426
|
+
await repository.update(badgeExecutionContext, badge._id, {
|
|
427
|
+
count: absoluteCount,
|
|
428
|
+
updatedAt: new Date(),
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
await repository.create(badgeExecutionContext, this.buildNewBadge(scope, scopeId, identifier, absoluteCount));
|
|
433
|
+
}
|
|
434
|
+
return { previousCount, newCount: absoluteCount };
|
|
435
|
+
}
|
|
229
436
|
/**
|
|
230
437
|
* Increment a badge count
|
|
231
438
|
*/
|
|
@@ -347,9 +554,24 @@ let NotificationBadgeBackendService = class NotificationBadgeBackendService {
|
|
|
347
554
|
// Private Helper Methods
|
|
348
555
|
// ================================
|
|
349
556
|
/**
|
|
350
|
-
* Find a badge by scope, scopeId, and identifier
|
|
557
|
+
* Find a badge by scope, scopeId, and identifier.
|
|
558
|
+
*
|
|
559
|
+
* `executionContext` is the CALLER's context and is deliberately not used for the read: a badge
|
|
560
|
+
* read runs on its own badge-resource-scoped context, exactly as a badge write does, because the
|
|
561
|
+
* triggering operation's context carries the wrong scope (see {@link buildBadgeExecutionContext}).
|
|
562
|
+
* The parameter is kept so the private read reads like every other method on this service.
|
|
563
|
+
*/
|
|
564
|
+
findBadge(executionContext, scope, scopeId, identifier) {
|
|
565
|
+
return this.findBadgeByIdentity(scope, scopeId, identifier);
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* The badge read itself, addressed only by identity.
|
|
569
|
+
*
|
|
570
|
+
* Split out of {@link findBadge} because the atomic write path has no caller execution context to
|
|
571
|
+
* pass — it is reconciling its own guarded statements, not serving a request — and inventing one
|
|
572
|
+
* to satisfy a parameter the read never consults would be ceremony.
|
|
351
573
|
*/
|
|
352
|
-
async
|
|
574
|
+
async findBadgeByIdentity(scope, scopeId, identifier) {
|
|
353
575
|
const repository = this.resolveRepository(scope);
|
|
354
576
|
if (!repository) {
|
|
355
577
|
return null;
|
|
@@ -377,24 +599,27 @@ let NotificationBadgeBackendService = class NotificationBadgeBackendService {
|
|
|
377
599
|
* resilient (per existing behavior).
|
|
378
600
|
*/
|
|
379
601
|
resolveRepository(scope) {
|
|
602
|
+
const resourceType = this.resolveResourceType(scope);
|
|
603
|
+
return resourceType ? this.repositoriesRegistry.getRepository(resourceType) : undefined;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Resolve the RESOURCE TYPE backing a badge scope — the same polymorphism dispatch
|
|
607
|
+
* {@link resolveRepository} performs, named separately because the atomic write path addresses the
|
|
608
|
+
* registry by resource type rather than by repository handle.
|
|
609
|
+
*
|
|
610
|
+
* One switch, two consumers: a second copy of this mapping is how a future third scope reaches one
|
|
611
|
+
* of them and not the other.
|
|
612
|
+
*/
|
|
613
|
+
resolveResourceType(scope) {
|
|
380
614
|
switch (scope) {
|
|
381
615
|
case ResourcePrimaryScope.USER_SELF:
|
|
382
|
-
return
|
|
616
|
+
return CoreResourceType.USER_NOTIFICATION_BADGES;
|
|
383
617
|
case ResourcePrimaryScope.ORGANIZATIONS:
|
|
384
|
-
return
|
|
618
|
+
return CoreResourceType.ORGANIZATION_NOTIFICATION_BADGES;
|
|
385
619
|
default:
|
|
386
620
|
return undefined;
|
|
387
621
|
}
|
|
388
622
|
}
|
|
389
|
-
/**
|
|
390
|
-
* Whether a string scope value is one of the supported badge scopes.
|
|
391
|
-
* Used by `parseBadgeReference` to reject APPLICATION-scoped references
|
|
392
|
-
* at parse time (the variant was dropped in the polymorphism refactor).
|
|
393
|
-
*/
|
|
394
|
-
isSupportedScope(scope) {
|
|
395
|
-
return scope === ResourcePrimaryScope.USER_SELF
|
|
396
|
-
|| scope === ResourcePrimaryScope.ORGANIZATIONS;
|
|
397
|
-
}
|
|
398
623
|
/**
|
|
399
624
|
* Build filter for scope-specific queries.
|
|
400
625
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-badge.backend.service.js","sourceRoot":"","sources":["../../../../../src/notifications/services/notification-badge.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport {\n RepositoriesRegistryHandlerBackendService,\n type BackendResourceRepository,\n} from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport { ResourcesRegistryBackendService } from '~wildo-backend-lib/resources/services/resources-registry.backend.service';\nimport { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport { ResourceConfiguration_Operation } from '@wildo-ai/saas-models';\nimport {\n ResourcePrimaryScope,\n NotificationBadgeOperation,\n NotificationBadge,\n NotificationBadgeDefinition,\n NotificationBadgeSourceKind,\n CoreResourceType,\n CoreResourceOperation,\n NotificationBadgeIdentifier,\n CoreWebSocketEvent,\n WS_BadgeUpdatePayload,\n} from '@wildo-ai/saas-models';\nimport { WebSocketService, WebSocketMessage } from '~wildo-backend-lib/requests/service/websocket.service';\n\n/**\n * Badge reference format: `${scope}:${scopeId}:${identifier}`\n * Examples:\n * - user_self:user123:new_messages\n * - organization:org456:pending_tasks\n */\nexport interface BadgeReference {\n scope: ResourcePrimaryScope;\n scopeId: string;\n identifier: NotificationBadgeIdentifier;\n}\n\nexport interface BadgeUpdateResult {\n badgeReference: string;\n previousCount: number;\n newCount: number;\n}\n\n/**\n * The derived-badge SOURCE count passes a fully explicit, self-scoped filter\n * (`{ ...authoredFilter, [scopeField]: scopeId }`), so ambient contextual\n * filtering is skipped — the count must be identical regardless of the execution\n * context driving the recompute. (The badge resource's OWN ops instead use a\n * dedicated badge-scoped EC — see `buildBadgeExecutionContext` — so their scope\n * FK is injected/filtered correctly rather than bypassed.)\n */\nconst EXPLICIT_SCOPE_REPO_OPTIONS = { excludeContextualFilter: true } as const;\n\n/**\n * NotificationBadgeBackendService\n *\n * Manages notification badge counts stored in the database.\n * Provides operations to increment, decrement, set, and reset badge counts.\n * Emits WebSocket events when badge counts change.\n */\n@injectable()\nexport class NotificationBadgeBackendService {\n\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService) private readonly repositoriesRegistry: RepositoriesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.WebSocketService) private readonly webSocketService: WebSocketService,\n @inject(SAAS_SERVICE_TYPES.ResourceRegistryService) private readonly resourcesRegistry: ResourcesRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService) private readonly executionContextCreator: ExecutionContextCreatorBackendService,\n ) {\n this.logDebug = this.logger.debugByType('NotificationBadgeService');\n this.logger.setDebugTypeLogging('NotificationBadgeService', false);\n }\n\n /**\n * Build a badge-resource-scoped execution context for the badge's OWN\n * repository operations (read/create/update on `userNotificationBadges` /\n * `organizationNotificationBadges`).\n *\n * WHY this exists — the badge scope FK (`userId` / `organizationId`) is a\n * parent-scope field that the framework AUTO-EXCLUDES from the create DTO\n * (it is meant to be injected from the request's URL/scope context). A badge\n * write driven by a system service (dispatcher recompute / connect-seed) has\n * no such URL context, and reusing the TRIGGERING operation's execution\n * context (e.g. a `todos` op, or the connect-seed's `APPLICATION.READ`) carries\n * the WRONG scope — `context_filter` / `context_enrichment` fail closed, or the\n * scope FK is simply never injected (`userId: Path 'userId' is required`).\n *\n * Building a dedicated internal EC for the badge resource, with ONLY the badge's\n * own scope field in its context map, makes the standard pipeline correct:\n * context enrichment injects the scope FK on create, and contextual filtering\n * scopes reads by exactly that field. Mirrors the `FilesBackendService`\n * internal-repository-context pattern.\n */\n private buildBadgeExecutionContext(scope: ResourcePrimaryScope, scopeId: string): Promise<ExecutionContext<any>> {\n const isUserScope = scope === ResourcePrimaryScope.USER_SELF;\n const resourceType = isUserScope\n ? CoreResourceType.USER_NOTIFICATION_BADGES\n : CoreResourceType.ORGANIZATION_NOTIFICATION_BADGES;\n const scopeFieldIdentifier = isUserScope ? 'userId' : 'organizationId';\n // The scope goes ONLY in the context map (enrichment injects it / contextual\n // filtering scopes by it). It must NOT go in `initiatorIds`: an internal\n // (`internally_initiated_request`) EC forbids identity fields there — only\n // `applicationId` is allowed.\n return this.executionContextCreator.createForInternalRepositoryOperation({\n resourceType,\n operationIdentifier: CoreResourceOperation.CREATE,\n contextResourcesFieldIdentifier: new Map([[scopeFieldIdentifier, scopeId]]),\n });\n }\n\n /**\n * Build a badge reference string\n */\n public buildBadgeReference(scope: ResourcePrimaryScope, scopeId: string, identifier: NotificationBadgeIdentifier): string {\n return `${scope}:${scopeId}:${identifier}`;\n }\n\n /**\n * Parse a badge reference string.\n *\n * Validates that the embedded scope is a SUPPORTED badge scope (USER_SELF or\n * ORGANIZATIONS). The polymorphism refactor dropped APPLICATION-scope badges\n * (no canonical identifiers existed at that scope and no resource type backs\n * it anymore) — so a reference like `application:appId:foo` is rejected here\n * to fail fast at parse time rather than later during dispatch.\n */\n public parseBadgeReference(badgeReference: string): BadgeReference | null {\n const parts = badgeReference.split(':');\n if (parts.length !== 3) return null;\n\n const [scope, scopeId, identifier] = parts;\n if (!this.isSupportedScope(scope)) {\n return null;\n }\n\n return {\n scope: scope as ResourcePrimaryScope,\n scopeId,\n identifier: identifier as NotificationBadgeIdentifier,\n };\n }\n\n /**\n * Get badge count for a specific identifier and scope\n */\n public async getBadgeCount<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<number> {\n try {\n const badge = await this.findBadge(executionContext, scope, scopeId, identifier);\n return badge?.count ?? 0;\n } catch (error) {\n this.logger.warn('Failed to get badge count', {\n scope,\n scopeId,\n identifier,\n ...projectCaughtErrorLogFields(error),\n });\n return 0;\n }\n }\n\n /**\n * Get all badges for a specific scope\n */\n public async getAllBadges<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string\n ): Promise<Array<{ identifier: string; count: number }>> {\n try {\n const repository = this.resolveRepository(scope);\n if (!repository) {\n this.logger.warn('NotificationBadges repository not found', { scope });\n return [];\n }\n\n const filter = this.buildScopeFilter(scope, scopeId);\n const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);\n const badges = await repository.list<NotificationBadge>(badgeExecutionContext, filter);\n\n return badges.map(badge => ({\n identifier: badge.identifier,\n count: badge.count,\n }));\n } catch (error) {\n this.logger.warn('Failed to get all badges', {\n scope,\n scopeId,\n ...projectCaughtErrorLogFields(error),\n });\n return [];\n }\n }\n\n /**\n * Execute a badge operation (increment, decrement, set, reset)\n */\n public async executeBadgeOperation<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n operation: NotificationBadgeOperation,\n value: number = 1\n ): Promise<BadgeUpdateResult> {\n const repository = this.resolveRepository(scope);\n if (!repository) {\n throw this.errorBuilder.buildError(\n 'INTERNAL' as any,\n executionContext,\n {\n customMessageReference: 'NOTIFICATION_BADGES_REPOSITORY_NOT_FOUND' as any,\n context: { scope },\n }\n );\n }\n\n // Find existing badge\n let badge = await this.findBadge(executionContext, scope, scopeId, identifier);\n const previousCount = badge?.count ?? 0;\n let newCount: number;\n\n // Calculate new count based on operation\n switch (operation) {\n case NotificationBadgeOperation.INCREMENT:\n newCount = previousCount + value;\n break;\n case NotificationBadgeOperation.DECREMENT:\n newCount = Math.max(0, previousCount - value);\n break;\n case NotificationBadgeOperation.SET:\n newCount = Math.max(0, value);\n break;\n case NotificationBadgeOperation.RESET:\n newCount = 0;\n break;\n default:\n newCount = previousCount;\n }\n\n // Update or create badge through a badge-resource-scoped EC (see\n // buildBadgeExecutionContext) so context enrichment injects the scope FK\n // (userId / organizationId) that the create DTO auto-excludes.\n const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);\n if (badge) {\n await repository.update<NotificationBadge>(badgeExecutionContext, badge._id, {\n count: newCount,\n updatedAt: new Date(),\n } as any);\n } else {\n // Create new badge\n const newBadge = this.buildNewBadge(scope, scopeId, identifier, newCount);\n await repository.create<NotificationBadge>(badgeExecutionContext, newBadge);\n }\n\n const badgeReference = this.buildBadgeReference(scope, scopeId, identifier);\n\n // Emit WebSocket event\n await this.emitBadgeUpdate(scope, scopeId, identifier, newCount, executionContext.initiatorIds?.userId);\n\n this.logDebug('Badge operation executed', {\n badgeReference,\n operation,\n previousCount,\n newCount,\n });\n\n return {\n badgeReference,\n previousCount,\n newCount,\n };\n }\n\n /**\n * Increment a badge count\n */\n public async increment<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n amount: number = 1\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.INCREMENT,\n amount\n );\n }\n\n /**\n * Decrement a badge count\n */\n public async decrement<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n amount: number = 1\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.DECREMENT,\n amount\n );\n }\n\n /**\n * Set a badge count to a specific value\n */\n public async set<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n value: number\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.SET,\n value\n );\n }\n\n /**\n * Reset a badge count to zero\n */\n public async reset<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.RESET\n );\n }\n\n /**\n * Recompute a DERIVED_QUERY badge and persist the result (R5).\n *\n * The count is RE-DERIVED from the source resource collection every time\n * (`count(resourceType where {...filter, [scopeField]: scopeId})`) and then\n * `SET` onto the badge — it is never incrementally tracked, so it CANNOT\n * drift (bulk mutations, deletes, reopen, out-of-band edits all reconcile on\n * the next recompute). Called by the dispatcher when the source resource is\n * mutated. No-op for non-DERIVED definitions.\n */\n public async recomputeDerivedBadge<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n definition: NotificationBadgeDefinition,\n scopeId: string\n ): Promise<void> {\n if (definition.source.kind !== NotificationBadgeSourceKind.DERIVED_QUERY) {\n return;\n }\n\n const source = definition.source;\n const sourceRepository = this.repositoriesRegistry.getRepository(source.resourceType);\n if (!sourceRepository) {\n this.logger.warn('Derived badge source repository not found', {\n identifier: definition.identifier,\n resourceType: source.resourceType,\n });\n return;\n }\n\n // Bind the scope onto the authored filter, then count the source collection.\n // The filter is FULLY self-scoped (`[scopeField]: scopeId` pins it to the\n // badge's own scope), so the count must be identical regardless of which\n // execution context drives the recompute. Build a dedicated internal EC for the\n // SOURCE resource's own count rather than reusing the caller's EC — the mutation\n // path passes the triggering op's EC (works), but the connect-seed passes an\n // APPLICATION.READ EC, and counting a foreign resource off that mismatched EC\n // threw \"Cannot read properties of undefined (reading 'operations')\". With the\n // source-scoped EC + explicit filter, contextual filtering is skipped.\n let sourceExecutionContext: ExecutionContext<any> = executionContext;\n try {\n sourceExecutionContext = await this.executionContextCreator.createForInternalRepositoryOperation({\n resourceType: source.resourceType,\n operationIdentifier: CoreResourceOperation.COUNT,\n });\n } catch {\n // Fall back to the caller's EC if the source resource has no resolvable\n // internal count operation (the explicit filter still scopes the count).\n }\n const filter = { ...source.filter, [source.scopeField]: scopeId };\n const { count } = await sourceRepository.count(sourceExecutionContext, filter, EXPLICIT_SCOPE_REPO_OPTIONS);\n\n // SET (not increment) — the derived count is authoritative.\n await this.set(executionContext, definition.scope, scopeId, definition.identifier, count);\n }\n\n /**\n * Seed every registered badge for a freshly-connected client (R6a —\n * compute-on-connect). For each definition in the connecting scope: DERIVED\n * badges are recomputed (fresh count, emits), EVENT badges have their stored\n * count re-emitted so the client paints the current value on first render.\n *\n * `executionContext` MUST be the connecting user's own authenticated context\n * (built by the WS layer from the validated socket auth) and `initiatorIds`\n * MUST be the server-validated socket identity — never client handshake data —\n * so the scopeId that drives every count is pinned to the caller's own scope\n * (no cross-tenant read). Per-badge failures are logged, never abort siblings.\n */\n public async syncBadgesForConnection<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n initiatorIds: { userId?: string | null; organizationId?: string | null }\n ): Promise<void> {\n const definitions = this.resourcesRegistry.getResourcesRegistry().notificationBadgeDefinitions ?? [];\n if (definitions.length === 0) {\n return;\n }\n\n for (const definition of definitions) {\n const scopeId =\n definition.scope === ResourcePrimaryScope.USER_SELF\n ? initiatorIds.userId\n : definition.scope === ResourcePrimaryScope.ORGANIZATIONS\n ? initiatorIds.organizationId\n : null;\n if (!scopeId) {\n continue;\n }\n\n try {\n if (definition.source.kind === NotificationBadgeSourceKind.DERIVED_QUERY) {\n await this.recomputeDerivedBadge(executionContext, definition, scopeId);\n } else {\n // EVENT_COUNTER — re-emit the stored value so the client seeds on connect.\n const count = await this.getBadgeCount(executionContext, definition.scope, scopeId, definition.identifier);\n await this.emitBadgeUpdate(definition.scope, scopeId, definition.identifier, count, initiatorIds.userId ?? undefined);\n }\n } catch (error) {\n this.logger.warn('Failed to seed badge on connection', {\n identifier: definition.identifier,\n scope: definition.scope,\n ...projectCaughtErrorLogFields(error),\n });\n }\n }\n }\n\n // ================================\n // Private Helper Methods\n // ================================\n\n /**\n * Find a badge by scope, scopeId, and identifier\n */\n private async findBadge<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<NotificationBadge | null> {\n const repository = this.resolveRepository(scope);\n if (!repository) {\n return null;\n }\n\n const filter = {\n ...this.buildScopeFilter(scope, scopeId),\n identifier,\n };\n\n const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);\n const badges = await repository.list<NotificationBadge>(badgeExecutionContext, filter);\n return badges.length > 0 ? badges[0] : null;\n }\n\n /**\n * Resolve the repository for a given badge scope.\n *\n * Polymorphism dispatch:\n * USER_SELF → `USER_NOTIFICATION_BADGES` repository\n * ORGANIZATIONS → `ORGANIZATION_NOTIFICATION_BADGES` repository\n * APPLICATION → unsupported (variant dropped); returns `undefined` so\n * callers can fail-fast with their own error context.\n *\n * Returns `undefined` (not throws) so the caller controls error semantics —\n * `executeBadgeOperation` throws an explicit error, while `findBadge` /\n * `getAllBadges` swallow and return empty results to keep the read path\n * resilient (per existing behavior).\n */\n private resolveRepository(scope: ResourcePrimaryScope): BackendResourceRepository | undefined {\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n return this.repositoriesRegistry.getRepository(CoreResourceType.USER_NOTIFICATION_BADGES);\n case ResourcePrimaryScope.ORGANIZATIONS:\n return this.repositoriesRegistry.getRepository(CoreResourceType.ORGANIZATION_NOTIFICATION_BADGES);\n default:\n return undefined;\n }\n }\n\n /**\n * Whether a string scope value is one of the supported badge scopes.\n * Used by `parseBadgeReference` to reject APPLICATION-scoped references\n * at parse time (the variant was dropped in the polymorphism refactor).\n */\n private isSupportedScope(scope: string): scope is ResourcePrimaryScope {\n return scope === ResourcePrimaryScope.USER_SELF\n || scope === ResourcePrimaryScope.ORGANIZATIONS;\n }\n\n /**\n * Build filter for scope-specific queries.\n *\n * Each variant has its own collection, so the scope discriminator field is\n * implicit — we only need to filter by the scope-id field. The scope key is\n * still set on the payload (`buildNewBadge`) because the schema requires it\n * as the discriminated-union tag.\n */\n private buildScopeFilter(scope: ResourcePrimaryScope, scopeId: string): Record<string, any> {\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n return { userId: scopeId };\n case ResourcePrimaryScope.ORGANIZATIONS:\n return { organizationId: scopeId };\n default:\n return {};\n }\n }\n\n /**\n * Build a new badge document.\n *\n * `scope` is required by the schema (it is the discriminated-union tag), so\n * we still set it on the payload even though each variant lives in a\n * dedicated collection.\n */\n private buildNewBadge(\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n count: number\n ): Partial<NotificationBadge> {\n const now = new Date();\n const base: any = {\n scope,\n identifier,\n count,\n createdAt: now,\n updatedAt: now,\n };\n\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n base.userId = scopeId;\n break;\n case ResourcePrimaryScope.ORGANIZATIONS:\n base.organizationId = scopeId;\n break;\n }\n\n return base;\n }\n\n /**\n * Emit WebSocket event for badge update.\n *\n * Routing:\n * USER_SELF → `sendToUser(scopeId, …)`\n * ORGANIZATIONS → `sendToOrganization(scopeId, …)`\n *\n * The APPLICATION arm is gone (the variant was dropped). If a future need\n * for global broadcast badges arises, reintroduce it as its own scope and\n * resource type rather than re-overloading APPLICATION.\n */\n private async emitBadgeUpdate(\n scope: ResourcePrimaryScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n newCount: number,\n initiatorUserId?: string\n ): Promise<void> {\n const badgeReference = this.buildBadgeReference(scope, scopeId, identifier);\n\n const payload: WS_BadgeUpdatePayload = {\n badgeReference,\n badgeCount: newCount,\n organizationId: scope === ResourcePrimaryScope.ORGANIZATIONS ? scopeId : undefined,\n };\n\n const message: WebSocketMessage = {\n type: CoreWebSocketEvent.BADGE_UPDATE,\n payload,\n timestamp: new Date(),\n userId: initiatorUserId,\n };\n\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n await this.webSocketService.sendToUser(scopeId, message);\n break;\n case ResourcePrimaryScope.ORGANIZATIONS:\n await this.webSocketService.sendToOrganization(scopeId, message);\n break;\n default:\n this.logger.warn('Skipping badge WS emission for unsupported scope', {\n scope,\n scopeId,\n identifier,\n });\n break;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"notification-badge.backend.service.js","sourceRoot":"","sources":["../../../../src/notifications/services/notification-badge.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport {\n RepositoriesRegistryHandlerBackendService,\n type BackendResourceRepository,\n} from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport { ResourcesRegistryBackendService } from '~wildo-backend-lib/resources/services/resources-registry.backend.service';\nimport { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport { ResourceConfiguration_Operation } from '@wildo-ai/saas-models';\nimport {\n ResourcePrimaryScope,\n NotificationBadgeOperation,\n NotificationBadge,\n NotificationBadgeDefinition,\n NotificationBadgeSourceKind,\n CoreResourceType,\n CoreResourceOperation,\n NotificationBadgeIdentifier,\n buildNotificationBadgeReference,\n parseNotificationBadgeReference,\n type NotificationScope,\n CoreWebSocketEvent,\n WS_BadgeUpdatePayload,\n type ResourceType,\n} from '@wildo-ai/saas-models';\nimport { WebSocketService, WebSocketMessage } from '~wildo-backend-lib/requests/service/websocket.service';\n\n/**\n * A parsed badge REFERENCE — one badge ROW, addressed as `<scope>:<scopeId>:<identifier>`.\n *\n * The FORMAT is not defined here. It lives once in `@wildo-ai/saas-models`\n * (`buildNotificationBadgeReference` / `parseNotificationBadgeReference`) because the browser badge\n * store parses the same string off the wire, and two hand-rolled `split(':')` implementations are\n * how a producer and a consumer come to disagree about what the parts mean.\n */\nexport interface BadgeReference {\n scope: NotificationScope;\n scopeId: string;\n identifier: NotificationBadgeIdentifier;\n}\n\nexport interface BadgeUpdateResult {\n badgeReference: string;\n previousCount: number;\n newCount: number;\n}\n\n/**\n * The derived-badge SOURCE count passes a fully explicit, self-scoped filter\n * (`{ ...authoredFilter, [scopeField]: scopeId }`), so ambient contextual\n * filtering is skipped — the count must be identical regardless of the execution\n * context driving the recompute. (The badge resource's OWN ops instead use a\n * dedicated badge-scoped EC — see `buildBadgeExecutionContext` — so their scope\n * FK is injected/filtered correctly rather than bypassed.)\n */\nconst EXPLICIT_SCOPE_REPO_OPTIONS = { excludeContextualFilter: true } as const;\n\n/**\n * How many times a RELATIVE badge write (increment / decrement) re-attempts its guarded statement\n * before giving up and reporting the count it can observe.\n *\n * Two is what the mechanism needs and three is the margin. A first pass misses only when the badge\n * row does not exist yet; the pass then materializes a ZERO row and the SECOND pass applies the\n * delta to it. The only other way a pass can miss is the decrement's two-statement floor (see\n * {@link NotificationBadgeBackendService.applyGuardedCountDelta}) losing a race in the window\n * between its two statements — that is a genuine retry, and one spare pass is generous for a\n * contention window measured in a single round trip.\n *\n * The loop terminates on its own budget rather than on a condition, because the exhaustion outcome\n * is deliberately NOT a throw: a badge is a decoration, and failing a domain mutation because a\n * counter could not be advanced would trade a cosmetic defect for a functional one.\n */\nconst RELATIVE_BADGE_WRITE_PASSES = 3;\n\n/**\n * NotificationBadgeBackendService\n *\n * Manages notification badge counts stored in the database.\n * Provides operations to increment, decrement, set, and reset badge counts.\n * Emits WebSocket events when badge counts change.\n */\n@injectable()\nexport class NotificationBadgeBackendService {\n\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService) private readonly repositoriesRegistry: RepositoriesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.WebSocketService) private readonly webSocketService: WebSocketService,\n @inject(SAAS_SERVICE_TYPES.ResourceRegistryService) private readonly resourcesRegistry: ResourcesRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService) private readonly executionContextCreator: ExecutionContextCreatorBackendService,\n ) {\n this.logDebug = this.logger.debugByType('NotificationBadgeService');\n this.logger.setDebugTypeLogging('NotificationBadgeService', false);\n }\n\n /**\n * Build a badge-resource-scoped execution context for the badge's OWN\n * repository operations (read/create/update on `userNotificationBadges` /\n * `organizationNotificationBadges`).\n *\n * WHY this exists — the badge scope FK (`userId` / `organizationId`) is a\n * parent-scope field that the framework AUTO-EXCLUDES from the create DTO\n * (it is meant to be injected from the request's URL/scope context). A badge\n * write driven by a system service (dispatcher recompute / connect-seed) has\n * no such URL context, and reusing the TRIGGERING operation's execution\n * context (e.g. a `todos` op, or the connect-seed's `APPLICATION.READ`) carries\n * the WRONG scope — `context_filter` / `context_enrichment` fail closed, or the\n * scope FK is simply never injected (`userId: Path 'userId' is required`).\n *\n * Building a dedicated internal EC for the badge resource, with ONLY the badge's\n * own scope field in its context map, makes the standard pipeline correct:\n * context enrichment injects the scope FK on create, and contextual filtering\n * scopes reads by exactly that field. Mirrors the `FilesBackendService`\n * internal-repository-context pattern.\n */\n private buildBadgeExecutionContext(scope: NotificationScope, scopeId: string): Promise<ExecutionContext<any>> {\n const isUserScope = scope === ResourcePrimaryScope.USER_SELF;\n const resourceType = isUserScope\n ? CoreResourceType.USER_NOTIFICATION_BADGES\n : CoreResourceType.ORGANIZATION_NOTIFICATION_BADGES;\n const scopeFieldIdentifier = isUserScope ? 'userId' : 'organizationId';\n // The scope goes ONLY in the context map (enrichment injects it / contextual\n // filtering scopes by it). It must NOT go in `initiatorIds`: an internal\n // (`internally_initiated_request`) EC forbids identity fields there — only\n // `applicationId` is allowed.\n return this.executionContextCreator.createForInternalRepositoryOperation({\n resourceType,\n operationIdentifier: CoreResourceOperation.CREATE,\n contextResourcesFieldIdentifier: new Map([[scopeFieldIdentifier, scopeId]]),\n });\n }\n\n /**\n * Build a badge reference string.\n *\n * Delegates to the shared builder rather than re-templating the format: the browser reduces this\n * exact string to a badge KEY on arrival, so the producer and the consumer must be reading one\n * definition of where the parts are.\n */\n public buildBadgeReference(scope: NotificationScope, scopeId: string, identifier: NotificationBadgeIdentifier): string {\n return buildNotificationBadgeReference(scope, scopeId, identifier);\n }\n\n /**\n * Parse a badge reference string.\n *\n * Validates that the embedded scope is a SUPPORTED badge scope (USER_SELF or\n * ORGANIZATIONS). The polymorphism refactor dropped APPLICATION-scope badges\n * (no canonical identifiers existed at that scope and no resource type backs\n * it anymore) — so a reference like `application:appId:foo` is rejected here\n * to fail fast at parse time rather than later during dispatch.\n */\n public parseBadgeReference(badgeReference: string): BadgeReference | null {\n return parseNotificationBadgeReference(badgeReference);\n }\n\n /**\n * Get badge count for a specific identifier and scope\n */\n public async getBadgeCount<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<number> {\n try {\n const badge = await this.findBadge(executionContext, scope, scopeId, identifier);\n return badge?.count ?? 0;\n } catch (error) {\n this.logger.warn('Failed to get badge count', {\n scope,\n scopeId,\n identifier,\n ...projectCaughtErrorLogFields(error),\n });\n return 0;\n }\n }\n\n /**\n * Get all badges for a specific scope\n */\n public async getAllBadges<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string\n ): Promise<Array<{ identifier: string; count: number }>> {\n try {\n const repository = this.resolveRepository(scope);\n if (!repository) {\n this.logger.warn('NotificationBadges repository not found', { scope });\n return [];\n }\n\n const filter = this.buildScopeFilter(scope, scopeId);\n const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);\n const badges = await repository.list<NotificationBadge>(badgeExecutionContext, filter);\n\n return badges.map(badge => ({\n identifier: badge.identifier,\n count: badge.count,\n }));\n } catch (error) {\n this.logger.warn('Failed to get all badges', {\n scope,\n scopeId,\n ...projectCaughtErrorLogFields(error),\n });\n return [];\n }\n }\n\n /**\n * Execute a badge operation (increment, decrement, set, reset).\n *\n * ## Two write shapes, because the vocabulary carries two kinds of change\n *\n * `SET` and `RESET` are ABSOLUTE: the value written does not depend on the value read, so a plain\n * read-then-write is already correct — concurrent absolute writes are last-writer-wins, which is\n * what \"set it to N\" means.\n *\n * `INCREMENT` and `DECREMENT` are RELATIVE, and that is where this method used to lose data. It\n * read `count`, computed `count ± value` in JavaScript, and wrote the result back. Two operations\n * committing concurrently both read the SAME previous value, so the second write overwrote the\n * first and one increment vanished — with no error, no log, and a badge that is simply too low\n * forever after (an EVENT_COUNTER badge is never re-derived; that is the whole distinction\n * `NotificationBadgeSourceKind` draws, and it is why the drift is permanent here and self-healing\n * on a DERIVED_QUERY badge).\n *\n * More checking cannot fix that — the two writers have nothing to collide on. So the relative arms\n * now go through the adapter-neutral guarded mutation, where the STORE performs the arithmetic in\n * one statement (`$inc` on MongoDB, `COALESCE(col, 0) + delta` on PostgreSQL) and the two writers\n * collide on the row itself. See {@link applyRelativeCountChange}.\n */\n public async executeBadgeOperation<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n operation: NotificationBadgeOperation,\n value: number = 1\n ): Promise<BadgeUpdateResult> {\n const resourceType = this.resolveResourceType(scope);\n const repository = this.resolveRepository(scope);\n if (!resourceType || !repository) {\n throw this.errorBuilder.buildError(\n 'INTERNAL' as any,\n executionContext,\n {\n customMessageReference: 'NOTIFICATION_BADGES_REPOSITORY_NOT_FOUND' as any,\n context: { scope },\n }\n );\n }\n\n let previousCount: number;\n let newCount: number;\n\n switch (operation) {\n case NotificationBadgeOperation.INCREMENT:\n case NotificationBadgeOperation.DECREMENT: {\n const delta = operation === NotificationBadgeOperation.INCREMENT ? value : -value;\n ({ previousCount, newCount } = await this.applyRelativeCountChange(resourceType, scope, scopeId, identifier, delta));\n break;\n }\n case NotificationBadgeOperation.SET:\n case NotificationBadgeOperation.RESET: {\n const absoluteCount = operation === NotificationBadgeOperation.SET ? Math.max(0, value) : 0;\n ({ previousCount, newCount } = await this.writeAbsoluteCount(repository, scope, scopeId, identifier, absoluteCount));\n break;\n }\n default: {\n /**\n * The vocabulary is closed, but the dispatcher reaches this method through\n * `badgeOp.operation as NotificationBadgeOperation` — an unchecked cast over an authored\n * string — so an unknown member can arrive at runtime.\n *\n * It now reads the count and writes NOTHING. The previous behaviour wrote `previousCount`\n * back over itself, which on an absent badge MATERIALIZED a zero row for an operation\n * nobody could name: a write performed because the switch had no other arm to fall into.\n * The event is still emitted below, so a client that asked for an unknown operation is\n * told the current value rather than left silent.\n */\n previousCount = await this.getBadgeCount(executionContext, scope, scopeId, identifier);\n newCount = previousCount;\n this.logger.warn('Unknown notification badge operation — reporting the current count without writing', {\n scope,\n scopeId,\n identifier,\n operation: String(operation),\n });\n break;\n }\n }\n\n const badgeReference = this.buildBadgeReference(scope, scopeId, identifier);\n\n // Emit WebSocket event\n await this.emitBadgeUpdate(scope, scopeId, identifier, newCount, executionContext.initiatorIds?.userId);\n\n this.logDebug('Badge operation executed', {\n badgeReference,\n operation,\n previousCount,\n newCount,\n });\n\n return {\n badgeReference,\n previousCount,\n newCount,\n };\n }\n\n /**\n * Apply a RELATIVE change (`+value` / `-value`) to a badge counter without ever reading it into\n * JavaScript first.\n *\n * ## The shape, and why it is a loop rather than a straight line\n *\n * A guarded mutation only mutates a row that ALREADY EXISTS — it returns `null` when its filter\n * matched nothing, and it cannot insert. A badge row, meanwhile, is materialized lazily on its\n * first write. So the write is \"apply the delta; if there was no row, materialize one at ZERO and\n * apply the delta to that\".\n *\n * **Materializing at ZERO rather than at the target is the load-bearing detail.** Creating the row\n * already carrying `value` would mean two racing first-increments each insert a row holding `1`,\n * and one of the two increments is lost exactly as before — the defect would simply have moved\n * from the update to the insert. Creating at zero and then letting BOTH callers apply their own\n * delta through the atomic statement keeps every increment: the store matches one row for both,\n * and it ends at 2.\n *\n * ## The residual, stated rather than hidden\n *\n * Two racing materializations can still leave a DUPLICATE badge row, because nothing in the schema\n * makes `(scopeId, identifier)` unique — `identifier` carries `.isSummaryField()` and no\n * `.isUnique()`, so the store has no constraint to refuse the second insert with. That duplicate\n * hazard is older than this method and is not what this change is about: it costs a stray row,\n * whereas the read-modify-write cost a permanently wrong number. Closing it means a unique index,\n * which is an engine resource change owing a migration in every PostgreSQL-backed surface\n * (`.claude/rules/engine-resource-changes-owe-migrations.md`) and belongs with the badge-identity\n * work, not here.\n *\n * @returns the count before and after, as observed from the row the store returned.\n */\n private async applyRelativeCountChange(\n resourceType: ResourceType,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n delta: number\n ): Promise<{ previousCount: number; newCount: number }> {\n /**\n * The identity of the ONE row this write may touch.\n *\n * Tenant scoping is preserved BY CONSTRUCTION rather than by the execution context: the guarded\n * mutation is an infrastructure-tier door whose contract puts scope-aware filter construction on\n * the caller, and the scope key (`userId` / `organizationId`) is right here in the filter, so\n * the statement cannot reach another tenant's badge. That is the same posture the promotion\n * redemption counter and the credit pool take.\n */\n const identityFilter = { ...this.buildScopeFilter(scope, scopeId), identifier };\n\n for (let pass = 0; pass < RELATIVE_BADGE_WRITE_PASSES; pass += 1) {\n const applied = await this.applyGuardedCountDelta(resourceType, identityFilter, delta);\n if (applied) {\n return applied;\n }\n\n /**\n * Nothing matched. There are exactly two reasons, and they need opposite responses, so ask\n * which one it is instead of assuming.\n *\n * - The badge row does not exist yet — materialize it and let the next pass apply the delta.\n * - A DECREMENT lost the race between its two floor statements (see\n * {@link applyGuardedCountDelta}) — the row exists, and materializing would duplicate it.\n * Retry the pair instead.\n *\n * The read costs a round trip on a path taken once per badge lifetime (plus a genuinely rare\n * contention window), which is why it is affordable here and would not be on the hot arm.\n */\n const existing = await this.findBadgeByIdentity(scope, scopeId, identifier);\n if (!existing) {\n await this.materializeZeroBadge(scope, scopeId, identifier);\n }\n }\n\n /**\n * Every pass lost its race. Report what the row currently holds and write nothing further: a\n * badge is a decoration, and the caller is a domain mutation that has already committed, so\n * throwing here would turn a cosmetic loss into a failed user action. The warning is what makes\n * the loss visible — silence is what let the original read-modify-write defect live.\n */\n const current = await this.findBadgeByIdentity(scope, scopeId, identifier);\n const currentCount = current?.count ?? 0;\n this.logger.warn('Notification badge counter change was dropped after exhausting its atomic write passes', {\n scope,\n scopeId,\n identifier,\n delta,\n currentCount,\n passes: RELATIVE_BADGE_WRITE_PASSES,\n });\n return { previousCount: currentCount, newCount: currentCount };\n }\n\n /**\n * ONE attempt at the atomic delta. Returns the before/after counts, or `null` when no row matched.\n *\n * ## The decrement floor lives in the FILTER, not in `Math.max`\n *\n * `Math.max(0, previousCount - value)` computes the floor from a value read moments earlier, which\n * is the very read this change exists to remove. The floor is therefore expressed as a GUARD the\n * store evaluates in the same statement as the write — `count: { $gte: magnitude }` — which is the\n * idiom the promotion redemption counter uses for its `maxRedemptions` ceiling.\n *\n * That guard alone would REFUSE a decrement that cannot be taken in full, where the previous\n * behaviour CLAMPED it to zero. Preserving the clamp needs a second statement, because neither\n * adapter's neutral vocabulary can express \"subtract, floored at zero\" in one (there is no `$max`\n * in `RepositoryGuardedMutation`, deliberately — an operator no adapter pair can honour identically\n * does not get a name there). So a below-floor row is set to zero by a SECOND guarded statement,\n * itself conditioned on the row still being below the floor. Each statement is atomic, and the\n * pair is safe in every interleaving:\n *\n * - first matched → the count fell by exactly `magnitude`;\n * - first missed, second matched → the count was below the floor at the moment of the write and is\n * now zero, which is what `Math.max(0, count - value)` meant for that count;\n * - both missed → either no row, or a concurrent INCREMENT crossed the floor between the two\n * statements. The caller distinguishes those and retries rather than concluding.\n *\n * ## `updatedAt` is deliberately absent from the descriptor\n *\n * Both adapters bump it themselves — mongoose's `timestamps` hook on one, an explicit\n * planned-column assignment inside `prepareGuardedUpdate` on the other. Passing it here would be a\n * second authority for the same field, and the two would disagree the day either arm changes.\n */\n private async applyGuardedCountDelta(\n resourceType: ResourceType,\n identityFilter: Record<string, unknown>,\n delta: number\n ): Promise<{ previousCount: number; newCount: number } | null> {\n if (delta >= 0) {\n const incremented = await this.repositoriesRegistry.atomicGuardedMutation<NotificationBadge>(\n resourceType,\n identityFilter,\n { increment: { count: delta } },\n );\n if (!incremented) return null;\n return { previousCount: incremented.count - delta, newCount: incremented.count };\n }\n\n const magnitude = -delta;\n\n const decremented = await this.repositoriesRegistry.atomicGuardedMutation<NotificationBadge>(\n resourceType,\n { ...identityFilter, count: { $gte: magnitude } },\n { increment: { count: delta } },\n );\n if (decremented) {\n return { previousCount: decremented.count + magnitude, newCount: decremented.count };\n }\n\n const clamped = await this.repositoriesRegistry.atomicGuardedMutation<NotificationBadge>(\n resourceType,\n { ...identityFilter, count: { $lt: magnitude } },\n { set: { count: 0 } },\n );\n if (!clamped) return null;\n /**\n * `previousCount` is reported as the post-write zero rather than as an estimate. The row's\n * pre-write count was somewhere in `[0, magnitude)` and the statement that overwrote it cannot\n * report the value it replaced — a guarded mutation returns the row AFTER the write on both\n * adapters. Nothing reads this field (it exists on `BadgeUpdateResult` and is consumed only by\n * this service's own debug line), and an invented number would be worse than a floor.\n */\n return { previousCount: clamped.count, newCount: clamped.count };\n }\n\n /**\n * Insert the badge row at ZERO so a subsequent atomic delta has something to mutate.\n *\n * Goes through the SERVICE tier (`repository.create` with the badge-scoped execution context)\n * rather than a raw insert, so the row is schema-validated and gets its scope FK injected by\n * context enrichment at birth — see {@link buildBadgeExecutionContext} for why the triggering\n * operation's own context cannot serve here.\n */\n private async materializeZeroBadge(\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<void> {\n const repository = this.resolveRepository(scope);\n if (!repository) return;\n const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);\n await repository.create<NotificationBadge>(badgeExecutionContext, this.buildNewBadge(scope, scopeId, identifier, 0));\n }\n\n /**\n * Write an ABSOLUTE count (`SET` / `RESET`).\n *\n * The read here is NOT a read-modify-write: the value written is fixed by the caller, so a\n * concurrent absolute write can only replace it wholesale, which is what an absolute write means.\n * The read decides update-versus-insert and supplies the reported `previousCount`.\n */\n private async writeAbsoluteCount(\n repository: BackendResourceRepository,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n absoluteCount: number\n ): Promise<{ previousCount: number; newCount: number }> {\n const badge = await this.findBadgeByIdentity(scope, scopeId, identifier);\n const previousCount = badge?.count ?? 0;\n\n // Update or create badge through a badge-resource-scoped EC (see\n // buildBadgeExecutionContext) so context enrichment injects the scope FK\n // (userId / organizationId) that the create DTO auto-excludes.\n const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);\n if (badge) {\n await repository.update<NotificationBadge>(badgeExecutionContext, badge._id, {\n count: absoluteCount,\n updatedAt: new Date(),\n } as any);\n } else {\n await repository.create<NotificationBadge>(badgeExecutionContext, this.buildNewBadge(scope, scopeId, identifier, absoluteCount));\n }\n\n return { previousCount, newCount: absoluteCount };\n }\n\n /**\n * Increment a badge count\n */\n public async increment<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n amount: number = 1\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.INCREMENT,\n amount\n );\n }\n\n /**\n * Decrement a badge count\n */\n public async decrement<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n amount: number = 1\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.DECREMENT,\n amount\n );\n }\n\n /**\n * Set a badge count to a specific value\n */\n public async set<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n value: number\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.SET,\n value\n );\n }\n\n /**\n * Reset a badge count to zero\n */\n public async reset<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<BadgeUpdateResult> {\n return this.executeBadgeOperation(\n executionContext,\n scope,\n scopeId,\n identifier,\n NotificationBadgeOperation.RESET\n );\n }\n\n /**\n * Recompute a DERIVED_QUERY badge and persist the result (R5).\n *\n * The count is RE-DERIVED from the source resource collection every time\n * (`count(resourceType where {...filter, [scopeField]: scopeId})`) and then\n * `SET` onto the badge — it is never incrementally tracked, so it CANNOT\n * drift (bulk mutations, deletes, reopen, out-of-band edits all reconcile on\n * the next recompute). Called by the dispatcher when the source resource is\n * mutated. No-op for non-DERIVED definitions.\n */\n public async recomputeDerivedBadge<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n definition: NotificationBadgeDefinition,\n scopeId: string\n ): Promise<void> {\n if (definition.source.kind !== NotificationBadgeSourceKind.DERIVED_QUERY) {\n return;\n }\n\n const source = definition.source;\n const sourceRepository = this.repositoriesRegistry.getRepository(source.resourceType);\n if (!sourceRepository) {\n this.logger.warn('Derived badge source repository not found', {\n identifier: definition.identifier,\n resourceType: source.resourceType,\n });\n return;\n }\n\n // Bind the scope onto the authored filter, then count the source collection.\n // The filter is FULLY self-scoped (`[scopeField]: scopeId` pins it to the\n // badge's own scope), so the count must be identical regardless of which\n // execution context drives the recompute. Build a dedicated internal EC for the\n // SOURCE resource's own count rather than reusing the caller's EC — the mutation\n // path passes the triggering op's EC (works), but the connect-seed passes an\n // APPLICATION.READ EC, and counting a foreign resource off that mismatched EC\n // threw \"Cannot read properties of undefined (reading 'operations')\". With the\n // source-scoped EC + explicit filter, contextual filtering is skipped.\n let sourceExecutionContext: ExecutionContext<any> = executionContext;\n try {\n sourceExecutionContext = await this.executionContextCreator.createForInternalRepositoryOperation({\n resourceType: source.resourceType,\n operationIdentifier: CoreResourceOperation.COUNT,\n });\n } catch {\n // Fall back to the caller's EC if the source resource has no resolvable\n // internal count operation (the explicit filter still scopes the count).\n }\n const filter = { ...source.filter, [source.scopeField]: scopeId };\n const { count } = await sourceRepository.count(sourceExecutionContext, filter, EXPLICIT_SCOPE_REPO_OPTIONS);\n\n // SET (not increment) — the derived count is authoritative.\n await this.set(executionContext, definition.scope, scopeId, definition.identifier, count);\n }\n\n /**\n * Seed every registered badge for a freshly-connected client (R6a —\n * compute-on-connect). For each definition in the connecting scope: DERIVED\n * badges are recomputed (fresh count, emits), EVENT badges have their stored\n * count re-emitted so the client paints the current value on first render.\n *\n * `executionContext` MUST be the connecting user's own authenticated context\n * (built by the WS layer from the validated socket auth) and `initiatorIds`\n * MUST be the server-validated socket identity — never client handshake data —\n * so the scopeId that drives every count is pinned to the caller's own scope\n * (no cross-tenant read). Per-badge failures are logged, never abort siblings.\n */\n public async syncBadgesForConnection<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n initiatorIds: { userId?: string | null; organizationId?: string | null }\n ): Promise<void> {\n const definitions = this.resourcesRegistry.getResourcesRegistry().notificationBadgeDefinitions ?? [];\n if (definitions.length === 0) {\n return;\n }\n\n for (const definition of definitions) {\n const scopeId =\n definition.scope === ResourcePrimaryScope.USER_SELF\n ? initiatorIds.userId\n : definition.scope === ResourcePrimaryScope.ORGANIZATIONS\n ? initiatorIds.organizationId\n : null;\n if (!scopeId) {\n continue;\n }\n\n try {\n if (definition.source.kind === NotificationBadgeSourceKind.DERIVED_QUERY) {\n await this.recomputeDerivedBadge(executionContext, definition, scopeId);\n } else {\n // EVENT_COUNTER — re-emit the stored value so the client seeds on connect.\n const count = await this.getBadgeCount(executionContext, definition.scope, scopeId, definition.identifier);\n await this.emitBadgeUpdate(definition.scope, scopeId, definition.identifier, count, initiatorIds.userId ?? undefined);\n }\n } catch (error) {\n this.logger.warn('Failed to seed badge on connection', {\n identifier: definition.identifier,\n scope: definition.scope,\n ...projectCaughtErrorLogFields(error),\n });\n }\n }\n }\n\n // ================================\n // Private Helper Methods\n // ================================\n\n /**\n * Find a badge by scope, scopeId, and identifier.\n *\n * `executionContext` is the CALLER's context and is deliberately not used for the read: a badge\n * read runs on its own badge-resource-scoped context, exactly as a badge write does, because the\n * triggering operation's context carries the wrong scope (see {@link buildBadgeExecutionContext}).\n * The parameter is kept so the private read reads like every other method on this service.\n */\n private findBadge<TResourceConfigOperation extends ResourceConfiguration_Operation<any, any, any>>(\n executionContext: ExecutionContext<TResourceConfigOperation>,\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<NotificationBadge | null> {\n return this.findBadgeByIdentity(scope, scopeId, identifier);\n }\n\n /**\n * The badge read itself, addressed only by identity.\n *\n * Split out of {@link findBadge} because the atomic write path has no caller execution context to\n * pass — it is reconciling its own guarded statements, not serving a request — and inventing one\n * to satisfy a parameter the read never consults would be ceremony.\n */\n private async findBadgeByIdentity(\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier\n ): Promise<NotificationBadge | null> {\n const repository = this.resolveRepository(scope);\n if (!repository) {\n return null;\n }\n\n const filter = {\n ...this.buildScopeFilter(scope, scopeId),\n identifier,\n };\n\n const badgeExecutionContext = await this.buildBadgeExecutionContext(scope, scopeId);\n const badges = await repository.list<NotificationBadge>(badgeExecutionContext, filter);\n return badges.length > 0 ? badges[0] : null;\n }\n\n /**\n * Resolve the repository for a given badge scope.\n *\n * Polymorphism dispatch:\n * USER_SELF → `USER_NOTIFICATION_BADGES` repository\n * ORGANIZATIONS → `ORGANIZATION_NOTIFICATION_BADGES` repository\n * APPLICATION → unsupported (variant dropped); returns `undefined` so\n * callers can fail-fast with their own error context.\n *\n * Returns `undefined` (not throws) so the caller controls error semantics —\n * `executeBadgeOperation` throws an explicit error, while `findBadge` /\n * `getAllBadges` swallow and return empty results to keep the read path\n * resilient (per existing behavior).\n */\n private resolveRepository(scope: NotificationScope): BackendResourceRepository | undefined {\n const resourceType = this.resolveResourceType(scope);\n return resourceType ? this.repositoriesRegistry.getRepository(resourceType) : undefined;\n }\n\n /**\n * Resolve the RESOURCE TYPE backing a badge scope — the same polymorphism dispatch\n * {@link resolveRepository} performs, named separately because the atomic write path addresses the\n * registry by resource type rather than by repository handle.\n *\n * One switch, two consumers: a second copy of this mapping is how a future third scope reaches one\n * of them and not the other.\n */\n private resolveResourceType(scope: NotificationScope): ResourceType | undefined {\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n return CoreResourceType.USER_NOTIFICATION_BADGES;\n case ResourcePrimaryScope.ORGANIZATIONS:\n return CoreResourceType.ORGANIZATION_NOTIFICATION_BADGES;\n default:\n return undefined;\n }\n }\n\n /**\n * Build filter for scope-specific queries.\n *\n * Each variant has its own collection, so the scope discriminator field is\n * implicit — we only need to filter by the scope-id field. The scope key is\n * still set on the payload (`buildNewBadge`) because the schema requires it\n * as the discriminated-union tag.\n */\n private buildScopeFilter(scope: NotificationScope, scopeId: string): Record<string, any> {\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n return { userId: scopeId };\n case ResourcePrimaryScope.ORGANIZATIONS:\n return { organizationId: scopeId };\n default:\n return {};\n }\n }\n\n /**\n * Build a new badge document.\n *\n * `scope` is required by the schema (it is the discriminated-union tag), so\n * we still set it on the payload even though each variant lives in a\n * dedicated collection.\n */\n private buildNewBadge(\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n count: number\n ): Partial<NotificationBadge> {\n const now = new Date();\n const base: any = {\n scope,\n identifier,\n count,\n createdAt: now,\n updatedAt: now,\n };\n\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n base.userId = scopeId;\n break;\n case ResourcePrimaryScope.ORGANIZATIONS:\n base.organizationId = scopeId;\n break;\n }\n\n return base;\n }\n\n /**\n * Emit WebSocket event for badge update.\n *\n * Routing:\n * USER_SELF → `sendToUser(scopeId, …)`\n * ORGANIZATIONS → `sendToOrganization(scopeId, …)`\n *\n * The APPLICATION arm is gone (the variant was dropped). If a future need\n * for global broadcast badges arises, reintroduce it as its own scope and\n * resource type rather than re-overloading APPLICATION.\n */\n private async emitBadgeUpdate(\n scope: NotificationScope,\n scopeId: string,\n identifier: NotificationBadgeIdentifier,\n newCount: number,\n initiatorUserId?: string\n ): Promise<void> {\n const badgeReference = this.buildBadgeReference(scope, scopeId, identifier);\n\n const payload: WS_BadgeUpdatePayload = {\n badgeReference,\n badgeCount: newCount,\n organizationId: scope === ResourcePrimaryScope.ORGANIZATIONS ? scopeId : undefined,\n };\n\n const message: WebSocketMessage = {\n type: CoreWebSocketEvent.BADGE_UPDATE,\n payload,\n timestamp: new Date(),\n userId: initiatorUserId,\n };\n\n switch (scope) {\n case ResourcePrimaryScope.USER_SELF:\n await this.webSocketService.sendToUser(scopeId, message);\n break;\n case ResourcePrimaryScope.ORGANIZATIONS:\n await this.webSocketService.sendToOrganization(scopeId, message);\n break;\n default:\n this.logger.warn('Skipping badge WS emission for unsupported scope', {\n scope,\n scopeId,\n identifier,\n });\n break;\n }\n }\n}\n"]}
|