@wildo-ai/saas-backend-lib 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +199 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts +14 -3
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +138 -24
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts +3 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js +8 -3
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js +11 -2
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +48 -4
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +102 -30
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js +16 -0
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts +20 -6
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +96 -32
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts +3 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js +32 -7
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts +8 -5
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +80 -0
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +298 -23
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts +71 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +85 -5
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +21 -0
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +146 -4
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts +3 -26
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js +3 -68
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +533 -43
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
- package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +54 -13
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
- package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +263 -13
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +376 -58
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +264 -7
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +414 -5
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +16 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +140 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +65 -6
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +45 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js +7 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +146 -46
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
- package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
- package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
- package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts +43 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +52 -3
- package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js.map +1 -1
- package/dist/esm/databases/models/filter.backend.schemas.js +2 -2
- package/dist/esm/databases/models/filter.backend.schemas.js.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js +20 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
- package/dist/esm/databases/services/redis.service.d.ts +27 -0
- package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/redis.service.js +29 -0
- package/dist/esm/databases/services/redis.service.js.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
- package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js +134 -8
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
- package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts +41 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js +40 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts +64 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js +193 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js.map +1 -0
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +72 -4
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +60 -19
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.js +7 -1
- package/dist/esm/external-data/external-data-transform.backend.js.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts +2 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js +13 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
- package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
- package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +306 -7
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +539 -45
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts +24 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +83 -11
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts +17 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -0
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +5 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +76 -13
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +18 -0
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.js +36 -28
- package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
- package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
- package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
- package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +214 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js +566 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -0
- package/dist/esm/files/services/files.backend.service.d.ts +87 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +252 -19
- package/dist/esm/files/services/files.backend.service.js.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
- package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
- package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.js +12 -0
- package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +200 -44
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
- package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
- package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +107 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +519 -56
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
- package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts +151 -41
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +308 -143
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
- package/dist/esm/index.d.ts +15 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +45 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +82 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +20 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +21 -3
- package/dist/esm/inject/models/service-types.js.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.js +32 -4
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts +34 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js +42 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +84 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.js +235 -11
- package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts +64 -2
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +152 -6
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
- package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
- package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
- package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
- package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
- package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +108 -13
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +432 -101
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
- package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +54 -7
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts +5 -5
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js +14 -13
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts +2 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +18 -8
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +20 -18
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js +4 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
- package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.js +1 -4
- package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.js +1 -4
- package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
- package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
- package/dist/esm/queue/queue.backend.service.d.ts +3 -3
- package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue.backend.service.js +26 -4
- package/dist/esm/queue/queue.backend.service.js.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts +9 -0
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +88 -15
- package/dist/esm/requests/service/websocket.service.js.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +16 -2
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
- package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
- package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
- package/dist/esm/resources/services/resource-id.backend.service.js +3 -3
- package/dist/esm/resources/services/resource-id.backend.service.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +91 -7
- package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
- package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js +13 -7
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
- package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts +47 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.js +343 -77
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts +3 -23
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.js +20 -45
- package/dist/esm/security/authentications/models/jwt.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts +9 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +77 -2
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js +5 -3
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +41 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +87 -4
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js +24 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts +117 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js +104 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +175 -14
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +385 -49
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +18 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +110 -74
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js.map +1 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +17 -3
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js +12 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +41 -3
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +83 -20
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.js +1 -18
- package/dist/esm/security/jwt/services/jwt.backend.service.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
- package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +17 -9
- package/dist/esm/.builder.pid +0 -9
|
@@ -37,10 +37,10 @@ import { ErrorBuilderBackendService } from '../../../../errors/services/error-bu
|
|
|
37
37
|
import { ExternalProvidersRegistryBackendService } from '../../../../external-providers/services/external-providers-registry.backend.service.js';
|
|
38
38
|
import { AuthOrganizationConfigurationService } from '../../../../security/authentications/services/admin-config/auth-organization-configuration.service.js';
|
|
39
39
|
import { OIDCDiscoveryBackendService } from '../../../../security/authentications/services/admin-config/oidc-discovery.backend.service.js';
|
|
40
|
-
import { ErrorType, ErrorCustomMessageReference, AuthScopeType, ExternalIdentitySource, SSOPKCEMethod, SSOTemplateMode, SsoConnectionType, SsoProtocol, isWildoBackendError, } from '@wildo-ai/saas-models';
|
|
40
|
+
import { ErrorType, ErrorCustomMessageReference, AuthScopeType, ExternalIdentitySource, SSOPKCEMethod, SSOResponseType, SSOTemplateMode, SsoConnectionType, SsoProtocol, isWildoBackendError, } from '@wildo-ai/saas-models';
|
|
41
41
|
import { buildEnterpriseConnectionScope } from '../../../../security/authentications/models/sso-connection.backend.schemas.js';
|
|
42
42
|
import jwt from 'jsonwebtoken';
|
|
43
|
-
import { ExternalProvider_ExchangeProtocol_Kind } from '@wildo-ai/external-connectors-models';
|
|
43
|
+
import { ExternalProvider_ExchangeProtocol_Kind, ProviderProtocolRuntimeKind } from '@wildo-ai/external-connectors-models';
|
|
44
44
|
import { isSocialOAuth2LoginPurpose } from '../../../../security/authentications/utils/social-oauth2-purpose.backend.utils.js';
|
|
45
45
|
const signedJwtCache = new Map();
|
|
46
46
|
const SIGNED_JWT_CACHE_SKEW_MS = 5 * 60 * 1000;
|
|
@@ -148,7 +148,7 @@ let OAuth2ConnectionResolverBackendService = class OAuth2ConnectionResolverBacke
|
|
|
148
148
|
this.logDebug('Resolving social connection', { providerRef, scopeId: options?.scopeId });
|
|
149
149
|
// 1. Look up provider OAuth2 runtime contract from the effective runtime registry.
|
|
150
150
|
const oauth2Contract = this.getOAuth2RuntimeContract(providerRef);
|
|
151
|
-
if (oauth2Contract?.kind !==
|
|
151
|
+
if (oauth2Contract?.kind !== ProviderProtocolRuntimeKind.OAUTH2_SSO) {
|
|
152
152
|
throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {
|
|
153
153
|
customMessageReference: ErrorCustomMessageReference.OAUTH_PROVIDER_NOT_FOUND,
|
|
154
154
|
});
|
|
@@ -330,6 +330,9 @@ let OAuth2ConnectionResolverBackendService = class OAuth2ConnectionResolverBacke
|
|
|
330
330
|
scopes,
|
|
331
331
|
pkceMethod,
|
|
332
332
|
responseMode,
|
|
333
|
+
// A social provider's contract does not express authorization-request shaping; the engine
|
|
334
|
+
// drives the authorization-code flow for all of them.
|
|
335
|
+
responseType: SSOResponseType.CODE,
|
|
333
336
|
identitySource,
|
|
334
337
|
profileMapping,
|
|
335
338
|
extraAuthParams: Object.keys(extraAuthParams).length > 0 ? extraAuthParams : undefined,
|
|
@@ -448,6 +451,29 @@ let OAuth2ConnectionResolverBackendService = class OAuth2ConnectionResolverBacke
|
|
|
448
451
|
const profileMapping = this.buildEnterpriseProfileMapping(oidcConfig.claimsMapping);
|
|
449
452
|
// 6. Build response mode
|
|
450
453
|
const responseMode = oidcConfig.responseMode || 'query';
|
|
454
|
+
/*
|
|
455
|
+
* 6b. Authorization-request shaping (#419). Until 2026-09-08 these were persisted, audit-marked
|
|
456
|
+
* and never sent — so an operator who set `acrValues` to demand step-up at the IdP got no such
|
|
457
|
+
* demand and no error.
|
|
458
|
+
*
|
|
459
|
+
* `responseType` is REFUSED rather than forwarded when it names a flow the engine does not
|
|
460
|
+
* implement. `SSOResponseType` offers `code`, `id_token` and `token`; the callback path only
|
|
461
|
+
* exchanges an authorization CODE, so sending `id_token` would trade a silent no-op for a
|
|
462
|
+
* silently broken login — strictly worse. A refusal at resolution time names the connection and
|
|
463
|
+
* the value, and lifts on its own the day the implicit flows are implemented.
|
|
464
|
+
*/
|
|
465
|
+
const responseType = oidcConfig.responseType ?? SSOResponseType.CODE;
|
|
466
|
+
if (responseType !== SSOResponseType.CODE) {
|
|
467
|
+
throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {
|
|
468
|
+
customMessageReference: ErrorCustomMessageReference.CONFIGURATION,
|
|
469
|
+
context: {
|
|
470
|
+
message: `SSO connection declares oidc.responseType "${responseType}", and this engine implements the authorization-code flow only. `
|
|
471
|
+
+ 'Set it to "code", or implement the implicit flow before selecting it.',
|
|
472
|
+
connectionId,
|
|
473
|
+
providerRef: oidcConfig.externalProviderId,
|
|
474
|
+
},
|
|
475
|
+
});
|
|
476
|
+
}
|
|
451
477
|
// 7. Assemble OAuth2ResolvedConnection
|
|
452
478
|
const connection = {
|
|
453
479
|
source: ExternalIdentitySource.OIDC,
|
|
@@ -466,6 +492,10 @@ let OAuth2ConnectionResolverBackendService = class OAuth2ConnectionResolverBacke
|
|
|
466
492
|
scopes,
|
|
467
493
|
pkceMethod,
|
|
468
494
|
responseMode: responseMode,
|
|
495
|
+
responseType: SSOResponseType.CODE,
|
|
496
|
+
acrValues: oidcConfig.acrValues && oidcConfig.acrValues.length > 0 ? oidcConfig.acrValues : undefined,
|
|
497
|
+
maxAge: oidcConfig.maxAge,
|
|
498
|
+
prompt: oidcConfig.prompt,
|
|
469
499
|
identitySource: userInfoUrl ? 'userinfo' : 'id_token',
|
|
470
500
|
profileMapping,
|
|
471
501
|
extraAuthParams,
|
|
@@ -572,7 +602,7 @@ let OAuth2ConnectionResolverBackendService = class OAuth2ConnectionResolverBacke
|
|
|
572
602
|
}
|
|
573
603
|
getOAuth2RuntimeContract(providerRef) {
|
|
574
604
|
const protocolConfig = this.externalProvidersRegistry.getProviderConfiguration(providerRef, ExternalProvider_ExchangeProtocol_Kind.SSO_OAUTH2);
|
|
575
|
-
return protocolConfig?.runtimeContract?.kind ===
|
|
605
|
+
return protocolConfig?.runtimeContract?.kind === ProviderProtocolRuntimeKind.OAUTH2_SSO
|
|
576
606
|
? protocolConfig.runtimeContract
|
|
577
607
|
: undefined;
|
|
578
608
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2-connection-resolver.backend.service.js","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * OAuth2ConnectionResolverBackendService\n *\n * Resolves OAuth2 connection configurations from multiple sources:\n * - Provider definitions from the backend provider registry\n * - App-specific social OAuth2 config from AppConfiguration.auth.socialOAuth2Providers\n * - Client credentials from AppConfiguration.providerConfigurations + secrets\n *\n * Produces an `OAuth2ResolvedConnection` — the canonical input for the OAuth2 engine.\n *\n * Step 4: Implements `resolveSocialConnection()` (fully functional)\n * Step 15: Implements `resolveEnterpriseConnection()` (template/discovery/manual branching)\n *\n * Browser-only OAuth2 / SAML callback model. The redirect URI derived from\n * `runtime.endPoints.main_backend_api.publicUrl` is the OAuth2 callback URL\n * registered at IdPs; the framework targets web stacks exclusively, so\n * there is no native deep-link variant to account for here.\n */\n\nimport 'reflect-metadata';\nimport { 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';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { ExternalProvidersRegistryBackendService } from '~wildo-backend-lib/external-providers/services/external-providers-registry.backend.service';\nimport { AuthOrganizationConfigurationService } from '~wildo-backend-lib/security/authentications/services/admin-config/auth-organization-configuration.service';\nimport { OIDCDiscoveryBackendService } from '~wildo-backend-lib/security/authentications/services/admin-config/oidc-discovery.backend.service';\nimport {\n ErrorType,\n ErrorCustomMessageReference,\n AuthScopeType,\n ExternalIdentitySource,\n SSOPKCEMethod,\n SSOTemplateMode,\n SsoConnectionType,\n SsoProtocol,\n isWildoBackendError,\n} from '@wildo-ai/saas-models';\nimport type {\n OAuth2ResolvedConnection,\n OAuth2ProfileMapping,\n OAuth2StateTokenMetadata,\n} from '~wildo-backend-lib/security/authentications/models/oauth2-connection.backend.schemas';\nimport { buildEnterpriseConnectionScope } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport jwt from 'jsonwebtoken';\nimport { ExternalProvider_ExchangeProtocol_Kind } from '@wildo-ai/external-connectors-models';\nimport { isSocialOAuth2LoginPurpose } from '~wildo-backend-lib/security/authentications/utils/social-oauth2-purpose.backend.utils';\n\n// ═══════════════════════════════════════════════════════════════\n// Signed JWT Client Secret — Generic (extensions-driven)\n// ═══════════════════════════════════════════════════════════════\n\ninterface SignedJwtClientSecretParams {\n privateKey: string;\n keyId: string;\n teamId: string;\n clientId: string;\n algorithm: string;\n audience: string;\n maxLifetimeSeconds: number;\n}\n\nconst signedJwtCache = new Map<string, { jwt: string; expiresAt: number }>();\nconst SIGNED_JWT_CACHE_SKEW_MS = 5 * 60 * 1000;\nconst OAUTH2_PROVIDER_CONFIG_KEY = 'sso_oauth2';\n\ninterface OAuth2SsoRuntimeContract {\n kind: 'oauth2-sso';\n authorizationEndpoint: string;\n tokenEndpoint: string;\n userInfoEndpoint?: string;\n jwksUri?: string;\n issuer?: string;\n scopes: ReadonlyArray<string>;\n clientIdPublicConfigKey?: string;\n clientSecretRef: string;\n supportsPkce: boolean;\n supportsOidc: boolean;\n tokenEndpointAuthMethod?: 'client_secret_post' | 'client_secret_basic' | 'none';\n responseMode?: 'query' | 'fragment' | 'form_post';\n identitySource?: 'userinfo' | 'id_token' | 'callback_body';\n profileMapping?: OAuth2ProfileMapping;\n extraAuthParams?: Record<string, string>;\n extraTokenParams?: Record<string, string>;\n tokenRequestHeaders?: Record<string, string>;\n extensions?: Record<string, unknown>;\n}\n\n/**\n * Generic OIDC profile-mapping default — used when a provider's\n * `runtimeContract.profileMapping` is absent. All four engine-shipped social\n * OAuth2 providers (`google`, `microsoft`, `apple`, `github`) declare their\n * own `profileMapping` on the runtime contract, so this default exists only\n * to keep the resolver total for app-contributed OIDC providers that follow\n * the standard claim names.\n *\n * Per-provider behavior MUST live in the provider module's runtime contract,\n * not branched here on `providerRef`.\n */\nconst GENERIC_OIDC_PROFILE_MAPPING: OAuth2ProfileMapping = {\n id: 'sub',\n email: 'email',\n firstName: 'given_name',\n lastName: 'family_name',\n name: 'name',\n image: 'picture',\n emailVerified: 'email_verified',\n};\n\nfunction getOrGenerateSignedJwtClientSecret(\n providerRef: string,\n clientId: string,\n params: SignedJwtClientSecretParams,\n): string {\n const cacheKey = [\n providerRef,\n clientId,\n params.keyId,\n params.teamId,\n params.algorithm,\n params.audience,\n params.maxLifetimeSeconds,\n ].join(':');\n const cached = signedJwtCache.get(cacheKey);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.jwt;\n }\n\n const issuedAt = Date.now();\n const token = jwt.sign({}, params.privateKey, {\n algorithm: params.algorithm as jwt.Algorithm,\n keyid: params.keyId,\n issuer: params.teamId,\n audience: params.audience,\n subject: params.clientId,\n expiresIn: params.maxLifetimeSeconds,\n });\n\n const tokenTtlMs = Math.max(0, params.maxLifetimeSeconds * 1000 - SIGNED_JWT_CACHE_SKEW_MS);\n signedJwtCache.set(cacheKey, { jwt: token, expiresAt: issuedAt + tokenTtlMs });\n return token;\n}\n\n/**\n * Resolves OAuth2 connection configurations for social and enterprise SSO.\n * The engine (OAuth2AuthenticationBackendService) never reads from provider catalogs\n * or AppConfiguration directly — it only operates on OAuth2ResolvedConnection.\n */\n@injectable()\nexport class OAuth2ConnectionResolverBackendService {\n private readonly logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService) private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.ExternalProvidersRegistryService) private readonly externalProvidersRegistry: ExternalProvidersRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.AuthOrganizationConfigurationService) private readonly orgConfigService: AuthOrganizationConfigurationService,\n @inject(SAAS_SERVICE_TYPES.OIDCDiscoveryService) private readonly oidcDiscovery: OIDCDiscoveryBackendService,\n ) {\n this.logDebug = this.logger.debugByType('OAuth2ConnectionResolver');\n this.logger.setDebugTypeLogging('OAuth2ConnectionResolver', false);\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Social Connection Resolution\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Resolve a social SSO connection from the provider catalog + app config + secrets.\n *\n * Resolution chain:\n * 1. Look up provider definition from the backend provider registry\n * 2. Find the SSO_OAUTH2 protocol on the provider\n * 3. Read app-specific social OAuth2 config from auth.socialOAuth2Providers[providerRef]\n * 4. Read OAuth2 credentials from providerConfigurations[providerRef][sso_oauth2]\n * 5. Resolve clientSecret from secrets store (app-level baseline)\n * 5b. Check for org/app-level social credential overrides (P3)\n * 5c. Generate signed-JWT client secret if provider requires it (e.g. Apple)\n * 6. Derive redirectUri from publicUrl\n * 7. Map profile fields, scopes, PKCE, response mode, identity source\n *\n * ORDERING CONSTRAINT (5b before 5c):\n * Override credentials (5b) MUST be resolved before signed-JWT generation (5c).\n * For providers like Apple, `clientSecret` is a raw private key that needs JWT signing.\n * If 5c ran first, the override would replace the generated JWT with a raw key,\n * causing the token exchange to fail at the IdP. By running 5b first, whichever\n * private key is active (app-level or override) goes through JWT signing in 5c.\n *\n * @param providerRef - Provider identifier (e.g. 'google', 'apple')\n * @param options.ec - Execution context, required when scopeId is set\n * @param options.scopeType - 'organization' or 'application' (defaults to 'organization')\n * @param options.scopeId - Org/app ID to check for credential overrides in SsoConfig\n */\n public async resolveSocialConnection(\n providerRef: string,\n options?: { ec?: ExecutionContext<any>; scopeType?: AuthScopeType; scopeId?: string },\n ): Promise<OAuth2ResolvedConnection> {\n this.logDebug('Resolving social connection', { providerRef, scopeId: options?.scopeId });\n\n // 1. Look up provider OAuth2 runtime contract from the effective runtime registry.\n const oauth2Contract = this.getOAuth2RuntimeContract(providerRef);\n if (oauth2Contract?.kind !== 'oauth2-sso') {\n throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {\n customMessageReference: ErrorCustomMessageReference.OAUTH_PROVIDER_NOT_FOUND,\n });\n }\n\n try {\n if (!this.externalProvidersRegistry.isProviderEnabled(providerRef, ExternalProvider_ExchangeProtocol_Kind.SSO_OAUTH2)) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `OAuth2 provider '${providerRef}' is restricted by external provider policy` },\n });\n }\n } catch (error) {\n if (isWildoBackendError(error)) throw error;\n this.logDebug('External provider policy not initialized for OAuth2 provider check; falling back to auth.socialOAuth2Providers', {\n providerRef,\n });\n }\n\n // 3. Read app-specific social OAuth2 config\n const appConfig = this.appConfigService.config;\n const socialOAuth2ProviderConfig = appConfig.auth?.socialOAuth2Providers?.[providerRef];\n if (!socialOAuth2ProviderConfig || socialOAuth2ProviderConfig.enabled === false) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Social OAuth2 provider '${providerRef}' is not enabled in app configuration` },\n });\n }\n if (!isSocialOAuth2LoginPurpose(socialOAuth2ProviderConfig.purpose)) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Social OAuth2 provider '${providerRef}' is not configured for user sign-in` },\n });\n }\n\n // 4. Read OAuth2 credentials from providerConfigurations\n const providerConfigs = appConfig.providerConfigurations?.[providerRef];\n const protocolConfig = providerConfigs?.[OAUTH2_PROVIDER_CONFIG_KEY] as Record<string, any> | undefined;\n\n let clientId = protocolConfig?.authConfig?.clientId\n || protocolConfig?.clientId\n || (oauth2Contract.clientIdPublicConfigKey ? protocolConfig?.[oauth2Contract.clientIdPublicConfigKey] : undefined);\n\n if (!clientId) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Missing clientId for OAuth2 provider '${providerRef}'` },\n });\n }\n\n // 5. Resolve clientSecret from env-provided provider secret material\n const secretRef = protocolConfig?.authConfig?.secretRef || oauth2Contract.clientSecretRef;\n let clientSecret = '';\n\n if (secretRef) {\n clientSecret = this.externalProvidersRegistry.getProviderSecret(\n providerRef,\n OAUTH2_PROVIDER_CONFIG_KEY as any,\n secretRef,\n ) || '';\n }\n\n if (!clientSecret) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Missing env-provided clientSecret for OAuth2 provider '${providerRef}'. Check env secretRef '${secretRef}'.` },\n });\n }\n\n // 5b. Scope-level social credential overrides (P3).\n // An org/app can override the platform-level clientId + clientSecret with their own\n // OAuth2 app credentials (stored in SsoConfig.socialCredentialOverrides).\n //\n // MUST run BEFORE step 5c (signed-JWT generation). For providers like Apple, the\n // override's clientSecret is a raw private key that still needs JWT signing.\n // signedJwtKeyId/signedJwtTeamId are captured here and consumed in step 5c.\n let overrideSignedJwtKeyId: string | undefined;\n let overrideSignedJwtTeamId: string | undefined;\n if (options?.scopeId && options.ec) {\n const scopeType = options.scopeType || AuthScopeType.ORGANIZATION;\n try {\n const ssoConfig = await this.orgConfigService.loadSSOConfig(options.ec, scopeType, options.scopeId);\n const overrides = ssoConfig?.socialCredentialOverrides;\n const override = overrides?.find(o => o.providerRef === providerRef);\n if (override) {\n clientId = override.clientId;\n clientSecret = override.clientSecret;\n overrideSignedJwtKeyId = override.signedJwtKeyId;\n overrideSignedJwtTeamId = override.signedJwtTeamId;\n this.logDebug('Social credentials overridden by scope config', {\n providerRef, scopeType, scopeId: options.scopeId,\n });\n }\n } catch (err) {\n if (!isWildoBackendError(err)) throw err;\n this.logDebug('Scope SSO config not found for credential override (non-fatal)', {\n providerRef, scopeType, scopeId: options.scopeId,\n });\n }\n }\n\n // 5c. Signed JWT client secret generation.\n // Some providers (e.g. Apple) don't accept a static client secret — they require a\n // short-lived JWT signed with a private key. The provider's extensions declare this\n // via clientSecretType='signed_jwt'.\n //\n // At this point, `clientSecret` holds either the app-level or overridden private key\n // (determined by step 5b). The JWT params (teamId, keyId) are resolved with a\n // fallback chain: override values from step 5b → app-level secrets store.\n const extensions = oauth2Contract.extensions ?? {};\n if (extensions.clientSecretType === 'signed_jwt') {\n const algorithm = String(extensions.clientSecretAlgorithm ?? 'ES256');\n const audience = String(extensions.clientSecretAudience ?? 'https://appleid.apple.com');\n const maxLifetimeSeconds = Number(extensions.clientSecretMaxLifetimeSeconds ?? 60 * 60 * 24 * 180);\n const teamIdRef = String(extensions.teamIdSecretRef ?? `${providerRef.toUpperCase()}_TEAM_ID`);\n const keyIdRef = String(extensions.keyIdSecretRef ?? `${providerRef.toUpperCase()}_KEY_ID`);\n const teamId = overrideSignedJwtTeamId || this.externalProvidersRegistry.getProviderSecret(\n providerRef,\n OAUTH2_PROVIDER_CONFIG_KEY as any,\n teamIdRef,\n );\n const keyId = overrideSignedJwtKeyId || this.externalProvidersRegistry.getProviderSecret(\n providerRef,\n OAUTH2_PROVIDER_CONFIG_KEY as any,\n keyIdRef,\n );\n\n if (!teamId || !keyId) {\n const missing = [!teamId ? teamIdRef : '', !keyId ? keyIdRef : ''].filter(Boolean).join(', ');\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Provider '${providerRef}' requires signed JWT client secret. Missing secrets: ${missing}` },\n });\n }\n\n clientSecret = getOrGenerateSignedJwtClientSecret(\n providerRef,\n clientId,\n { privateKey: clientSecret, keyId, teamId, clientId, algorithm, audience, maxLifetimeSeconds },\n );\n this.logDebug('Generated signed JWT client secret', { providerRef, algorithm, audience });\n }\n\n // 6. Derive redirectUri from publicUrl (TRAP 14: publicUrl is optional)\n const publicUrl = appConfig.runtime?.endPoints?.main_backend_api?.publicUrl;\n if (!publicUrl) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'runtime.endPoints.main_backend_api.publicUrl is required for OAuth2 redirect URI derivation' },\n });\n }\n const redirectUri = `${publicUrl}/api/v1/auth/oauth2/callback/${providerRef}`;\n\n // 7. Build the resolved connection\n const tokenEndpointAuthMethod = this.resolveTokenEndpointAuthMethod(\n protocolConfig?.tokenEndpointAuthMethod ?? oauth2Contract.tokenEndpointAuthMethod,\n );\n const responseMode = oauth2Contract.responseMode ?? this.resolveResponseMode({\n ...oauth2Contract.extraAuthParams,\n ...protocolConfig?.extraAuthParams,\n });\n const identitySource = oauth2Contract.identitySource\n ?? this.resolveIdentitySource(extensions, oauth2Contract.userInfoEndpoint);\n const pkceMethod = oauth2Contract.supportsPkce ? 'S256' : null;\n\n // Scopes: provider defaults + app-specific additional scopes\n const defaultScopes = oauth2Contract.scopes || [];\n const additionalScopes = socialOAuth2ProviderConfig.additionalScopes || [];\n const scopes = [...new Set([...defaultScopes, ...additionalScopes])];\n\n // Profile mapping\n const profileMapping = oauth2Contract.profileMapping ?? GENERIC_OIDC_PROFILE_MAPPING;\n\n // Extra parameters\n const extraAuthParams = {\n ...(oauth2Contract.extraAuthParams || {}),\n ...(protocolConfig?.extraAuthParams || {}),\n };\n const extraTokenParams = {\n ...(oauth2Contract.extraTokenParams || {}),\n ...(protocolConfig?.extraTokenParams || {}),\n };\n const tokenRequestHeaders = {\n ...(oauth2Contract.tokenRequestHeaders || {}),\n ...(protocolConfig?.tokenRequestHeaders || {}),\n };\n const resolvedExtensions = {\n ...extensions,\n ...(protocolConfig?.extensions || {}),\n };\n\n // Issuer and JWKS for ID token validation\n const issuer = oauth2Contract.issuer;\n const jwksUri = oauth2Contract.jwksUri;\n\n const connection: OAuth2ResolvedConnection = {\n source: oauth2Contract.supportsOidc\n ? ExternalIdentitySource.OIDC\n : ExternalIdentitySource.OAUTH2,\n connectionType: SsoConnectionType.SOCIAL,\n providerRef,\n displayName: socialOAuth2ProviderConfig.displayName || providerRef,\n authorizationUrl: oauth2Contract.authorizationEndpoint,\n tokenUrl: oauth2Contract.tokenEndpoint,\n userInfoUrl: oauth2Contract.userInfoEndpoint,\n redirectUri,\n issuer,\n jwksUri,\n clientId,\n clientSecret,\n tokenEndpointAuthMethod,\n scopes,\n pkceMethod,\n responseMode,\n identitySource,\n profileMapping,\n extraAuthParams: Object.keys(extraAuthParams).length > 0 ? extraAuthParams : undefined,\n extraTokenParams: Object.keys(extraTokenParams).length > 0 ? extraTokenParams : undefined,\n tokenRequestHeaders: Object.keys(tokenRequestHeaders).length > 0 ? tokenRequestHeaders : undefined,\n extensions: Object.keys(resolvedExtensions).length > 0 ? resolvedExtensions : undefined,\n };\n\n this.logDebug('Social connection resolved', {\n providerRef,\n connectionType: SsoConnectionType.SOCIAL,\n responseMode,\n identitySource,\n pkceMethod,\n scopeCount: scopes.length,\n });\n\n return connection;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Enterprise Connection Resolution (Step 15)\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Resolve an enterprise SSO connection from scope-level OIDC configuration.\n *\n * Branches on `templateMode`:\n * - **template**: Load provider definition from the backend provider registry,\n * extract SSO_OAUTH2 protocol, apply templateOverrides to URLs\n * - **discovery**: Call OIDCDiscoveryService.discoverEndpoints(issuer)\n * - **manual**: Use provided endpoints directly\n *\n * The result is an OAuth2ResolvedConnection with\n * `connectionType: SsoConnectionType.ENTERPRISE`.\n * The OAuth2 engine (buildAuthorizationUrl, handleCallback, fetchUserProfile) is\n * reused unchanged — only the resolver logic is different.\n */\n public async resolveEnterpriseConnection(\n scopeType: AuthScopeType,\n scopeId: string,\n connectionId: string,\n ): Promise<OAuth2ResolvedConnection> {\n this.logDebug('Resolving enterprise connection', { scopeType, scopeId, connectionId });\n\n // 1. Load the SsoConnection resource by connectionId.\n // This runs PRE-AUTH (enterprise SSO login initiation — no user is\n // authenticated yet), so the connection is read through the system-access\n // path: the caller holds no ORG_ADMIN / APP_ADMIN role the connection's\n // READ ACL demands. `loadSsoConnectionAsSystem` bypasses that ACL under the\n // connection resource's `systemAccessPolicy.read = ALLOWED` opt-in\n // (fail-closed + audited). See AuthOrganizationConfigurationService.\n const ssoConnection = await this.orgConfigService.loadSsoConnectionAsSystem(scopeType, scopeId, connectionId);\n\n if (!ssoConnection || !ssoConnection.enabled) {\n throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {\n customMessageReference: ErrorCustomMessageReference.SSO_CONNECTION_NOT_FOUND,\n });\n }\n\n // 2. SAML connections use a separate authentication flow — reject if this is a SAML connection\n if (ssoConnection.protocol === SsoProtocol.SAML) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'SAML connections use the SAML authentication flow, not the OAuth2 resolver. Use /auth/saml/login/:connectionId instead.' },\n });\n }\n\n if (!ssoConnection.oidc) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `SSO connection '${connectionId}' has protocol 'oidc' but no OIDC configuration object.` },\n });\n }\n\n // 3. Build a flattened config view for the downstream resolution methods\n const oidcConfig: Record<string, any> = {\n ...ssoConnection.oidc,\n externalProviderId: ssoConnection.externalProviderId,\n displayName: ssoConnection.displayName,\n allowedDomains: ssoConnection.allowedDomains,\n autoCreateUsers: ssoConnection.autoCreateUsers,\n autoVerifyEmail: ssoConnection.autoVerifyEmail,\n defaultRole: ssoConnection.defaultRole,\n roleMapping: ssoConnection.roleMapping,\n groupMapping: ssoConnection.groupMapping,\n };\n\n // 4. Resolve endpoints based on templateMode\n const templateMode = oidcConfig.templateMode || SSOTemplateMode.MANUAL;\n let authorizationUrl: string;\n let tokenUrl: string;\n let userInfoUrl: string | undefined;\n let jwksUri: string | undefined;\n let endSessionEndpoint: string | undefined;\n let issuer: string | undefined;\n let scopes: string[];\n let extraAuthParams: Record<string, string> | undefined;\n let pkceMethod: OAuth2ResolvedConnection['pkceMethod'] = oidcConfig.pkceEnabled\n ? (\n oidcConfig.pkceMethod === SSOPKCEMethod.PLAIN\n ? SSOPKCEMethod.PLAIN\n : SSOPKCEMethod.S256\n )\n : null;\n\n switch (templateMode) {\n case SSOTemplateMode.TEMPLATE:\n ({ authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes, extraAuthParams, pkceMethod } =\n await this.resolveFromTemplate(oidcConfig, pkceMethod));\n break;\n\n case SSOTemplateMode.DISCOVERY:\n ({ authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes } =\n await this.resolveFromDiscovery(oidcConfig));\n break;\n\n case SSOTemplateMode.MANUAL:\n default:\n ({ authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes } =\n this.resolveFromManual(oidcConfig));\n break;\n }\n\n // 4. Derive redirectUri from publicUrl\n const publicUrl = this.appConfigService.config.runtime?.endPoints?.main_backend_api?.publicUrl;\n if (!publicUrl) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'runtime.endPoints.main_backend_api.publicUrl is required for OAuth2 redirect URI derivation' },\n });\n }\n const providerRef = oidcConfig.externalProviderId || 'enterprise-oidc';\n const redirectUri = `${publicUrl}/api/v1/auth/oauth2/callback/${providerRef}`;\n\n // 5. Map org claimsMapping → canonical profileMapping\n const profileMapping = this.buildEnterpriseProfileMapping(oidcConfig.claimsMapping);\n\n // 6. Build response mode\n const responseMode = oidcConfig.responseMode || 'query';\n\n // 7. Assemble OAuth2ResolvedConnection\n const connection: OAuth2ResolvedConnection = {\n source: ExternalIdentitySource.OIDC,\n connectionType: SsoConnectionType.ENTERPRISE,\n providerRef,\n displayName: oidcConfig.displayName,\n authorizationUrl,\n tokenUrl,\n userInfoUrl,\n redirectUri,\n issuer,\n jwksUri,\n clientId: oidcConfig.clientId,\n clientSecret: oidcConfig.clientSecret,\n tokenEndpointAuthMethod: 'client_secret_post',\n scopes,\n pkceMethod,\n responseMode: responseMode as 'query' | 'fragment' | 'form_post',\n identitySource: userInfoUrl ? 'userinfo' : 'id_token',\n profileMapping,\n extraAuthParams,\n scope: buildEnterpriseConnectionScope(scopeType, scopeId, connectionId),\n // Build the provisioning config ONCE here (the single source), so the callback passes it\n // straight to provisionEnterpriseUser with no per-field re-copy. Defaults are centralised (the loose\n // per-field copies previously diverged — OAuth2 omitted the `allowedDomains` fallback).\n provisioningConfig: {\n autoCreateUsers: oidcConfig.autoCreateUsers ?? true,\n autoVerifyEmail: oidcConfig.autoVerifyEmail ?? true,\n defaultRole: oidcConfig.defaultRole,\n roleMapping: oidcConfig.roleMapping,\n groupMapping: oidcConfig.groupMapping,\n allowedDomains: oidcConfig.allowedDomains ?? [],\n },\n };\n\n this.logDebug('Enterprise connection resolved', {\n scopeType,\n scopeId,\n connectionId,\n templateMode,\n providerRef,\n hasUserInfoUrl: !!userInfoUrl,\n });\n\n return connection;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Enterprise Resolution Strategies\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Template mode: Load provider OAuth2 runtime contract and apply org overrides.\n * Example: Microsoft Azure AD — load Microsoft provider template, substitute {tenant} in URLs.\n */\n private async resolveFromTemplate(\n oidcConfig: Record<string, any>,\n defaultPkceMethod: 'S256' | 'plain' | null,\n ): Promise<{\n authorizationUrl: string; tokenUrl: string; userInfoUrl?: string;\n jwksUri?: string; endSessionEndpoint?: string; issuer?: string;\n scopes: string[]; extraAuthParams?: Record<string, string>;\n pkceMethod: 'S256' | 'plain' | null;\n }> {\n const externalProviderId = oidcConfig.externalProviderId;\n if (!externalProviderId) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'templateMode=template requires externalProviderId' },\n });\n }\n\n const oauth2Contract = this.getOAuth2RuntimeContract(externalProviderId);\n if (!oauth2Contract) {\n throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {\n customMessageReference: ErrorCustomMessageReference.OAUTH_PROVIDER_NOT_FOUND,\n });\n }\n\n const templateOverrides = oidcConfig.templateOverrides || {};\n\n // Apply template variable substitution to endpoint URLs\n const authorizationUrl = this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.authorizationEndpoint || '', templateOverrides);\n const tokenUrl = this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.tokenEndpoint || '', templateOverrides);\n const userInfoUrl = oauth2Contract.userInfoEndpoint\n ? this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.userInfoEndpoint, templateOverrides)\n : undefined;\n const jwksUri = oauth2Contract.jwksUri\n ? this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.jwksUri, templateOverrides)\n : undefined;\n const endSessionEndpoint = undefined; // Discovery would need to be fetched for this\n\n // Resolve issuer from discovery URL template\n const issuer = oauth2Contract.issuer\n ? this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.issuer, templateOverrides)\n : undefined;\n\n // Scopes: template defaults + org custom scopes\n const defaultScopes = oauth2Contract.scopes || ['openid', 'email', 'profile'];\n const customScopes = oidcConfig.customScopes || [];\n const scopes = [...new Set([...defaultScopes, ...oidcConfig.scopes, ...customScopes])];\n\n // Extra auth params from template + overrides\n let extraAuthParams: Record<string, string> | undefined;\n const templateExtraAuthParams = {\n ...(oauth2Contract.extraAuthParams || {}),\n ...(oidcConfig.extraAuthParams || {}),\n };\n if (Object.keys(templateExtraAuthParams).length > 0) {\n extraAuthParams = this.oidcDiscovery.resolveTemplateParams(templateExtraAuthParams, templateOverrides);\n }\n\n // PKCE from template capabilities\n const pkceMethod = oauth2Contract.supportsPkce ? 'S256' as const : defaultPkceMethod;\n\n return { authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes, extraAuthParams, pkceMethod };\n }\n\n /**\n * Discovery mode: Auto-discover endpoints from .well-known/openid-configuration.\n * Used for Okta, Auth0, and generic OIDC providers.\n */\n private async resolveFromDiscovery(\n oidcConfig: Record<string, any>,\n ): Promise<{\n authorizationUrl: string; tokenUrl: string; userInfoUrl?: string;\n jwksUri?: string; endSessionEndpoint?: string; issuer?: string;\n scopes: string[];\n }> {\n const issuerUrl = oidcConfig.issuer || oidcConfig.discoveryUrl?.replace('/.well-known/openid-configuration', '');\n if (!issuerUrl) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'templateMode=discovery requires issuer or discoveryUrl' },\n });\n }\n\n const doc = await this.oidcDiscovery.discoverEndpoints(issuerUrl);\n\n const customScopes = oidcConfig.customScopes || [];\n const scopes = [...new Set([...oidcConfig.scopes, ...customScopes])];\n\n return {\n authorizationUrl: doc.authorization_endpoint,\n tokenUrl: doc.token_endpoint,\n userInfoUrl: doc.userinfo_endpoint,\n jwksUri: doc.jwks_uri,\n endSessionEndpoint: doc.end_session_endpoint,\n issuer: doc.issuer,\n scopes,\n };\n }\n\n private getOAuth2RuntimeContract(providerRef: string): OAuth2SsoRuntimeContract | undefined {\n const protocolConfig = this.externalProvidersRegistry.getProviderConfiguration(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.SSO_OAUTH2,\n ) as Record<string, any> | undefined;\n\n return protocolConfig?.runtimeContract?.kind === 'oauth2-sso'\n ? protocolConfig.runtimeContract as OAuth2SsoRuntimeContract\n : undefined;\n }\n\n /**\n * Manual mode: Use all provided endpoints directly (backward-compatible).\n */\n private resolveFromManual(\n oidcConfig: Record<string, any>,\n ): {\n authorizationUrl: string; tokenUrl: string; userInfoUrl?: string;\n jwksUri?: string; endSessionEndpoint?: string; issuer?: string;\n scopes: string[];\n } {\n if (!oidcConfig.authorizationEndpoint || !oidcConfig.tokenEndpoint) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'templateMode=manual requires authorizationEndpoint and tokenEndpoint' },\n });\n }\n\n const customScopes = oidcConfig.customScopes || [];\n const scopes = [...new Set([...oidcConfig.scopes, ...customScopes])];\n\n return {\n authorizationUrl: oidcConfig.authorizationEndpoint,\n tokenUrl: oidcConfig.tokenEndpoint,\n userInfoUrl: oidcConfig.userInfoEndpoint,\n jwksUri: oidcConfig.jwksUri,\n endSessionEndpoint: oidcConfig.endSessionEndpoint,\n issuer: oidcConfig.issuer,\n scopes,\n };\n }\n\n /**\n * Build the canonical `OAuth2ProfileMapping` from an enterprise connection's\n * OIDC `claimsMapping`.\n *\n * DEFENSE-IN-DEPTH DEFAULTS (`email` / `firstName` / `lastName`): each falls\n * back to the standard OIDC claim name (`email`, `given_name`, `family_name`)\n * when the connection's `claimsMapping` — or an individual field on it — is\n * absent or empty. The fallbacks mirror {@link GENERIC_OIDC_PROFILE_MAPPING}\n * and the `oidc.claimsMapping` Zod defaults on `SsoConnectionBaseSchema`\n * (`@wildo-ai/saas-models`), so the three sources agree on one contract.\n *\n * Why this guard is needed — the schema defaults are NOT guaranteed here.\n * Zod `.default()` fires at WRITE-time input parse and only when the\n * `claimsMapping` key is present; a `claimsMapping`-absent object throws at\n * parse rather than synthesizing the key. This value, however, is consumed\n * straight off a SYSTEM READ of the stored connection\n * (`loadSsoConnectionAsSystem` → `readAsSystem`), and the read boundary does\n * not re-synthesize a `claimsMapping` that was never persisted — e.g. a raw\n * repository row, a mongosh-inserted doc, or a nested-subdocument `$set`\n * UPDATE that replaced `oidc` without re-supplying `claimsMapping`. Without a\n * fallback, `profileMapping.email` is `undefined`, `extractUserProfile`\n * (`oauth2-authentication.backend.service`) then resolves an empty email and\n * throws `AUTHENTICATION_INVALID_TOKEN` (\"missing providerUserId or email\"),\n * so EVERY enterprise OIDC login for that connection fails at profile\n * extraction — after a successful token exchange.\n *\n * Additive / no-regression: `||` supplies the standard default whenever the\n * field is absent OR an empty string. A claim NAME is never legitimately\n * empty (`z.string()` on `claimsMapping.*` carries no `.min(1)`, so a\n * form-cleared field or a partial stored doc can persist `''`), so `''` is\n * treated like absent — closing the exact malformed-doc hole this guard\n * exists for, which a `null`/`undefined`-only `??` would leave open. An\n * authored non-standard claim name is preserved untouched. Mirrors the\n * social-path helper `buildProfileMapping`, which defaults the same way.\n *\n * `id` / `name` / `image` / `emailVerified` are framework-fixed standard OIDC\n * claims (not operator-mappable on the enterprise connection), so they stay\n * hardcoded rather than reading from `claimsMapping`.\n */\n private buildEnterpriseProfileMapping(claimsMapping?: Record<string, any>): OAuth2ProfileMapping {\n const m = claimsMapping || {};\n return {\n id: 'sub',\n email: m.email || 'email',\n firstName: m.firstName || 'given_name',\n lastName: m.lastName || 'family_name',\n name: 'name',\n image: 'picture',\n emailVerified: 'email_verified',\n roles: m.roles,\n groups: m.groups,\n department: m.department,\n employeeId: m.employeeId,\n };\n }\n\n // ═══════════════════════════════════════════════════════════════\n // G3: Org-Level OAuth2 Provider Restrictions\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Check if a specific OAuth2 social provider is allowed for a scope (org or app).\n *\n * Evaluation order:\n * 1. No config / no restrictions → allowed (backward-compatible)\n * 2. requireEnterpriseSSOOnly → blocked (all social providers)\n * 3. allowedProviders non-empty and provider not in list → blocked\n * 4. blockedProviders includes provider → blocked (takes precedence over allowlist)\n * 5. Otherwise → allowed\n */\n public async isProviderAllowed(\n ec: ExecutionContext<any>,\n scopeType: AuthScopeType,\n scopeId: string,\n providerRef: string,\n ): Promise<{ allowed: boolean; reason?: string }> {\n const ssoConfig = await this.orgConfigService.loadSSOConfig(ec, scopeType, scopeId);\n if (!(ssoConfig as any)?.oauth2ProviderRestrictions) {\n return { allowed: true };\n }\n\n const restrictions = (ssoConfig as any).oauth2ProviderRestrictions;\n\n if (restrictions.requireEnterpriseSSOOnly) {\n return { allowed: false, reason: 'Organization requires enterprise SSO only' };\n }\n\n if (restrictions.allowedProviders?.length > 0 && !restrictions.allowedProviders.includes(providerRef)) {\n return { allowed: false, reason: 'Provider not in organization allowlist' };\n }\n\n if (restrictions.blockedProviders?.includes(providerRef)) {\n return { allowed: false, reason: 'Provider blocked by organization policy' };\n }\n\n return { allowed: true };\n }\n\n /**\n * Filter a list of OAuth2 social provider refs by scope-level restrictions.\n * Returns only the providers that are allowed for the scope.\n */\n public async filterProviders(\n ec: ExecutionContext<any>,\n scopeType: AuthScopeType,\n scopeId: string,\n providerRefs: string[],\n ): Promise<string[]> {\n const results = await Promise.all(\n providerRefs.map(async (ref) => {\n const { allowed } = await this.isProviderAllowed(ec, scopeType, scopeId, ref);\n return allowed ? ref : null;\n }),\n );\n return results.filter((ref): ref is string => ref !== null);\n }\n\n // ═══════════════════════════════════════════════════════════════\n // State-Based Resolution (Callback Router)\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Re-resolve a connection from state token metadata on OAuth2 callback.\n *\n * The callback handler calls this to get fresh credentials matching the\n * authorize-time configuration. Dispatches to resolveSocialConnection()\n * or resolveEnterpriseConnection() based on connectionType in the token.\n *\n * For social connections with a scopeId, the scope context is forwarded\n * to resolveSocialConnection() so it can apply credential overrides (P3)\n * and signed-JWT generation in the correct order.\n *\n * Scope is explicit: enterprise state requires both `scopeType` and `scopeId`.\n * A partial or mode-less state token fails closed instead of being interpreted\n * as an organization-scoped legacy token.\n */\n public async resolveFromState(\n ec: ExecutionContext<any>,\n stateMetadata: OAuth2StateTokenMetadata,\n ): Promise<OAuth2ResolvedConnection> {\n const scopeId = stateMetadata.scopeId;\n const scopeType = stateMetadata.scopeType;\n if ((scopeId === undefined) !== (scopeType === undefined)) {\n throw this.errorBuilder.buildError(ErrorType.VALIDATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_INVALID_TOKEN,\n });\n }\n\n if (stateMetadata.connectionType === SsoConnectionType.ENTERPRISE) {\n if (!scopeType || !scopeId || !stateMetadata.connectionId) {\n throw this.errorBuilder.buildError(ErrorType.VALIDATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_INVALID_TOKEN,\n });\n }\n return this.resolveEnterpriseConnection(\n scopeType,\n scopeId,\n stateMetadata.connectionId,\n );\n }\n\n return this.resolveSocialConnection(stateMetadata.providerRef, scopeId && scopeType ? {\n ec,\n scopeType,\n scopeId,\n } : undefined);\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Private Helpers\n // ═══════════════════════════════════════════════════════════════\n\n private resolveTokenEndpointAuthMethod(\n method?: string,\n ): 'client_secret_post' | 'client_secret_basic' | 'none' {\n switch (method) {\n case 'client_secret_basic':\n return 'client_secret_basic';\n case 'none':\n return 'none';\n default:\n return 'client_secret_post';\n }\n }\n\n private resolveResponseMode(\n extraAuthParams?: Record<string, string>,\n ): 'query' | 'fragment' | 'form_post' {\n const mode = extraAuthParams?.response_mode;\n if (mode === 'form_post') return 'form_post';\n if (mode === 'fragment') return 'fragment';\n return 'query';\n }\n\n private resolveIdentitySource(\n extensions: Record<string, unknown>,\n userInfoUrl?: string,\n ): 'userinfo' | 'id_token' | 'callback_body' {\n if (extensions.identitySource === 'id_token') return 'id_token';\n if (extensions.identitySource === 'callback_body') return 'callback_body';\n if (userInfoUrl) return 'userinfo';\n return 'id_token'; // Fallback for providers without userinfo\n }\n\n private resolvePKCEMethod(\n capabilities: Record<string, unknown>,\n ): 'S256' | 'plain' | null {\n if (!capabilities.supportsPKCE) return null;\n const preferred = capabilities.preferredPKCEMethod as string | undefined;\n if (preferred === 'plain') return 'plain';\n return 'S256'; // Default to S256 when PKCE is supported\n }\n\n private buildProfileMapping(\n userProfileMapping?: Record<string, string>,\n extensions?: Record<string, unknown>,\n ): OAuth2ProfileMapping {\n const mapping = userProfileMapping || {};\n return {\n id: mapping.id || 'sub',\n email: mapping.email || 'email',\n name: mapping.name || 'name',\n image: mapping.image || 'picture',\n emailVerified: mapping.emailVerified || 'email_verified',\n // Extension-based fields (Google provides given_name/family_name separately)\n firstName: extensions?.firstNameField as string | undefined,\n lastName: extensions?.lastNameField as string | undefined,\n };\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oauth2-connection-resolver.backend.service.js","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * OAuth2ConnectionResolverBackendService\n *\n * Resolves OAuth2 connection configurations from multiple sources:\n * - Provider definitions from the backend provider registry\n * - App-specific social OAuth2 config from AppConfiguration.auth.socialOAuth2Providers\n * - Client credentials from AppConfiguration.providerConfigurations + secrets\n *\n * Produces an `OAuth2ResolvedConnection` — the canonical input for the OAuth2 engine.\n *\n * Step 4: Implements `resolveSocialConnection()` (fully functional)\n * Step 15: Implements `resolveEnterpriseConnection()` (template/discovery/manual branching)\n *\n * Browser-only OAuth2 / SAML callback model. The redirect URI derived from\n * `runtime.endPoints.main_backend_api.publicUrl` is the OAuth2 callback URL\n * registered at IdPs; the framework targets web stacks exclusively, so\n * there is no native deep-link variant to account for here.\n */\n\nimport 'reflect-metadata';\nimport { 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';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { ExternalProvidersRegistryBackendService } from '~wildo-backend-lib/external-providers/services/external-providers-registry.backend.service';\nimport { AuthOrganizationConfigurationService } from '~wildo-backend-lib/security/authentications/services/admin-config/auth-organization-configuration.service';\nimport { OIDCDiscoveryBackendService } from '~wildo-backend-lib/security/authentications/services/admin-config/oidc-discovery.backend.service';\nimport {\n ErrorType,\n ErrorCustomMessageReference,\n AuthScopeType,\n ExternalIdentitySource,\n SSOPKCEMethod,\n SSOResponseType,\n SSOTemplateMode,\n SsoConnectionType,\n SsoProtocol,\n isWildoBackendError,\n} from '@wildo-ai/saas-models';\nimport type {\n OAuth2ResolvedConnection,\n OAuth2ProfileMapping,\n OAuth2StateTokenMetadata,\n} from '~wildo-backend-lib/security/authentications/models/oauth2-connection.backend.schemas';\nimport { buildEnterpriseConnectionScope } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport jwt from 'jsonwebtoken';\nimport { ExternalProvider_ExchangeProtocol_Kind, ProviderProtocolRuntimeKind } from '@wildo-ai/external-connectors-models';\nimport { isSocialOAuth2LoginPurpose } from '~wildo-backend-lib/security/authentications/utils/social-oauth2-purpose.backend.utils';\n\n// ═══════════════════════════════════════════════════════════════\n// Signed JWT Client Secret — Generic (extensions-driven)\n// ═══════════════════════════════════════════════════════════════\n\ninterface SignedJwtClientSecretParams {\n privateKey: string;\n keyId: string;\n teamId: string;\n clientId: string;\n algorithm: string;\n audience: string;\n maxLifetimeSeconds: number;\n}\n\nconst signedJwtCache = new Map<string, { jwt: string; expiresAt: number }>();\nconst SIGNED_JWT_CACHE_SKEW_MS = 5 * 60 * 1000;\nconst OAUTH2_PROVIDER_CONFIG_KEY = 'sso_oauth2';\n\ninterface OAuth2SsoRuntimeContract {\n kind: typeof ProviderProtocolRuntimeKind.OAUTH2_SSO;\n authorizationEndpoint: string;\n tokenEndpoint: string;\n userInfoEndpoint?: string;\n jwksUri?: string;\n issuer?: string;\n scopes: ReadonlyArray<string>;\n clientIdPublicConfigKey?: string;\n clientSecretRef: string;\n supportsPkce: boolean;\n supportsOidc: boolean;\n tokenEndpointAuthMethod?: 'client_secret_post' | 'client_secret_basic' | 'none';\n responseMode?: 'query' | 'fragment' | 'form_post';\n identitySource?: 'userinfo' | 'id_token' | 'callback_body';\n profileMapping?: OAuth2ProfileMapping;\n extraAuthParams?: Record<string, string>;\n extraTokenParams?: Record<string, string>;\n tokenRequestHeaders?: Record<string, string>;\n extensions?: Record<string, unknown>;\n}\n\n/**\n * Generic OIDC profile-mapping default — used when a provider's\n * `runtimeContract.profileMapping` is absent. All four engine-shipped social\n * OAuth2 providers (`google`, `microsoft`, `apple`, `github`) declare their\n * own `profileMapping` on the runtime contract, so this default exists only\n * to keep the resolver total for app-contributed OIDC providers that follow\n * the standard claim names.\n *\n * Per-provider behavior MUST live in the provider module's runtime contract,\n * not branched here on `providerRef`.\n */\nconst GENERIC_OIDC_PROFILE_MAPPING: OAuth2ProfileMapping = {\n id: 'sub',\n email: 'email',\n firstName: 'given_name',\n lastName: 'family_name',\n name: 'name',\n image: 'picture',\n emailVerified: 'email_verified',\n};\n\nfunction getOrGenerateSignedJwtClientSecret(\n providerRef: string,\n clientId: string,\n params: SignedJwtClientSecretParams,\n): string {\n const cacheKey = [\n providerRef,\n clientId,\n params.keyId,\n params.teamId,\n params.algorithm,\n params.audience,\n params.maxLifetimeSeconds,\n ].join(':');\n const cached = signedJwtCache.get(cacheKey);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.jwt;\n }\n\n const issuedAt = Date.now();\n const token = jwt.sign({}, params.privateKey, {\n algorithm: params.algorithm as jwt.Algorithm,\n keyid: params.keyId,\n issuer: params.teamId,\n audience: params.audience,\n subject: params.clientId,\n expiresIn: params.maxLifetimeSeconds,\n });\n\n const tokenTtlMs = Math.max(0, params.maxLifetimeSeconds * 1000 - SIGNED_JWT_CACHE_SKEW_MS);\n signedJwtCache.set(cacheKey, { jwt: token, expiresAt: issuedAt + tokenTtlMs });\n return token;\n}\n\n/**\n * Resolves OAuth2 connection configurations for social and enterprise SSO.\n * The engine (OAuth2AuthenticationBackendService) never reads from provider catalogs\n * or AppConfiguration directly — it only operates on OAuth2ResolvedConnection.\n */\n@injectable()\nexport class OAuth2ConnectionResolverBackendService {\n private readonly logDebug: (message: string, context?: Record<string, unknown>) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService) private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.ExternalProvidersRegistryService) private readonly externalProvidersRegistry: ExternalProvidersRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.AuthOrganizationConfigurationService) private readonly orgConfigService: AuthOrganizationConfigurationService,\n @inject(SAAS_SERVICE_TYPES.OIDCDiscoveryService) private readonly oidcDiscovery: OIDCDiscoveryBackendService,\n ) {\n this.logDebug = this.logger.debugByType('OAuth2ConnectionResolver');\n this.logger.setDebugTypeLogging('OAuth2ConnectionResolver', false);\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Social Connection Resolution\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Resolve a social SSO connection from the provider catalog + app config + secrets.\n *\n * Resolution chain:\n * 1. Look up provider definition from the backend provider registry\n * 2. Find the SSO_OAUTH2 protocol on the provider\n * 3. Read app-specific social OAuth2 config from auth.socialOAuth2Providers[providerRef]\n * 4. Read OAuth2 credentials from providerConfigurations[providerRef][sso_oauth2]\n * 5. Resolve clientSecret from secrets store (app-level baseline)\n * 5b. Check for org/app-level social credential overrides (P3)\n * 5c. Generate signed-JWT client secret if provider requires it (e.g. Apple)\n * 6. Derive redirectUri from publicUrl\n * 7. Map profile fields, scopes, PKCE, response mode, identity source\n *\n * ORDERING CONSTRAINT (5b before 5c):\n * Override credentials (5b) MUST be resolved before signed-JWT generation (5c).\n * For providers like Apple, `clientSecret` is a raw private key that needs JWT signing.\n * If 5c ran first, the override would replace the generated JWT with a raw key,\n * causing the token exchange to fail at the IdP. By running 5b first, whichever\n * private key is active (app-level or override) goes through JWT signing in 5c.\n *\n * @param providerRef - Provider identifier (e.g. 'google', 'apple')\n * @param options.ec - Execution context, required when scopeId is set\n * @param options.scopeType - 'organization' or 'application' (defaults to 'organization')\n * @param options.scopeId - Org/app ID to check for credential overrides in SsoConfig\n */\n public async resolveSocialConnection(\n providerRef: string,\n options?: { ec?: ExecutionContext<any>; scopeType?: AuthScopeType; scopeId?: string },\n ): Promise<OAuth2ResolvedConnection> {\n this.logDebug('Resolving social connection', { providerRef, scopeId: options?.scopeId });\n\n // 1. Look up provider OAuth2 runtime contract from the effective runtime registry.\n const oauth2Contract = this.getOAuth2RuntimeContract(providerRef);\n if (oauth2Contract?.kind !== ProviderProtocolRuntimeKind.OAUTH2_SSO) {\n throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {\n customMessageReference: ErrorCustomMessageReference.OAUTH_PROVIDER_NOT_FOUND,\n });\n }\n\n try {\n if (!this.externalProvidersRegistry.isProviderEnabled(providerRef, ExternalProvider_ExchangeProtocol_Kind.SSO_OAUTH2)) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `OAuth2 provider '${providerRef}' is restricted by external provider policy` },\n });\n }\n } catch (error) {\n if (isWildoBackendError(error)) throw error;\n this.logDebug('External provider policy not initialized for OAuth2 provider check; falling back to auth.socialOAuth2Providers', {\n providerRef,\n });\n }\n\n // 3. Read app-specific social OAuth2 config\n const appConfig = this.appConfigService.config;\n const socialOAuth2ProviderConfig = appConfig.auth?.socialOAuth2Providers?.[providerRef];\n if (!socialOAuth2ProviderConfig || socialOAuth2ProviderConfig.enabled === false) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Social OAuth2 provider '${providerRef}' is not enabled in app configuration` },\n });\n }\n if (!isSocialOAuth2LoginPurpose(socialOAuth2ProviderConfig.purpose)) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Social OAuth2 provider '${providerRef}' is not configured for user sign-in` },\n });\n }\n\n // 4. Read OAuth2 credentials from providerConfigurations\n const providerConfigs = appConfig.providerConfigurations?.[providerRef];\n const protocolConfig = providerConfigs?.[OAUTH2_PROVIDER_CONFIG_KEY] as Record<string, any> | undefined;\n\n let clientId = protocolConfig?.authConfig?.clientId\n || protocolConfig?.clientId\n || (oauth2Contract.clientIdPublicConfigKey ? protocolConfig?.[oauth2Contract.clientIdPublicConfigKey] : undefined);\n\n if (!clientId) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Missing clientId for OAuth2 provider '${providerRef}'` },\n });\n }\n\n // 5. Resolve clientSecret from env-provided provider secret material\n const secretRef = protocolConfig?.authConfig?.secretRef || oauth2Contract.clientSecretRef;\n let clientSecret = '';\n\n if (secretRef) {\n clientSecret = this.externalProvidersRegistry.getProviderSecret(\n providerRef,\n OAUTH2_PROVIDER_CONFIG_KEY as any,\n secretRef,\n ) || '';\n }\n\n if (!clientSecret) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Missing env-provided clientSecret for OAuth2 provider '${providerRef}'. Check env secretRef '${secretRef}'.` },\n });\n }\n\n // 5b. Scope-level social credential overrides (P3).\n // An org/app can override the platform-level clientId + clientSecret with their own\n // OAuth2 app credentials (stored in SsoConfig.socialCredentialOverrides).\n //\n // MUST run BEFORE step 5c (signed-JWT generation). For providers like Apple, the\n // override's clientSecret is a raw private key that still needs JWT signing.\n // signedJwtKeyId/signedJwtTeamId are captured here and consumed in step 5c.\n let overrideSignedJwtKeyId: string | undefined;\n let overrideSignedJwtTeamId: string | undefined;\n if (options?.scopeId && options.ec) {\n const scopeType = options.scopeType || AuthScopeType.ORGANIZATION;\n try {\n const ssoConfig = await this.orgConfigService.loadSSOConfig(options.ec, scopeType, options.scopeId);\n const overrides = ssoConfig?.socialCredentialOverrides;\n const override = overrides?.find(o => o.providerRef === providerRef);\n if (override) {\n clientId = override.clientId;\n clientSecret = override.clientSecret;\n overrideSignedJwtKeyId = override.signedJwtKeyId;\n overrideSignedJwtTeamId = override.signedJwtTeamId;\n this.logDebug('Social credentials overridden by scope config', {\n providerRef, scopeType, scopeId: options.scopeId,\n });\n }\n } catch (err) {\n if (!isWildoBackendError(err)) throw err;\n this.logDebug('Scope SSO config not found for credential override (non-fatal)', {\n providerRef, scopeType, scopeId: options.scopeId,\n });\n }\n }\n\n // 5c. Signed JWT client secret generation.\n // Some providers (e.g. Apple) don't accept a static client secret — they require a\n // short-lived JWT signed with a private key. The provider's extensions declare this\n // via clientSecretType='signed_jwt'.\n //\n // At this point, `clientSecret` holds either the app-level or overridden private key\n // (determined by step 5b). The JWT params (teamId, keyId) are resolved with a\n // fallback chain: override values from step 5b → app-level secrets store.\n const extensions = oauth2Contract.extensions ?? {};\n if (extensions.clientSecretType === 'signed_jwt') {\n const algorithm = String(extensions.clientSecretAlgorithm ?? 'ES256');\n const audience = String(extensions.clientSecretAudience ?? 'https://appleid.apple.com');\n const maxLifetimeSeconds = Number(extensions.clientSecretMaxLifetimeSeconds ?? 60 * 60 * 24 * 180);\n const teamIdRef = String(extensions.teamIdSecretRef ?? `${providerRef.toUpperCase()}_TEAM_ID`);\n const keyIdRef = String(extensions.keyIdSecretRef ?? `${providerRef.toUpperCase()}_KEY_ID`);\n const teamId = overrideSignedJwtTeamId || this.externalProvidersRegistry.getProviderSecret(\n providerRef,\n OAUTH2_PROVIDER_CONFIG_KEY as any,\n teamIdRef,\n );\n const keyId = overrideSignedJwtKeyId || this.externalProvidersRegistry.getProviderSecret(\n providerRef,\n OAUTH2_PROVIDER_CONFIG_KEY as any,\n keyIdRef,\n );\n\n if (!teamId || !keyId) {\n const missing = [!teamId ? teamIdRef : '', !keyId ? keyIdRef : ''].filter(Boolean).join(', ');\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `Provider '${providerRef}' requires signed JWT client secret. Missing secrets: ${missing}` },\n });\n }\n\n clientSecret = getOrGenerateSignedJwtClientSecret(\n providerRef,\n clientId,\n { privateKey: clientSecret, keyId, teamId, clientId, algorithm, audience, maxLifetimeSeconds },\n );\n this.logDebug('Generated signed JWT client secret', { providerRef, algorithm, audience });\n }\n\n // 6. Derive redirectUri from publicUrl (TRAP 14: publicUrl is optional)\n const publicUrl = appConfig.runtime?.endPoints?.main_backend_api?.publicUrl;\n if (!publicUrl) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'runtime.endPoints.main_backend_api.publicUrl is required for OAuth2 redirect URI derivation' },\n });\n }\n const redirectUri = `${publicUrl}/api/v1/auth/oauth2/callback/${providerRef}`;\n\n // 7. Build the resolved connection\n const tokenEndpointAuthMethod = this.resolveTokenEndpointAuthMethod(\n protocolConfig?.tokenEndpointAuthMethod ?? oauth2Contract.tokenEndpointAuthMethod,\n );\n const responseMode = oauth2Contract.responseMode ?? this.resolveResponseMode({\n ...oauth2Contract.extraAuthParams,\n ...protocolConfig?.extraAuthParams,\n });\n const identitySource = oauth2Contract.identitySource\n ?? this.resolveIdentitySource(extensions, oauth2Contract.userInfoEndpoint);\n const pkceMethod = oauth2Contract.supportsPkce ? 'S256' : null;\n\n // Scopes: provider defaults + app-specific additional scopes\n const defaultScopes = oauth2Contract.scopes || [];\n const additionalScopes = socialOAuth2ProviderConfig.additionalScopes || [];\n const scopes = [...new Set([...defaultScopes, ...additionalScopes])];\n\n // Profile mapping\n const profileMapping = oauth2Contract.profileMapping ?? GENERIC_OIDC_PROFILE_MAPPING;\n\n // Extra parameters\n const extraAuthParams = {\n ...(oauth2Contract.extraAuthParams || {}),\n ...(protocolConfig?.extraAuthParams || {}),\n };\n const extraTokenParams = {\n ...(oauth2Contract.extraTokenParams || {}),\n ...(protocolConfig?.extraTokenParams || {}),\n };\n const tokenRequestHeaders = {\n ...(oauth2Contract.tokenRequestHeaders || {}),\n ...(protocolConfig?.tokenRequestHeaders || {}),\n };\n const resolvedExtensions = {\n ...extensions,\n ...(protocolConfig?.extensions || {}),\n };\n\n // Issuer and JWKS for ID token validation\n const issuer = oauth2Contract.issuer;\n const jwksUri = oauth2Contract.jwksUri;\n\n const connection: OAuth2ResolvedConnection = {\n source: oauth2Contract.supportsOidc\n ? ExternalIdentitySource.OIDC\n : ExternalIdentitySource.OAUTH2,\n connectionType: SsoConnectionType.SOCIAL,\n providerRef,\n displayName: socialOAuth2ProviderConfig.displayName || providerRef,\n authorizationUrl: oauth2Contract.authorizationEndpoint,\n tokenUrl: oauth2Contract.tokenEndpoint,\n userInfoUrl: oauth2Contract.userInfoEndpoint,\n redirectUri,\n issuer,\n jwksUri,\n clientId,\n clientSecret,\n tokenEndpointAuthMethod,\n scopes,\n pkceMethod,\n responseMode,\n // A social provider's contract does not express authorization-request shaping; the engine\n // drives the authorization-code flow for all of them.\n responseType: SSOResponseType.CODE,\n identitySource,\n profileMapping,\n extraAuthParams: Object.keys(extraAuthParams).length > 0 ? extraAuthParams : undefined,\n extraTokenParams: Object.keys(extraTokenParams).length > 0 ? extraTokenParams : undefined,\n tokenRequestHeaders: Object.keys(tokenRequestHeaders).length > 0 ? tokenRequestHeaders : undefined,\n extensions: Object.keys(resolvedExtensions).length > 0 ? resolvedExtensions : undefined,\n };\n\n this.logDebug('Social connection resolved', {\n providerRef,\n connectionType: SsoConnectionType.SOCIAL,\n responseMode,\n identitySource,\n pkceMethod,\n scopeCount: scopes.length,\n });\n\n return connection;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Enterprise Connection Resolution (Step 15)\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Resolve an enterprise SSO connection from scope-level OIDC configuration.\n *\n * Branches on `templateMode`:\n * - **template**: Load provider definition from the backend provider registry,\n * extract SSO_OAUTH2 protocol, apply templateOverrides to URLs\n * - **discovery**: Call OIDCDiscoveryService.discoverEndpoints(issuer)\n * - **manual**: Use provided endpoints directly\n *\n * The result is an OAuth2ResolvedConnection with\n * `connectionType: SsoConnectionType.ENTERPRISE`.\n * The OAuth2 engine (buildAuthorizationUrl, handleCallback, fetchUserProfile) is\n * reused unchanged — only the resolver logic is different.\n */\n public async resolveEnterpriseConnection(\n scopeType: AuthScopeType,\n scopeId: string,\n connectionId: string,\n ): Promise<OAuth2ResolvedConnection> {\n this.logDebug('Resolving enterprise connection', { scopeType, scopeId, connectionId });\n\n // 1. Load the SsoConnection resource by connectionId.\n // This runs PRE-AUTH (enterprise SSO login initiation — no user is\n // authenticated yet), so the connection is read through the system-access\n // path: the caller holds no ORG_ADMIN / APP_ADMIN role the connection's\n // READ ACL demands. `loadSsoConnectionAsSystem` bypasses that ACL under the\n // connection resource's `systemAccessPolicy.read = ALLOWED` opt-in\n // (fail-closed + audited). See AuthOrganizationConfigurationService.\n const ssoConnection = await this.orgConfigService.loadSsoConnectionAsSystem(scopeType, scopeId, connectionId);\n\n if (!ssoConnection || !ssoConnection.enabled) {\n throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {\n customMessageReference: ErrorCustomMessageReference.SSO_CONNECTION_NOT_FOUND,\n });\n }\n\n // 2. SAML connections use a separate authentication flow — reject if this is a SAML connection\n if (ssoConnection.protocol === SsoProtocol.SAML) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'SAML connections use the SAML authentication flow, not the OAuth2 resolver. Use /auth/saml/login/:connectionId instead.' },\n });\n }\n\n if (!ssoConnection.oidc) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: `SSO connection '${connectionId}' has protocol 'oidc' but no OIDC configuration object.` },\n });\n }\n\n // 3. Build a flattened config view for the downstream resolution methods\n const oidcConfig: Record<string, any> = {\n ...ssoConnection.oidc,\n externalProviderId: ssoConnection.externalProviderId,\n displayName: ssoConnection.displayName,\n allowedDomains: ssoConnection.allowedDomains,\n autoCreateUsers: ssoConnection.autoCreateUsers,\n autoVerifyEmail: ssoConnection.autoVerifyEmail,\n defaultRole: ssoConnection.defaultRole,\n roleMapping: ssoConnection.roleMapping,\n groupMapping: ssoConnection.groupMapping,\n };\n\n // 4. Resolve endpoints based on templateMode\n const templateMode = oidcConfig.templateMode || SSOTemplateMode.MANUAL;\n let authorizationUrl: string;\n let tokenUrl: string;\n let userInfoUrl: string | undefined;\n let jwksUri: string | undefined;\n let endSessionEndpoint: string | undefined;\n let issuer: string | undefined;\n let scopes: string[];\n let extraAuthParams: Record<string, string> | undefined;\n let pkceMethod: OAuth2ResolvedConnection['pkceMethod'] = oidcConfig.pkceEnabled\n ? (\n oidcConfig.pkceMethod === SSOPKCEMethod.PLAIN\n ? SSOPKCEMethod.PLAIN\n : SSOPKCEMethod.S256\n )\n : null;\n\n switch (templateMode) {\n case SSOTemplateMode.TEMPLATE:\n ({ authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes, extraAuthParams, pkceMethod } =\n await this.resolveFromTemplate(oidcConfig, pkceMethod));\n break;\n\n case SSOTemplateMode.DISCOVERY:\n ({ authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes } =\n await this.resolveFromDiscovery(oidcConfig));\n break;\n\n case SSOTemplateMode.MANUAL:\n default:\n ({ authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes } =\n this.resolveFromManual(oidcConfig));\n break;\n }\n\n // 4. Derive redirectUri from publicUrl\n const publicUrl = this.appConfigService.config.runtime?.endPoints?.main_backend_api?.publicUrl;\n if (!publicUrl) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'runtime.endPoints.main_backend_api.publicUrl is required for OAuth2 redirect URI derivation' },\n });\n }\n const providerRef = oidcConfig.externalProviderId || 'enterprise-oidc';\n const redirectUri = `${publicUrl}/api/v1/auth/oauth2/callback/${providerRef}`;\n\n // 5. Map org claimsMapping → canonical profileMapping\n const profileMapping = this.buildEnterpriseProfileMapping(oidcConfig.claimsMapping);\n\n // 6. Build response mode\n const responseMode = oidcConfig.responseMode || 'query';\n\n /*\n * 6b. Authorization-request shaping (#419). Until 2026-09-08 these were persisted, audit-marked\n * and never sent — so an operator who set `acrValues` to demand step-up at the IdP got no such\n * demand and no error.\n *\n * `responseType` is REFUSED rather than forwarded when it names a flow the engine does not\n * implement. `SSOResponseType` offers `code`, `id_token` and `token`; the callback path only\n * exchanges an authorization CODE, so sending `id_token` would trade a silent no-op for a\n * silently broken login — strictly worse. A refusal at resolution time names the connection and\n * the value, and lifts on its own the day the implicit flows are implemented.\n */\n const responseType = oidcConfig.responseType ?? SSOResponseType.CODE;\n if (responseType !== SSOResponseType.CODE) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n message: `SSO connection declares oidc.responseType \"${responseType}\", and this engine implements the authorization-code flow only. `\n + 'Set it to \"code\", or implement the implicit flow before selecting it.',\n connectionId,\n providerRef: oidcConfig.externalProviderId,\n },\n });\n }\n\n // 7. Assemble OAuth2ResolvedConnection\n const connection: OAuth2ResolvedConnection = {\n source: ExternalIdentitySource.OIDC,\n connectionType: SsoConnectionType.ENTERPRISE,\n providerRef,\n displayName: oidcConfig.displayName,\n authorizationUrl,\n tokenUrl,\n userInfoUrl,\n redirectUri,\n issuer,\n jwksUri,\n clientId: oidcConfig.clientId,\n clientSecret: oidcConfig.clientSecret,\n tokenEndpointAuthMethod: 'client_secret_post',\n scopes,\n pkceMethod,\n responseMode: responseMode as 'query' | 'fragment' | 'form_post',\n responseType: SSOResponseType.CODE,\n acrValues: oidcConfig.acrValues && oidcConfig.acrValues.length > 0 ? oidcConfig.acrValues : undefined,\n maxAge: oidcConfig.maxAge,\n prompt: oidcConfig.prompt,\n identitySource: userInfoUrl ? 'userinfo' : 'id_token',\n profileMapping,\n extraAuthParams,\n scope: buildEnterpriseConnectionScope(scopeType, scopeId, connectionId),\n // Build the provisioning config ONCE here (the single source), so the callback passes it\n // straight to provisionEnterpriseUser with no per-field re-copy. Defaults are centralised (the loose\n // per-field copies previously diverged — OAuth2 omitted the `allowedDomains` fallback).\n provisioningConfig: {\n autoCreateUsers: oidcConfig.autoCreateUsers ?? true,\n autoVerifyEmail: oidcConfig.autoVerifyEmail ?? true,\n defaultRole: oidcConfig.defaultRole,\n roleMapping: oidcConfig.roleMapping,\n groupMapping: oidcConfig.groupMapping,\n allowedDomains: oidcConfig.allowedDomains ?? [],\n },\n };\n\n this.logDebug('Enterprise connection resolved', {\n scopeType,\n scopeId,\n connectionId,\n templateMode,\n providerRef,\n hasUserInfoUrl: !!userInfoUrl,\n });\n\n return connection;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Enterprise Resolution Strategies\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Template mode: Load provider OAuth2 runtime contract and apply org overrides.\n * Example: Microsoft Azure AD — load Microsoft provider template, substitute {tenant} in URLs.\n */\n private async resolveFromTemplate(\n oidcConfig: Record<string, any>,\n defaultPkceMethod: 'S256' | 'plain' | null,\n ): Promise<{\n authorizationUrl: string; tokenUrl: string; userInfoUrl?: string;\n jwksUri?: string; endSessionEndpoint?: string; issuer?: string;\n scopes: string[]; extraAuthParams?: Record<string, string>;\n pkceMethod: 'S256' | 'plain' | null;\n }> {\n const externalProviderId = oidcConfig.externalProviderId;\n if (!externalProviderId) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'templateMode=template requires externalProviderId' },\n });\n }\n\n const oauth2Contract = this.getOAuth2RuntimeContract(externalProviderId);\n if (!oauth2Contract) {\n throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {\n customMessageReference: ErrorCustomMessageReference.OAUTH_PROVIDER_NOT_FOUND,\n });\n }\n\n const templateOverrides = oidcConfig.templateOverrides || {};\n\n // Apply template variable substitution to endpoint URLs\n const authorizationUrl = this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.authorizationEndpoint || '', templateOverrides);\n const tokenUrl = this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.tokenEndpoint || '', templateOverrides);\n const userInfoUrl = oauth2Contract.userInfoEndpoint\n ? this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.userInfoEndpoint, templateOverrides)\n : undefined;\n const jwksUri = oauth2Contract.jwksUri\n ? this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.jwksUri, templateOverrides)\n : undefined;\n const endSessionEndpoint = undefined; // Discovery would need to be fetched for this\n\n // Resolve issuer from discovery URL template\n const issuer = oauth2Contract.issuer\n ? this.oidcDiscovery.resolveTemplateUrl(oauth2Contract.issuer, templateOverrides)\n : undefined;\n\n // Scopes: template defaults + org custom scopes\n const defaultScopes = oauth2Contract.scopes || ['openid', 'email', 'profile'];\n const customScopes = oidcConfig.customScopes || [];\n const scopes = [...new Set([...defaultScopes, ...oidcConfig.scopes, ...customScopes])];\n\n // Extra auth params from template + overrides\n let extraAuthParams: Record<string, string> | undefined;\n const templateExtraAuthParams = {\n ...(oauth2Contract.extraAuthParams || {}),\n ...(oidcConfig.extraAuthParams || {}),\n };\n if (Object.keys(templateExtraAuthParams).length > 0) {\n extraAuthParams = this.oidcDiscovery.resolveTemplateParams(templateExtraAuthParams, templateOverrides);\n }\n\n // PKCE from template capabilities\n const pkceMethod = oauth2Contract.supportsPkce ? 'S256' as const : defaultPkceMethod;\n\n return { authorizationUrl, tokenUrl, userInfoUrl, jwksUri, endSessionEndpoint, issuer, scopes, extraAuthParams, pkceMethod };\n }\n\n /**\n * Discovery mode: Auto-discover endpoints from .well-known/openid-configuration.\n * Used for Okta, Auth0, and generic OIDC providers.\n */\n private async resolveFromDiscovery(\n oidcConfig: Record<string, any>,\n ): Promise<{\n authorizationUrl: string; tokenUrl: string; userInfoUrl?: string;\n jwksUri?: string; endSessionEndpoint?: string; issuer?: string;\n scopes: string[];\n }> {\n const issuerUrl = oidcConfig.issuer || oidcConfig.discoveryUrl?.replace('/.well-known/openid-configuration', '');\n if (!issuerUrl) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'templateMode=discovery requires issuer or discoveryUrl' },\n });\n }\n\n const doc = await this.oidcDiscovery.discoverEndpoints(issuerUrl);\n\n const customScopes = oidcConfig.customScopes || [];\n const scopes = [...new Set([...oidcConfig.scopes, ...customScopes])];\n\n return {\n authorizationUrl: doc.authorization_endpoint,\n tokenUrl: doc.token_endpoint,\n userInfoUrl: doc.userinfo_endpoint,\n jwksUri: doc.jwks_uri,\n endSessionEndpoint: doc.end_session_endpoint,\n issuer: doc.issuer,\n scopes,\n };\n }\n\n private getOAuth2RuntimeContract(providerRef: string): OAuth2SsoRuntimeContract | undefined {\n const protocolConfig = this.externalProvidersRegistry.getProviderConfiguration(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.SSO_OAUTH2,\n ) as Record<string, any> | undefined;\n\n return protocolConfig?.runtimeContract?.kind === ProviderProtocolRuntimeKind.OAUTH2_SSO\n ? protocolConfig.runtimeContract as OAuth2SsoRuntimeContract\n : undefined;\n }\n\n /**\n * Manual mode: Use all provided endpoints directly (backward-compatible).\n */\n private resolveFromManual(\n oidcConfig: Record<string, any>,\n ): {\n authorizationUrl: string; tokenUrl: string; userInfoUrl?: string;\n jwksUri?: string; endSessionEndpoint?: string; issuer?: string;\n scopes: string[];\n } {\n if (!oidcConfig.authorizationEndpoint || !oidcConfig.tokenEndpoint) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.APP_CONFIGURATION_NOT_INITIALIZED,\n context: { message: 'templateMode=manual requires authorizationEndpoint and tokenEndpoint' },\n });\n }\n\n const customScopes = oidcConfig.customScopes || [];\n const scopes = [...new Set([...oidcConfig.scopes, ...customScopes])];\n\n return {\n authorizationUrl: oidcConfig.authorizationEndpoint,\n tokenUrl: oidcConfig.tokenEndpoint,\n userInfoUrl: oidcConfig.userInfoEndpoint,\n jwksUri: oidcConfig.jwksUri,\n endSessionEndpoint: oidcConfig.endSessionEndpoint,\n issuer: oidcConfig.issuer,\n scopes,\n };\n }\n\n /**\n * Build the canonical `OAuth2ProfileMapping` from an enterprise connection's\n * OIDC `claimsMapping`.\n *\n * DEFENSE-IN-DEPTH DEFAULTS (`email` / `firstName` / `lastName`): each falls\n * back to the standard OIDC claim name (`email`, `given_name`, `family_name`)\n * when the connection's `claimsMapping` — or an individual field on it — is\n * absent or empty. The fallbacks mirror {@link GENERIC_OIDC_PROFILE_MAPPING}\n * and the `oidc.claimsMapping` Zod defaults on `SsoConnectionBaseSchema`\n * (`@wildo-ai/saas-models`), so the three sources agree on one contract.\n *\n * Why this guard is needed — the schema defaults are NOT guaranteed here.\n * Zod `.default()` fires at WRITE-time input parse and only when the\n * `claimsMapping` key is present; a `claimsMapping`-absent object throws at\n * parse rather than synthesizing the key. This value, however, is consumed\n * straight off a SYSTEM READ of the stored connection\n * (`loadSsoConnectionAsSystem` → `readAsSystem`), and the read boundary does\n * not re-synthesize a `claimsMapping` that was never persisted — e.g. a raw\n * repository row, a mongosh-inserted doc, or a nested-subdocument `$set`\n * UPDATE that replaced `oidc` without re-supplying `claimsMapping`. Without a\n * fallback, `profileMapping.email` is `undefined`, `extractUserProfile`\n * (`oauth2-authentication.backend.service`) then resolves an empty email and\n * throws `AUTHENTICATION_INVALID_TOKEN` (\"missing providerUserId or email\"),\n * so EVERY enterprise OIDC login for that connection fails at profile\n * extraction — after a successful token exchange.\n *\n * Additive / no-regression: `||` supplies the standard default whenever the\n * field is absent OR an empty string. A claim NAME is never legitimately\n * empty (`z.string()` on `claimsMapping.*` carries no `.min(1)`, so a\n * form-cleared field or a partial stored doc can persist `''`), so `''` is\n * treated like absent — closing the exact malformed-doc hole this guard\n * exists for, which a `null`/`undefined`-only `??` would leave open. An\n * authored non-standard claim name is preserved untouched. Mirrors the\n * social-path helper `buildProfileMapping`, which defaults the same way.\n *\n * `id` / `name` / `image` / `emailVerified` are framework-fixed standard OIDC\n * claims (not operator-mappable on the enterprise connection), so they stay\n * hardcoded rather than reading from `claimsMapping`.\n */\n private buildEnterpriseProfileMapping(claimsMapping?: Record<string, any>): OAuth2ProfileMapping {\n const m = claimsMapping || {};\n return {\n id: 'sub',\n email: m.email || 'email',\n firstName: m.firstName || 'given_name',\n lastName: m.lastName || 'family_name',\n name: 'name',\n image: 'picture',\n emailVerified: 'email_verified',\n roles: m.roles,\n groups: m.groups,\n department: m.department,\n employeeId: m.employeeId,\n };\n }\n\n // ═══════════════════════════════════════════════════════════════\n // G3: Org-Level OAuth2 Provider Restrictions\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Check if a specific OAuth2 social provider is allowed for a scope (org or app).\n *\n * Evaluation order:\n * 1. No config / no restrictions → allowed (backward-compatible)\n * 2. requireEnterpriseSSOOnly → blocked (all social providers)\n * 3. allowedProviders non-empty and provider not in list → blocked\n * 4. blockedProviders includes provider → blocked (takes precedence over allowlist)\n * 5. Otherwise → allowed\n */\n public async isProviderAllowed(\n ec: ExecutionContext<any>,\n scopeType: AuthScopeType,\n scopeId: string,\n providerRef: string,\n ): Promise<{ allowed: boolean; reason?: string }> {\n const ssoConfig = await this.orgConfigService.loadSSOConfig(ec, scopeType, scopeId);\n if (!(ssoConfig as any)?.oauth2ProviderRestrictions) {\n return { allowed: true };\n }\n\n const restrictions = (ssoConfig as any).oauth2ProviderRestrictions;\n\n if (restrictions.requireEnterpriseSSOOnly) {\n return { allowed: false, reason: 'Organization requires enterprise SSO only' };\n }\n\n if (restrictions.allowedProviders?.length > 0 && !restrictions.allowedProviders.includes(providerRef)) {\n return { allowed: false, reason: 'Provider not in organization allowlist' };\n }\n\n if (restrictions.blockedProviders?.includes(providerRef)) {\n return { allowed: false, reason: 'Provider blocked by organization policy' };\n }\n\n return { allowed: true };\n }\n\n /**\n * Filter a list of OAuth2 social provider refs by scope-level restrictions.\n * Returns only the providers that are allowed for the scope.\n */\n public async filterProviders(\n ec: ExecutionContext<any>,\n scopeType: AuthScopeType,\n scopeId: string,\n providerRefs: string[],\n ): Promise<string[]> {\n const results = await Promise.all(\n providerRefs.map(async (ref) => {\n const { allowed } = await this.isProviderAllowed(ec, scopeType, scopeId, ref);\n return allowed ? ref : null;\n }),\n );\n return results.filter((ref): ref is string => ref !== null);\n }\n\n // ═══════════════════════════════════════════════════════════════\n // State-Based Resolution (Callback Router)\n // ═══════════════════════════════════════════════════════════════\n\n /**\n * Re-resolve a connection from state token metadata on OAuth2 callback.\n *\n * The callback handler calls this to get fresh credentials matching the\n * authorize-time configuration. Dispatches to resolveSocialConnection()\n * or resolveEnterpriseConnection() based on connectionType in the token.\n *\n * For social connections with a scopeId, the scope context is forwarded\n * to resolveSocialConnection() so it can apply credential overrides (P3)\n * and signed-JWT generation in the correct order.\n *\n * Scope is explicit: enterprise state requires both `scopeType` and `scopeId`.\n * A partial or mode-less state token fails closed instead of being interpreted\n * as an organization-scoped legacy token.\n */\n public async resolveFromState(\n ec: ExecutionContext<any>,\n stateMetadata: OAuth2StateTokenMetadata,\n ): Promise<OAuth2ResolvedConnection> {\n const scopeId = stateMetadata.scopeId;\n const scopeType = stateMetadata.scopeType;\n if ((scopeId === undefined) !== (scopeType === undefined)) {\n throw this.errorBuilder.buildError(ErrorType.VALIDATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_INVALID_TOKEN,\n });\n }\n\n if (stateMetadata.connectionType === SsoConnectionType.ENTERPRISE) {\n if (!scopeType || !scopeId || !stateMetadata.connectionId) {\n throw this.errorBuilder.buildError(ErrorType.VALIDATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_INVALID_TOKEN,\n });\n }\n return this.resolveEnterpriseConnection(\n scopeType,\n scopeId,\n stateMetadata.connectionId,\n );\n }\n\n return this.resolveSocialConnection(stateMetadata.providerRef, scopeId && scopeType ? {\n ec,\n scopeType,\n scopeId,\n } : undefined);\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Private Helpers\n // ═══════════════════════════════════════════════════════════════\n\n private resolveTokenEndpointAuthMethod(\n method?: string,\n ): 'client_secret_post' | 'client_secret_basic' | 'none' {\n switch (method) {\n case 'client_secret_basic':\n return 'client_secret_basic';\n case 'none':\n return 'none';\n default:\n return 'client_secret_post';\n }\n }\n\n private resolveResponseMode(\n extraAuthParams?: Record<string, string>,\n ): 'query' | 'fragment' | 'form_post' {\n const mode = extraAuthParams?.response_mode;\n if (mode === 'form_post') return 'form_post';\n if (mode === 'fragment') return 'fragment';\n return 'query';\n }\n\n private resolveIdentitySource(\n extensions: Record<string, unknown>,\n userInfoUrl?: string,\n ): 'userinfo' | 'id_token' | 'callback_body' {\n if (extensions.identitySource === 'id_token') return 'id_token';\n if (extensions.identitySource === 'callback_body') return 'callback_body';\n if (userInfoUrl) return 'userinfo';\n return 'id_token'; // Fallback for providers without userinfo\n }\n\n private resolvePKCEMethod(\n capabilities: Record<string, unknown>,\n ): 'S256' | 'plain' | null {\n if (!capabilities.supportsPKCE) return null;\n const preferred = capabilities.preferredPKCEMethod as string | undefined;\n if (preferred === 'plain') return 'plain';\n return 'S256'; // Default to S256 when PKCE is supported\n }\n\n private buildProfileMapping(\n userProfileMapping?: Record<string, string>,\n extensions?: Record<string, unknown>,\n ): OAuth2ProfileMapping {\n const mapping = userProfileMapping || {};\n return {\n id: mapping.id || 'sub',\n email: mapping.email || 'email',\n name: mapping.name || 'name',\n image: mapping.image || 'picture',\n emailVerified: mapping.emailVerified || 'email_verified',\n // Extension-based fields (Google provides given_name/family_name separately)\n firstName: extensions?.firstNameField as string | undefined,\n lastName: extensions?.lastNameField as string | undefined,\n };\n }\n\n}\n"]}
|
package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts
CHANGED
|
@@ -35,6 +35,27 @@ export declare enum PasskeyAuthenticationCeremony {
|
|
|
35
35
|
LOGIN = "login",
|
|
36
36
|
STEP_UP = "step_up"
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* What a passkey assertion verification answers.
|
|
40
|
+
*
|
|
41
|
+
* `cloneSuspicion` is present ONLY when the assertion's signature verified and its counter did not
|
|
42
|
+
* advance — the W3C cloned-authenticator signal. It is returned rather than audited here because
|
|
43
|
+
* this service deliberately emits no audit rows (see the class header): the caller holds the
|
|
44
|
+
* request's device information and is where the trail is written.
|
|
45
|
+
*/
|
|
46
|
+
export interface PasskeyAuthenticationVerificationResult {
|
|
47
|
+
verified: boolean;
|
|
48
|
+
credentialId: string;
|
|
49
|
+
cloneSuspicion?: {
|
|
50
|
+
credentialId: string;
|
|
51
|
+
storedCounter: number;
|
|
52
|
+
receivedCounter: number;
|
|
53
|
+
credentialDeviceType: string;
|
|
54
|
+
credentialBackedUp: boolean;
|
|
55
|
+
aaguid?: string;
|
|
56
|
+
ceremony: PasskeyAuthenticationCeremony;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
38
59
|
/**
|
|
39
60
|
* WebAuthnBackendService
|
|
40
61
|
*
|
|
@@ -83,12 +104,15 @@ export declare class WebAuthnBackendService {
|
|
|
83
104
|
* Verify a WebAuthn authentication response.
|
|
84
105
|
* Updates the credential counter and lastUsedAt on success.
|
|
85
106
|
*/
|
|
86
|
-
verifyAuthenticationResponse(ec: ExecutionContext<any>, userId: string, response: AuthenticationResponseJSON, ceremony?: PasskeyAuthenticationCeremony): Promise<
|
|
87
|
-
verified: boolean;
|
|
88
|
-
credentialId: string;
|
|
89
|
-
}>;
|
|
107
|
+
verifyAuthenticationResponse(ec: ExecutionContext<any>, userId: string, response: AuthenticationResponseJSON, ceremony?: PasskeyAuthenticationCeremony): Promise<PasskeyAuthenticationVerificationResult>;
|
|
90
108
|
/**
|
|
91
|
-
* List all passkey credentials for a user
|
|
109
|
+
* List all passkey credentials for a user, as STORED.
|
|
110
|
+
*
|
|
111
|
+
* This returns the whole `PasskeyCredentialEntry`, `publicKey` and `counter` included. It is not a
|
|
112
|
+
* safe-field projection, and must not be handed to a caller as one: the projection that reaches a
|
|
113
|
+
* client is built at the controller (`handlePasskeyList`), which selects the credential id, name,
|
|
114
|
+
* timestamps and device flags and nothing else. A new consumer of this method owes its own
|
|
115
|
+
* projection, or it will disclose the stored credential material.
|
|
92
116
|
*/
|
|
93
117
|
getCredentials(ec: ExecutionContext<any>, userId: string): Promise<PasskeyCredentialEntry[]>;
|
|
94
118
|
/**
|
package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthn.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/auth-methods/webauthn.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EACV,sCAAsC,EACtC,qCAAqC,EACrC,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAE/G,OAAO,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACnF,OAAO,EAAE,+BAA+B,EAAE,MAAM,gGAAgG,CAAC;AACjJ,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AACvG,OAAO,EAEL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAW/B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,oBAAY,6BAA6B;IACvC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,
|
|
1
|
+
{"version":3,"file":"webauthn.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/auth-methods/webauthn.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EACV,sCAAsC,EACtC,qCAAqC,EACrC,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAE/G,OAAO,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACnF,OAAO,EAAE,+BAA+B,EAAE,MAAM,gGAAgG,CAAC;AACjJ,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AACvG,OAAO,EAEL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAW/B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,oBAAY,6BAA6B;IACvC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,uCAAuC;IACtD,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,6BAA6B,CAAC;KACzC,CAAC;CACH;AAED;;;;;;;;;;;;GAYG;AACH,qBAEa,sBAAsB;IAII,OAAO,CAAC,QAAQ,CAAC,MAAM;IACb,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY;IACjB,OAAO,CAAC,QAAQ,CAAC,aAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAP/E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;gBAGlC,MAAM,EAAE,aAAa,EACX,gBAAgB,EAAE,uBAAuB,EAC7C,YAAY,EAAE,YAAY,EACd,aAAa,EAAE,+BAA+B,EACnD,YAAY,EAAE,0BAA0B;IAQ3G,OAAO,KAAK,IAAI,GAEf;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,UAAU,GAErB;IAED;;;OAGG;IACH,OAAO,KAAK,eAAe,GAY1B;IAID;;;OAGG;IACG,2BAA2B,CAC/B,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,sCAAsC,CAAC;IAuClD;;;OAGG;IACG,0BAA0B,CAC9B,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,wBAAwB,EAClC,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,sBAAsB,CAAC;IAoDlC;;;OAGG;IACG,6BAA6B,CACjC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,6BAAmE,GAC5E,OAAO,CAAC,qCAAqC,CAAC;IA2BjD;;;OAGG;IACG,4BAA4B,CAChC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,0BAA0B,EACpC,QAAQ,GAAE,6BAAmE,GAC5E,OAAO,CAAC,uCAAuC,CAAC;IAoInD;;;;;;;;OAQG;IACG,cAAc,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAKlG;;OAEG;IACG,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBtG;;OAEG;IACG,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvH;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;YAMd,eAAe;IAI7B;;;;;;;OAOG;YACW,sBAAsB;IAMpC;;;OAGG;YACW,wBAAwB;CAcvC"}
|
|
@@ -258,22 +258,88 @@ let WebAuthnBackendService = class WebAuthnBackendService {
|
|
|
258
258
|
credential: {
|
|
259
259
|
id: matchedCredential.credentialId,
|
|
260
260
|
publicKey: Buffer.from(matchedCredential.publicKey, 'base64url'),
|
|
261
|
-
|
|
261
|
+
/*
|
|
262
|
+
* DELIBERATELY 0, NOT the stored counter — and this line is load-bearing, so read the
|
|
263
|
+
* reason before "fixing" it.
|
|
264
|
+
*
|
|
265
|
+
* `@simplewebauthn/server` evaluates its own counter guard BEFORE `verifySignature`
|
|
266
|
+
* (verifyAuthenticationResponse.js:144-151 in 13.3.x, then :154). Handing it the real
|
|
267
|
+
* stored value therefore refuses a counter regression on an assertion whose signature was
|
|
268
|
+
* never checked — so ANY caller who knows a credential id could trigger the refusal, and
|
|
269
|
+
* an alert raised there would be forgeable by an unauthenticated party.
|
|
270
|
+
*
|
|
271
|
+
* W3C WebAuthn L3 puts the counter comparison at §7.2 step 22, AFTER signature
|
|
272
|
+
* verification at step 21, precisely because a counter regression only means something
|
|
273
|
+
* when the assertion is known to come from something holding the private key. Passing 0
|
|
274
|
+
* makes the library's predicate unsatisfiable — `(counter > 0 || 0 > 0) && counter <= 0`
|
|
275
|
+
* is false for every input — so the library does what we want from it (verify the
|
|
276
|
+
* signature) and the counter decision stays here, below, where it is ours and where it is
|
|
277
|
+
* post-authentication.
|
|
278
|
+
*
|
|
279
|
+
* spec-cite: W3C Web Authentication Level 3 §7.2 steps 21-22
|
|
280
|
+
* (https://www.w3.org/TR/webauthn-3/#sctn-verifying-assertion).
|
|
281
|
+
*/
|
|
282
|
+
counter: 0,
|
|
262
283
|
transports: matchedCredential.transports,
|
|
263
284
|
},
|
|
264
285
|
});
|
|
265
286
|
if (!verification.verified) {
|
|
266
287
|
return { verified: false, credentialId: response.id };
|
|
267
288
|
}
|
|
268
|
-
|
|
289
|
+
/*
|
|
290
|
+
* CLONE DETECTION — the spec's predicate, on a signature-verified assertion.
|
|
291
|
+
*
|
|
292
|
+
* "If either is non-zero, and the new signCount value is less than or equal to the stored
|
|
293
|
+
* value, a cloned authenticator may exist, or the authenticator may be malfunctioning, or a
|
|
294
|
+
* race condition might exist" — W3C WebAuthn L3 §6.1.1.
|
|
295
|
+
*
|
|
296
|
+
* EITHER non-zero, not just the received one. The previous check here read
|
|
297
|
+
* `newCounter > 0 && newCounter <= stored`, which misses the case that matters most
|
|
298
|
+
* operationally: a credential that previously counted and now reports 0. It was also dead
|
|
299
|
+
* code — the library threw first — and it only warned.
|
|
300
|
+
*
|
|
301
|
+
* A credential whose counter is permanently 0 — which every SYNCED passkey is, because a set
|
|
302
|
+
* of devices cannot maintain a coherent counter — compares 0-against-0, fails the first
|
|
303
|
+
* disjunct, and authenticates normally. That is the whole passkey accommodation and it is why
|
|
304
|
+
* refusing here is not hostile to passkeys.
|
|
305
|
+
*
|
|
306
|
+
* Refusal, not step-up, and not configurable: three of the four major server implementations
|
|
307
|
+
* fail closed with no switch (SimpleWebAuthn, Duo py_webauthn, ASP.NET Core Identity) and the
|
|
308
|
+
* fourth (Yubico) defaults to it. Nothing authoritative recommends escalating instead.
|
|
309
|
+
*
|
|
310
|
+
* Returned rather than thrown so BOTH callers take their existing `!verified` branch and
|
|
311
|
+
* produce the same clean AUTHENTICATION refusal — the step-up path used to wrap a library
|
|
312
|
+
* throw as a generic error while login refused cleanly.
|
|
313
|
+
*
|
|
314
|
+
* spec-cite: W3C Web Authentication Level 3 §6.1.1
|
|
315
|
+
* (https://www.w3.org/TR/webauthn-3/#sctn-sign-counter).
|
|
316
|
+
*/
|
|
269
317
|
const newCounter = verification.authenticationInfo.newCounter;
|
|
270
|
-
if (newCounter > 0 && newCounter <= matchedCredential.counter) {
|
|
271
|
-
this.logger.warn('WebAuthn counter did not
|
|
318
|
+
if ((newCounter > 0 || matchedCredential.counter > 0) && newCounter <= matchedCredential.counter) {
|
|
319
|
+
this.logger.warn('WebAuthn signature counter did not advance on a verified assertion — refusing', {
|
|
272
320
|
userId,
|
|
273
321
|
credentialId: matchedCredential.credentialId,
|
|
274
322
|
storedCounter: matchedCredential.counter,
|
|
275
323
|
receivedCounter: newCounter,
|
|
276
324
|
});
|
|
325
|
+
// The stored counter is NOT advanced: a refused assertion must not move the baseline a later
|
|
326
|
+
// legitimate assertion is compared against.
|
|
327
|
+
return {
|
|
328
|
+
verified: false,
|
|
329
|
+
credentialId: matchedCredential.credentialId,
|
|
330
|
+
cloneSuspicion: {
|
|
331
|
+
credentialId: matchedCredential.credentialId,
|
|
332
|
+
storedCounter: matchedCredential.counter,
|
|
333
|
+
receivedCounter: newCounter,
|
|
334
|
+
// Carried for TRIAGE only — nothing branches on them. A synced credential that once
|
|
335
|
+
// reported a non-zero counter and then regresses is still a signal, so exempting by
|
|
336
|
+
// device type would disable clone detection for the majority of credentials.
|
|
337
|
+
credentialDeviceType: matchedCredential.credentialDeviceType,
|
|
338
|
+
credentialBackedUp: matchedCredential.credentialBackedUp,
|
|
339
|
+
...(matchedCredential.aaguid ? { aaguid: matchedCredential.aaguid } : {}),
|
|
340
|
+
ceremony,
|
|
341
|
+
},
|
|
342
|
+
};
|
|
277
343
|
}
|
|
278
344
|
// Update counter and lastUsedAt
|
|
279
345
|
const updatedCredentials = existingCredentials.map((c) => c.credentialId === matchedCredential.credentialId
|
|
@@ -285,7 +351,13 @@ let WebAuthnBackendService = class WebAuthnBackendService {
|
|
|
285
351
|
}
|
|
286
352
|
// ─── Credential CRUD ─────────────────────────────────────────
|
|
287
353
|
/**
|
|
288
|
-
* List all passkey credentials for a user
|
|
354
|
+
* List all passkey credentials for a user, as STORED.
|
|
355
|
+
*
|
|
356
|
+
* This returns the whole `PasskeyCredentialEntry`, `publicKey` and `counter` included. It is not a
|
|
357
|
+
* safe-field projection, and must not be handed to a caller as one: the projection that reaches a
|
|
358
|
+
* client is built at the controller (`handlePasskeyList`), which selects the credential id, name,
|
|
359
|
+
* timestamps and device flags and nothing else. A new consumer of this method owes its own
|
|
360
|
+
* projection, or it will disclose the stored credential material.
|
|
289
361
|
*/
|
|
290
362
|
async getCredentials(ec, userId) {
|
|
291
363
|
const { cred } = await this._resolveCredentialRecord(ec, userId);
|