@wildo-ai/saas-backend-lib 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/__tests__/fixture-deep-partial.d.ts.map +1 -1
- package/dist/esm/__tests__/integration/redis-integration-gate.d.ts.map +1 -1
- package/dist/esm/__tests__/setup.d.ts.map +1 -1
- package/dist/esm/__tests__/test-container.d.ts.map +1 -1
- package/dist/esm/applications/models/applications.backend.schemas.d.ts.map +1 -1
- package/dist/esm/applications/seeds/application-metadata-defaults.seeds.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.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.map +1 -1
- package/dist/esm/base-classes/models/repositories.backend.schemas.d.ts.map +1 -1
- package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts +1 -1
- package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +12 -1
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/base-classes/services/batches/resource-retention-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/suspension-reactivation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/utils/audit-access-fields.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/utils/operation-response-serializer.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/__tests__/method-span-scan.guard-helpers.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-filter-translation.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +13 -4
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-query.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +17 -0
- 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.map +1 -1
- 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.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-row-projection.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-subject-erasure-effect.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odoo-jsonrpc-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/rest-json-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +57 -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 +95 -2
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-guarded-mutation.backend.types.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +5 -2
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +14 -3
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-version-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/resource-write-integrity.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts +72 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js +88 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/unique-constraint-conflict-reference.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/resource-operations-helper.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/__tests__/mock-system-access.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/read-only-field-change.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-audit-emission.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-server-injected-fields.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-transaction-persistence.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
- 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.map +1 -1
- 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 +44 -6
- 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.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
- package/dist/esm/base-classes/utils/backend-type-utils.d.ts.map +1 -1
- package/dist/esm/base-classes/utils/single-subject-addressing.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -1
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -1
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -1
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -1
- package/dist/esm/billing/services/back-office/abstract-billing.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +1 -1
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +5 -4
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/billing-state.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-state.backend.service.js +11 -1
- package/dist/esm/billing/services/back-office/billing-state.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/billing-subject-erasure-effect.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/billing/services/billing.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +32 -0
- 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 +32 -1
- 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.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +9 -6
- 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 +9 -6
- 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.map +1 -1
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +50 -3
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
- package/dist/esm/billing/testing/billing-test-fixtures.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
- package/dist/esm/charts/controllers/chart.backend.controller.d.ts.map +1 -1
- package/dist/esm/charts/services/chart-registry.backend.service.d.ts +80 -7
- package/dist/esm/charts/services/chart-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/charts/services/chart-registry.backend.service.js +115 -8
- package/dist/esm/charts/services/chart-registry.backend.service.js.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/immudb-audit-reconcile.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/siem-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
- 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 +107 -4
- 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 +176 -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.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -1
- 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 +21 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-class-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-dictionary.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-ocsf-projection.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-projection-contract.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/utils/audit-actor.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/utils/layer2-audit-provider-boot-diagnostic.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/index.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-hide-predicate.backend.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/services/subject-erasure-external-effects.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/services/subject-session-revocation.backend.service.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
- package/dist/esm/config/bootstrap/minion-initialization-projection.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js +3 -0
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal.backend.service.d.ts.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/config/models/app-config-secrets.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend-authored.definitions.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +4 -4
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/app-env-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts +36 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.js +36 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.js.map +1 -0
- package/dist/esm/config/models/config-mutation-boundary.utils.d.ts.map +1 -1
- package/dist/esm/config/models/postgresql-env-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/runtime-topology.backend.contracts.d.ts.map +1 -1
- package/dist/esm/config/services/__tests__/mock-app-configuration.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.js +3 -0
- 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.map +1 -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.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +12 -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 +28 -0
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
- package/dist/esm/data-seeding/batches/data-seeding-run-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/batches/data-seeding-scheduled-rerun.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.contracts.d.ts.map +1 -1
- package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.controller.d.ts.map +1 -1
- package/dist/esm/data-seeding/data-seeding-models.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/business-key-resolver.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-execution-context.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-migrator-runner.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-reconciler.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-run.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-run.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-trigger-mode-matrix.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-application-bootstrap.backend.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-scope-resolver-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/additive-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/lazy-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/manual-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/sync-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/upgrade-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-business-key.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-error.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-run-counters.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-run-ledger.backend.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-anchor.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-resolution.backend.d.ts.map +1 -1
- package/dist/esm/databases/models/aggregation.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/databases.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/filter.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/resolve-persistence-adapter.backend.utils.d.ts.map +1 -1
- package/dist/esm/databases/models/sql.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/transaction.shared.schemas.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongodb.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/topn-processor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/db-utils.d.ts.map +1 -1
- package/dist/esm/databases/services/mongo-aggregation.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/mongodb.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-aggregation.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-database.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-development-provisioning.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-filter.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-migration-runner.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-ddl.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-migration-sql.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-lockfile.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/resource-persistence-unit-of-work.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/schema-planning-standalone.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.d.ts.map +1 -1
- package/dist/esm/databases/utils/postgresql-identifier.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/services/__tests__/mock-error-builder.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -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.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
- package/dist/esm/external-data/batches/external-data-pipeline-scheduled-run.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-extraction-source.backend.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-models.exports.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/models/external-providers.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.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 +102 -52
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +117 -71
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -1
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js +26 -7
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -1
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +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.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts +81 -34
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +179 -98
- 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.map +1 -1
- package/dist/esm/external-providers/services/external-api-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +121 -0
- 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 +151 -0
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts +15 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +60 -4
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
- package/dist/esm/features/controllers/features.backend.controller.d.ts.map +1 -1
- package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.d.ts.map +1 -1
- package/dist/esm/features/services/__tests__/mock-feature-resolution.service.d.ts.map +1 -1
- package/dist/esm/features/services/application-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-definition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-gate.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-resolution.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/organization-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/scope-feature-ledger-relationship.backend.utils.d.ts.map +1 -1
- package/dist/esm/features/services/scope-features-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/testing/feature-test-utils.d.ts.map +1 -1
- package/dist/esm/files/batches/files-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-analyzers.types.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-constraint.types.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-validation.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +37 -0
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +221 -21
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/scanning/clamav-scanner.backend.service.d.ts.map +1 -1
- package/dist/esm/files/scanning/file-scan.types.d.ts.map +1 -1
- package/dist/esm/files/scanning/yara-scanner.backend.service.d.ts.map +1 -1
- package/dist/esm/files/scanning/yara-scanner.backend.service.js +20 -2
- package/dist/esm/files/scanning/yara-scanner.backend.service.js.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-field-detection.service.d.ts.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.d.ts.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-repository.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-field-detection.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-population.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.js +5 -0
- 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.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.js +8 -5
- 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.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +3 -1
- package/dist/esm/files/services/files.backend.service.js.map +1 -1
- package/dist/esm/files/services/rag-source-field-detection.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -1
- package/dist/esm/files/storage/file-storage-path-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.d.ts +36 -1
- package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
- package/dist/esm/files/storage/file-storage-router.backend.service.d.ts +21 -3
- package/dist/esm/files/storage/file-storage-router.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-router.backend.service.js +38 -5
- package/dist/esm/files/storage/file-storage-router.backend.service.js.map +1 -1
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts +87 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts.map +1 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js +340 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js.map +1 -0
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/storage/storage-credential-provider.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-platform-sts-credential-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js +10 -3
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.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.map +1 -1
- package/dist/esm/files/utils/file-upload.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
- package/dist/esm/files/utils/file-validation.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/image-derivation.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/image-thumbnail.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -1
- package/dist/esm/files/utils/rag-source-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/storage-application-identity.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-push-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-dialect.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-push-notification-delivery.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-push-notification.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-push-delivery-log.repository.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-push-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
- 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.map +1 -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.map +1 -1
- 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.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/controllers/flows-actors.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/agent-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agents.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.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 +107 -16
- 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 +118 -18
- 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.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/services/__tests__/fixtures/meta-workflow-evaluation-treatment.test-fixture.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agent-facets.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +104 -5
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +263 -31
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/context-curation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +46 -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 +193 -6
- 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.map +1 -1
- 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.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.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js +3 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts +99 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js +155 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/meta-workflow-evaluation-treatment-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-standard-action-contracts.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-standard-evaluation-contracts.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-structured-artifact-action-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +9 -0
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/bounded-subprocess.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts +77 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js +164 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts +48 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js +101 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js.map +1 -0
- package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-scope-id.backend.utils.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-condition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-definition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -1
- package/dist/esm/guidance/services/scoped-state-read-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
- package/dist/esm/i18n/services/i18n.backend.service.d.ts.map +1 -1
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts +10 -0
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +49 -1
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +3 -0
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +3 -0
- 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 +50 -3
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/models/mcp-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/resource-server-instances-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/utils/zod-to-mcp-json-schema.backend.utils.d.ts.map +1 -1
- package/dist/esm/meta-workflow-runtime.exports.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
- package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.js +3 -3
- 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.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-value-normalization.backend.utils.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +10 -6
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +10 -6
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/observability/otel-preload.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/otel-sdk-global-handle.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/__tests__/mock-metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/monitoring/observability/services/observability.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/components/email-components.d.ts.map +1 -1
- package/dist/esm/notifications/email/models/email-template-definition.d.ts.map +1 -1
- package/dist/esm/notifications/email/models/email-transport.backend.definitions.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.d.ts +47 -6
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +86 -36
- package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
- package/dist/esm/notifications/email/utils/interpolate-email-label.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/zod-to-typescript.utils.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts +32 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js +32 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js.map +1 -0
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +64 -10
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +277 -82
- package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.repository.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-public-key.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
- package/dist/esm/organizations/batches/organization-member-invitation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/authority-change-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/invitation-acceptance.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-onboarding-operation.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-member-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/user-org-type-grant.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.d.ts.map +1 -1
- package/dist/esm/pdf-templates/__tests__/fixtures/tiny-pdf-template.fixture.d.ts.map +1 -1
- package/dist/esm/pdf-templates/models/pdf-template-binding.d.ts.map +1 -1
- package/dist/esm/pdf-templates/models/pdf-template-definition.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-generated-file-writer.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-generation-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-renderer.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-template-binding.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -1
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -1
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -1
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -1
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -1
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/apps-crontabs-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/cron-job-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-completion-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
- package/dist/esm/queue/job-payload-storage.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-status-tracking.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -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.map +1 -1
- package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue.backend.service.js.map +1 -1
- package/dist/esm/queue/scheduled-message-verifier.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
- package/dist/esm/rag/batches/rag-embedding-drain.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/batches/rag-reconciliation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/models/rag-chunk-store.backend.types.d.ts.map +1 -1
- package/dist/esm/rag/models/rag-retrieval.backend.types.d.ts.map +1 -1
- package/dist/esm/rag/services/mongodb-rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/postgresql-rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-collection.mongodb-ddl.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-retrieval.mongodb-query.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-retrieval.postgresql-query.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-table.postgresql-ddl.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-ingestion.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-retrieval.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-fusion.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-removal.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-row-shaping.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-ingestion-trigger.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-retrieval-scope.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-source-field-value.backend.utils.d.ts.map +1 -1
- package/dist/esm/requests/models/api-routes.backend.defintions.d.ts.map +1 -1
- package/dist/esm/requests/models/requests.backend.schemas.d.ts.map +1 -1
- package/dist/esm/requests/service/platform-mutualized-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/platform-requests.backend.utils.d.ts.map +1 -1
- package/dist/esm/requests/service/remote-client-base.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/serverless-services-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +49 -1
- package/dist/esm/requests/service/websocket.service.js.map +1 -1
- package/dist/esm/resources/backend-resource-registry.exports.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +2 -0
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/models/index.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.js.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.map +1 -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.map +1 -1
- package/dist/esm/resources/models/resources.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/virtual-fields.backend.types.d.ts.map +1 -1
- package/dist/esm/resources/services/__tests__/mock-resources-registry.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-context.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-id.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-population.backend.service.d.ts +17 -2
- package/dist/esm/resources/services/resource-population.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-population.backend.service.js +74 -18
- package/dist/esm/resources/services/resource-population.backend.service.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts +23 -0
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +31 -0
- package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
- package/dist/esm/resources/services/virtual-fields.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-retention.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
- package/dist/esm/runtime/models/execution-context.backend.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/models/request-context.als.backend.d.ts.map +1 -1
- package/dist/esm/runtime/models/runtime.backend.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/execution-context-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.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.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +10 -0
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -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 +26 -12
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/utils/oauth-body-cap.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/testing/execution-context-test-fixtures.d.ts.map +1 -1
- package/dist/esm/runtime/testing/mock-execution-context-creator.service.d.ts.map +1 -1
- package/dist/esm/runtime/utils/application-startup-config-access.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/feature-gated-core-resource-exclusions.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/request-client-ip.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/scan-default-exports.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-key-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts +22 -0
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +84 -0
- 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.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/auth-constants.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/authentications.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/authorization-client.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts +37 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js +37 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js.map +1 -0
- package/dist/esm/security/authentications/models/identity-persistence-boundaries.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +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/models/saml-authentication.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/sso-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/user-authorization-version.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/seeds/enterprise-config-defaults.seeds.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/oauth-provider-audit-spies.mock.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js +2 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +9 -2
- 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 +9 -2
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts +97 -0
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +218 -26
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts +14 -0
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +36 -0
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-session-store.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +57 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js +11 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/email-verification-initiator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/machine-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-user-claims.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/resolve-active-member-orgs.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-controller.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/concurrent-session-eviction.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/ensure-user-profile.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/machine-auth-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/pkce.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/saml-java-availability.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/application-auth-policy-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/utils/one-off-session-lifetime.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/social-oauth2-purpose.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts +59 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js +111 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js.map +1 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts +57 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js +133 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js.map +1 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts +41 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js +157 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js.map +1 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts +84 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.js +99 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.js.map +1 -0
- package/dist/esm/security/authorizations/authorization-denial-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/junction-scope-resolution.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/organization-unit-narrowing-enforcement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +20 -181
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/relationship-foreign-key-filter.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +40 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js +43 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +27 -17
- 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 +27 -17
- 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 +72 -0
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +153 -10
- 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.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -1
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +139 -1
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +474 -33
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -1
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +40 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -1
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +19 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +38 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -1
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +17 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +14 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +16 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +1 -1
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -1
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +19 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +45 -2
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -1
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +37 -1
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -1
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts +34 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js +39 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js.map +1 -0
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/index.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts +13 -0
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js +14 -0
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js.map +1 -1
- package/dist/esm/security/jwt/utils/jwt-verification-error-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts +39 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js +60 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js.map +1 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts +66 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js +75 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js.map +1 -0
- package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/scim/utils/scim-attribute-path-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/scim/utils/scim-filter-parser.d.ts.map +1 -1
- package/dist/esm/security/scim/utils/scim-response-formatter.d.ts.map +1 -1
- package/dist/esm/security/session-invalidation-fence.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -1
- package/dist/esm/security/token-invalidation-fence.backend.utils.d.ts.map +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/users/services/inbound-contact-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts +0 -45
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts.map +0 -1
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.js +0 -22
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -0
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -0
- package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -0
- package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -0
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -0
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -0
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -0
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -0
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -0
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -0
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -0
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -0
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -0
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -0
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -0
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-moment-engine.backend.service.js","sourceRoot":"","sources":["../../../../../../src/monitoring/analytics/services/value-moment-engine.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Value Moment Engine — evaluates value-moment signals and records what a scope has achieved.\n *\n * ## What this was until 2026-09-08 (#414)\n *\n * Placeholders. `evaluateOperationSignal` logged, `markAchieved` logged, `getAchievedMoments`\n * returned an empty array unconditionally, and the handler registry beside it had no registration\n * path and was never invoked. Meanwhile `analytics.persistence.backendSync` and `backendEvaluation`\n * both default to TRUE, so an application was promised cross-device persistence and authoritative\n * evaluation, received neither, and was answered 200.\n *\n * ## Where the state lives, and why not in a resource of its own\n *\n * `valueMomentsAchieved` on the PROGRESSION STATE row — the same per-scope row milestones use. That\n * row already carries the `PersonalDataCategory.USAGE` classification, the `RedactionType.RESET`\n * erasure treatment, the subject-export provenance and the `onParentCreate`/`onParentDelete`\n * lifecycle that a per-user behavioural record owes. A second resource would have re-declared all of\n * them for the same shape of data.\n *\n * ## Concurrency\n *\n * Every write is a compare-and-swap through `atomicGuardedMutation`, guarded on the moment NOT being\n * achieved. Two operations in the same instant can both observe \"not yet achieved\"; without the\n * guard both would write, both would invoke the handler, and a TTFV would be recorded twice with\n * different timestamps. This is the same guard the milestone evaluator uses, for the same reason.\n *\n * ## What ANTI_PATTERN does differently\n *\n * `ValueMomentRole.ANTI_PATTERN` is declared as NOT persisted: it re-fires on a cooldown rather than\n * being achieved once. So it writes nothing here and its cooldown is in-process — in a multi-instance\n * deployment each instance keeps its own, which is what \"not persisted\" means rather than a defect.\n */\n\nimport 'reflect-metadata';\nimport { injectable, inject } from 'inversify';\nimport {\n ProgressionScope,\n ValueMomentMode,\n ValueMomentRole,\n ValueMomentScope,\n ValueSignalType,\n} from '@wildo-ai/saas-models';\nimport type { ProgressionState, ValueMoment, ValueSignal } from '@wildo-ai/saas-models';\n\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport type { RepositoriesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport type { ProgressionStateStoreBackendService } from '~wildo-backend-lib/guidance/services/progression-state-store.backend.service';\nimport { ValueMomentHandlerRegistryBackendService } from './value-moment-handler-registry.backend.service';\nimport { valueSignalKey } from './value-moment-definition-registry.backend.service';\nimport type { ValueMomentDefinitionRegistryBackendService } from './value-moment-definition-registry.backend.service';\n\n/** Default cooldown between re-firings of an ANTI_PATTERN moment. */\nconst DEFAULT_ANTI_PATTERN_COOLDOWN_MS = 300_000;\n\n/** The identity a signal is evaluated against — either id may be absent. */\nexport interface ValueMomentPrincipal {\n userId?: string;\n organizationId?: string;\n}\n\n/**\n * The outcome of a write, so a caller can answer honestly.\n *\n * The controller answered 200 for a discarded write because the engine returned `void` and there was\n * nothing to report. Every write path now says which of the four things happened.\n */\nexport enum ValueMomentWriteOutcome {\n /** Newly achieved and persisted. */\n RECORDED = 'recorded',\n /** Already achieved — the compare-and-swap declined, which is success, not failure. */\n ALREADY_ACHIEVED = 'already_achieved',\n /** The scope this moment measures is not present on the execution (no user, or no organization). */\n SCOPE_UNAVAILABLE = 'scope_unavailable',\n /** The store could not be reached. The caller must NOT report success. */\n NOT_PERSISTED = 'not_persisted',\n}\n\n/** Map the analytics scope vocabulary onto the progression-state one. */\nfunction progressionScopeFor(scope: ValueMomentScope): ProgressionScope {\n return scope === ValueMomentScope.ORGANIZATION ? ProgressionScope.ORGANIZATION : ProgressionScope.USER;\n}\n\n@injectable()\nexport class ValueMomentEngineBackendService {\n /**\n * Last fire time per `<scope>:<scopeId>:<momentIdentifier>` for ANTI_PATTERN moments only.\n *\n * In-process on purpose — see the class docstring. Bounded by the number of anti-pattern\n * definitions times active scopes, which is the same population the definitions already bound.\n */\n private readonly antiPatternLastFiredAt = new Map<string, number>();\n\n private logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ValueMomentHandlerRegistry) private handlerRegistry: ValueMomentHandlerRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.ValueMomentDefinitionRegistry) private definitionRegistry: ValueMomentDefinitionRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.ProgressionStateStore) private progressionStateStore: ProgressionStateStoreBackendService,\n @inject(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService) private repositoriesRegistry: RepositoriesRegistryHandlerBackendService,\n ) {\n this.logger.setDebugTypeLogging('ValueMomentEngine', false);\n this.logDebug = this.logger.debugByType('ValueMomentEngine');\n }\n\n // =====================================================\n // Evaluation\n // =====================================================\n\n /**\n * Evaluate an operation against every value moment carrying a matching RESOURCE_OPERATION signal.\n *\n * Never throws. Runs fire-and-forget after the operation's response has been decided, so a failure\n * here must not surface as an error on a request that already succeeded — the same posture the\n * milestone evaluator takes.\n */\n public async evaluateOperationSignal(params: {\n resourceType: string;\n operationIdentifier: string;\n operationResult: unknown;\n principal: ValueMomentPrincipal;\n }): Promise<void> {\n try {\n const candidates = this.definitionRegistry.getMomentsForOperation(params.resourceType, params.operationIdentifier);\n\n /*\n * NO early return on an empty candidate list.\n *\n * It had one, and that made every RESOURCE_STATE-only moment permanently unreachable: the two\n * signal families are indexed differently — operation signals by `<type>:<operation>`, state\n * signals by TYPE alone — so an operation with no operation-signal match can still change the\n * population a state signal counts. Returning here skipped the state pass for exactly the\n * moments that have nothing else to fire them.\n */\n this.logDebug('Evaluating value moments for operation', {\n trigger: `${params.resourceType}:${params.operationIdentifier}`,\n candidates: candidates.map(moment => moment.identifier),\n });\n\n for (const moment of candidates) {\n const signal = moment.signals.find(candidate =>\n candidate.signalType === ValueSignalType.RESOURCE_OPERATION\n && candidate.resourceType === params.resourceType\n && candidate.operation === params.operationIdentifier);\n if (!signal) continue;\n\n if (!this.operationSignalMatches(signal, params.operationResult)) {\n this.logDebug('Operation signal filtered out', { moment: moment.identifier });\n continue;\n }\n\n await this.observeSignal(moment, valueSignalKey(signal), params.principal);\n }\n\n await this.evaluateResourceStateSignals(params.resourceType, params.principal);\n } catch (error) {\n this.logger.warn('[ValueMomentEngine] Operation signal evaluation failed (non-blocking)', {\n error: describeCaughtError(error),\n resourceType: params.resourceType,\n operationIdentifier: params.operationIdentifier,\n });\n }\n }\n\n /**\n * A RESOURCE_OPERATION signal's optional field filter.\n *\n * SHALLOW EQUALITY over primitives, which is exactly what `ValueSignal_FilterSchema` documents\n * (\"no nested objects or arrays\"). A filter whose field is absent from the result does NOT match:\n * the signal asked for a specific state and the evidence does not show it, so treating absence as\n * a match would fire moments the author narrowed on purpose.\n */\n private operationSignalMatches(signal: ValueSignal, operationResult: unknown): boolean {\n if (signal.signalType !== ValueSignalType.RESOURCE_OPERATION || !signal.filter) return true;\n if (typeof operationResult !== 'object' || operationResult === null) return false;\n const result = operationResult as Record<string, unknown>;\n return Object.entries(signal.filter).every(([field, expected]) => result[field] === expected);\n }\n\n /**\n * RESOURCE_STATE signals — \"this scope owns at least N rows of this type matching this filter\".\n *\n * This is the half `analytics.persistence.backendEvaluation` is specifically about: its own\n * docstring says the backend evaluates RESOURCE_STATE signals AUTHORITATIVELY, while the frontend\n * \"does optimistic cached count queries\". Before #414 neither happened on the backend at all.\n *\n * Re-counted on any write to the resource type rather than on a specific operation, because a\n * state signal asks about the CURRENT population: a create, an update that moves a row into the\n * filter, and a delete that moves one out all change the answer.\n *\n * The count runs through the INFRASTRUCTURE door deliberately. It is a system evaluation with no\n * request principal — the achieving user is not necessarily reading their own rows through an\n * authorized operation — so it must not borrow request-tier authorization. The scope filter is\n * applied HERE, by this method, which is what that door requires of its callers.\n */\n private async evaluateResourceStateSignals(resourceType: string, principal: ValueMomentPrincipal): Promise<void> {\n const candidates = this.definitionRegistry.getMomentsForResourceState(resourceType);\n if (candidates.length === 0) return;\n\n for (const moment of candidates) {\n const signal = moment.signals.find(candidate =>\n candidate.signalType === ValueSignalType.RESOURCE_STATE && candidate.resourceType === resourceType);\n if (!signal || signal.signalType !== ValueSignalType.RESOURCE_STATE) continue;\n\n const scopeOwnerId = moment.scope === ValueMomentScope.ORGANIZATION\n ? principal.organizationId\n : principal.userId;\n if (!scopeOwnerId) continue;\n\n try {\n /*\n * The scope filter is the moment's OWN scope, not the execution's: an organization-scoped\n * moment counts the organization's rows even when a member triggered the write. Counting\n * without it would measure the whole table and fire the moment for every tenant at once.\n */\n const scopeField = moment.scope === ValueMomentScope.ORGANIZATION ? 'organizationId' : 'userId';\n const count = await this.repositoriesRegistry.countDocumentsForInfrastructure(\n resourceType as never,\n { ...(signal.filter ?? {}), [scopeField]: scopeOwnerId },\n );\n\n if (count >= signal.threshold) {\n await this.observeSignal(moment, valueSignalKey(signal), principal);\n }\n } catch (error) {\n /*\n * A resource with no such scope field, or no repository, cannot be counted — and a moment\n * that cannot be measured must not be achieved. Logged rather than thrown: this runs\n * fire-and-forget after a request that already succeeded.\n */\n this.logger.warn('[ValueMomentEngine] RESOURCE_STATE signal could not be counted', {\n moment: moment.identifier,\n resourceType,\n error: describeCaughtError(error),\n });\n }\n }\n }\n\n /**\n * A generic analytics signal — the CUSTOM_EVENT half of the vocabulary.\n *\n * `context` names the scope this event belongs to, because a custom event is emitted by code that\n * knows whose journey it is measuring and the engine cannot recover that from the event name.\n */\n public async emitSignal(\n signal: { signalType: string; eventName: string },\n context: { scope: string; entityId: string },\n ): Promise<void> {\n try {\n const candidates = this.definitionRegistry.getMomentsForEvent(signal.eventName);\n if (candidates.length === 0) return;\n\n const principal: ValueMomentPrincipal = context.scope === ValueMomentScope.ORGANIZATION\n ? { organizationId: context.entityId }\n : { userId: context.entityId };\n\n for (const moment of candidates) {\n const matching = moment.signals.find(candidate =>\n candidate.signalType === ValueSignalType.CUSTOM_EVENT && candidate.eventName === signal.eventName);\n if (!matching) continue;\n await this.observeSignal(moment, valueSignalKey(matching), principal);\n }\n } catch (error) {\n this.logger.warn('[ValueMomentEngine] Custom event signal evaluation failed (non-blocking)', {\n error: describeCaughtError(error),\n eventName: signal.eventName,\n });\n }\n }\n\n // =====================================================\n // Achievement\n // =====================================================\n\n /**\n * Record that one of a moment's signals fired, and achieve the moment if that completes it.\n *\n * `ANY` completes on any signal; `ALL` completes when every signal key has been observed. The\n * observation itself is persisted for both, so an `ALL` moment accumulates across requests — which\n * is the only reason `ALL` can mean anything on a stateless backend.\n */\n private async observeSignal(moment: ValueMoment, signalKey: string, principal: ValueMomentPrincipal): Promise<ValueMomentWriteOutcome> {\n if (moment.role === ValueMomentRole.ANTI_PATTERN) {\n return this.fireAntiPattern(moment, principal);\n }\n\n const target = this.resolveTarget(moment, principal);\n if (!target) return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n\n const state = await this.progressionStateStore.loadOrCreate(target.resourceType, target.scopeId);\n\n if (state.valueMomentsAchieved?.[moment.identifier]?.achievedAt) {\n return ValueMomentWriteOutcome.ALREADY_ACHIEVED;\n }\n if (!this.prerequisitesMet(moment, state)) {\n this.logDebug('Value moment suppressed by requires/beforeStage', { moment: moment.identifier });\n return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n }\n\n const observed = new Set(state.valueMomentsAchieved?.[moment.identifier]?.signalsObserved ?? []);\n observed.add(signalKey);\n\n const required = moment.mode === ValueMomentMode.ALL\n ? new Set(moment.signals.map(valueSignalKey))\n : new Set([signalKey]);\n const complete = [...required].every(key => observed.has(key));\n\n const scopeFilter = this.progressionStateStore.scopeFilter(target.resourceType, target.scopeId);\n const updated = await this.repositoriesRegistry.atomicGuardedMutation<ProgressionState>(\n target.resourceType,\n {\n ...scopeFilter,\n // The compare-and-swap. Two concurrent operations both read \"not achieved\"; only one wins\n // this write, so only one invokes the handler and only one timestamp is recorded.\n [`valueMomentsAchieved.${moment.identifier}.achievedAt`]: { $exists: false },\n },\n {\n set: {\n [`valueMomentsAchieved.${moment.identifier}`]: {\n signalsObserved: [...observed],\n ...(complete ? { achievedAt: new Date() } : {}),\n },\n },\n },\n );\n\n if (!updated) {\n /*\n * The guard declined. Either a concurrent request achieved it first — success, and the handler\n * has already run once — or the row could not be written at all. They are distinguishable by\n * re-reading, and the distinction matters because one is a 200 and the other is not.\n */\n const after = await this.progressionStateStore.loadOrCreate(target.resourceType, target.scopeId);\n return after.valueMomentsAchieved?.[moment.identifier]?.achievedAt\n ? ValueMomentWriteOutcome.ALREADY_ACHIEVED\n : ValueMomentWriteOutcome.NOT_PERSISTED;\n }\n\n if (!complete) {\n this.logDebug('Value moment progressed', {\n moment: moment.identifier,\n observed: [...observed],\n required: [...required],\n });\n return ValueMomentWriteOutcome.RECORDED;\n }\n\n await this.invokeAchievementHandler(moment, target.scopeId);\n return ValueMomentWriteOutcome.RECORDED;\n }\n\n /**\n * ANTI_PATTERN: fire the handler, persist nothing, respect the cooldown.\n *\n * The role's own contract. It measures a recurring frustration rather than a one-time achievement,\n * so there is no \"achieved\" state to record and re-firing is the point.\n */\n private async fireAntiPattern(moment: ValueMoment, principal: ValueMomentPrincipal): Promise<ValueMomentWriteOutcome> {\n const scopeId = moment.scope === ValueMomentScope.ORGANIZATION ? principal.organizationId : principal.userId;\n if (!scopeId) return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n\n const key = `${moment.scope}:${scopeId}:${moment.identifier}`;\n const cooldown = moment.cooldownMs ?? DEFAULT_ANTI_PATTERN_COOLDOWN_MS;\n const lastFired = this.antiPatternLastFiredAt.get(key);\n if (lastFired !== undefined && Date.now() - lastFired < cooldown) {\n return ValueMomentWriteOutcome.ALREADY_ACHIEVED;\n }\n\n this.antiPatternLastFiredAt.set(key, Date.now());\n await this.invokeAchievementHandler(moment, scopeId);\n return ValueMomentWriteOutcome.RECORDED;\n }\n\n /**\n * `requires` gates a moment until its prerequisites are achieved; `beforeStage` SUPPRESSES it once\n * any named stage is. Both read the same persisted map, so a moment whose stage was reached in an\n * earlier request stays suppressed.\n */\n private prerequisitesMet(moment: ValueMoment, state: ProgressionState): boolean {\n const achieved = state.valueMomentsAchieved ?? {};\n if (moment.requires?.length && !moment.requires.every(required => achieved[required]?.achievedAt)) {\n return false;\n }\n if (moment.beforeStage?.length && moment.beforeStage.some(stage => achieved[stage]?.achievedAt)) {\n return false;\n }\n return true;\n }\n\n private resolveTarget(moment: ValueMoment, principal: ValueMomentPrincipal): { resourceType: ReturnType<ProgressionStateStoreBackendService['resolveScopeTarget']>['resourceType']; scopeId: string } | undefined {\n const { resourceType, scopeId } = this.progressionStateStore.resolveScopeTarget(\n progressionScopeFor(moment.scope),\n principal.userId,\n principal.organizationId,\n );\n return scopeId ? { resourceType, scopeId } : undefined;\n }\n\n /**\n * Invoke the moment's registered backend handler, if it declared one.\n *\n * Failures are logged and swallowed: the moment IS achieved and the record is already written, so\n * a handler that throws must not make the achievement look like it did not happen. The registry\n * warns on its own when a declared handler was never registered.\n */\n private async invokeAchievementHandler(moment: ValueMoment, scopeEntityId: string): Promise<void> {\n const handlerRef = moment.onAchieved?.backendHandler;\n if (!handlerRef) return;\n try {\n await this.handlerRegistry.invokeHandler(handlerRef, {\n momentIdentifier: moment.identifier,\n role: moment.role,\n scope: moment.scope,\n scopeEntityId,\n achievedAt: Date.now(),\n executionContext: undefined,\n });\n } catch (error) {\n this.logger.warn('[ValueMomentEngine] onAchieved handler failed', {\n moment: moment.identifier,\n handlerRef,\n error: describeCaughtError(error),\n });\n }\n }\n\n // =====================================================\n // Read / explicit write\n // =====================================================\n\n /**\n * The moments this principal has achieved.\n *\n * Returns the USER scope's moments, plus the ORGANIZATION scope's when the execution carries one —\n * both are \"what this person has reached\", and the frontend's achieved-set is not scope-split.\n */\n public async getAchievedMoments(principal: ValueMomentPrincipal): Promise<{ momentIdentifier: string; achievedAt: Date }[]> {\n const results: { momentIdentifier: string; achievedAt: Date }[] = [];\n\n for (const scope of [ProgressionScope.USER, ProgressionScope.ORGANIZATION]) {\n const { resourceType, scopeId } = this.progressionStateStore.resolveScopeTarget(scope, principal.userId, principal.organizationId);\n if (!scopeId) continue;\n const state = await this.progressionStateStore.loadOrCreate(resourceType, scopeId);\n for (const [identifier, record] of Object.entries(state.valueMomentsAchieved ?? {})) {\n if (record.achievedAt) results.push({ momentIdentifier: identifier, achievedAt: record.achievedAt });\n }\n }\n\n return results;\n }\n\n /**\n * Record a moment as achieved directly — the frontend's `backendSync` path, where the frontend\n * evaluated a signal the backend cannot see (a view visit, a feature access) and reports it.\n *\n * The scope comes from the DEFINITION when the moment is registered, and from the caller only when\n * it is not: an application may sync a moment the backend does not know about, and refusing it\n * would lose the frontend's evaluation entirely.\n */\n public async markAchieved(\n momentIdentifier: string,\n principal: ValueMomentPrincipal,\n requestedScope?: string,\n ): Promise<ValueMomentWriteOutcome> {\n const definition = this.definitionRegistry.getDefinition(momentIdentifier);\n const scope = (definition?.scope ?? requestedScope ?? ValueMomentScope.USER) as ValueMomentScope;\n\n const { resourceType, scopeId } = this.progressionStateStore.resolveScopeTarget(\n progressionScopeFor(scope),\n principal.userId,\n principal.organizationId,\n );\n if (!scopeId) return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n\n const scopeFilter = this.progressionStateStore.scopeFilter(resourceType, scopeId);\n await this.progressionStateStore.loadOrCreate(resourceType, scopeId);\n\n const updated = await this.repositoriesRegistry.atomicGuardedMutation<ProgressionState>(\n resourceType,\n {\n ...scopeFilter,\n [`valueMomentsAchieved.${momentIdentifier}.achievedAt`]: { $exists: false },\n },\n {\n set: {\n [`valueMomentsAchieved.${momentIdentifier}`]: {\n // Every signal the definition declares, because the frontend reporting an achievement is\n // reporting the WHOLE moment rather than one of its signals. An unregistered moment has\n // no signals to name, and the empty list is honest about that.\n signalsObserved: definition?.signals.map(valueSignalKey) ?? [],\n achievedAt: new Date(),\n },\n },\n },\n );\n\n if (!updated) {\n const after = await this.progressionStateStore.loadOrCreate(resourceType, scopeId);\n return after.valueMomentsAchieved?.[momentIdentifier]?.achievedAt\n ? ValueMomentWriteOutcome.ALREADY_ACHIEVED\n : ValueMomentWriteOutcome.NOT_PERSISTED;\n }\n\n if (definition) await this.invokeAchievementHandler(definition, scopeId);\n return ValueMomentWriteOutcome.RECORDED;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"value-moment-engine.backend.service.js","sourceRoot":"","sources":["../../../../../src/monitoring/analytics/services/value-moment-engine.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Value Moment Engine — evaluates value-moment signals and records what a scope has achieved.\n *\n * ## What this was until 2026-09-08 (#414)\n *\n * Placeholders. `evaluateOperationSignal` logged, `markAchieved` logged, `getAchievedMoments`\n * returned an empty array unconditionally, and the handler registry beside it had no registration\n * path and was never invoked. Meanwhile `analytics.persistence.backendSync` and `backendEvaluation`\n * both default to TRUE, so an application was promised cross-device persistence and authoritative\n * evaluation, received neither, and was answered 200.\n *\n * ## Where the state lives, and why not in a resource of its own\n *\n * `valueMomentsAchieved` on the PROGRESSION STATE row — the same per-scope row milestones use. That\n * row already carries the `PersonalDataCategory.USAGE` classification, the `RedactionType.RESET`\n * erasure treatment, the subject-export provenance and the `onParentCreate`/`onParentDelete`\n * lifecycle that a per-user behavioural record owes. A second resource would have re-declared all of\n * them for the same shape of data.\n *\n * ## Concurrency\n *\n * Every write is a compare-and-swap through `atomicGuardedMutation`, guarded on the moment NOT being\n * achieved. Two operations in the same instant can both observe \"not yet achieved\"; without the\n * guard both would write, both would invoke the handler, and a TTFV would be recorded twice with\n * different timestamps. This is the same guard the milestone evaluator uses, for the same reason.\n *\n * ## What ANTI_PATTERN does differently\n *\n * `ValueMomentRole.ANTI_PATTERN` is declared as NOT persisted: it re-fires on a cooldown rather than\n * being achieved once. So it writes nothing here and its cooldown is in-process — in a multi-instance\n * deployment each instance keeps its own, which is what \"not persisted\" means rather than a defect.\n */\n\nimport 'reflect-metadata';\nimport { injectable, inject } from 'inversify';\nimport {\n ProgressionScope,\n ValueMomentMode,\n ValueMomentRole,\n ValueMomentScope,\n ValueSignalType,\n} from '@wildo-ai/saas-models';\nimport type { ProgressionState, ValueMoment, ValueSignal } from '@wildo-ai/saas-models';\n\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport type { RepositoriesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport type { ProgressionStateStoreBackendService } from '~wildo-backend-lib/guidance/services/progression-state-store.backend.service';\nimport { ValueMomentHandlerRegistryBackendService } from './value-moment-handler-registry.backend.service';\nimport { valueSignalKey } from './value-moment-definition-registry.backend.service';\nimport type { ValueMomentDefinitionRegistryBackendService } from './value-moment-definition-registry.backend.service';\n\n/** Default cooldown between re-firings of an ANTI_PATTERN moment. */\nconst DEFAULT_ANTI_PATTERN_COOLDOWN_MS = 300_000;\n\n/** The identity a signal is evaluated against — either id may be absent. */\nexport interface ValueMomentPrincipal {\n userId?: string;\n organizationId?: string;\n}\n\n/**\n * The outcome of a write, so a caller can answer honestly.\n *\n * The controller answered 200 for a discarded write because the engine returned `void` and there was\n * nothing to report. Every write path now says which of the four things happened.\n */\nexport enum ValueMomentWriteOutcome {\n /** Newly achieved and persisted. */\n RECORDED = 'recorded',\n /** Already achieved — the compare-and-swap declined, which is success, not failure. */\n ALREADY_ACHIEVED = 'already_achieved',\n /** The scope this moment measures is not present on the execution (no user, or no organization). */\n SCOPE_UNAVAILABLE = 'scope_unavailable',\n /** The store could not be reached. The caller must NOT report success. */\n NOT_PERSISTED = 'not_persisted',\n}\n\n/** Map the analytics scope vocabulary onto the progression-state one. */\nfunction progressionScopeFor(scope: ValueMomentScope): ProgressionScope {\n return scope === ValueMomentScope.ORGANIZATION ? ProgressionScope.ORGANIZATION : ProgressionScope.USER;\n}\n\n@injectable()\nexport class ValueMomentEngineBackendService {\n /**\n * Last fire time per `<scope>:<scopeId>:<momentIdentifier>` for ANTI_PATTERN moments only.\n *\n * In-process on purpose — see the class docstring. Bounded by the number of anti-pattern\n * definitions times active scopes, which is the same population the definitions already bound.\n */\n private readonly antiPatternLastFiredAt = new Map<string, number>();\n\n private logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ValueMomentHandlerRegistry) private handlerRegistry: ValueMomentHandlerRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.ValueMomentDefinitionRegistry) private definitionRegistry: ValueMomentDefinitionRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.ProgressionStateStore) private progressionStateStore: ProgressionStateStoreBackendService,\n @inject(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService) private repositoriesRegistry: RepositoriesRegistryHandlerBackendService,\n ) {\n this.logger.setDebugTypeLogging('ValueMomentEngine', false);\n this.logDebug = this.logger.debugByType('ValueMomentEngine');\n }\n\n // =====================================================\n // Evaluation\n // =====================================================\n\n /**\n * Evaluate an operation against every value moment carrying a matching RESOURCE_OPERATION signal.\n *\n * Never throws. Runs fire-and-forget after the operation's response has been decided, so a failure\n * here must not surface as an error on a request that already succeeded — the same posture the\n * milestone evaluator takes.\n */\n public async evaluateOperationSignal(params: {\n resourceType: string;\n operationIdentifier: string;\n operationResult: unknown;\n principal: ValueMomentPrincipal;\n }): Promise<void> {\n try {\n const candidates = this.definitionRegistry.getMomentsForOperation(params.resourceType, params.operationIdentifier);\n\n /*\n * NO early return on an empty candidate list.\n *\n * It had one, and that made every RESOURCE_STATE-only moment permanently unreachable: the two\n * signal families are indexed differently — operation signals by `<type>:<operation>`, state\n * signals by TYPE alone — so an operation with no operation-signal match can still change the\n * population a state signal counts. Returning here skipped the state pass for exactly the\n * moments that have nothing else to fire them.\n */\n this.logDebug('Evaluating value moments for operation', {\n trigger: `${params.resourceType}:${params.operationIdentifier}`,\n candidates: candidates.map(moment => moment.identifier),\n });\n\n for (const moment of candidates) {\n const signal = moment.signals.find(candidate =>\n candidate.signalType === ValueSignalType.RESOURCE_OPERATION\n && candidate.resourceType === params.resourceType\n && candidate.operation === params.operationIdentifier);\n if (!signal) continue;\n\n if (!this.operationSignalMatches(signal, params.operationResult)) {\n this.logDebug('Operation signal filtered out', { moment: moment.identifier });\n continue;\n }\n\n await this.observeSignal(moment, valueSignalKey(signal), params.principal);\n }\n\n await this.evaluateResourceStateSignals(params.resourceType, params.principal);\n } catch (error) {\n this.logger.warn('[ValueMomentEngine] Operation signal evaluation failed (non-blocking)', {\n error: describeCaughtError(error),\n resourceType: params.resourceType,\n operationIdentifier: params.operationIdentifier,\n });\n }\n }\n\n /**\n * A RESOURCE_OPERATION signal's optional field filter.\n *\n * SHALLOW EQUALITY over primitives, which is exactly what `ValueSignal_FilterSchema` documents\n * (\"no nested objects or arrays\"). A filter whose field is absent from the result does NOT match:\n * the signal asked for a specific state and the evidence does not show it, so treating absence as\n * a match would fire moments the author narrowed on purpose.\n */\n private operationSignalMatches(signal: ValueSignal, operationResult: unknown): boolean {\n if (signal.signalType !== ValueSignalType.RESOURCE_OPERATION || !signal.filter) return true;\n if (typeof operationResult !== 'object' || operationResult === null) return false;\n const result = operationResult as Record<string, unknown>;\n return Object.entries(signal.filter).every(([field, expected]) => result[field] === expected);\n }\n\n /**\n * RESOURCE_STATE signals — \"this scope owns at least N rows of this type matching this filter\".\n *\n * This is the half `analytics.persistence.backendEvaluation` is specifically about: its own\n * docstring says the backend evaluates RESOURCE_STATE signals AUTHORITATIVELY, while the frontend\n * \"does optimistic cached count queries\". Before #414 neither happened on the backend at all.\n *\n * Re-counted on any write to the resource type rather than on a specific operation, because a\n * state signal asks about the CURRENT population: a create, an update that moves a row into the\n * filter, and a delete that moves one out all change the answer.\n *\n * The count runs through the INFRASTRUCTURE door deliberately. It is a system evaluation with no\n * request principal — the achieving user is not necessarily reading their own rows through an\n * authorized operation — so it must not borrow request-tier authorization. The scope filter is\n * applied HERE, by this method, which is what that door requires of its callers.\n */\n private async evaluateResourceStateSignals(resourceType: string, principal: ValueMomentPrincipal): Promise<void> {\n const candidates = this.definitionRegistry.getMomentsForResourceState(resourceType);\n if (candidates.length === 0) return;\n\n for (const moment of candidates) {\n const signal = moment.signals.find(candidate =>\n candidate.signalType === ValueSignalType.RESOURCE_STATE && candidate.resourceType === resourceType);\n if (!signal || signal.signalType !== ValueSignalType.RESOURCE_STATE) continue;\n\n const scopeOwnerId = moment.scope === ValueMomentScope.ORGANIZATION\n ? principal.organizationId\n : principal.userId;\n if (!scopeOwnerId) continue;\n\n try {\n /*\n * The scope filter is the moment's OWN scope, not the execution's: an organization-scoped\n * moment counts the organization's rows even when a member triggered the write. Counting\n * without it would measure the whole table and fire the moment for every tenant at once.\n */\n const scopeField = moment.scope === ValueMomentScope.ORGANIZATION ? 'organizationId' : 'userId';\n const count = await this.repositoriesRegistry.countDocumentsForInfrastructure(\n resourceType as never,\n { ...(signal.filter ?? {}), [scopeField]: scopeOwnerId },\n );\n\n if (count >= signal.threshold) {\n await this.observeSignal(moment, valueSignalKey(signal), principal);\n }\n } catch (error) {\n /*\n * A resource with no such scope field, or no repository, cannot be counted — and a moment\n * that cannot be measured must not be achieved. Logged rather than thrown: this runs\n * fire-and-forget after a request that already succeeded.\n */\n this.logger.warn('[ValueMomentEngine] RESOURCE_STATE signal could not be counted', {\n moment: moment.identifier,\n resourceType,\n error: describeCaughtError(error),\n });\n }\n }\n }\n\n /**\n * A generic analytics signal — the CUSTOM_EVENT half of the vocabulary.\n *\n * `context` names the scope this event belongs to, because a custom event is emitted by code that\n * knows whose journey it is measuring and the engine cannot recover that from the event name.\n */\n public async emitSignal(\n signal: { signalType: string; eventName: string },\n context: { scope: string; entityId: string },\n ): Promise<void> {\n try {\n const candidates = this.definitionRegistry.getMomentsForEvent(signal.eventName);\n if (candidates.length === 0) return;\n\n const principal: ValueMomentPrincipal = context.scope === ValueMomentScope.ORGANIZATION\n ? { organizationId: context.entityId }\n : { userId: context.entityId };\n\n for (const moment of candidates) {\n const matching = moment.signals.find(candidate =>\n candidate.signalType === ValueSignalType.CUSTOM_EVENT && candidate.eventName === signal.eventName);\n if (!matching) continue;\n await this.observeSignal(moment, valueSignalKey(matching), principal);\n }\n } catch (error) {\n this.logger.warn('[ValueMomentEngine] Custom event signal evaluation failed (non-blocking)', {\n error: describeCaughtError(error),\n eventName: signal.eventName,\n });\n }\n }\n\n // =====================================================\n // Achievement\n // =====================================================\n\n /**\n * Record that one of a moment's signals fired, and achieve the moment if that completes it.\n *\n * `ANY` completes on any signal; `ALL` completes when every signal key has been observed. The\n * observation itself is persisted for both, so an `ALL` moment accumulates across requests — which\n * is the only reason `ALL` can mean anything on a stateless backend.\n */\n private async observeSignal(moment: ValueMoment, signalKey: string, principal: ValueMomentPrincipal): Promise<ValueMomentWriteOutcome> {\n if (moment.role === ValueMomentRole.ANTI_PATTERN) {\n return this.fireAntiPattern(moment, principal);\n }\n\n const target = this.resolveTarget(moment, principal);\n if (!target) return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n\n const state = await this.progressionStateStore.loadOrCreate(target.resourceType, target.scopeId);\n\n if (state.valueMomentsAchieved?.[moment.identifier]?.achievedAt) {\n return ValueMomentWriteOutcome.ALREADY_ACHIEVED;\n }\n if (!this.prerequisitesMet(moment, state)) {\n this.logDebug('Value moment suppressed by requires/beforeStage', { moment: moment.identifier });\n return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n }\n\n const observed = new Set(state.valueMomentsAchieved?.[moment.identifier]?.signalsObserved ?? []);\n observed.add(signalKey);\n\n const required = moment.mode === ValueMomentMode.ALL\n ? new Set(moment.signals.map(valueSignalKey))\n : new Set([signalKey]);\n const complete = [...required].every(key => observed.has(key));\n\n const scopeFilter = this.progressionStateStore.scopeFilter(target.resourceType, target.scopeId);\n const updated = await this.repositoriesRegistry.atomicGuardedMutation<ProgressionState>(\n target.resourceType,\n {\n ...scopeFilter,\n // The compare-and-swap. Two concurrent operations both read \"not achieved\"; only one wins\n // this write, so only one invokes the handler and only one timestamp is recorded.\n [`valueMomentsAchieved.${moment.identifier}.achievedAt`]: { $exists: false },\n },\n {\n set: {\n [`valueMomentsAchieved.${moment.identifier}`]: {\n signalsObserved: [...observed],\n ...(complete ? { achievedAt: new Date() } : {}),\n },\n },\n },\n );\n\n if (!updated) {\n /*\n * The guard declined. Either a concurrent request achieved it first — success, and the handler\n * has already run once — or the row could not be written at all. They are distinguishable by\n * re-reading, and the distinction matters because one is a 200 and the other is not.\n */\n const after = await this.progressionStateStore.loadOrCreate(target.resourceType, target.scopeId);\n return after.valueMomentsAchieved?.[moment.identifier]?.achievedAt\n ? ValueMomentWriteOutcome.ALREADY_ACHIEVED\n : ValueMomentWriteOutcome.NOT_PERSISTED;\n }\n\n if (!complete) {\n this.logDebug('Value moment progressed', {\n moment: moment.identifier,\n observed: [...observed],\n required: [...required],\n });\n return ValueMomentWriteOutcome.RECORDED;\n }\n\n await this.invokeAchievementHandler(moment, target.scopeId);\n return ValueMomentWriteOutcome.RECORDED;\n }\n\n /**\n * ANTI_PATTERN: fire the handler, persist nothing, respect the cooldown.\n *\n * The role's own contract. It measures a recurring frustration rather than a one-time achievement,\n * so there is no \"achieved\" state to record and re-firing is the point.\n */\n private async fireAntiPattern(moment: ValueMoment, principal: ValueMomentPrincipal): Promise<ValueMomentWriteOutcome> {\n const scopeId = moment.scope === ValueMomentScope.ORGANIZATION ? principal.organizationId : principal.userId;\n if (!scopeId) return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n\n const key = `${moment.scope}:${scopeId}:${moment.identifier}`;\n const cooldown = moment.cooldownMs ?? DEFAULT_ANTI_PATTERN_COOLDOWN_MS;\n const lastFired = this.antiPatternLastFiredAt.get(key);\n if (lastFired !== undefined && Date.now() - lastFired < cooldown) {\n return ValueMomentWriteOutcome.ALREADY_ACHIEVED;\n }\n\n this.antiPatternLastFiredAt.set(key, Date.now());\n await this.invokeAchievementHandler(moment, scopeId);\n return ValueMomentWriteOutcome.RECORDED;\n }\n\n /**\n * `requires` gates a moment until its prerequisites are achieved; `beforeStage` SUPPRESSES it once\n * any named stage is. Both read the same persisted map, so a moment whose stage was reached in an\n * earlier request stays suppressed.\n */\n private prerequisitesMet(moment: ValueMoment, state: ProgressionState): boolean {\n const achieved = state.valueMomentsAchieved ?? {};\n if (moment.requires?.length && !moment.requires.every(required => achieved[required]?.achievedAt)) {\n return false;\n }\n if (moment.beforeStage?.length && moment.beforeStage.some(stage => achieved[stage]?.achievedAt)) {\n return false;\n }\n return true;\n }\n\n private resolveTarget(moment: ValueMoment, principal: ValueMomentPrincipal): { resourceType: ReturnType<ProgressionStateStoreBackendService['resolveScopeTarget']>['resourceType']; scopeId: string } | undefined {\n const { resourceType, scopeId } = this.progressionStateStore.resolveScopeTarget(\n progressionScopeFor(moment.scope),\n principal.userId,\n principal.organizationId,\n );\n return scopeId ? { resourceType, scopeId } : undefined;\n }\n\n /**\n * Invoke the moment's registered backend handler, if it declared one.\n *\n * Failures are logged and swallowed: the moment IS achieved and the record is already written, so\n * a handler that throws must not make the achievement look like it did not happen. The registry\n * warns on its own when a declared handler was never registered.\n */\n private async invokeAchievementHandler(moment: ValueMoment, scopeEntityId: string): Promise<void> {\n const handlerRef = moment.onAchieved?.backendHandler;\n if (!handlerRef) return;\n try {\n await this.handlerRegistry.invokeHandler(handlerRef, {\n momentIdentifier: moment.identifier,\n role: moment.role,\n scope: moment.scope,\n scopeEntityId,\n achievedAt: Date.now(),\n executionContext: undefined,\n });\n } catch (error) {\n this.logger.warn('[ValueMomentEngine] onAchieved handler failed', {\n moment: moment.identifier,\n handlerRef,\n error: describeCaughtError(error),\n });\n }\n }\n\n // =====================================================\n // Read / explicit write\n // =====================================================\n\n /**\n * The moments this principal has achieved.\n *\n * Returns the USER scope's moments, plus the ORGANIZATION scope's when the execution carries one —\n * both are \"what this person has reached\", and the frontend's achieved-set is not scope-split.\n */\n public async getAchievedMoments(principal: ValueMomentPrincipal): Promise<{ momentIdentifier: string; achievedAt: Date }[]> {\n const results: { momentIdentifier: string; achievedAt: Date }[] = [];\n\n for (const scope of [ProgressionScope.USER, ProgressionScope.ORGANIZATION]) {\n const { resourceType, scopeId } = this.progressionStateStore.resolveScopeTarget(scope, principal.userId, principal.organizationId);\n if (!scopeId) continue;\n const state = await this.progressionStateStore.loadOrCreate(resourceType, scopeId);\n for (const [identifier, record] of Object.entries(state.valueMomentsAchieved ?? {})) {\n if (record.achievedAt) results.push({ momentIdentifier: identifier, achievedAt: record.achievedAt });\n }\n }\n\n return results;\n }\n\n /**\n * Record a moment as achieved directly — the frontend's `backendSync` path, where the frontend\n * evaluated a signal the backend cannot see (a view visit, a feature access) and reports it.\n *\n * The scope comes from the DEFINITION when the moment is registered, and from the caller only when\n * it is not: an application may sync a moment the backend does not know about, and refusing it\n * would lose the frontend's evaluation entirely.\n */\n public async markAchieved(\n momentIdentifier: string,\n principal: ValueMomentPrincipal,\n requestedScope?: string,\n ): Promise<ValueMomentWriteOutcome> {\n const definition = this.definitionRegistry.getDefinition(momentIdentifier);\n const scope = (definition?.scope ?? requestedScope ?? ValueMomentScope.USER) as ValueMomentScope;\n\n const { resourceType, scopeId } = this.progressionStateStore.resolveScopeTarget(\n progressionScopeFor(scope),\n principal.userId,\n principal.organizationId,\n );\n if (!scopeId) return ValueMomentWriteOutcome.SCOPE_UNAVAILABLE;\n\n const scopeFilter = this.progressionStateStore.scopeFilter(resourceType, scopeId);\n await this.progressionStateStore.loadOrCreate(resourceType, scopeId);\n\n const updated = await this.repositoriesRegistry.atomicGuardedMutation<ProgressionState>(\n resourceType,\n {\n ...scopeFilter,\n [`valueMomentsAchieved.${momentIdentifier}.achievedAt`]: { $exists: false },\n },\n {\n set: {\n [`valueMomentsAchieved.${momentIdentifier}`]: {\n // Every signal the definition declares, because the frontend reporting an achievement is\n // reporting the WHOLE moment rather than one of its signals. An unregistered moment has\n // no signals to name, and the empty list is honest about that.\n signalsObserved: definition?.signals.map(valueSignalKey) ?? [],\n achievedAt: new Date(),\n },\n },\n },\n );\n\n if (!updated) {\n const after = await this.progressionStateStore.loadOrCreate(resourceType, scopeId);\n return after.valueMomentsAchieved?.[momentIdentifier]?.achievedAt\n ? ValueMomentWriteOutcome.ALREADY_ACHIEVED\n : ValueMomentWriteOutcome.NOT_PERSISTED;\n }\n\n if (definition) await this.invokeAchievementHandler(definition, scopeId);\n return ValueMomentWriteOutcome.RECORDED;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-moment-handler-registry.backend.service.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"value-moment-handler-registry.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/monitoring/analytics/services/value-moment-handler-registry.backend.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAE7F,MAAM,WAAW,6BAA6B;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtG,qBACa,wCAAwC;IAId,OAAO,CAAC,MAAM;IAHnD,OAAO,CAAC,QAAQ,CAAoD;gBAGvB,MAAM,EAAE,aAAa;IAGlE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,6BAA6B,GAAG,IAAI;IAIjF,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,6BAA6B,GAAG,SAAS;IAIvE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/F"}
|
package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-moment-handler-registry.backend.service.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"value-moment-handler-registry.backend.service.js","sourceRoot":"","sources":["../../../../../src/monitoring/analytics/services/value-moment-handler-registry.backend.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAsBtF,IAAM,wCAAwC,GAA9C,MAAM,wCAAwC;IAIN;IAHrC,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEpE,YAC6C,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAC/D,CAAC;IAEJ,eAAe,CAAC,UAAkB,EAAE,OAAsC;QACxE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,OAAsC;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2DAA2D,UAAU,EAAE,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QACD,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;CACF,CAAA;AAvBY,wCAAwC;IADpD,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;qCAAiB,aAAa;GAJvD,wCAAwC,CAuBpD","sourcesContent":["import { injectable, inject } from 'inversify';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\n\nexport interface ValueMomentAchievementContext {\n momentIdentifier: string;\n role: string;\n scope: string;\n scopeEntityId: string;\n achievedAt: number;\n executionContext: unknown;\n}\n\n/**\n * What a value moment's `onAchieved.backendHandler` names.\n *\n * Named rather than written inline at each site so the startup registration option, the registry's\n * map and `resolveHandler`'s return type are one declaration — three copies of a function signature\n * is three places for it to drift, and the drift would be a runtime shape mismatch rather than a\n * type error, because the ref is a string.\n */\nexport type ValueMomentAchievementHandler = (context: ValueMomentAchievementContext) => Promise<void>;\n\n@injectable()\nexport class ValueMomentHandlerRegistryBackendService {\n private handlers = new Map<string, ValueMomentAchievementHandler>();\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private logger: LoggerService,\n ) {}\n\n registerHandler(identifier: string, handler: ValueMomentAchievementHandler): void {\n this.handlers.set(identifier, handler);\n }\n\n resolveHandler(identifier: string): ValueMomentAchievementHandler | undefined {\n return this.handlers.get(identifier);\n }\n\n async invokeHandler(identifier: string, context: ValueMomentAchievementContext): Promise<void> {\n const handler = this.resolveHandler(identifier);\n if (!handler) {\n this.logger.warn(`[ValueMomentHandlerRegistry] No handler registered for: ${identifier}`);\n return;\n }\n await handler(context);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.backend.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"logger.backend.schemas.d.ts","sourceRoot":"","sources":["../../../../../src/monitoring/logger/models/logger.backend.schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;oEAEoE;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,OAAO,CAAC,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC/C;AAED;;;;;oEAKoE;AAEpE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,yBAAyB;;;;;iBAapC,CAAC;AAEH;;oEAEoE;AAEpE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.backend.schemas.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"logger.backend.schemas.js","sourceRoot":"","sources":["../../../../../src/monitoring/logger/models/logger.backend.schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB;;;;;oEAKoE;AAEpE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,WAAW,CAAC;IAC/E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;IAC3C;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;CAClF,CAAC,CAAC","sourcesContent":["/**\n * Logger Type Definitions for SaaS Backend\n * Provides comprehensive logging interfaces and types\n */\n\nimport { LogLevel, RuntimeEnvironment } from '@wildo-ai/saas-models';\nimport { z } from 'zod';\n\n/** ──────────────────────────────────────────────────────────────\n * Interfaces (kept for non-schema types)\n * ────────────────────────────────────────────────────────────── */\n\nexport interface PerformanceTimer {\n end(context?: Record<string, unknown>): void;\n}\n\n/** ──────────────────────────────────────────────────────────────\n * Internal Schema with z.ZodObject type annotation\n * \n * ✅ Preserves all ZodObject methods (.extend, .partial, .omit, .pick, .shape)\n * ✅ Compatible with isolatedDeclarations: true (OXC)\n * ────────────────────────────────────────────────────────────── */\n\n/**\n * EVERY member here is READ. That is the contract this schema lost and has regained.\n *\n * It used to declare five more — `enableConsole`, `enableFile`, `enableDatabase`,\n * `format` and `metadata` — that no code path could select. Each was removed for its\n * own reason, recorded so none is reintroduced as an obvious gap:\n *\n * - `enableFile` / `enableDatabase` are REDUNDANT, not missing. `otel-preload` fans\n * every Pino record out to stdout AND an OTLP collector through the\n * `instrumentation-pino` bridge whenever `OBSERVABILITY_TELEMETRY` is selected, and a\n * container platform collects stdout regardless. A database sink would additionally\n * put log writes on the very datastore whose failure you are diagnosing.\n * - `format` was a SECOND, dead authority for a decision made elsewhere: pretty-vs-JSON\n * is `usePrettyConsole` in `logger.service.ts`, from `LOG_FORMATTED_CONSOLE_ERRORS`\n * and the environment. Keeping it invited `format: 'pretty'` and no effect.\n * - `enableConsole` could not be honoured. The console is what `docker logs` reads and\n * what the OTLP bridge WRAPS, so `false` would have to be refused rather than obeyed.\n * - `metadata` is superseded by pino's `base` (service, environment, hostname, pid) and\n * by the `mixin` that stamps `correlationId` on every record inside a request.\n *\n * Decided on issue #437 after measuring what OpenTelemetry already carries.\n */\nexport const LoggerConfigurationSchema = z.object({\n level: z.enum(LogLevel).default(LogLevel.INFO),\n environment: z.enum(RuntimeEnvironment).default(RuntimeEnvironment.DEVELOPMENT),\n service: z.string().default('saas-backend'),\n /**\n * Top-level context keys pino censors, handed straight to `redact.paths`.\n *\n * This default is LOAD-BEARING and was inert from 2026-02-23 to 2026-09-08 because\n * `loadConfiguration` passed `redactFields: []` and a Zod default applies only to an\n * UNDEFINED key. Never restate it at a construction site — omit the key instead.\n * Pinned by `logger.service.redaction.test.ts`.\n */\n redactFields: z.array(z.string()).default(['password', 'secret', 'token', 'key'])\n});\n\n/** ──────────────────────────────────────────────────────────────\n * Inferred Type (from schema - no interface duplication)\n * ────────────────────────────────────────────────────────────── */\n\nexport type LoggerConfig = z.infer<typeof LoggerConfigurationSchema>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-logger.service.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"mock-logger.service.d.ts","sourceRoot":"","sources":["../../../../../../src/monitoring/logger/services/__tests__/mock-logger.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,cACM,qBAAqB;IACzB,OAAO,CAAC,UAAU,CAAmC;IAErD,IAAI,qCAAkC;IACtC,IAAI,qCAAkC;IACtC,KAAK,qCAAkC;IACvC,KAAK,qCAAkC;IACvC,KAAK,qCAAkC;IACvC,KAAK,qCAAkC;IAEvC,KAAK,mDAA4C;IAEjD,WAAW,kDACQ,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAKzD;IAEH,mBAAmB,gEAEhB;IAEH,KAAK;CAYN;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAuC;IACnE,KAAK,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,qBAAqB,CAAC,GAAG,aAAa,GAAG,qBAAqB,CAAC;CAC3G,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,qBAAqB,CAAC"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
import { LogLevel } from '@wildo-ai/saas-models';
|
|
1
2
|
import { LoggerConfig, PerformanceTimer } from '../../../monitoring/logger/models/logger.backend.schemas';
|
|
2
3
|
import { AppConfiguration } from '../../../config/models/app-config.backend.schemas';
|
|
4
|
+
/**
|
|
5
|
+
* The levels a severity FLOOR can promote FROM — derived from {@link LogLevel} rather than spelled
|
|
6
|
+
* as a literal union, so the vocabulary has one runtime source and each member's meaning is read
|
|
7
|
+
* where the levels are defined.
|
|
8
|
+
*
|
|
9
|
+
* It is a strict subset on purpose, and the omissions are the explanation: `error` and `fatal` are
|
|
10
|
+
* already at or above every floor this repository configures, so promoting them is a no-op, and
|
|
11
|
+
* `trace` never reaches the floor because it is emitted directly. A floor exists to RAISE a quiet
|
|
12
|
+
* record into view; there is nothing above the loud ones to raise them to.
|
|
13
|
+
*/
|
|
14
|
+
export type PromotableLogLevel = LogLevel.DEBUG | LogLevel.INFO | LogLevel.WARN;
|
|
3
15
|
export declare class LoggerService {
|
|
4
16
|
private logger;
|
|
5
17
|
private config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../../../src/monitoring/logger/services/logger.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAsB,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,YAAY,EAA6B,gBAAgB,EAAE,MAAM,oEAAoE,CAAC;AAC/I,OAAO,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAS/F;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;AAEhF,qBACa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,sBAAsB,CAAmC;IACjE,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;;IAOjF,OAAO,CAAC,UAAU;IASX,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAIxE;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,iBAAiB;IAyCzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmGpB,SAAS,IAAI,YAAY;IAKzB;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzD;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI;IASxF;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IA2BxB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAK9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAejH;;;;;;;OAOG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI;IAUP;;OAEG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI;IAUP,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAiBlF,OAAO,CAAC,aAAa;CAWtB"}
|
|
@@ -231,10 +231,10 @@ let LoggerService = class LoggerService {
|
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
233
|
info(message, context) {
|
|
234
|
-
this.emitAtLevelFloor(
|
|
234
|
+
this.emitAtLevelFloor(LogLevel.INFO, message, context);
|
|
235
235
|
}
|
|
236
236
|
warn(message, context) {
|
|
237
|
-
this.emitAtLevelFloor(
|
|
237
|
+
this.emitAtLevelFloor(LogLevel.WARN, message, context);
|
|
238
238
|
}
|
|
239
239
|
error(message, errorOrContext, context) {
|
|
240
240
|
if (errorOrContext instanceof Error) {
|
|
@@ -270,7 +270,7 @@ let LoggerService = class LoggerService {
|
|
|
270
270
|
}), message);
|
|
271
271
|
}
|
|
272
272
|
debug(message, context) {
|
|
273
|
-
this.emitAtLevelFloor(
|
|
273
|
+
this.emitAtLevelFloor(LogLevel.DEBUG, message, context);
|
|
274
274
|
}
|
|
275
275
|
trace(message, context) {
|
|
276
276
|
this.logger.trace(this.enrichContext(context), message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../../../../src/monitoring/logger/services/logger.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { injectable } from 'inversify';\nimport pino, { Logger as PinoLogger } from 'pino';\nimport pretty from 'pino-pretty';\nimport { z } from 'zod';\nimport { LogLevel, RuntimeEnvironment } from '@wildo-ai/saas-models';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerConfig, LoggerConfigurationSchema, PerformanceTimer } from '~wildo-backend-lib/monitoring/logger/models/logger.backend.schemas';\nimport { AppConfiguration } from '~wildo-backend-lib/config/models/app-config.backend.schemas';\nimport { projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport {\n LOG_SEVERITY_PROMOTED_FROM_FIELD,\n resolveEmittedLogLevel,\n} from '~wildo-backend-lib/monitoring/logger/utils/log-severity-floor.backend.utils';\nimport { normalizeLogContext } from '~wildo-backend-lib/monitoring/logger/utils/log-value-normalization.backend.utils';\nimport { getRequestContextFrame } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\n\n\n\n@injectable()\nexport class LoggerService {\n private logger: PinoLogger;\n private config: LoggerConfig;\n private activeDebugTypeLogging: Map<string, boolean> = new Map();\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor() {\n this.initialize();\n }\n\n\n private initialize(appConfig?: AppConfiguration, appSlug?: string): void {\n this.config = this.loadConfiguration(appConfig, appSlug);\n this.logger = this.createLogger();\n\n // Initialize logDebug after logger is created\n this.logDebug = this.debugByType('LoggerService');\n this.setDebugTypeLogging('LoggerService', false);\n }\n\n public reinitialize(appConfig: AppConfiguration, appSlug?: string): void {\n this.initialize(appConfig, appSlug);\n }\n\n /**\n * Load logger configuration from environment\n *\n * Slice 3.5 wiring:\n * - `process.env.LOG_LEVEL` (emitted by `env-vars-builder` from\n * `infra.logging.level`) overrides the built-in default. Validated\n * against `LogLevel` enum — invalid values are ignored (we keep\n * the default rather than crash, since logging misconfig must\n * never block process boot). Upstream `WildoLoggingConfigSchema`\n * is the strict validation surface, so a bad value reaching here\n * indicates someone bypassed the CLI sync path.\n */\n private loadConfiguration(appConfig?: AppConfiguration, appSlug?: string): LoggerConfig {\n\n /*\n * ONLY what this code DECIDES. Every other member is left to\n * `LoggerConfigurationSchema`'s own default, deliberately — a second copy of a\n * default is a second authority, and this object held one that CONTRADICTED the\n * schema for seven months.\n *\n * `redactFields` was `[]` here while the schema declares\n * `['password', 'secret', 'token', 'key']`. A Zod default applies only to an\n * `undefined` key, so the empty array won, `pino`'s `redact.paths` was empty, and\n * the framework's ONLY redaction control was inert at every call site — while\n * those same records leave the process to a third-party collector through the\n * OTLP log bridge whenever `OBSERVABILITY_TELEMETRY` is selected. Omitting the key\n * is the whole fix; the schema already says what to censor.\n *\n * `level` stays explicit because it genuinely disagrees with the schema (DEBUG\n * here, INFO there) and the disagreement is intended: a process with no\n * `LOG_LEVEL` in its environment is a development process.\n */\n const defaultConfig: z.input<typeof LoggerConfigurationSchema> = {\n level: LogLevel.DEBUG,\n };\n\n const envLogLevel = process.env.LOG_LEVEL;\n if (envLogLevel && (Object.values(LogLevel) as string[]).includes(envLogLevel)) {\n defaultConfig.level = envLogLevel as LogLevel;\n }\n\n if (appConfig) {\n const appEnv = (process.env.APPLICATION_ENV as RuntimeEnvironment) || RuntimeEnvironment.DEVELOPMENT;\n defaultConfig.environment = appEnv;\n // Use appSlug (technical identifier) with appEnv for service name, e.g., \"wildo-ai-application:development\"\n // Falls back to appName if appSlug not provided\n const serviceName = appSlug || appConfig.appIdentity.appName || 'saas-backend';\n defaultConfig.service = `${serviceName}:${appEnv}`;\n }\n\n return LoggerConfigurationSchema.parse(defaultConfig);\n }\n\n /**\n * Create Pino logger instance with proper configuration\n */\n private createLogger(): PinoLogger {\n // Instance/deployment identity carried on every record.\n // assurance-control: WILDO.AUDIT.CONTEXT_ATTRIBUTION — `service` (`appSlug:env`) +\n // `environment` are the audit-relevant WHAT/WHERE: which application, which environment.\n // - `hostname` is emitted ONLY when it is a real deployment identity — in\n // orchestrated envs `HOSTNAME` is the pod/container name (valuable for\n // forensics). In local dev it is unset, so the key is OMITTED rather than\n // emitting a placeholder or the developer's machine name: absence is cleaner\n // than a phantom `'unknown'` bucket in the aggregator.\n // - `pid` is a cheap debugging aid (distinguishes local multi-process runs);\n // compliance-neutral.\n const orchestratedHostname = process.env.HOSTNAME;\n const baseConfig: any = {\n level: this.config.level,\n base: {\n pid: process.pid,\n service: this.config.service,\n environment: this.config.environment,\n ...(orchestratedHostname ? { hostname: orchestratedHostname } : {}),\n },\n redact: {\n paths: this.config.redactFields,\n censor: '[REDACTED]'\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n formatters: {\n level: (label: string) => ({ level: label }),\n bindings: (bindings: any) => ({\n ...bindings\n })\n },\n // Phase 1 — surface the request-correlation backbone on EVERY log line. Read the request-context\n // ALS at log time (not construction): inside a request seam this stamps `correlationId` (+ the\n // frontend origin) so all logs for one request are filterable by one id; outside a request\n // (startup, internal ops) the frame is absent and nothing is added. Complements the OTel\n // trace_id/span_id that the instrumentation-pino bridge adds when telemetry is live — that bridge\n // PATCHES pino rather than using this single `mixin` slot, so the two do not collide.\n mixin: () => {\n const frame = getRequestContextFrame();\n if (!frame) {\n return {};\n }\n return {\n correlationId: frame.correlationId,\n ...(frame.frontendServiceName ? { frontendServiceName: frame.frontendServiceName } : {}),\n ...(frame.clientInstanceId ? { clientInstanceId: frame.clientInstanceId } : {}),\n };\n }\n };\n\n // Development-specific configuration\n //\n // Slice 3.5: `LOG_FORMATTED_CONSOLE_ERRORS` (emitted by\n // `env-vars-builder` from `infra.logging.formattedConsoleErrors`)\n // overrides the auto-detected pino-pretty branch. Explicit `'true'`\n // forces pino-pretty regardless of environment; explicit `'false'`\n // disables it even in development. Unset preserves the legacy\n // auto-detect behavior so existing dev workflows are unchanged.\n const envFormattedConsoleErrors = process.env.LOG_FORMATTED_CONSOLE_ERRORS;\n const usePrettyConsole = envFormattedConsoleErrors === 'true'\n ? true\n : envFormattedConsoleErrors === 'false'\n ? false\n : this.config.environment === RuntimeEnvironment.DEVELOPMENT;\n\n if (usePrettyConsole) {\n try {\n // pino-pretty as a MAIN-THREAD destination stream — deliberately NOT a worker\n // `transport: { target: 'pino-pretty' }` (Slice 2 Phase 5).\n //\n // The OTLP log bridge (`@opentelemetry/instrumentation-pino`, wired in\n // `otel-preload`) sends each record to OTel by replacing the logger's `streamSym`\n // with `pino.multistream([originalStream, otelStream])`. A worker `transport`\n // makes `streamSym` a thread-stream whose writes BYPASS that post-hoc wrap, so logs\n // never reach the collector (verified: 0 log records). A main-thread destination\n // stream is exactly what the bridge wraps, so dev logs now fan out to BOTH stdout\n // (pretty) AND the OTLP exporter. The only cost is main-thread prettification, which\n // is acceptable for development. Production (`usePrettyConsole === false`) keeps the\n // default stdout stream, which the bridge already wraps.\n const prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n translateTime: 'yyyy-mm-dd HH:MM:ss',\n messageFormat: '{msg}',\n // Hide the machine/identity fields from the human dev console (the dev\n // orchestrator already prefixes each line with the process name). They\n // are still emitted on the JSON stream that prod/SIEM consumes.\n ignore: 'pid,hostname,service,environment',\n });\n return pino(baseConfig, prettyStream);\n } catch (error) {\n // Fallback to basic JSON output if pino-pretty is not available.\n console.warn('⚠️ pino-pretty not available, using JSON output:', error);\n }\n }\n\n return pino(baseConfig);\n }\n\n getConfig(): LoggerConfig {\n return this.config;\n }\n\n\n /**\n * Enable/disable type-based debug logging\n */\n setDebugTypeLogging(type: string, enabled: boolean): void {\n this.activeDebugTypeLogging.set(type, enabled);\n }\n\n /**\n * Get type-based debug logger\n */\n debugByType(type: string): (message: string, context?: Record<string, unknown>) => void {\n return (message: string, context?: Record<string, unknown>) => {\n if (this.activeDebugTypeLogging.get(type)) {\n this.debug(`[${type}] ${message}`, { ...context });//logType: type\n }\n };\n }\n\n\n /**\n * Emit at the requested level, or higher if the record carries a level floor.\n *\n * The three sub-`error` levels route through this so a best-effort catch cannot bury a server fault\n * below what an operator alerts on. See `log-severity-floor.backend.utils.ts` for the measurement\n * and for why the answer travels with the record instead of being re-decided at 213 call sites.\n *\n * When the floor raises the level, the record keeps what the call site ASKED for under\n * `promotedFromLevel`, so the promotion is legible in the log rather than looking like the boundary\n * chose `error` itself.\n */\n private emitAtLevelFloor(\n requestedLevel: 'debug' | 'info' | 'warn',\n message: string,\n context?: Record<string, unknown>,\n ): void {\n const emittedLevel = resolveEmittedLogLevel(requestedLevel, context);\n const enriched = this.enrichContext(\n emittedLevel === requestedLevel\n ? context\n : { ...(context ?? {}), [LOG_SEVERITY_PROMOTED_FROM_FIELD]: requestedLevel },\n );\n\n switch (emittedLevel) {\n case 'error':\n this.logger.error(enriched, message);\n return;\n case 'warn':\n this.logger.warn(enriched, message);\n return;\n case 'info':\n this.logger.info(enriched, message);\n return;\n default:\n this.logger.debug(enriched, message);\n }\n }\n\n info(message: string, context?: Record<string, unknown>): void {\n this.emitAtLevelFloor('info', message, context);\n }\n\n\n warn(message: string, context?: Record<string, unknown>): void {\n this.emitAtLevelFloor('warn', message, context);\n }\n\n error(message: string, errorOrContext?: Error | Record<string, unknown>, context?: Record<string, unknown>): void {\n if (errorOrContext instanceof Error) {\n this.logger.error(\n this.enrichContext({\n ...projectCaughtErrorLogFields(errorOrContext),\n ...context,\n }),\n message,\n );\n return;\n }\n\n this.logger.error(this.enrichContext(errorOrContext), message);\n }\n\n /**\n * Emit a caught `unknown` value at an error-handling boundary.\n *\n * Unlike {@link error}, the second argument is never guessed to be a context\n * record. A thrown plain object (including `WildoError_Backend`) is projected\n * as the failure itself, which prevents both `[object Object]` coercion and\n * pre-stringified/doubly-escaped JSON.\n */\n caughtError(\n message: string,\n caughtValue: unknown,\n context?: Record<string, unknown>,\n ): void {\n this.logger.error(\n this.enrichContext({\n ...projectCaughtErrorLogFields(caughtValue),\n ...context,\n }),\n message,\n );\n }\n\n /**\n * Fatal counterpart of {@link caughtError} for uncaught process failures.\n */\n caughtFatal(\n message: string,\n caughtValue: unknown,\n context?: Record<string, unknown>,\n ): void {\n this.logger.fatal(\n this.enrichContext({\n ...projectCaughtErrorLogFields(caughtValue),\n ...context,\n }),\n message,\n );\n }\n\n debug(message: string, context?: Record<string, unknown>): void {\n this.emitAtLevelFloor('debug', message, context);\n }\n\n trace(message: string, context?: Record<string, unknown>): void {\n this.logger.trace(this.enrichContext(context), message);\n }\n\n fatal(message: string, context?: Record<string, unknown>): void {\n this.logger.fatal(this.enrichContext(context), message);\n }\n\n startTimer(operation: string, context?: Record<string, unknown>): PerformanceTimer {\n const startTime = Date.now();\n\n return {\n end: (endContext?: Record<string, unknown>) => {\n const duration = Date.now() - startTime;\n this.info(`Performance: ${operation}`, {\n ...context,\n ...endContext,\n operation,\n duration,\n performance: true\n });\n }\n };\n }\n\n private enrichContext(context?: Record<string, unknown>): Record<string, unknown> {\n // NOTE: do NOT add a `timestamp` here. Pino already emits the standard `time`\n // field (configured via `timestamp: pino.stdTimeFunctions.isoTime`); a second\n // `timestamp` key was pure duplication on every line. Normalization returns\n // a fresh JSON-native graph, so the caller's context is never mutated and\n // nested Error/cyclic/object values cannot fall through Pino serialization.\n return normalizeLogContext(context);\n }\n\n\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../../../src/monitoring/logger/services/logger.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { injectable } from 'inversify';\nimport pino, { Logger as PinoLogger } from 'pino';\nimport pretty from 'pino-pretty';\nimport { z } from 'zod';\nimport { LogLevel, RuntimeEnvironment } from '@wildo-ai/saas-models';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerConfig, LoggerConfigurationSchema, PerformanceTimer } from '~wildo-backend-lib/monitoring/logger/models/logger.backend.schemas';\nimport { AppConfiguration } from '~wildo-backend-lib/config/models/app-config.backend.schemas';\nimport { projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport {\n LOG_SEVERITY_PROMOTED_FROM_FIELD,\n resolveEmittedLogLevel,\n} from '~wildo-backend-lib/monitoring/logger/utils/log-severity-floor.backend.utils';\nimport { normalizeLogContext } from '~wildo-backend-lib/monitoring/logger/utils/log-value-normalization.backend.utils';\nimport { getRequestContextFrame } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\n\n/**\n * The levels a severity FLOOR can promote FROM — derived from {@link LogLevel} rather than spelled\n * as a literal union, so the vocabulary has one runtime source and each member's meaning is read\n * where the levels are defined.\n *\n * It is a strict subset on purpose, and the omissions are the explanation: `error` and `fatal` are\n * already at or above every floor this repository configures, so promoting them is a no-op, and\n * `trace` never reaches the floor because it is emitted directly. A floor exists to RAISE a quiet\n * record into view; there is nothing above the loud ones to raise them to.\n */\nexport type PromotableLogLevel = LogLevel.DEBUG | LogLevel.INFO | LogLevel.WARN;\n\n@injectable()\nexport class LoggerService {\n private logger: PinoLogger;\n private config: LoggerConfig;\n private activeDebugTypeLogging: Map<string, boolean> = new Map();\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor() {\n this.initialize();\n }\n\n\n private initialize(appConfig?: AppConfiguration, appSlug?: string): void {\n this.config = this.loadConfiguration(appConfig, appSlug);\n this.logger = this.createLogger();\n\n // Initialize logDebug after logger is created\n this.logDebug = this.debugByType('LoggerService');\n this.setDebugTypeLogging('LoggerService', false);\n }\n\n public reinitialize(appConfig: AppConfiguration, appSlug?: string): void {\n this.initialize(appConfig, appSlug);\n }\n\n /**\n * Load logger configuration from environment\n *\n * Slice 3.5 wiring:\n * - `process.env.LOG_LEVEL` (emitted by `env-vars-builder` from\n * `infra.logging.level`) overrides the built-in default. Validated\n * against `LogLevel` enum — invalid values are ignored (we keep\n * the default rather than crash, since logging misconfig must\n * never block process boot). Upstream `WildoLoggingConfigSchema`\n * is the strict validation surface, so a bad value reaching here\n * indicates someone bypassed the CLI sync path.\n */\n private loadConfiguration(appConfig?: AppConfiguration, appSlug?: string): LoggerConfig {\n\n /*\n * ONLY what this code DECIDES. Every other member is left to\n * `LoggerConfigurationSchema`'s own default, deliberately — a second copy of a\n * default is a second authority, and this object held one that CONTRADICTED the\n * schema for seven months.\n *\n * `redactFields` was `[]` here while the schema declares\n * `['password', 'secret', 'token', 'key']`. A Zod default applies only to an\n * `undefined` key, so the empty array won, `pino`'s `redact.paths` was empty, and\n * the framework's ONLY redaction control was inert at every call site — while\n * those same records leave the process to a third-party collector through the\n * OTLP log bridge whenever `OBSERVABILITY_TELEMETRY` is selected. Omitting the key\n * is the whole fix; the schema already says what to censor.\n *\n * `level` stays explicit because it genuinely disagrees with the schema (DEBUG\n * here, INFO there) and the disagreement is intended: a process with no\n * `LOG_LEVEL` in its environment is a development process.\n */\n const defaultConfig: z.input<typeof LoggerConfigurationSchema> = {\n level: LogLevel.DEBUG,\n };\n\n const envLogLevel = process.env.LOG_LEVEL;\n if (envLogLevel && (Object.values(LogLevel) as string[]).includes(envLogLevel)) {\n defaultConfig.level = envLogLevel as LogLevel;\n }\n\n if (appConfig) {\n const appEnv = (process.env.APPLICATION_ENV as RuntimeEnvironment) || RuntimeEnvironment.DEVELOPMENT;\n defaultConfig.environment = appEnv;\n // Use appSlug (technical identifier) with appEnv for service name, e.g., \"wildo-ai-application:development\"\n // Falls back to appName if appSlug not provided\n const serviceName = appSlug || appConfig.appIdentity.appName || 'saas-backend';\n defaultConfig.service = `${serviceName}:${appEnv}`;\n }\n\n return LoggerConfigurationSchema.parse(defaultConfig);\n }\n\n /**\n * Create Pino logger instance with proper configuration\n */\n private createLogger(): PinoLogger {\n // Instance/deployment identity carried on every record.\n // assurance-control: WILDO.AUDIT.CONTEXT_ATTRIBUTION — `service` (`appSlug:env`) +\n // `environment` are the audit-relevant WHAT/WHERE: which application, which environment.\n // - `hostname` is emitted ONLY when it is a real deployment identity — in\n // orchestrated envs `HOSTNAME` is the pod/container name (valuable for\n // forensics). In local dev it is unset, so the key is OMITTED rather than\n // emitting a placeholder or the developer's machine name: absence is cleaner\n // than a phantom `'unknown'` bucket in the aggregator.\n // - `pid` is a cheap debugging aid (distinguishes local multi-process runs);\n // compliance-neutral.\n const orchestratedHostname = process.env.HOSTNAME;\n const baseConfig: any = {\n level: this.config.level,\n base: {\n pid: process.pid,\n service: this.config.service,\n environment: this.config.environment,\n ...(orchestratedHostname ? { hostname: orchestratedHostname } : {}),\n },\n redact: {\n paths: this.config.redactFields,\n censor: '[REDACTED]'\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n formatters: {\n level: (label: string) => ({ level: label }),\n bindings: (bindings: any) => ({\n ...bindings\n })\n },\n // Phase 1 — surface the request-correlation backbone on EVERY log line. Read the request-context\n // ALS at log time (not construction): inside a request seam this stamps `correlationId` (+ the\n // frontend origin) so all logs for one request are filterable by one id; outside a request\n // (startup, internal ops) the frame is absent and nothing is added. Complements the OTel\n // trace_id/span_id that the instrumentation-pino bridge adds when telemetry is live — that bridge\n // PATCHES pino rather than using this single `mixin` slot, so the two do not collide.\n mixin: () => {\n const frame = getRequestContextFrame();\n if (!frame) {\n return {};\n }\n return {\n correlationId: frame.correlationId,\n ...(frame.frontendServiceName ? { frontendServiceName: frame.frontendServiceName } : {}),\n ...(frame.clientInstanceId ? { clientInstanceId: frame.clientInstanceId } : {}),\n };\n }\n };\n\n // Development-specific configuration\n //\n // Slice 3.5: `LOG_FORMATTED_CONSOLE_ERRORS` (emitted by\n // `env-vars-builder` from `infra.logging.formattedConsoleErrors`)\n // overrides the auto-detected pino-pretty branch. Explicit `'true'`\n // forces pino-pretty regardless of environment; explicit `'false'`\n // disables it even in development. Unset preserves the legacy\n // auto-detect behavior so existing dev workflows are unchanged.\n const envFormattedConsoleErrors = process.env.LOG_FORMATTED_CONSOLE_ERRORS;\n const usePrettyConsole = envFormattedConsoleErrors === 'true'\n ? true\n : envFormattedConsoleErrors === 'false'\n ? false\n : this.config.environment === RuntimeEnvironment.DEVELOPMENT;\n\n if (usePrettyConsole) {\n try {\n // pino-pretty as a MAIN-THREAD destination stream — deliberately NOT a worker\n // `transport: { target: 'pino-pretty' }` (Slice 2 Phase 5).\n //\n // The OTLP log bridge (`@opentelemetry/instrumentation-pino`, wired in\n // `otel-preload`) sends each record to OTel by replacing the logger's `streamSym`\n // with `pino.multistream([originalStream, otelStream])`. A worker `transport`\n // makes `streamSym` a thread-stream whose writes BYPASS that post-hoc wrap, so logs\n // never reach the collector (verified: 0 log records). A main-thread destination\n // stream is exactly what the bridge wraps, so dev logs now fan out to BOTH stdout\n // (pretty) AND the OTLP exporter. The only cost is main-thread prettification, which\n // is acceptable for development. Production (`usePrettyConsole === false`) keeps the\n // default stdout stream, which the bridge already wraps.\n const prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n translateTime: 'yyyy-mm-dd HH:MM:ss',\n messageFormat: '{msg}',\n // Hide the machine/identity fields from the human dev console (the dev\n // orchestrator already prefixes each line with the process name). They\n // are still emitted on the JSON stream that prod/SIEM consumes.\n ignore: 'pid,hostname,service,environment',\n });\n return pino(baseConfig, prettyStream);\n } catch (error) {\n // Fallback to basic JSON output if pino-pretty is not available.\n console.warn('⚠️ pino-pretty not available, using JSON output:', error);\n }\n }\n\n return pino(baseConfig);\n }\n\n getConfig(): LoggerConfig {\n return this.config;\n }\n\n\n /**\n * Enable/disable type-based debug logging\n */\n setDebugTypeLogging(type: string, enabled: boolean): void {\n this.activeDebugTypeLogging.set(type, enabled);\n }\n\n /**\n * Get type-based debug logger\n */\n debugByType(type: string): (message: string, context?: Record<string, unknown>) => void {\n return (message: string, context?: Record<string, unknown>) => {\n if (this.activeDebugTypeLogging.get(type)) {\n this.debug(`[${type}] ${message}`, { ...context });//logType: type\n }\n };\n }\n\n\n /**\n * Emit at the requested level, or higher if the record carries a level floor.\n *\n * The three sub-`error` levels route through this so a best-effort catch cannot bury a server fault\n * below what an operator alerts on. See `log-severity-floor.backend.utils.ts` for the measurement\n * and for why the answer travels with the record instead of being re-decided at 213 call sites.\n *\n * When the floor raises the level, the record keeps what the call site ASKED for under\n * `promotedFromLevel`, so the promotion is legible in the log rather than looking like the boundary\n * chose `error` itself.\n */\n private emitAtLevelFloor(\n requestedLevel: PromotableLogLevel,\n message: string,\n context?: Record<string, unknown>,\n ): void {\n const emittedLevel = resolveEmittedLogLevel(requestedLevel, context);\n const enriched = this.enrichContext(\n emittedLevel === requestedLevel\n ? context\n : { ...(context ?? {}), [LOG_SEVERITY_PROMOTED_FROM_FIELD]: requestedLevel },\n );\n\n switch (emittedLevel) {\n case 'error':\n this.logger.error(enriched, message);\n return;\n case 'warn':\n this.logger.warn(enriched, message);\n return;\n case 'info':\n this.logger.info(enriched, message);\n return;\n default:\n this.logger.debug(enriched, message);\n }\n }\n\n info(message: string, context?: Record<string, unknown>): void {\n this.emitAtLevelFloor(LogLevel.INFO, message, context);\n }\n\n\n warn(message: string, context?: Record<string, unknown>): void {\n this.emitAtLevelFloor(LogLevel.WARN, message, context);\n }\n\n error(message: string, errorOrContext?: Error | Record<string, unknown>, context?: Record<string, unknown>): void {\n if (errorOrContext instanceof Error) {\n this.logger.error(\n this.enrichContext({\n ...projectCaughtErrorLogFields(errorOrContext),\n ...context,\n }),\n message,\n );\n return;\n }\n\n this.logger.error(this.enrichContext(errorOrContext), message);\n }\n\n /**\n * Emit a caught `unknown` value at an error-handling boundary.\n *\n * Unlike {@link error}, the second argument is never guessed to be a context\n * record. A thrown plain object (including `WildoError_Backend`) is projected\n * as the failure itself, which prevents both `[object Object]` coercion and\n * pre-stringified/doubly-escaped JSON.\n */\n caughtError(\n message: string,\n caughtValue: unknown,\n context?: Record<string, unknown>,\n ): void {\n this.logger.error(\n this.enrichContext({\n ...projectCaughtErrorLogFields(caughtValue),\n ...context,\n }),\n message,\n );\n }\n\n /**\n * Fatal counterpart of {@link caughtError} for uncaught process failures.\n */\n caughtFatal(\n message: string,\n caughtValue: unknown,\n context?: Record<string, unknown>,\n ): void {\n this.logger.fatal(\n this.enrichContext({\n ...projectCaughtErrorLogFields(caughtValue),\n ...context,\n }),\n message,\n );\n }\n\n debug(message: string, context?: Record<string, unknown>): void {\n this.emitAtLevelFloor(LogLevel.DEBUG, message, context);\n }\n\n trace(message: string, context?: Record<string, unknown>): void {\n this.logger.trace(this.enrichContext(context), message);\n }\n\n fatal(message: string, context?: Record<string, unknown>): void {\n this.logger.fatal(this.enrichContext(context), message);\n }\n\n startTimer(operation: string, context?: Record<string, unknown>): PerformanceTimer {\n const startTime = Date.now();\n\n return {\n end: (endContext?: Record<string, unknown>) => {\n const duration = Date.now() - startTime;\n this.info(`Performance: ${operation}`, {\n ...context,\n ...endContext,\n operation,\n duration,\n performance: true\n });\n }\n };\n }\n\n private enrichContext(context?: Record<string, unknown>): Record<string, unknown> {\n // NOTE: do NOT add a `timestamp` here. Pino already emits the standard `time`\n // field (configured via `timestamp: pino.stdTimeFunctions.isoTime`); a second\n // `timestamp` key was pure duplication on every line. Normalization returns\n // a fresh JSON-native graph, so the caller's context is never mutated and\n // nested Error/cyclic/object values cannot fall through Pino serialization.\n return normalizeLogContext(context);\n }\n\n\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-severity-floor.backend.utils.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"log-severity-floor.backend.utils.d.ts","sourceRoot":"","sources":["../../../../../src/monitoring/logger/utils/log-severity-floor.backend.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D,4FAA4F;AAC5F,eAAO,MAAM,gCAAgC,sBAAsB,CAAC;AAQpE;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGxG;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC3C,MAAM,CAQR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-severity-floor.backend.utils.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"log-severity-floor.backend.utils.js","sourceRoot":"","sources":["../../../../../src/monitoring/logger/utils/log-severity-floor.backend.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAE3D,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gCAAgC,GAAG,mBAAmB,CAAC;AAEpE;;;GAGG;AACH,MAAM,cAAc,GAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA4C;IAClF,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,wBAAwB,CAAC,CAAC;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,OAA4C;IAE5C,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,cAAc,CAAC;IAE/C,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7D,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IAE7C,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;AAChF,CAAC","sourcesContent":["/**\n * A LOG-LEVEL FLOOR a structured record can carry, so a boundary that hardcodes its level cannot\n * bury a fault below the level an operator alerts on.\n *\n * ## The defect this exists to close\n *\n * `classifyBackendErrorLogSeverity` already answers \"does a human need to look at this?\" from the\n * error's own declared contract, and `logWildoBackendErrorAtClassifiedSeverity` emits at that answer.\n * A **best-effort catch** does not go through either: it writes `logger.warn(msg, { ...ctx,\n * ...projectCaughtErrorLogFields(error) })`, choosing the level by hand at the call site.\n *\n * Measured 2026-09-09: **213 such emissions below `error`, across 86 files**, and the six error types\n * whose declared severity is CRITICAL (INTERNAL, DATABASE, EXTERNAL_SERVICE, UNCAUGHT_EXCEPTION,\n * UNHANDLED_REJECTION, INFRASTRUCTURE) are all reachable through any of them. So a swallowed database\n * failure was emitted at `warn` while the projected fields still said `severity: CRITICAL` — visible\n * to a reader who greps the field, invisible to a production alert keyed on level, which is what an\n * operator keys on by default.\n *\n * ## Why a floor rather than 213 corrected call sites\n *\n * Most of those `warn`s are RIGHT — an expected self-healing condition, a 4xx the caller got wrong —\n * so a sweep would have to re-judge each one and would rot the next time a boundary is added. The\n * floor is total over the population instead: every one of those sites already calls the same\n * projection, so the answer travels with the record and one rule at the sink applies it.\n *\n * ## It adds no new judgement, and it can only RAISE\n *\n * The floor IS `classifyBackendErrorLogSeverity`'s answer, so every \"stays at warn\" decision that\n * function documents is preserved untouched — an expired token still floors at `debug`, a MEDIUM 4xx\n * at `warn`. And promotion never lowers a level, so a boundary that deliberately logs ABOVE the\n * classification (a permanently dead-lettered job is operationally an `error` whatever the underlying\n * business severity) keeps its own louder choice.\n *\n * The vocabulary lives HERE, in the logger's own utils, rather than beside the classifier: the\n * classifier writes the field and the logger reads it, so putting it in the logger's directory keeps\n * the dependency pointing one way (errors → monitoring) instead of making the two import each other.\n */\n\n/**\n * The context key carrying the floor. Named rather than inlined at the two ends, because a writer and\n * a reader agreeing on a string literal by coincidence is exactly how this mechanism goes silently\n * inert.\n */\nexport const LOG_SEVERITY_FLOOR_FIELD = 'logSeverityFloor';\n\n/** The context key recording what the call site ASKED for, whenever the floor raised it. */\nexport const LOG_SEVERITY_PROMOTED_FROM_FIELD = 'promotedFromLevel';\n\n/**\n * Emitting order, lowest first. Indices are the comparison, so a level absent from this list has no\n * rank and is left alone rather than guessed at.\n */\nconst LOG_LEVEL_RANK: readonly string[] = ['debug', 'info', 'warn', 'error'];\n\n/**\n * The floor a record carries, or `undefined` when it carries none or carries an unrecognised value.\n *\n * Unrecognised is deliberately the same answer as absent: this reads a value that arrives through an\n * untyped `Record<string, unknown>` context, and inventing a rank for a string nobody declared would\n * promote records on a typo.\n */\nexport function resolveLogSeverityFloor(context: Record<string, unknown> | undefined): string | undefined {\n const floor = context?.[LOG_SEVERITY_FLOOR_FIELD];\n return typeof floor === 'string' && LOG_LEVEL_RANK.includes(floor) ? floor : undefined;\n}\n\n/**\n * The level a record should actually be emitted at: the requested level, unless the record carries a\n * floor above it.\n *\n * Returns the requested level unchanged whenever there is no floor, the floor is unrecognised, or the\n * requested level is already at or above it — so the common path is untouched.\n */\nexport function resolveEmittedLogLevel(\n requestedLevel: string,\n context: Record<string, unknown> | undefined,\n): string {\n const floor = resolveLogSeverityFloor(context);\n if (floor === undefined) return requestedLevel;\n\n const requestedRank = LOG_LEVEL_RANK.indexOf(requestedLevel);\n if (requestedRank < 0) return requestedLevel;\n\n return LOG_LEVEL_RANK.indexOf(floor) > requestedRank ? floor : requestedLevel;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-value-normalization.backend.utils.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"log-value-normalization.backend.utils.d.ts","sourceRoot":"","sources":["../../../../../src/monitoring/logger/utils/log-value-normalization.backend.utils.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB"}
|
|
@@ -169,20 +169,24 @@ export declare enum AuditObservationKind {
|
|
|
169
169
|
*/
|
|
170
170
|
PROVIDER_OPERATION_CALL = "provider_operation_call",
|
|
171
171
|
/**
|
|
172
|
-
* The post-call credential-use stamp from the provider operation executor
|
|
172
|
+
* The post-call credential-use stamp from the provider operation executor, raised through
|
|
173
|
+
* `ExternalProvidersRegistryBackendService.recordProviderSecretUseForTarget`.
|
|
173
174
|
*
|
|
174
|
-
* ## Why this is on THIS counter even though its sink is not the audit service
|
|
175
|
+
* ## Why this is on THIS counter even though its PRIMARY sink is not the audit service
|
|
175
176
|
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
177
|
+
* Its main effect is a write to the spent credential's own row — a tenant's or a person's,
|
|
178
|
+
* whichever the resolution came from — and only its secondary effect is an audit event
|
|
179
|
+
* (`ORGANIZATION_PROVIDER_CREDENTIAL_USED` / `USER_PROVIDER_CREDENTIAL_USED`, emitted by the store).
|
|
180
|
+
* The loss shape is identical either way: fire-and-forget, sink feature-detected, rejection
|
|
178
181
|
* swallowed, nothing counting the drops. The counter's subject is the LOSS OF A SECURITY
|
|
179
182
|
* OBSERVATION, not the identity of the store that was supposed to receive it — so a second counter
|
|
180
183
|
* for one site would fragment the alert without telling an operator anything the `observation`
|
|
181
184
|
* label does not already say.
|
|
182
185
|
*
|
|
183
186
|
* What it evidences is narrow and worth stating: whether a stored credential was ACCEPTED by the
|
|
184
|
-
* provider on last use. Losing it leaves a credential whose health is unknown, which surfaces
|
|
185
|
-
*
|
|
187
|
+
* provider on last use. Losing it leaves a credential whose health is unknown, which surfaces later
|
|
188
|
+
* as an integration that fails with no record of when it started failing — which is exactly what
|
|
189
|
+
* this deployment had, for the whole life of the seam, while nothing was wired behind it.
|
|
186
190
|
*/
|
|
187
191
|
PROVIDER_CREDENTIAL_USE = "provider_credential_use",
|
|
188
192
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-observation-emission.backend.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"audit-observation-emission.backend.d.ts","sourceRoot":"","sources":["../../../../src/monitoring/observability/audit-observation-emission.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AAIH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,oBAAY,oBAAoB;IAC9B;;;;;;;;;;;;;OAaG;IACH,kCAAkC,uCAAuC;IAEzE;;;OAGG;IACH,oBAAoB,yBAAyB;IAE7C;;;OAGG;IACH,+BAA+B,oCAAoC;IAEnE;;;;;;;OAOG;IACH,yBAAyB,8BAA8B;IAEvD;;;;;;;;OAQG;IACH,oBAAoB,yBAAyB;IAE7C;;;;;;;OAOG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;;;;;;;;OAYG;IACH,4BAA4B,iCAAiC;CAC9D;AAED;;;;;;;;GAQG;AACH,oBAAY,0BAA0B;IACpC,mGAAmG;IACnG,mBAAmB,wBAAwB;IAC3C,mGAAmG;IACnG,cAAc,mBAAmB;IACjC,0DAA0D;IAC1D,iBAAiB,sBAAsB;CACxC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,QAAiB,CAAC;AAEnD,sGAAsG;AACtG,MAAM,WAAW,mCAAmC;IAClD,6BAA6B,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACtF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mCAAmC,GAAG,MAAM,mCAAmC,GAAG,SAAS,CAAC;AAExG,8GAA8G;AAC9G,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACtE;AAOD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvE;AAED,8DAA8D;AAC9D,wBAAgB,+BAA+B,IAAI,IAAI,CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,WAAW,EAAE,oBAAoB,CAAC;IAClC,MAAM,EAAE,0BAA0B,CAAC;IACnC,2FAA2F;IAC3F,cAAc,CAAC,EAAE,mCAAmC,CAAC;IACrD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,mCAAmC,CAAC;IACtD,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GAAG,IAAI,CA6CP;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,WAAW,EAAE,oBAAoB,CAAC;IAClC,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAC;IAClC,cAAc,CAAC,EAAE,mCAAmC,CAAC;IACrD,mFAAmF;IACnF,eAAe,CAAC,EAAE,mCAAmC,CAAC;IACtD,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GAAG,IAAI,CAqCP"}
|
|
@@ -170,20 +170,24 @@ export var AuditObservationKind;
|
|
|
170
170
|
*/
|
|
171
171
|
AuditObservationKind["PROVIDER_OPERATION_CALL"] = "provider_operation_call";
|
|
172
172
|
/**
|
|
173
|
-
* The post-call credential-use stamp from the provider operation executor
|
|
173
|
+
* The post-call credential-use stamp from the provider operation executor, raised through
|
|
174
|
+
* `ExternalProvidersRegistryBackendService.recordProviderSecretUseForTarget`.
|
|
174
175
|
*
|
|
175
|
-
* ## Why this is on THIS counter even though its sink is not the audit service
|
|
176
|
+
* ## Why this is on THIS counter even though its PRIMARY sink is not the audit service
|
|
176
177
|
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
178
|
+
* Its main effect is a write to the spent credential's own row — a tenant's or a person's,
|
|
179
|
+
* whichever the resolution came from — and only its secondary effect is an audit event
|
|
180
|
+
* (`ORGANIZATION_PROVIDER_CREDENTIAL_USED` / `USER_PROVIDER_CREDENTIAL_USED`, emitted by the store).
|
|
181
|
+
* The loss shape is identical either way: fire-and-forget, sink feature-detected, rejection
|
|
179
182
|
* swallowed, nothing counting the drops. The counter's subject is the LOSS OF A SECURITY
|
|
180
183
|
* OBSERVATION, not the identity of the store that was supposed to receive it — so a second counter
|
|
181
184
|
* for one site would fragment the alert without telling an operator anything the `observation`
|
|
182
185
|
* label does not already say.
|
|
183
186
|
*
|
|
184
187
|
* 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
|
-
*
|
|
188
|
+
* provider on last use. Losing it leaves a credential whose health is unknown, which surfaces later
|
|
189
|
+
* as an integration that fails with no record of when it started failing — which is exactly what
|
|
190
|
+
* this deployment had, for the whole life of the seam, while nothing was wired behind it.
|
|
187
191
|
*/
|
|
188
192
|
AuditObservationKind["PROVIDER_CREDENTIAL_USE"] = "provider_credential_use";
|
|
189
193
|
/**
|