@wildo-ai/saas-backend-lib 1.1.1 → 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 +14 -3
- 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 +138 -24
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts +3 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js +8 -3
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js +11 -2
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.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 +48 -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 +102 -30
- 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/http-api/odata-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js +16 -0
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts +20 -6
- 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 +96 -32
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts +3 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js +32 -7
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts +8 -5
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +80 -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 +298 -23
- 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 +71 -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 +85 -5
- 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 +21 -0
- 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 +146 -4
- 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-operation-implementation-coverage.backend.utils.d.ts +3 -26
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js +3 -68
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.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 +533 -43
- 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 +54 -13
- 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 +263 -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 +376 -58
- 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 +264 -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 +414 -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 +16 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +140 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -0
- 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 +65 -6
- 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 +45 -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/custom/application-config-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js +7 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +146 -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 +43 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +52 -3
- 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/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js.map +1 -1
- package/dist/esm/databases/models/filter.backend.schemas.js +2 -2
- package/dist/esm/databases/models/filter.backend.schemas.js.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js +20 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.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/databases/services/redis.service.d.ts +27 -0
- package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/redis.service.js +29 -0
- package/dist/esm/databases/services/redis.service.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 +134 -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/controllers/external-data-admin.backend.contracts.d.ts +41 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js +40 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts +64 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js +193 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js.map +1 -0
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +72 -4
- 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 +60 -19
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.js +7 -1
- package/dist/esm/external-data/external-data-transform.backend.js.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts +2 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js +13 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.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 +306 -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 +539 -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 +24 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +83 -11
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts +17 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -0
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +5 -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 +76 -13
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +18 -0
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.js +36 -28
- package/dist/esm/files/services/file-operation-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 +214 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js +566 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -0
- package/dist/esm/files/services/files.backend.service.d.ts +87 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +252 -19
- 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/file-uploader.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.js +12 -0
- package/dist/esm/files/utils/file-uploader.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 +200 -44
- 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 +107 -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 +519 -56
- 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 +151 -41
- 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 +308 -143
- 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 +15 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +45 -5
- 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 +82 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +20 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +21 -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 +32 -4
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts +34 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js +42 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +84 -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 +235 -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 +64 -2
- 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 +152 -6
- 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 +108 -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 +432 -101
- 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 +54 -7
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts +5 -5
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js +14 -13
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts +2 -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 +18 -8
- 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 +20 -18
- 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/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js +4 -1
- package/dist/esm/organizations/services/organization-unit-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 +88 -15
- 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 +16 -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/resource-id.backend.service.js +3 -3
- package/dist/esm/resources/services/resource-id.backend.service.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 +91 -7
- 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/execution-context-creator.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js +13 -7
- package/dist/esm/runtime/services/execution-context-creator.backend.service.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 +47 -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 +343 -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/jwt.backend.schemas.d.ts +3 -23
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.js +20 -45
- package/dist/esm/security/authentications/models/jwt.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 +9 -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 +77 -2
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js +5 -3
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.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 +41 -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 +87 -4
- 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/initiator-organization-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js +24 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/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/privileged-access-review.backend.utils.d.ts +117 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js +104 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js.map +1 -0
- 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 +175 -14
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +385 -49
- 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/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +18 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +110 -74
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js.map +1 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +17 -3
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js +12 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +41 -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 +83 -20
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.js +1 -18
- package/dist/esm/security/jwt/services/jwt.backend.service.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 +17 -9
- package/dist/esm/.builder.pid +0 -9
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # The seam every FIRE-AND-FORGET audit observation goes through — and the loss signal behind it
|
|
3
|
+
*
|
|
4
|
+
* assurance-control: WILDO.AUDIT.SECURITY_EVENT — a lost security observation is DETECTABLE, so a
|
|
5
|
+
* period with no recorded operator crossings is distinguishable from a period with a broken sink.
|
|
6
|
+
*
|
|
7
|
+
* ## The gap this closes, stated precisely
|
|
8
|
+
*
|
|
9
|
+
* A handful of security observations — an operator crossing a tenant boundary, an authorization
|
|
10
|
+
* refusal, a platform-access grant transition, a directory read — are emitted WITHOUT `await`, with
|
|
11
|
+
* the audit service FEATURE-DETECTED and the returned promise's rejection SWALLOWED. Every one of
|
|
12
|
+
* those three properties is deliberate and must survive: **an observation must never be able to fail
|
|
13
|
+
* the request it observes.** A fail-closed variant would hand anyone a way to disable operator
|
|
14
|
+
* support, or to convert a correct 403 into a 500, by breaking the audit sink.
|
|
15
|
+
*
|
|
16
|
+
* What was missing is not a refusal — it is a COUNT. With nothing recording the drops, an operator
|
|
17
|
+
* reading the trail cannot tell "no operator crossed a tenant boundary this week" from "the audit
|
|
18
|
+
* service has been unbound since Tuesday". Those two readings of the same empty result are what make
|
|
19
|
+
* the evidence worthless, and it is the same shape as
|
|
20
|
+
* `.claude/rules/negative-results-require-a-positive-probe.md`: an empty result is evidence about the
|
|
21
|
+
* pipeline, never about the world.
|
|
22
|
+
*
|
|
23
|
+
* ## What the existing control does NOT cover — measured 2026-09-09
|
|
24
|
+
*
|
|
25
|
+
* Three call sites carried the claim that *"detection of a lost row is the audit pipeline's own
|
|
26
|
+
* control (`audit_store_failure_total`), not this gate's"*. That claim is **true for one loss shape
|
|
27
|
+
* and false for the three that matter here.** `AuditLogsBackendService._createAuditLog` catches its
|
|
28
|
+
* Layer-1 store write and increments `audit_store_failure_total` — so a store that is DOWN while the
|
|
29
|
+
* service is bound and reachable is already counted. But that counter is inside a method the
|
|
30
|
+
* observer may never reach:
|
|
31
|
+
*
|
|
32
|
+
* | Loss shape | Reaches `_createAuditLog`? | Counted before this seam |
|
|
33
|
+
* |---|---|---|
|
|
34
|
+
* | {@link AuditObservationLossReason.SERVICE_UNAVAILABLE} — the audit service is unbound, or the `log*` method is absent (a partial DI binding, a host binding an older audit service) | no | **nothing at all** |
|
|
35
|
+
* | {@link AuditObservationLossReason.EMISSION_THREW} — the call threw synchronously | no | **nothing at all** |
|
|
36
|
+
* | {@link AuditObservationLossReason.EMISSION_REJECTED} — the returned promise rejected | partially | **nothing at all** at the observer |
|
|
37
|
+
* | the Layer-1 store write itself failed | yes | `audit_store_failure_total` (unchanged, and still the right control for that shape) |
|
|
38
|
+
*
|
|
39
|
+
* So this seam counts the OBSERVER-side drop — the case where the audit pipeline never learned there
|
|
40
|
+
* was anything to record — and leaves the pipeline's own control alone. The two are complementary,
|
|
41
|
+
* not duplicates, and a reviewer needs both: one says "we tried and the store refused", the other
|
|
42
|
+
* says "we never got as far as trying".
|
|
43
|
+
*
|
|
44
|
+
* ## Why a METRIC and a LOG, and not an audit row
|
|
45
|
+
*
|
|
46
|
+
* The loss signal must survive the audit store being down, so it cannot BE the audit store —
|
|
47
|
+
* recording "the audit store was unreachable" in the audit store is the circularity that makes the
|
|
48
|
+
* whole thing worthless. Two channels, deliberately, because neither alone is sufficient:
|
|
49
|
+
*
|
|
50
|
+
* - **`audit_observation_dropped_total`** (via {@link MetricsService.recordAuditObservationDropped})
|
|
51
|
+
* is the RATE signal, and it is the durable one: the OTLP reader exports it periodically to the
|
|
52
|
+
* metrics backend, so its value outlives the process and aggregates across instances. Without the
|
|
53
|
+
* OTLP preload wired the global meter is a no-op and this channel is silently inert — which is
|
|
54
|
+
* precisely why it is not the only channel.
|
|
55
|
+
* - **One rate-limited `error` log line** is the always-available channel and the WAKE-UP. It fires
|
|
56
|
+
* at most once per {@link LOSS_LOG_INTERVAL_MS} per `(observation, reason)` pair, so a service
|
|
57
|
+
* that has been unbound since boot produces one line rather than one per request. Unthrottled it
|
|
58
|
+
* would flood, and a channel that floods is a channel operators filter out — which would leave the
|
|
59
|
+
* signal technically present and practically absent.
|
|
60
|
+
*
|
|
61
|
+
* ## The process-local accumulator, argued rather than assumed
|
|
62
|
+
*
|
|
63
|
+
* {@link readAuditObservationLossTotals} is per-process and is **lost on restart**. That is stated
|
|
64
|
+
* here rather than glossed, because a reader could otherwise take it for durable evidence:
|
|
65
|
+
*
|
|
66
|
+
* - It is **not** the evidence. It is a test seam and a door for a future health surface. The
|
|
67
|
+
* durable record is the exported counter (metrics backend) plus the log line (log store).
|
|
68
|
+
* - Per-instance is the correct granularity for the LOG channel anyway — "which replica lost
|
|
69
|
+
* evidence" is part of the answer — and the metrics backend does the cross-instance aggregation
|
|
70
|
+
* that a process-local number never could.
|
|
71
|
+
* - Rejected: a durable row for each loss. It is I/O on the observation path, it can fail the
|
|
72
|
+
* request the whole design forbids failing, and it introduces a second store that can itself be
|
|
73
|
+
* down. Rejected: a dedicated health endpoint. Still per-instance, adds a surface, and gives an
|
|
74
|
+
* operator nothing the counter does not already give them.
|
|
75
|
+
*
|
|
76
|
+
* ## Why this is a SEAM and not a helper each site copies
|
|
77
|
+
*
|
|
78
|
+
* `.claude/rules/invariant-call-site-enumeration.md` — the invariant here ("a dropped observation is
|
|
79
|
+
* counted") holds at every fire-and-forget security observation in the package, spread across six
|
|
80
|
+
* subtrees, and the recurring defect in this repository is exactly the invariant applied at one of
|
|
81
|
+
* them. Routing every site through one function makes the counting structural rather than
|
|
82
|
+
* remembered: a new fire-and-forget observation that uses this seam is counted the day it lands,
|
|
83
|
+
* with no author having to know this mechanism exists.
|
|
84
|
+
*
|
|
85
|
+
* **Do not quote a call-site count from this file.** An earlier revision named one ("EIGHT call
|
|
86
|
+
* sites"), and the very next adoption pass made it wrong — a number in prose is one a reader has to
|
|
87
|
+
* re-measure before believing, which is worse than no number. Measure it:
|
|
88
|
+
*
|
|
89
|
+
* ```bash
|
|
90
|
+
* command grep -rn "emitAuditObservation(\|recordAuditObservationLoss(" engine/saas-backend-lib/src \
|
|
91
|
+
* | grep -v __tests__ | grep -v audit-observation-emission.backend.ts
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
/**
|
|
95
|
+
* WHICH security observation was lost.
|
|
96
|
+
*
|
|
97
|
+
* A closed vocabulary with one named runtime source, per `CLAUDE.md` — the member is what a reviewer
|
|
98
|
+
* reads off the alert, so it has to carry its own explanation rather than being a bare string at
|
|
99
|
+
* every call site. It is also the metric's `observation` label: bounded, low cardinality, and stable
|
|
100
|
+
* across renames of the emitting method.
|
|
101
|
+
*
|
|
102
|
+
* ## A member names the EVIDENCE, never the emitter
|
|
103
|
+
*
|
|
104
|
+
* Two members of this enum are emitted from more than one place, and that is the design rather than
|
|
105
|
+
* an omission. `CROSS_TENANT_ADMINISTRATIVE_ACCESS` is raised by the per-instance tenant gate AND by
|
|
106
|
+
* the APPLICATION-scoped collection read; `HTTP_API_READ_THROUGH_ACCESS` by the per-read adapter AND
|
|
107
|
+
* by the per-run ETL pipeline. Splitting either by emitter would make the one question an operator
|
|
108
|
+
* actually asks — *how much cross-tenant evidence did we lose?* — a sum over labels, and a sum
|
|
109
|
+
* somebody has to remember to widen is a sum that goes quietly wrong the day a third emitter lands.
|
|
110
|
+
* WHICH door dropped it is carried by the log line's `context`, which is the channel with room for
|
|
111
|
+
* it; the metric carries the rate, which is the thing that has to aggregate.
|
|
112
|
+
*
|
|
113
|
+
* The corollary: when you add an emitter for an event a member already names, REUSE the member and
|
|
114
|
+
* extend its JSDoc to name the new emitter. A member whose prose still names one of two emitters is
|
|
115
|
+
* a stale claim in the place a reviewer trusts most.
|
|
116
|
+
*/
|
|
117
|
+
export var AuditObservationKind;
|
|
118
|
+
(function (AuditObservationKind) {
|
|
119
|
+
/**
|
|
120
|
+
* `CROSS_TENANT_ADMINISTRATIVE_ACCESS`, from BOTH doors that can produce one.
|
|
121
|
+
*
|
|
122
|
+
* The most consequential member: this is the operator-crossing trail
|
|
123
|
+
* `.claude/rules/administrative-continuity-floors.md` requires, and the one whose silence is
|
|
124
|
+
* indistinguishable from "no operator crossed anything".
|
|
125
|
+
*
|
|
126
|
+
* - `authorizeOrganizations` — the per-instance tenant gate, deciding on ONE fetched row.
|
|
127
|
+
* - `ServiceResourceBackendService.recordCrossTenantReadAccess` — the APPLICATION-scoped
|
|
128
|
+
* collection read, one observation per TENANT reached. The authorizer never sees this half: it
|
|
129
|
+
* runs only for ORGANIZATIONS-scoped resources, and an application-scoped door returns a SET
|
|
130
|
+
* whose rows belong to many tenants. Losing it silently is the larger of the two exposures,
|
|
131
|
+
* because it is the door that can enumerate every tenant at once.
|
|
132
|
+
*/
|
|
133
|
+
AuditObservationKind["CROSS_TENANT_ADMINISTRATIVE_ACCESS"] = "cross_tenant_administrative_access";
|
|
134
|
+
/**
|
|
135
|
+
* `RESOURCE_OPERATION_DENIED` from the authorizer funnel. A lost refusal is a lost negative access
|
|
136
|
+
* decision — the record half of "record access decisions".
|
|
137
|
+
*/
|
|
138
|
+
AuditObservationKind["AUTHORIZATION_DENIAL"] = "authorization_denial";
|
|
139
|
+
/**
|
|
140
|
+
* `PLATFORM_ACCESS_GRANT_LIFECYCLE` from the grant custom implementation. A lost transition means
|
|
141
|
+
* an elevation exists whose request/approval is not in the trail.
|
|
142
|
+
*/
|
|
143
|
+
AuditObservationKind["PLATFORM_ACCESS_GRANT_LIFECYCLE"] = "platform_access_grant_lifecycle";
|
|
144
|
+
/**
|
|
145
|
+
* `PLATFORM_DIRECTORY_ACCESS` from `ServiceResourceBackendService.recordPlatformDirectoryAccess` —
|
|
146
|
+
* an APPLICATION-WIDE directory enumeration that no scope confined.
|
|
147
|
+
*
|
|
148
|
+
* `returnedCount` is why the row exists at all: it is the only thing separating "an operator
|
|
149
|
+
* opened the directory" from "an operator exported it". A lost observation does not merely lose an
|
|
150
|
+
* access record, it loses the SIZE, which is the half a reviewer reads first.
|
|
151
|
+
*/
|
|
152
|
+
AuditObservationKind["PLATFORM_DIRECTORY_ACCESS"] = "platform_directory_access";
|
|
153
|
+
/**
|
|
154
|
+
* `USER_SESSION_EVICTED` from the token issuer's concurrent-session cap.
|
|
155
|
+
*
|
|
156
|
+
* One observation per RETIRED refresh chain, not per enforcement: the cap bounds the blast radius
|
|
157
|
+
* of undetected token theft, so a burst of evictions for one principal is among the more
|
|
158
|
+
* interesting things the trail can carry — and a burst is exactly the case where losing some of
|
|
159
|
+
* the rows understates it. Counting per chain is what keeps the loss signal proportional to the
|
|
160
|
+
* evidence actually lost rather than to the number of times the cap ran.
|
|
161
|
+
*/
|
|
162
|
+
AuditObservationKind["USER_SESSION_EVICTED"] = "user_session_evicted";
|
|
163
|
+
/**
|
|
164
|
+
* `PROVIDER_OPERATION_CALL` from the provider operation executor — one row per OUTBOUND call to a
|
|
165
|
+
* third party, on both the success and the failure path.
|
|
166
|
+
*
|
|
167
|
+
* This is the application's record of what it sent to whom on whose behalf. Its silence is
|
|
168
|
+
* peculiarly misleading: an empty outbound trail reads as "this deployment integrates with
|
|
169
|
+
* nothing", which is a sentence somebody will believe.
|
|
170
|
+
*/
|
|
171
|
+
AuditObservationKind["PROVIDER_OPERATION_CALL"] = "provider_operation_call";
|
|
172
|
+
/**
|
|
173
|
+
* The post-call credential-use stamp from the provider operation executor.
|
|
174
|
+
*
|
|
175
|
+
* ## Why this is on THIS counter even though its sink is not the audit service
|
|
176
|
+
*
|
|
177
|
+
* It writes to the tenant's own credential row rather than to `AuditLogsBackendService`, and it is
|
|
178
|
+
* still the identical observer-side loss shape: fire-and-forget, sink feature-detected, rejection
|
|
179
|
+
* swallowed, nothing counting the drops. The counter's subject is the LOSS OF A SECURITY
|
|
180
|
+
* OBSERVATION, not the identity of the store that was supposed to receive it — so a second counter
|
|
181
|
+
* for one site would fragment the alert without telling an operator anything the `observation`
|
|
182
|
+
* label does not already say.
|
|
183
|
+
*
|
|
184
|
+
* What it evidences is narrow and worth stating: whether a stored credential was ACCEPTED by the
|
|
185
|
+
* provider on last use. Losing it leaves a credential whose health is unknown, which surfaces
|
|
186
|
+
* later as an integration that fails with no record of when it started failing.
|
|
187
|
+
*/
|
|
188
|
+
AuditObservationKind["PROVIDER_CREDENTIAL_USE"] = "provider_credential_use";
|
|
189
|
+
/**
|
|
190
|
+
* `HTTP_API_READ_THROUGH_ACCESS`, from BOTH emitters — see the enum's naming principle above.
|
|
191
|
+
*
|
|
192
|
+
* - `HttpApiResourceRepositoryBackendService.recordReadThroughAccess` — one observation per remote
|
|
193
|
+
* round-trip, and the only tier that witnesses every one of them (repository-direct probes never
|
|
194
|
+
* reach the services tier at all).
|
|
195
|
+
* - `ExternalDataPipelineRunBackendService.recordRunReadThroughAccess` — one observation per ETL
|
|
196
|
+
* run.
|
|
197
|
+
*
|
|
198
|
+
* The evidence at stake is ATTRIBUTION: an HTTP_API read reaches a third party through a SHARED
|
|
199
|
+
* service principal, so this row is what carries the real initiating user through it. Without it
|
|
200
|
+
* the external system's own logs show one principal and nothing anywhere resolves it to a person.
|
|
201
|
+
*/
|
|
202
|
+
AuditObservationKind["HTTP_API_READ_THROUGH_ACCESS"] = "http_api_read_through_access";
|
|
203
|
+
})(AuditObservationKind || (AuditObservationKind = {}));
|
|
204
|
+
/**
|
|
205
|
+
* WHY the observation never reached the audit pipeline.
|
|
206
|
+
*
|
|
207
|
+
* Three members, and they are genuinely different diagnoses rather than shades of one — see the
|
|
208
|
+
* table in this module's header. `SERVICE_UNAVAILABLE` is a WIRING fault and is usually total and
|
|
209
|
+
* permanent for the life of the process; the other two are runtime faults and are usually partial.
|
|
210
|
+
* Merging them would leave an operator unable to tell "this deployment audits nothing" from "the
|
|
211
|
+
* audit store hiccupped twice".
|
|
212
|
+
*/
|
|
213
|
+
export var AuditObservationLossReason;
|
|
214
|
+
(function (AuditObservationLossReason) {
|
|
215
|
+
/** The audit service is unbound, or the specific `log*` method is absent on the bound instance. */
|
|
216
|
+
AuditObservationLossReason["SERVICE_UNAVAILABLE"] = "service_unavailable";
|
|
217
|
+
/** The emitting call threw synchronously — before any `.catch()` could make it fire-and-forget. */
|
|
218
|
+
AuditObservationLossReason["EMISSION_THREW"] = "emission_threw";
|
|
219
|
+
/** The emitting call returned a promise that rejected. */
|
|
220
|
+
AuditObservationLossReason["EMISSION_REJECTED"] = "emission_rejected";
|
|
221
|
+
})(AuditObservationLossReason || (AuditObservationLossReason = {}));
|
|
222
|
+
/**
|
|
223
|
+
* How often ONE `(observation, reason)` pair may produce a log line.
|
|
224
|
+
*
|
|
225
|
+
* Fifteen minutes: long enough that a permanently broken binding costs four lines an hour rather
|
|
226
|
+
* than one per request, short enough that a NEW outage hours after an earlier one still announces
|
|
227
|
+
* itself instead of being swallowed by a latch that never resets. A permanent latch was rejected for
|
|
228
|
+
* exactly that reason — it makes the second incident invisible.
|
|
229
|
+
*/
|
|
230
|
+
export const LOSS_LOG_INTERVAL_MS = 15 * 60 * 1000;
|
|
231
|
+
/** Process-local totals, keyed `<observation>:<reason>`. Not evidence — see the module header. */
|
|
232
|
+
const lossTotals = new Map();
|
|
233
|
+
/** Last log timestamp per `<observation>:<reason>`. Bounded by the enum cross-product (9 entries). */
|
|
234
|
+
const lastLoggedAt = new Map();
|
|
235
|
+
/**
|
|
236
|
+
* Every loss recorded since this process started, as `<observation>:<reason>` → count.
|
|
237
|
+
*
|
|
238
|
+
* A COPY, so a caller cannot mutate the accumulator. Exists so the counting can be pinned without an
|
|
239
|
+
* OTLP backend, and so a future health surface has a door that does not require one either. Read the
|
|
240
|
+
* module header before treating the numbers as durable evidence: they are not.
|
|
241
|
+
*/
|
|
242
|
+
export function readAuditObservationLossTotals() {
|
|
243
|
+
return Object.fromEntries(lossTotals);
|
|
244
|
+
}
|
|
245
|
+
/** Test isolation only. Never called from production code. */
|
|
246
|
+
export function resetAuditObservationLossTotals() {
|
|
247
|
+
lossTotals.clear();
|
|
248
|
+
lastLoggedAt.clear();
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Record one lost observation. Never throws, under any circumstance.
|
|
252
|
+
*
|
|
253
|
+
* Exported so a site whose emission does not fit {@link emitAuditObservation}'s shape can still
|
|
254
|
+
* contribute to the same counter rather than inventing a second one. Prefer the seam.
|
|
255
|
+
*/
|
|
256
|
+
export function recordAuditObservationLoss(params) {
|
|
257
|
+
// The recorder is the LAST thing that may fail the request it observes: a metric backend that
|
|
258
|
+
// throws, or a logger that throws, would defeat the entire purpose of the fire-and-forget contract
|
|
259
|
+
// this seam exists to preserve. Everything below is inside one boundary for that reason.
|
|
260
|
+
try {
|
|
261
|
+
const key = `${params.observation}:${params.reason}`;
|
|
262
|
+
lossTotals.set(key, (lossTotals.get(key) ?? 0) + 1);
|
|
263
|
+
// Metrics FIRST. It is the durable, rate-carrying channel, and it must be incremented even for
|
|
264
|
+
// the drops the throttle below decides not to log — otherwise the throttle would silently
|
|
265
|
+
// suppress the count as well as the line, which is the defect one layer up.
|
|
266
|
+
//
|
|
267
|
+
// Feature-DETECTED rather than optional-chained on the object, and for the reason this whole
|
|
268
|
+
// module exists: a container that answers every symbol with a stub (the shape several partial
|
|
269
|
+
// test containers in this package genuinely have) yields a truthy `metricsService` whose method
|
|
270
|
+
// is absent, so `?.` on the OBJECT still calls `undefined(...)` and throws. The outer catch
|
|
271
|
+
// would contain it, but a swallowed TypeError looks exactly like a swallowed real defect — and
|
|
272
|
+
// it would take the log line down with it, leaving the loss silent again.
|
|
273
|
+
const metricsService = params.metricsService ?? resolveLossMetricsRecorder(params.metricsResolver);
|
|
274
|
+
if (typeof metricsService?.recordAuditObservationDropped === 'function') {
|
|
275
|
+
metricsService.recordAuditObservationDropped({
|
|
276
|
+
observation: params.observation,
|
|
277
|
+
reason: params.reason,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
const now = Date.now();
|
|
281
|
+
const previous = lastLoggedAt.get(key);
|
|
282
|
+
if (previous !== undefined && now - previous < LOSS_LOG_INTERVAL_MS)
|
|
283
|
+
return;
|
|
284
|
+
lastLoggedAt.set(key, now);
|
|
285
|
+
params.logger?.error?.('A security audit observation was DROPPED before it reached the audit pipeline', {
|
|
286
|
+
// `reason` is the slug an alert rule and a log query both key on; keep it first and stable.
|
|
287
|
+
reason: 'audit_observation_dropped',
|
|
288
|
+
observation: params.observation,
|
|
289
|
+
lossReason: params.reason,
|
|
290
|
+
// The running total makes ONE throttled line carry the volume the suppressed lines would have.
|
|
291
|
+
occurrencesSinceProcessStart: lossTotals.get(key),
|
|
292
|
+
logIntervalMs: LOSS_LOG_INTERVAL_MS,
|
|
293
|
+
...(params.error === undefined ? {} : { error: describeLossError(params.error) }),
|
|
294
|
+
...(params.context ?? {}),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
/* An observability failure must never be able to fail the request it observes. */
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Emit one fire-and-forget audit observation, counting it if it is lost.
|
|
303
|
+
*
|
|
304
|
+
* ## The contract, which is the whole point
|
|
305
|
+
*
|
|
306
|
+
* **This function never throws and never returns a promise.** Not on an absent service, not on a
|
|
307
|
+
* synchronous throw, not on a rejection, and not on a metrics or logger failure. Callers rely on it
|
|
308
|
+
* to preserve the property their own JSDoc promises: the observation cannot fail the request.
|
|
309
|
+
*
|
|
310
|
+
* @param params.emit The emitting call, or `undefined` when the audit service or its method is
|
|
311
|
+
* absent. Passing `undefined` is how a site reports {@link AuditObservationLossReason.SERVICE_UNAVAILABLE}
|
|
312
|
+
* — the feature detection stays at the site because the method name differs per observation, and a
|
|
313
|
+
* generic reflective lookup here would trade a compile-time error for a runtime one.
|
|
314
|
+
*/
|
|
315
|
+
export function emitAuditObservation(params) {
|
|
316
|
+
const loss = (reason, error) => recordAuditObservationLoss({
|
|
317
|
+
observation: params.observation,
|
|
318
|
+
reason,
|
|
319
|
+
metricsService: params.metricsService,
|
|
320
|
+
metricsResolver: params.metricsResolver,
|
|
321
|
+
logger: params.logger,
|
|
322
|
+
error,
|
|
323
|
+
context: params.context,
|
|
324
|
+
});
|
|
325
|
+
try {
|
|
326
|
+
if (!params.emit) {
|
|
327
|
+
loss(AuditObservationLossReason.SERVICE_UNAVAILABLE);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
let result;
|
|
331
|
+
try {
|
|
332
|
+
result = params.emit();
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
// A `log*` method that is absent on a partially-mocked double throws a TypeError HERE —
|
|
336
|
+
// synchronously, before any `.catch()` could attach. That is the shape the feature detection at
|
|
337
|
+
// each site exists to pre-empt; this catch is what keeps a site that forgets it from crashing.
|
|
338
|
+
loss(AuditObservationLossReason.EMISSION_THREW, error);
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
// Optional-chained, because an audit method is free to be synchronous (and every test double
|
|
342
|
+
// returning `undefined` is). A non-thenable result is a successful emission, not a loss.
|
|
343
|
+
const thenable = result;
|
|
344
|
+
if (typeof thenable?.catch !== 'function')
|
|
345
|
+
return;
|
|
346
|
+
thenable.catch((error) => loss(AuditObservationLossReason.EMISSION_REJECTED, error));
|
|
347
|
+
}
|
|
348
|
+
catch {
|
|
349
|
+
/* Belt and braces: nothing in this seam may reach the caller. */
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Ask a site's thunk for the recorder, and treat any refusal as "no recorder".
|
|
354
|
+
*
|
|
355
|
+
* Its own `try`, INSIDE the caller's: a container that throws while resolving a binding must not be
|
|
356
|
+
* able to take the LOG channel down with it. Degrading a loss to its log-only form is the correct
|
|
357
|
+
* direction — the whole point of this module is that an observability gap is never a reason to
|
|
358
|
+
* refuse — whereas letting the throw escape to the outer `catch` would silence both channels for the
|
|
359
|
+
* one event that most needs saying.
|
|
360
|
+
*/
|
|
361
|
+
function resolveLossMetricsRecorder(resolver) {
|
|
362
|
+
if (typeof resolver !== 'function')
|
|
363
|
+
return undefined;
|
|
364
|
+
try {
|
|
365
|
+
return resolver();
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
return undefined;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* A log-safe description of whatever was thrown.
|
|
373
|
+
*
|
|
374
|
+
* Deliberately local rather than routed through `describeCaughtError`: this module sits UNDER the
|
|
375
|
+
* error subsystem in the dependency order (the error builder's own failures are observations this
|
|
376
|
+
* seam records), and importing upward would make an observability module depend on the layer it
|
|
377
|
+
* observes. The shape is a strict subset of what `describeCaughtError` produces, so a log query
|
|
378
|
+
* reading `error.message` works against both.
|
|
379
|
+
*/
|
|
380
|
+
function describeLossError(error) {
|
|
381
|
+
if (error instanceof Error)
|
|
382
|
+
return { message: error.message, name: error.name };
|
|
383
|
+
return { message: typeof error === 'string' ? error : String(error) };
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=audit-observation-emission.backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-observation-emission.backend.js","sourceRoot":"","sources":["../../../../../src/monitoring/observability/audit-observation-emission.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AAIH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAN,IAAY,oBA4FX;AA5FD,WAAY,oBAAoB;IAC9B;;;;;;;;;;;;;OAaG;IACH,iGAAyE,CAAA;IAEzE;;;OAGG;IACH,qEAA6C,CAAA;IAE7C;;;OAGG;IACH,2FAAmE,CAAA;IAEnE;;;;;;;OAOG;IACH,+EAAuD,CAAA;IAEvD;;;;;;;;OAQG;IACH,qEAA6C,CAAA;IAE7C;;;;;;;OAOG;IACH,2EAAmD,CAAA;IAEnD;;;;;;;;;;;;;;;OAeG;IACH,2EAAmD,CAAA;IAEnD;;;;;;;;;;;;OAYG;IACH,qFAA6D,CAAA;AAC/D,CAAC,EA5FW,oBAAoB,KAApB,oBAAoB,QA4F/B;AAED;;;;;;;;GAQG;AACH,MAAM,CAAN,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IACpC,mGAAmG;IACnG,yEAA2C,CAAA;IAC3C,mGAAmG;IACnG,+DAAiC,CAAA;IACjC,0DAA0D;IAC1D,qEAAuC,CAAA;AACzC,CAAC,EAPW,0BAA0B,KAA1B,0BAA0B,QAOrC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AA2BnD,kGAAkG;AAClG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC7C,sGAAsG;AACtG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,+BAA+B;IAC7C,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAe1C;IACC,8FAA8F;IAC9F,mGAAmG;IACnG,yFAAyF;IACzF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACrD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpD,+FAA+F;QAC/F,0FAA0F;QAC1F,4EAA4E;QAC5E,EAAE;QACF,6FAA6F;QAC7F,8FAA8F;QAC9F,gGAAgG;QAChG,4FAA4F;QAC5F,+FAA+F;QAC/F,0EAA0E;QAC1E,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,0BAA0B,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACnG,IAAI,OAAO,cAAc,EAAE,6BAA6B,KAAK,UAAU,EAAE,CAAC;YACxE,cAAc,CAAC,6BAA6B,CAAC;gBAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS,IAAI,GAAG,GAAG,QAAQ,GAAG,oBAAoB;YAAE,OAAO;QAC5E,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE3B,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,+EAA+E,EAAE;YACtG,4FAA4F;YAC5F,MAAM,EAAE,2BAA2B;YACnC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,+FAA+F;YAC/F,4BAA4B,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACjD,aAAa,EAAE,oBAAoB;YACnC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;IACpF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAQpC;IACC,MAAM,IAAI,GAAG,CAAC,MAAkC,EAAE,KAAe,EAAQ,EAAE,CACzE,0BAA0B,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM;QACN,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IAEL,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wFAAwF;YACxF,gGAAgG;YAChG,+FAA+F;YAC/F,IAAI,CAAC,0BAA0B,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,6FAA6F;QAC7F,yFAAyF;QACzF,MAAM,QAAQ,GAAG,MAAuF,CAAC;QACzG,IAAI,OAAO,QAAQ,EAAE,KAAK,KAAK,UAAU;YAAE,OAAO;QAClD,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,0BAA0B,CACjC,QAAyD;IAEzD,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAChF,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC","sourcesContent":["/**\n * # The seam every FIRE-AND-FORGET audit observation goes through — and the loss signal behind it\n *\n * assurance-control: WILDO.AUDIT.SECURITY_EVENT — a lost security observation is DETECTABLE, so a\n * period with no recorded operator crossings is distinguishable from a period with a broken sink.\n *\n * ## The gap this closes, stated precisely\n *\n * A handful of security observations — an operator crossing a tenant boundary, an authorization\n * refusal, a platform-access grant transition, a directory read — are emitted WITHOUT `await`, with\n * the audit service FEATURE-DETECTED and the returned promise's rejection SWALLOWED. Every one of\n * those three properties is deliberate and must survive: **an observation must never be able to fail\n * the request it observes.** A fail-closed variant would hand anyone a way to disable operator\n * support, or to convert a correct 403 into a 500, by breaking the audit sink.\n *\n * What was missing is not a refusal — it is a COUNT. With nothing recording the drops, an operator\n * reading the trail cannot tell \"no operator crossed a tenant boundary this week\" from \"the audit\n * service has been unbound since Tuesday\". Those two readings of the same empty result are what make\n * the evidence worthless, and it is the same shape as\n * `.claude/rules/negative-results-require-a-positive-probe.md`: an empty result is evidence about the\n * pipeline, never about the world.\n *\n * ## What the existing control does NOT cover — measured 2026-09-09\n *\n * Three call sites carried the claim that *\"detection of a lost row is the audit pipeline's own\n * control (`audit_store_failure_total`), not this gate's\"*. That claim is **true for one loss shape\n * and false for the three that matter here.** `AuditLogsBackendService._createAuditLog` catches its\n * Layer-1 store write and increments `audit_store_failure_total` — so a store that is DOWN while the\n * service is bound and reachable is already counted. But that counter is inside a method the\n * observer may never reach:\n *\n * | Loss shape | Reaches `_createAuditLog`? | Counted before this seam |\n * |---|---|---|\n * | {@link AuditObservationLossReason.SERVICE_UNAVAILABLE} — the audit service is unbound, or the `log*` method is absent (a partial DI binding, a host binding an older audit service) | no | **nothing at all** |\n * | {@link AuditObservationLossReason.EMISSION_THREW} — the call threw synchronously | no | **nothing at all** |\n * | {@link AuditObservationLossReason.EMISSION_REJECTED} — the returned promise rejected | partially | **nothing at all** at the observer |\n * | the Layer-1 store write itself failed | yes | `audit_store_failure_total` (unchanged, and still the right control for that shape) |\n *\n * So this seam counts the OBSERVER-side drop — the case where the audit pipeline never learned there\n * was anything to record — and leaves the pipeline's own control alone. The two are complementary,\n * not duplicates, and a reviewer needs both: one says \"we tried and the store refused\", the other\n * says \"we never got as far as trying\".\n *\n * ## Why a METRIC and a LOG, and not an audit row\n *\n * The loss signal must survive the audit store being down, so it cannot BE the audit store —\n * recording \"the audit store was unreachable\" in the audit store is the circularity that makes the\n * whole thing worthless. Two channels, deliberately, because neither alone is sufficient:\n *\n * - **`audit_observation_dropped_total`** (via {@link MetricsService.recordAuditObservationDropped})\n * is the RATE signal, and it is the durable one: the OTLP reader exports it periodically to the\n * metrics backend, so its value outlives the process and aggregates across instances. Without the\n * OTLP preload wired the global meter is a no-op and this channel is silently inert — which is\n * precisely why it is not the only channel.\n * - **One rate-limited `error` log line** is the always-available channel and the WAKE-UP. It fires\n * at most once per {@link LOSS_LOG_INTERVAL_MS} per `(observation, reason)` pair, so a service\n * that has been unbound since boot produces one line rather than one per request. Unthrottled it\n * would flood, and a channel that floods is a channel operators filter out — which would leave the\n * signal technically present and practically absent.\n *\n * ## The process-local accumulator, argued rather than assumed\n *\n * {@link readAuditObservationLossTotals} is per-process and is **lost on restart**. That is stated\n * here rather than glossed, because a reader could otherwise take it for durable evidence:\n *\n * - It is **not** the evidence. It is a test seam and a door for a future health surface. The\n * durable record is the exported counter (metrics backend) plus the log line (log store).\n * - Per-instance is the correct granularity for the LOG channel anyway — \"which replica lost\n * evidence\" is part of the answer — and the metrics backend does the cross-instance aggregation\n * that a process-local number never could.\n * - Rejected: a durable row for each loss. It is I/O on the observation path, it can fail the\n * request the whole design forbids failing, and it introduces a second store that can itself be\n * down. Rejected: a dedicated health endpoint. Still per-instance, adds a surface, and gives an\n * operator nothing the counter does not already give them.\n *\n * ## Why this is a SEAM and not a helper each site copies\n *\n * `.claude/rules/invariant-call-site-enumeration.md` — the invariant here (\"a dropped observation is\n * counted\") holds at every fire-and-forget security observation in the package, spread across six\n * subtrees, and the recurring defect in this repository is exactly the invariant applied at one of\n * them. Routing every site through one function makes the counting structural rather than\n * remembered: a new fire-and-forget observation that uses this seam is counted the day it lands,\n * with no author having to know this mechanism exists.\n *\n * **Do not quote a call-site count from this file.** An earlier revision named one (\"EIGHT call\n * sites\"), and the very next adoption pass made it wrong — a number in prose is one a reader has to\n * re-measure before believing, which is worse than no number. Measure it:\n *\n * ```bash\n * command grep -rn \"emitAuditObservation(\\|recordAuditObservationLoss(\" engine/saas-backend-lib/src \\\n * | grep -v __tests__ | grep -v audit-observation-emission.backend.ts\n * ```\n */\n\nimport type { MetricsService } from '~wildo-backend-lib/monitoring/observability/services/metrics.service';\n\n/**\n * WHICH security observation was lost.\n *\n * A closed vocabulary with one named runtime source, per `CLAUDE.md` — the member is what a reviewer\n * reads off the alert, so it has to carry its own explanation rather than being a bare string at\n * every call site. It is also the metric's `observation` label: bounded, low cardinality, and stable\n * across renames of the emitting method.\n *\n * ## A member names the EVIDENCE, never the emitter\n *\n * Two members of this enum are emitted from more than one place, and that is the design rather than\n * an omission. `CROSS_TENANT_ADMINISTRATIVE_ACCESS` is raised by the per-instance tenant gate AND by\n * the APPLICATION-scoped collection read; `HTTP_API_READ_THROUGH_ACCESS` by the per-read adapter AND\n * by the per-run ETL pipeline. Splitting either by emitter would make the one question an operator\n * actually asks — *how much cross-tenant evidence did we lose?* — a sum over labels, and a sum\n * somebody has to remember to widen is a sum that goes quietly wrong the day a third emitter lands.\n * WHICH door dropped it is carried by the log line's `context`, which is the channel with room for\n * it; the metric carries the rate, which is the thing that has to aggregate.\n *\n * The corollary: when you add an emitter for an event a member already names, REUSE the member and\n * extend its JSDoc to name the new emitter. A member whose prose still names one of two emitters is\n * a stale claim in the place a reviewer trusts most.\n */\nexport enum AuditObservationKind {\n /**\n * `CROSS_TENANT_ADMINISTRATIVE_ACCESS`, from BOTH doors that can produce one.\n *\n * The most consequential member: this is the operator-crossing trail\n * `.claude/rules/administrative-continuity-floors.md` requires, and the one whose silence is\n * indistinguishable from \"no operator crossed anything\".\n *\n * - `authorizeOrganizations` — the per-instance tenant gate, deciding on ONE fetched row.\n * - `ServiceResourceBackendService.recordCrossTenantReadAccess` — the APPLICATION-scoped\n * collection read, one observation per TENANT reached. The authorizer never sees this half: it\n * runs only for ORGANIZATIONS-scoped resources, and an application-scoped door returns a SET\n * whose rows belong to many tenants. Losing it silently is the larger of the two exposures,\n * because it is the door that can enumerate every tenant at once.\n */\n CROSS_TENANT_ADMINISTRATIVE_ACCESS = 'cross_tenant_administrative_access',\n\n /**\n * `RESOURCE_OPERATION_DENIED` from the authorizer funnel. A lost refusal is a lost negative access\n * decision — the record half of \"record access decisions\".\n */\n AUTHORIZATION_DENIAL = 'authorization_denial',\n\n /**\n * `PLATFORM_ACCESS_GRANT_LIFECYCLE` from the grant custom implementation. A lost transition means\n * an elevation exists whose request/approval is not in the trail.\n */\n PLATFORM_ACCESS_GRANT_LIFECYCLE = 'platform_access_grant_lifecycle',\n\n /**\n * `PLATFORM_DIRECTORY_ACCESS` from `ServiceResourceBackendService.recordPlatformDirectoryAccess` —\n * an APPLICATION-WIDE directory enumeration that no scope confined.\n *\n * `returnedCount` is why the row exists at all: it is the only thing separating \"an operator\n * opened the directory\" from \"an operator exported it\". A lost observation does not merely lose an\n * access record, it loses the SIZE, which is the half a reviewer reads first.\n */\n PLATFORM_DIRECTORY_ACCESS = 'platform_directory_access',\n\n /**\n * `USER_SESSION_EVICTED` from the token issuer's concurrent-session cap.\n *\n * One observation per RETIRED refresh chain, not per enforcement: the cap bounds the blast radius\n * of undetected token theft, so a burst of evictions for one principal is among the more\n * interesting things the trail can carry — and a burst is exactly the case where losing some of\n * the rows understates it. Counting per chain is what keeps the loss signal proportional to the\n * evidence actually lost rather than to the number of times the cap ran.\n */\n USER_SESSION_EVICTED = 'user_session_evicted',\n\n /**\n * `PROVIDER_OPERATION_CALL` from the provider operation executor — one row per OUTBOUND call to a\n * third party, on both the success and the failure path.\n *\n * This is the application's record of what it sent to whom on whose behalf. Its silence is\n * peculiarly misleading: an empty outbound trail reads as \"this deployment integrates with\n * nothing\", which is a sentence somebody will believe.\n */\n PROVIDER_OPERATION_CALL = 'provider_operation_call',\n\n /**\n * The post-call credential-use stamp from the provider operation executor.\n *\n * ## Why this is on THIS counter even though its sink is not the audit service\n *\n * It writes to the tenant's own credential row rather than to `AuditLogsBackendService`, and it is\n * still the identical observer-side loss shape: fire-and-forget, sink feature-detected, rejection\n * swallowed, nothing counting the drops. The counter's subject is the LOSS OF A SECURITY\n * OBSERVATION, not the identity of the store that was supposed to receive it — so a second counter\n * for one site would fragment the alert without telling an operator anything the `observation`\n * label does not already say.\n *\n * What it evidences is narrow and worth stating: whether a stored credential was ACCEPTED by the\n * provider on last use. Losing it leaves a credential whose health is unknown, which surfaces\n * later as an integration that fails with no record of when it started failing.\n */\n PROVIDER_CREDENTIAL_USE = 'provider_credential_use',\n\n /**\n * `HTTP_API_READ_THROUGH_ACCESS`, from BOTH emitters — see the enum's naming principle above.\n *\n * - `HttpApiResourceRepositoryBackendService.recordReadThroughAccess` — one observation per remote\n * round-trip, and the only tier that witnesses every one of them (repository-direct probes never\n * reach the services tier at all).\n * - `ExternalDataPipelineRunBackendService.recordRunReadThroughAccess` — one observation per ETL\n * run.\n *\n * The evidence at stake is ATTRIBUTION: an HTTP_API read reaches a third party through a SHARED\n * service principal, so this row is what carries the real initiating user through it. Without it\n * the external system's own logs show one principal and nothing anywhere resolves it to a person.\n */\n HTTP_API_READ_THROUGH_ACCESS = 'http_api_read_through_access',\n}\n\n/**\n * WHY the observation never reached the audit pipeline.\n *\n * Three members, and they are genuinely different diagnoses rather than shades of one — see the\n * table in this module's header. `SERVICE_UNAVAILABLE` is a WIRING fault and is usually total and\n * permanent for the life of the process; the other two are runtime faults and are usually partial.\n * Merging them would leave an operator unable to tell \"this deployment audits nothing\" from \"the\n * audit store hiccupped twice\".\n */\nexport enum AuditObservationLossReason {\n /** The audit service is unbound, or the specific `log*` method is absent on the bound instance. */\n SERVICE_UNAVAILABLE = 'service_unavailable',\n /** The emitting call threw synchronously — before any `.catch()` could make it fire-and-forget. */\n EMISSION_THREW = 'emission_threw',\n /** The emitting call returned a promise that rejected. */\n EMISSION_REJECTED = 'emission_rejected',\n}\n\n/**\n * How often ONE `(observation, reason)` pair may produce a log line.\n *\n * Fifteen minutes: long enough that a permanently broken binding costs four lines an hour rather\n * than one per request, short enough that a NEW outage hours after an earlier one still announces\n * itself instead of being swallowed by a latch that never resets. A permanent latch was rejected for\n * exactly that reason — it makes the second incident invisible.\n */\nexport const LOSS_LOG_INTERVAL_MS = 15 * 60 * 1000;\n\n/** The narrow slice of {@link MetricsService} this seam needs. Structural, so a double is trivial. */\nexport interface AuditObservationLossMetricsRecorder {\n recordAuditObservationDropped(params: { observation: string; reason: string }): void;\n}\n\n/**\n * A LAZY door to the recorder, for a site that does not hold one.\n *\n * Most emitters here are plain classes built with `new` (repository adapters, the provider executor)\n * or reach the container only through thunks their builder closes over. Each could resolve the\n * recorder itself — and each would then need its own `try`/`catch`, because a container resolving a\n * binding may throw and an observability failure must never reach the request. Five copies of that\n * guard is precisely the shape `.claude/rules/invariant-call-site-enumeration.md` says will be\n * applied at four of them, so the seam takes the thunk and does the wrapping once.\n *\n * Resolution happens ONLY when there is a loss to record. A site on the happy path never touches its\n * container, which is what makes handing this in unconditionally cheap.\n */\nexport type AuditObservationLossMetricsResolver = () => AuditObservationLossMetricsRecorder | undefined;\n\n/** The narrow slice of the logger this seam needs. Optional everywhere — see {@link emitAuditObservation}. */\nexport interface AuditObservationLossLogger {\n error?: (message: string, context?: Record<string, unknown>) => void;\n}\n\n/** Process-local totals, keyed `<observation>:<reason>`. Not evidence — see the module header. */\nconst lossTotals = new Map<string, number>();\n/** Last log timestamp per `<observation>:<reason>`. Bounded by the enum cross-product (9 entries). */\nconst lastLoggedAt = new Map<string, number>();\n\n/**\n * Every loss recorded since this process started, as `<observation>:<reason>` → count.\n *\n * A COPY, so a caller cannot mutate the accumulator. Exists so the counting can be pinned without an\n * OTLP backend, and so a future health surface has a door that does not require one either. Read the\n * module header before treating the numbers as durable evidence: they are not.\n */\nexport function readAuditObservationLossTotals(): Record<string, number> {\n return Object.fromEntries(lossTotals);\n}\n\n/** Test isolation only. Never called from production code. */\nexport function resetAuditObservationLossTotals(): void {\n lossTotals.clear();\n lastLoggedAt.clear();\n}\n\n/**\n * Record one lost observation. Never throws, under any circumstance.\n *\n * Exported so a site whose emission does not fit {@link emitAuditObservation}'s shape can still\n * contribute to the same counter rather than inventing a second one. Prefer the seam.\n */\nexport function recordAuditObservationLoss(params: {\n observation: AuditObservationKind;\n reason: AuditObservationLossReason;\n /** The recorder itself, when the site already holds one (a container-injected service). */\n metricsService?: AuditObservationLossMetricsRecorder;\n /**\n * A thunk to the recorder, when the site does not. Consulted only if `metricsService` is absent,\n * and only on a loss — see {@link AuditObservationLossMetricsResolver}. Two fields rather than one\n * union: a caller reading `metricsService: X | (() => X)` has to work out which one it holds, and\n * the answer is a property of the CLASS, so it is better spelled at the field.\n */\n metricsResolver?: AuditObservationLossMetricsResolver;\n logger?: AuditObservationLossLogger;\n error?: unknown;\n context?: Record<string, unknown>;\n}): void {\n // The recorder is the LAST thing that may fail the request it observes: a metric backend that\n // throws, or a logger that throws, would defeat the entire purpose of the fire-and-forget contract\n // this seam exists to preserve. Everything below is inside one boundary for that reason.\n try {\n const key = `${params.observation}:${params.reason}`;\n lossTotals.set(key, (lossTotals.get(key) ?? 0) + 1);\n\n // Metrics FIRST. It is the durable, rate-carrying channel, and it must be incremented even for\n // the drops the throttle below decides not to log — otherwise the throttle would silently\n // suppress the count as well as the line, which is the defect one layer up.\n //\n // Feature-DETECTED rather than optional-chained on the object, and for the reason this whole\n // module exists: a container that answers every symbol with a stub (the shape several partial\n // test containers in this package genuinely have) yields a truthy `metricsService` whose method\n // is absent, so `?.` on the OBJECT still calls `undefined(...)` and throws. The outer catch\n // would contain it, but a swallowed TypeError looks exactly like a swallowed real defect — and\n // it would take the log line down with it, leaving the loss silent again.\n const metricsService = params.metricsService ?? resolveLossMetricsRecorder(params.metricsResolver);\n if (typeof metricsService?.recordAuditObservationDropped === 'function') {\n metricsService.recordAuditObservationDropped({\n observation: params.observation,\n reason: params.reason,\n });\n }\n\n const now = Date.now();\n const previous = lastLoggedAt.get(key);\n if (previous !== undefined && now - previous < LOSS_LOG_INTERVAL_MS) return;\n lastLoggedAt.set(key, now);\n\n params.logger?.error?.('A security audit observation was DROPPED before it reached the audit pipeline', {\n // `reason` is the slug an alert rule and a log query both key on; keep it first and stable.\n reason: 'audit_observation_dropped',\n observation: params.observation,\n lossReason: params.reason,\n // The running total makes ONE throttled line carry the volume the suppressed lines would have.\n occurrencesSinceProcessStart: lossTotals.get(key),\n logIntervalMs: LOSS_LOG_INTERVAL_MS,\n ...(params.error === undefined ? {} : { error: describeLossError(params.error) }),\n ...(params.context ?? {}),\n });\n } catch {\n /* An observability failure must never be able to fail the request it observes. */\n }\n}\n\n/**\n * Emit one fire-and-forget audit observation, counting it if it is lost.\n *\n * ## The contract, which is the whole point\n *\n * **This function never throws and never returns a promise.** Not on an absent service, not on a\n * synchronous throw, not on a rejection, and not on a metrics or logger failure. Callers rely on it\n * to preserve the property their own JSDoc promises: the observation cannot fail the request.\n *\n * @param params.emit The emitting call, or `undefined` when the audit service or its method is\n * absent. Passing `undefined` is how a site reports {@link AuditObservationLossReason.SERVICE_UNAVAILABLE}\n * — the feature detection stays at the site because the method name differs per observation, and a\n * generic reflective lookup here would trade a compile-time error for a runtime one.\n */\nexport function emitAuditObservation(params: {\n observation: AuditObservationKind;\n emit: (() => unknown) | undefined;\n metricsService?: AuditObservationLossMetricsRecorder;\n /** See {@link recordAuditObservationLoss}. Never called unless there IS a loss. */\n metricsResolver?: AuditObservationLossMetricsResolver;\n logger?: AuditObservationLossLogger;\n context?: Record<string, unknown>;\n}): void {\n const loss = (reason: AuditObservationLossReason, error?: unknown): void =>\n recordAuditObservationLoss({\n observation: params.observation,\n reason,\n metricsService: params.metricsService,\n metricsResolver: params.metricsResolver,\n logger: params.logger,\n error,\n context: params.context,\n });\n\n try {\n if (!params.emit) {\n loss(AuditObservationLossReason.SERVICE_UNAVAILABLE);\n return;\n }\n\n let result: unknown;\n try {\n result = params.emit();\n } catch (error) {\n // A `log*` method that is absent on a partially-mocked double throws a TypeError HERE —\n // synchronously, before any `.catch()` could attach. That is the shape the feature detection at\n // each site exists to pre-empt; this catch is what keeps a site that forgets it from crashing.\n loss(AuditObservationLossReason.EMISSION_THREW, error);\n return;\n }\n\n // Optional-chained, because an audit method is free to be synchronous (and every test double\n // returning `undefined` is). A non-thenable result is a successful emission, not a loss.\n const thenable = result as { catch?: (handler: (error: unknown) => void) => unknown } | null | undefined;\n if (typeof thenable?.catch !== 'function') return;\n thenable.catch((error) => loss(AuditObservationLossReason.EMISSION_REJECTED, error));\n } catch {\n /* Belt and braces: nothing in this seam may reach the caller. */\n }\n}\n\n/**\n * Ask a site's thunk for the recorder, and treat any refusal as \"no recorder\".\n *\n * Its own `try`, INSIDE the caller's: a container that throws while resolving a binding must not be\n * able to take the LOG channel down with it. Degrading a loss to its log-only form is the correct\n * direction — the whole point of this module is that an observability gap is never a reason to\n * refuse — whereas letting the throw escape to the outer `catch` would silence both channels for the\n * one event that most needs saying.\n */\nfunction resolveLossMetricsRecorder(\n resolver: AuditObservationLossMetricsResolver | undefined,\n): AuditObservationLossMetricsRecorder | undefined {\n if (typeof resolver !== 'function') return undefined;\n try {\n return resolver();\n } catch {\n return undefined;\n }\n}\n\n/**\n * A log-safe description of whatever was thrown.\n *\n * Deliberately local rather than routed through `describeCaughtError`: this module sits UNDER the\n * error subsystem in the dependency order (the error builder's own failures are observations this\n * seam records), and importing upward would make an observability module depend on the layer it\n * observes. The shape is a strict subset of what `describeCaughtError` produces, so a log query\n * reading `error.message` works against both.\n */\nfunction describeLossError(error: unknown): { message: string; name?: string } {\n if (error instanceof Error) return { message: error.message, name: error.name };\n return { message: typeof error === 'string' ? error : String(error) };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.backend.schemas.d.ts","sourceRoot":"","sources":["../../../../../../src/monitoring/observability/models/observability.backend.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,iBAAiB;IAGhC,0BAA0B,EAAE,GAAG,CAAC;IAChC,4BAA4B,EAAE,GAAG,CAAC;IAClC,6BAA6B,EAAE,GAAG,CAAC;IACnC,mBAAmB,EAAE,GAAG,CAAC;IACzB,iCAAiC,EAAE,GAAG,CAAC;IAMvC,uBAAuB,EAAE,GAAG,CAAC;IAS7B,qBAAqB,EAAE,GAAG,CAAC;IAU3B,wBAAwB,EAAE,GAAG,CAAC;IAU9B,oCAAoC,EAAE,GAAG,CAAC;IAU1C,sBAAsB,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"observability.backend.schemas.d.ts","sourceRoot":"","sources":["../../../../../../src/monitoring/observability/models/observability.backend.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,iBAAiB;IAGhC,0BAA0B,EAAE,GAAG,CAAC;IAChC,4BAA4B,EAAE,GAAG,CAAC;IAClC,6BAA6B,EAAE,GAAG,CAAC;IACnC,mBAAmB,EAAE,GAAG,CAAC;IACzB,iCAAiC,EAAE,GAAG,CAAC;IAMvC,uBAAuB,EAAE,GAAG,CAAC;IAS7B,qBAAqB,EAAE,GAAG,CAAC;IAU3B,wBAAwB,EAAE,GAAG,CAAC;IAU9B,oCAAoC,EAAE,GAAG,CAAC;IAU1C,sBAAsB,EAAE,GAAG,CAAC;IAW5B,4BAA4B,EAAE,GAAG,CAAC;CACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.backend.schemas.js","sourceRoot":"","sources":["../../../../../../src/monitoring/observability/models/observability.backend.schemas.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Observability metric definitions consumed by `metrics.service.ts`.\n *\n * Only the metrics with LIVE producers remain: the data-seeding counters\n * (fired by the data-seed dispatcher engines + shared ledger writers) and the\n * M2M outbound-webhook counter (fired by the delivery batch worker). The former\n * HTTP / DB / auth / cache / session / quota / websocket / error definitions\n * were removed in Slice 2 Phase 3 along with the dead, never-registered\n * observability middleware that was their only caller: HTTP traces +\n * `http.server.duration` metrics now come from the OTLP preload's\n * auto-instrumentation (bounded, semconv attributes) rather than a hand-rolled\n * middleware that tagged every series with unbounded `organization_id` /\n * `user_id` labels (edge case E13).\n *\n * History: the self-hosted Jaeger/Prometheus `TelemetryService`,\n * `ObservabilityConfig`, and `TelemetryProviders` were deleted in Phase 1;\n * the Prometheus-era middleware + the dead `TracerService` in Phase 3.\n */\nexport interface MetricDefinitions {\n // Data Seeding (Phase 6.D / F-17 — Prom-style operator metrics).\n // See `metrics.service.ts` for descriptions.\n dataSeedingLazyC1CacheHits: any;\n dataSeedingLazyC1CacheMisses: any;\n dataSeedingThunderHerdBowouts: any;\n dataSeedingRunTotal: any;\n dataSeedingAdminListSeedsDuration: any;\n\n // M2M Outbound Webhook Delivery (Phase 5 / Step 17 — Prom-style\n // operator metrics). Single counter covering every worker outcome\n // at terminal or intermediate return; see `metrics.service.ts`\n // (`recordM2MWebhookDeliveryOutcome`) for labels + semantics.\n m2mWebhookDeliveryTotal: any;\n\n // Compliance Audit-Log Sink failures (Phase 5 / F6 — Prom-style operator\n // metric). One counter incremented whenever a Layer-2 provider audit sink\n // throws while recording an event; the composite (`CompositeAuditLogSink`)\n // isolates the failure so the business op is unaffected, but this makes the\n // otherwise-swallowed failure OBSERVABLE. Labelled by `provider` (the provider\n // ref — immudb, a SIEM, …); bounded, low cardinality. See `metrics.service.ts`\n // (`recordAuditSinkFailure`).\n auditSinkFailureTotal: any;\n\n // Compliance Audit-Log TAMPER detections (Prom-style operator metric). One\n // counter incremented when a tamper-evident audit provider (immudb) PROVES its\n // store was rolled back / tampered between restarts (a durable-state consistency\n // proof failure). DISTINCT from `auditSinkFailureTotal` on purpose: a transient\n // write miss is backfilled by the reconciler, whereas a proven rollback of the\n // audit ledger is a compliance incident that must page a human. Labelled by\n // `provider`; bounded, low cardinality. See `metrics.service.ts`\n // (`recordAuditTamperDetected`).\n auditTamperDetectedTotal: any;\n\n // Compliance Audit-Log assurance DEGRADATIONS. Incremented when a tamper-evident\n // audit provider drops from full cross-restart tamper-evidence to a weaker level\n // (ephemeral mode / corrupt anchor / un-pinned identity change / per-op proof\n // failure). DISTINCT from a PROVEN tamper (`auditTamperDetectedTotal` → page) and a\n // write hiccup (`auditSinkFailureTotal`): a degradation means a FUTURE tamper may go\n // undetected, so it is alertable but non-latching. Labelled by `provider` + `reason`\n // (a small fixed slug set). See `metrics.service.ts`\n // (`recordAuditIntegrityAssuranceDegraded`).\n auditIntegrityAssuranceDegradedTotal: any;\n\n // Compliance Audit-Log LAYER-1 (authoritative DB store) write failures (A-12). One counter\n // incremented when `AuditLogsBackendService._createAuditLog` throws while persisting the authoritative\n // audit row. DISTINCT from `auditSinkFailureTotal` (a Layer-2 provider-sink hiccup the reconciler\n // backfills): a Layer-1 failure means the PRIMARY audit record itself was not persisted — the most\n // severe \"we think we're auditing but we aren't\" state, otherwise invisible on the fire-and-forget\n // path. Label-free (the authoritative store has no provider dimension); bounded, single series. See\n // `metrics.service.ts` (`recordAuditStoreFailure`); the alert rule is specified in\n // `.claude/plans/alerting-system-design-analysis.md` Appendix D.\n auditStoreFailureTotal: any;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"observability.backend.schemas.js","sourceRoot":"","sources":["../../../../../../src/monitoring/observability/models/observability.backend.schemas.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Observability metric definitions consumed by `metrics.service.ts`.\n *\n * Only the metrics with LIVE producers remain: the data-seeding counters\n * (fired by the data-seed dispatcher engines + shared ledger writers) and the\n * M2M outbound-webhook counter (fired by the delivery batch worker). The former\n * HTTP / DB / auth / cache / session / quota / websocket / error definitions\n * were removed in Slice 2 Phase 3 along with the dead, never-registered\n * observability middleware that was their only caller: HTTP traces +\n * `http.server.duration` metrics now come from the OTLP preload's\n * auto-instrumentation (bounded, semconv attributes) rather than a hand-rolled\n * middleware that tagged every series with unbounded `organization_id` /\n * `user_id` labels (edge case E13).\n *\n * History: the self-hosted Jaeger/Prometheus `TelemetryService`,\n * `ObservabilityConfig`, and `TelemetryProviders` were deleted in Phase 1;\n * the Prometheus-era middleware + the dead `TracerService` in Phase 3.\n */\nexport interface MetricDefinitions {\n // Data Seeding (Phase 6.D / F-17 — Prom-style operator metrics).\n // See `metrics.service.ts` for descriptions.\n dataSeedingLazyC1CacheHits: any;\n dataSeedingLazyC1CacheMisses: any;\n dataSeedingThunderHerdBowouts: any;\n dataSeedingRunTotal: any;\n dataSeedingAdminListSeedsDuration: any;\n\n // M2M Outbound Webhook Delivery (Phase 5 / Step 17 — Prom-style\n // operator metrics). Single counter covering every worker outcome\n // at terminal or intermediate return; see `metrics.service.ts`\n // (`recordM2MWebhookDeliveryOutcome`) for labels + semantics.\n m2mWebhookDeliveryTotal: any;\n\n // Compliance Audit-Log Sink failures (Phase 5 / F6 — Prom-style operator\n // metric). One counter incremented whenever a Layer-2 provider audit sink\n // throws while recording an event; the composite (`CompositeAuditLogSink`)\n // isolates the failure so the business op is unaffected, but this makes the\n // otherwise-swallowed failure OBSERVABLE. Labelled by `provider` (the provider\n // ref — immudb, a SIEM, …); bounded, low cardinality. See `metrics.service.ts`\n // (`recordAuditSinkFailure`).\n auditSinkFailureTotal: any;\n\n // Compliance Audit-Log TAMPER detections (Prom-style operator metric). One\n // counter incremented when a tamper-evident audit provider (immudb) PROVES its\n // store was rolled back / tampered between restarts (a durable-state consistency\n // proof failure). DISTINCT from `auditSinkFailureTotal` on purpose: a transient\n // write miss is backfilled by the reconciler, whereas a proven rollback of the\n // audit ledger is a compliance incident that must page a human. Labelled by\n // `provider`; bounded, low cardinality. See `metrics.service.ts`\n // (`recordAuditTamperDetected`).\n auditTamperDetectedTotal: any;\n\n // Compliance Audit-Log assurance DEGRADATIONS. Incremented when a tamper-evident\n // audit provider drops from full cross-restart tamper-evidence to a weaker level\n // (ephemeral mode / corrupt anchor / un-pinned identity change / per-op proof\n // failure). DISTINCT from a PROVEN tamper (`auditTamperDetectedTotal` → page) and a\n // write hiccup (`auditSinkFailureTotal`): a degradation means a FUTURE tamper may go\n // undetected, so it is alertable but non-latching. Labelled by `provider` + `reason`\n // (a small fixed slug set). See `metrics.service.ts`\n // (`recordAuditIntegrityAssuranceDegraded`).\n auditIntegrityAssuranceDegradedTotal: any;\n\n // Compliance Audit-Log LAYER-1 (authoritative DB store) write failures (A-12). One counter\n // incremented when `AuditLogsBackendService._createAuditLog` throws while persisting the authoritative\n // audit row. DISTINCT from `auditSinkFailureTotal` (a Layer-2 provider-sink hiccup the reconciler\n // backfills): a Layer-1 failure means the PRIMARY audit record itself was not persisted — the most\n // severe \"we think we're auditing but we aren't\" state, otherwise invisible on the fire-and-forget\n // path. Label-free (the authoritative store has no provider dimension); bounded, single series. See\n // `metrics.service.ts` (`recordAuditStoreFailure`); the alert rule is specified in\n // `.claude/plans/alerting-system-design-analysis.md` Appendix D.\n auditStoreFailureTotal: any;\n\n // Security audit observations DROPPED before the audit pipeline ever saw them. Incremented by the\n // shared fire-and-forget seam (`audit-observation-emission.backend.ts`) whenever an observation is\n // lost because the audit service is unbound / its `log*` method is absent, the call threw\n // synchronously, or the returned promise rejected. DISTINCT from `auditStoreFailureTotal`, which\n // counts the Layer-1 STORE refusing a write it did receive: this counts the emission never getting\n // that far, which is the shape no existing control could see. Without it a period with no recorded\n // operator crossings is indistinguishable from a period with a broken sink. Labelled by\n // `observation` (which security event was lost) × `reason` (which of the three loss shapes);\n // bounded — 3 × 3 series today. See `metrics.service.ts` (`recordAuditObservationDropped`).\n auditObservationDroppedTotal: any;\n}\n"]}
|
|
@@ -168,5 +168,26 @@ export declare class MetricsService {
|
|
|
168
168
|
* store has no provider dimension. Alert rule: `alerting-system-design-analysis.md` Appendix D.
|
|
169
169
|
*/
|
|
170
170
|
recordAuditStoreFailure(): void;
|
|
171
|
+
/**
|
|
172
|
+
* A fire-and-forget security audit observation was DROPPED before it reached the audit pipeline.
|
|
173
|
+
* Fired by the shared emission seam (`audit-observation-emission.backend.ts`), which every such
|
|
174
|
+
* observation routes through, so a new observation is counted the day it lands.
|
|
175
|
+
*
|
|
176
|
+
* DISTINCT from {@link recordAuditStoreFailure}, and the distinction is the reason this counter
|
|
177
|
+
* exists: that one fires INSIDE `_createAuditLog`, so it only ever sees an emission that reached
|
|
178
|
+
* the audit service. The three shapes counted here — an unbound service or absent `log*` method, a
|
|
179
|
+
* synchronous throw, a rejected promise — never get that far, and were previously invisible.
|
|
180
|
+
* Merging them into one counter would let a total wiring outage hide behind a store hiccup.
|
|
181
|
+
*
|
|
182
|
+
* Synchronous, never throws (the global meter is a no-op without the OTLP preload — which is why
|
|
183
|
+
* the seam ALSO logs, at a throttled `error`).
|
|
184
|
+
*
|
|
185
|
+
* @param params.observation - `AuditObservationKind` member — WHICH security event was lost.
|
|
186
|
+
* @param params.reason - `AuditObservationLossReason` member — WHICH of the three loss shapes.
|
|
187
|
+
*/
|
|
188
|
+
recordAuditObservationDropped(params: {
|
|
189
|
+
observation: string;
|
|
190
|
+
reason: string;
|
|
191
|
+
}): void;
|
|
171
192
|
}
|
|
172
193
|
//# sourceMappingURL=metrics.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.service.d.ts","sourceRoot":"","sources":["../../../../../../src/monitoring/observability/services/metrics.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;;;;;;;;GAUG;AACH,qBACa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,kBAAkB,CAAoB;;IAO9C,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"metrics.service.d.ts","sourceRoot":"","sources":["../../../../../../src/monitoring/observability/services/metrics.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;;;;;;;;GAUG;AACH,qBACa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,kBAAkB,CAAoB;;IAO9C,OAAO,CAAC,iBAAiB;IAsIzB;;;;OAIG;IACI,6BAA6B,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO1F;;;;OAIG;IACI,8BAA8B,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO3F;;;;;;;;OAQG;IACI,kCAAkC,CAAC,MAAM,EAAE;QAChD,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,sBAAsB,GAAG,oBAAoB,CAAC;KACvD,GAAG,IAAI;IAQR;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,oBAAoB,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAUR;;;;;;;;;;;;;;;OAeG;IACI,uCAAuC,CAAC,MAAM,EAAE;QACrD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAmCR;;;;;;;;;;;;;;OAcG;IACI,+BAA+B,CAAC,MAAM,EAAE;QAC7C,KAAK,EAAE,aAAa,CAAC;QACrB,OAAO,EACH,WAAW,GACX,iBAAiB,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,wBAAwB,CAAC;KAC9B,GAAG,IAAI;IAWR;;;;;;;;OAQG;IACI,sBAAsB,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMpE;;;;;;;;;OASG;IACI,yBAAyB,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMvE;;;;;;;;;;OAUG;IACI,qCAAqC,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOnG;;;;;;;;OAQG;IACI,uBAAuB,IAAI,IAAI;IAItC;;;;;;;;;;;;;;;;OAgBG;IACI,6BAA6B,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAM5F"}
|
|
@@ -122,6 +122,21 @@ let MetricsService = class MetricsService {
|
|
|
122
122
|
auditStoreFailureTotal: this.meter.createCounter('audit_store_failure_total', {
|
|
123
123
|
description: 'Compliance audit-log Layer-1 authoritative DB store write failures (one per _createAuditLog persist throw)',
|
|
124
124
|
}),
|
|
125
|
+
// ─── Security audit observations DROPPED before the pipeline saw them ────
|
|
126
|
+
// A fire-and-forget security observation (an operator tenant crossing, an authorization
|
|
127
|
+
// refusal, a platform-access grant transition) never reached `AuditLogsBackendService` at all:
|
|
128
|
+
// the service was unbound or its `log*` method absent, the call threw synchronously, or the
|
|
129
|
+
// returned promise rejected. DISTINCT from `audit_store_failure_total`, which fires INSIDE
|
|
130
|
+
// `_createAuditLog` and therefore only sees emissions that got that far — the drops counted
|
|
131
|
+
// here are exactly the ones it structurally cannot see. Fire-and-forget is deliberate and
|
|
132
|
+
// stays (an observation must never fail the request it observes), so without this counter the
|
|
133
|
+
// loss is completely silent and "no operator crossings this week" is indistinguishable from
|
|
134
|
+
// "the audit service has been unbound since Tuesday". Operators alert on
|
|
135
|
+
// increase(audit_observation_dropped_total[15m]) > 0
|
|
136
|
+
// Cardinality: 3 `observation` × 3 `reason` = 9 series today, both label sets closed enums.
|
|
137
|
+
auditObservationDroppedTotal: this.meter.createCounter('audit_observation_dropped_total', {
|
|
138
|
+
description: 'Security audit observations dropped before reaching the audit pipeline (service unavailable / emission threw / emission rejected)',
|
|
139
|
+
}),
|
|
125
140
|
};
|
|
126
141
|
}
|
|
127
142
|
// ---------------------------------------------------------------------------
|
|
@@ -339,6 +354,29 @@ let MetricsService = class MetricsService {
|
|
|
339
354
|
recordAuditStoreFailure() {
|
|
340
355
|
this.metricsDefinitions.auditStoreFailureTotal.add(1);
|
|
341
356
|
}
|
|
357
|
+
/**
|
|
358
|
+
* A fire-and-forget security audit observation was DROPPED before it reached the audit pipeline.
|
|
359
|
+
* Fired by the shared emission seam (`audit-observation-emission.backend.ts`), which every such
|
|
360
|
+
* observation routes through, so a new observation is counted the day it lands.
|
|
361
|
+
*
|
|
362
|
+
* DISTINCT from {@link recordAuditStoreFailure}, and the distinction is the reason this counter
|
|
363
|
+
* exists: that one fires INSIDE `_createAuditLog`, so it only ever sees an emission that reached
|
|
364
|
+
* the audit service. The three shapes counted here — an unbound service or absent `log*` method, a
|
|
365
|
+
* synchronous throw, a rejected promise — never get that far, and were previously invisible.
|
|
366
|
+
* Merging them into one counter would let a total wiring outage hide behind a store hiccup.
|
|
367
|
+
*
|
|
368
|
+
* Synchronous, never throws (the global meter is a no-op without the OTLP preload — which is why
|
|
369
|
+
* the seam ALSO logs, at a throttled `error`).
|
|
370
|
+
*
|
|
371
|
+
* @param params.observation - `AuditObservationKind` member — WHICH security event was lost.
|
|
372
|
+
* @param params.reason - `AuditObservationLossReason` member — WHICH of the three loss shapes.
|
|
373
|
+
*/
|
|
374
|
+
recordAuditObservationDropped(params) {
|
|
375
|
+
this.metricsDefinitions.auditObservationDroppedTotal.add(1, {
|
|
376
|
+
observation: params.observation,
|
|
377
|
+
reason: params.reason,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
342
380
|
};
|
|
343
381
|
MetricsService = __decorate([
|
|
344
382
|
injectable(),
|