@wildo-ai/saas-backend-lib 1.1.2 → 1.1.3
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/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/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 +199 -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/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/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 +207 -21
- 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-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 +174 -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-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/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/postgresql-resource-repository.backend.service.d.ts +49 -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 +171 -18
- 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-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +20 -0
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.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-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 +529 -41
- 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/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/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 +474 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
- 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/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 +38 -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 +67 -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/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 +18 -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 +106 -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-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 +260 -26
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.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/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/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 +244 -7
- 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 +386 -5
- 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 +31 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.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/models/app-config.backend.schemas.d.ts +142 -46
- 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/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/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 +68 -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 +25 -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 +41 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.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/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/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-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 +256 -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 +333 -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 +216 -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.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
- 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-providers-registry.backend.service.d.ts +292 -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 +533 -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.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.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/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +39 -15
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.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 +197 -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 +167 -8
- 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 +175 -5
- package/dist/esm/files/services/files.backend.service.js.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-provider.types.d.ts +16 -10
- 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/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/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/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/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/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.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-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/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/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.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 +88 -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 +333 -31
- 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/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/agents.backend.service.d.ts +28 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +204 -18
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -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 +79 -16
- 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 +368 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
- 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 +8 -4
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.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/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/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/index.d.ts +11 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +31 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +78 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +17 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +19 -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 +20 -0
- package/dist/esm/mcp/controllers/mcp.controller.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/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/logger.service.d.ts +12 -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/observability/audit-observation-emission.backend.d.ts +309 -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 +385 -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/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/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-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-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
- 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 +60 -4
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
- 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/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/services/sms.backend.service.d.ts +2 -2
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
- 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/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/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/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-purge.batch.backend.service.d.ts +2 -2
- 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/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/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/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-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/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/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/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/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 +32 -8
- package/dist/esm/requests/service/websocket.service.js.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 +14 -2
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.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/services/resources-registry.backend.service.d.ts +60 -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 +90 -6
- package/dist/esm/resources/services/resources-registry.backend.service.js.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/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 +181 -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 +261 -77
- package/dist/esm/runtime/services/start-application.backend.service.js.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/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -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/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/oauth2-connection.backend.schemas.d.ts +15 -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/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/anonymous-session.backend.service.d.ts +190 -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 +377 -53
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.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-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.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
- 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.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -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/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-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/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 +283 -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/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/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-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/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/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/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/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/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 +77 -3
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.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 +93 -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 +95 -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 +124 -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 +142 -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 +74 -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 +175 -19
- 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 +161 -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 +512 -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 +59 -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 +191 -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 +385 -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 +266 -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 +111 -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 +107 -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 +195 -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 +387 -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 +62 -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/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/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/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/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/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/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -9
|
@@ -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"]}
|
|
@@ -139,22 +139,25 @@ export declare class NotificationDispatcherService {
|
|
|
139
139
|
*/
|
|
140
140
|
private dispatchDerivedBadgeRecomputes;
|
|
141
141
|
/**
|
|
142
|
-
*
|
|
142
|
+
* Resolve WHOSE badge this is — the scopeId — for a scope the DEFINITION already fixed.
|
|
143
143
|
*
|
|
144
|
-
*
|
|
145
|
-
* polymorphism refactor (`.cursor/plans/notification-badges-polymorphism-refactor.md`):
|
|
146
|
-
* the APPLICATION variant was dropped (no canonical badges declared at app
|
|
147
|
-
* scope and no resource type backs it anymore). An operation whose
|
|
148
|
-
* `resourcePrimaryScope` is APPLICATION (or any other unsupported value)
|
|
149
|
-
* yields `{ scope: null, scopeId: null }` so the caller logs and skips
|
|
150
|
-
* cleanly — never silently dispatches into the badge service where
|
|
151
|
-
* `resolveRepository(APPLICATION)` would throw.
|
|
144
|
+
* ## Why this no longer decides the scope
|
|
152
145
|
*
|
|
153
|
-
*
|
|
154
|
-
* `
|
|
155
|
-
*
|
|
146
|
+
* Its predecessor (`determineBadgeScope`) answered both halves from the execution context: it
|
|
147
|
+
* read `operation.resourcePrimaryScope`, mapped `USER_SELF` → `initiatorIds.userId` and
|
|
148
|
+
* `ORGANIZATIONS` → `initiatorIds.organizationId`, and for anything else — `APPLICATION`,
|
|
149
|
+
* `ANONYMOUS`, or an unscoped operation — guessed, preferring the organization when the request
|
|
150
|
+
* happened to carry one and falling back to the user. That guess decided which COLLECTION a
|
|
151
|
+
* counter was written to, from a property of the operation that has nothing to say about which
|
|
152
|
+
* badge the author meant. An operation on a user-scoped resource could only ever move a
|
|
153
|
+
* user-scoped counter, whatever badge its `badgeRef` named.
|
|
154
|
+
*
|
|
155
|
+
* The definition names the scope, so only the id is left, and the id is genuinely a runtime fact:
|
|
156
|
+
* which user, which organization. `null` means the request carries no identity at that scope
|
|
157
|
+
* (an anonymous or purely application-scoped call reaching an org-scoped badge), which is a skip
|
|
158
|
+
* rather than an error — no principal's count could have changed.
|
|
156
159
|
*/
|
|
157
|
-
private
|
|
160
|
+
private resolveBadgeScopeId;
|
|
158
161
|
/**
|
|
159
162
|
* Dispatch user notifications
|
|
160
163
|
*
|
|
@@ -198,6 +201,39 @@ export declare class NotificationDispatcherService {
|
|
|
198
201
|
* token-bearing emails still carry their `acceptUrl`. Best-effort: a missing address
|
|
199
202
|
* or a send failure is logged and swallowed, never thrown into the operation pipeline.
|
|
200
203
|
*/
|
|
204
|
+
/**
|
|
205
|
+
* Which of the tenant's four notification categories an organization-targeted notification
|
|
206
|
+
* belongs to, or `undefined` when the target names no category.
|
|
207
|
+
*
|
|
208
|
+
* DERIVED from the target rather than declared per notification (#410). The two vocabularies were
|
|
209
|
+
* built to line up and a mapping table is the only place they can drift; the entries that are
|
|
210
|
+
* absent are absent for a reason:
|
|
211
|
+
*
|
|
212
|
+
* - `ORGANIZATION_USERS` fans out to every member BY DESIGN. Routing it to one address would
|
|
213
|
+
* change who the message is for, not merely where it lands.
|
|
214
|
+
* - `ORGANIZATION` is the tenant itself with no category, so it falls to `defaultEmailAddress`
|
|
215
|
+
* below without belonging to a switch.
|
|
216
|
+
*/
|
|
217
|
+
private static readonly ORGANIZATION_NOTIFICATION_CATEGORY_BY_TARGET;
|
|
218
|
+
/**
|
|
219
|
+
* Resolve where an organization-targeted email should go, and whether it should go at all.
|
|
220
|
+
*
|
|
221
|
+
* Returns `undefined` for a target this record does not govern, so the caller falls through to
|
|
222
|
+
* the ordinary member fan-out. Reading the record is best-effort: a tenant with no
|
|
223
|
+
* `organizationNotifications` row, or a read that fails, must fall through to the behaviour that
|
|
224
|
+
* existed before this feature rather than silently dropping the notification.
|
|
225
|
+
*/
|
|
226
|
+
private resolveOrganizationNotificationRouting;
|
|
227
|
+
/**
|
|
228
|
+
* Send one organization-routed email to the tenant's configured address (#410).
|
|
229
|
+
*
|
|
230
|
+
* Deliberately NOT reusing `dispatchEmailToRecipientAddress`: that path exists for an address
|
|
231
|
+
* read off the operation's own object — an invitee who has no account — and its logging and its
|
|
232
|
+
* `userId: ''` sentinel both say so. This recipient is a tenant's own routing address, a
|
|
233
|
+
* different thing with a different reason for having no user, and collapsing them would make the
|
|
234
|
+
* logs unable to answer which kind of send happened.
|
|
235
|
+
*/
|
|
236
|
+
private dispatchEmailToOrganizationAddress;
|
|
201
237
|
private dispatchEmailToRecipientAddress;
|
|
202
238
|
/**
|
|
203
239
|
* Enqueue a batch of emails for asynchronous sending.
|
|
@@ -225,6 +261,34 @@ export declare class NotificationDispatcherService {
|
|
|
225
261
|
* Handles both fixed targets and custom userIdsSelector
|
|
226
262
|
*/
|
|
227
263
|
private getUserIdsForTarget;
|
|
264
|
+
/**
|
|
265
|
+
* The users an APPLICATION-level notification is addressed to: holders of the target's app roles.
|
|
266
|
+
*
|
|
267
|
+
* The app-level counterpart of {@link getOrganizationRecipientUserIds}, and it mirrors that method
|
|
268
|
+
* deliberately — same sub-call context, same initiator exclusion, same "no repository means no
|
|
269
|
+
* recipients" posture — so the two halves of one feature cannot drift into behaving differently.
|
|
270
|
+
*
|
|
271
|
+
* ## Tenancy: there is no tenant to cross
|
|
272
|
+
*
|
|
273
|
+
* These recipients are application-level administrators rather than members of the tenant whose row
|
|
274
|
+
* triggered the event, so the question "does this leak one tenant's data to another" has to be
|
|
275
|
+
* answered rather than assumed. It is answered by the population: all 17 notifications sit on
|
|
276
|
+
* APPLICATION-scoped resources (`users`, application API keys, application OAuth clients), and
|
|
277
|
+
* `resolveOrganizationName` — the only place a tenant's name enters an email context — returns
|
|
278
|
+
* `undefined` unless the operation's `resourcePrimaryScope` is `ORGANIZATIONS`. So no tenant name
|
|
279
|
+
* reaches these bodies, by construction rather than by care.
|
|
280
|
+
*
|
|
281
|
+
* That is a property of the CURRENT population, not a guarantee about future ones. An
|
|
282
|
+
* ORGANIZATIONS-scoped operation that adds an `APPLICATION_*` notification would put a tenant's data
|
|
283
|
+
* in front of a non-member, and this is the comment that should stop it.
|
|
284
|
+
*
|
|
285
|
+
* ## Why the query filters rather than listing everyone
|
|
286
|
+
*
|
|
287
|
+
* `appRoles` is `.isDBIndexed()`, and the same `$in` shape is what the super-administrator floor uses
|
|
288
|
+
* to count administrators. The organization path can afford to filter roles in memory because its
|
|
289
|
+
* population is one tenant's roster; the application population is every user of the application.
|
|
290
|
+
*/
|
|
291
|
+
private getApplicationRecipientUserIds;
|
|
228
292
|
/**
|
|
229
293
|
* Resolve the per-recipient context consumed by every greeting surface (email
|
|
230
294
|
* subject/body, the `initiatorName` personalization, batch/direct sends).
|
|
@@ -246,6 +310,28 @@ export declare class NotificationDispatcherService {
|
|
|
246
310
|
* as `displayName`; `firstName` is the informal variant with the same email
|
|
247
311
|
* floor.
|
|
248
312
|
*/
|
|
313
|
+
/**
|
|
314
|
+
* Whether this notification may be sent to THIS recipient on THIS channel, given the recipient's
|
|
315
|
+
* own channel switches (#409).
|
|
316
|
+
*
|
|
317
|
+
* Until 2026-09-08 `UserPreferences.notifications` was stored, editable on the self-preferences
|
|
318
|
+
* screen, classified as personal data, subject-exported and reset on erasure — and read by
|
|
319
|
+
* nothing. A person who turned email off still received email.
|
|
320
|
+
*
|
|
321
|
+
* ONE predicate rather than a check at each of the three send loops, because that is the shape
|
|
322
|
+
* this repository's own rule asks for: an invariant applied at some of its call sites is the
|
|
323
|
+
* defect it keeps recording. The loops call this; nothing else decides.
|
|
324
|
+
*
|
|
325
|
+
* Three ways a message is delivered regardless, each for a different reason:
|
|
326
|
+
* - the target is ROLE-addressed (see `userNotificationTargetIsSuppressibleByRecipientPreference`)
|
|
327
|
+
* — the recipient did not choose to receive it as a person;
|
|
328
|
+
* - the notification declares `alwaysDeliver` — a security notice a compromised account's owner
|
|
329
|
+
* must still receive;
|
|
330
|
+
* - the channel has no switch, or the recipient has no preferences row at all. A missing record
|
|
331
|
+
* must never read as "everything off": preferences are created lazily, so a user who has never
|
|
332
|
+
* opened the settings screen would otherwise silently stop receiving everything.
|
|
333
|
+
*/
|
|
334
|
+
private recipientAcceptsNotificationChannel;
|
|
249
335
|
private fetchUserContext;
|
|
250
336
|
private getOrganizationRecipientUserIds;
|
|
251
337
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications-dispatcher.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/notifications/services/notifications-dispatcher.backend.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAC;AAE3I,OAAO,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AACvG,OAAO,EACL,+BAA+B,
|
|
1
|
+
{"version":3,"file":"notifications-dispatcher.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/notifications/services/notifications-dispatcher.backend.service.ts"],"names":[],"mappings":"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"}
|