@wildo-ai/saas-backend-lib 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +199 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +27 -6
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +47 -4
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +96 -29
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +9 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +49 -0
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +171 -18
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +23 -3
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +20 -0
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +529 -41
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
- package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +48 -7
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
- package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +225 -13
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +340 -62
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +244 -7
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +386 -5
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +6 -2
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +31 -9
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +57 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +31 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +142 -46
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
- package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
- package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
- package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts +33 -0
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +39 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
- package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js +129 -8
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
- package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +59 -2
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +52 -17
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
- package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
- package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +292 -7
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +533 -45
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +21 -13
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +39 -15
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
- package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
- package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
- package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +53 -2
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.js +127 -3
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
- package/dist/esm/files/services/files.backend.service.d.ts +68 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +175 -5
- package/dist/esm/files/services/files.backend.service.js.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
- package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
- package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +196 -40
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
- package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
- package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +28 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +204 -18
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
- package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +8 -4
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
- package/dist/esm/index.d.ts +11 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +31 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +78 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +17 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +19 -3
- package/dist/esm/inject/models/service-types.js.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.js +20 -0
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +56 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.js +107 -11
- package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +22 -0
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
- package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
- package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
- package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
- package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
- package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +99 -13
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +422 -66
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
- package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +46 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +16 -6
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +12 -12
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
- package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.js +1 -4
- package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.js +1 -4
- package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
- package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
- package/dist/esm/queue/queue.backend.service.d.ts +3 -3
- package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue.backend.service.js +26 -4
- package/dist/esm/queue/queue.backend.service.js.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts +9 -0
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +32 -8
- package/dist/esm/requests/service/websocket.service.js.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +14 -2
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
- package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
- package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +90 -6
- package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
- package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
- package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts +19 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.js +261 -77
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +68 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +17 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +49 -17
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +74 -8
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +175 -19
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +21 -3
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +26 -16
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
- package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -9
|
@@ -63,6 +63,7 @@ import { SAAS_SERVICE_TYPES } from '../inject/models/service-types.js';
|
|
|
63
63
|
import { BackendResourceType } from '../resources/models/resources-types.backend.schemas.js';
|
|
64
64
|
import { HttpApiReadClient } from '../base-classes/services/repositories/http-api/http-api-read-client.backend.js';
|
|
65
65
|
import { ExternalProvidersHttpApiAccessResolver } from '../base-classes/services/repositories/http-api/http-api-provider-access.backend.js';
|
|
66
|
+
import { AuditObservationKind, emitAuditObservation, } from '../monitoring/observability/audit-observation-emission.backend.js';
|
|
66
67
|
import { HttpApiExternalDataExtractionSource } from './external-data-extraction-source.backend.js';
|
|
67
68
|
/*
|
|
68
69
|
* entrypoint-closure-waiver: `etl-transform.backend` is published only by `./external-data-models` (one
|
|
@@ -85,9 +86,11 @@ let ExternalDataPipelineRunBackendService = class ExternalDataPipelineRunBackend
|
|
|
85
86
|
externalProvidersRegistry;
|
|
86
87
|
auditLogsResolver;
|
|
87
88
|
extractionSourceFactory;
|
|
89
|
+
auditLogsService;
|
|
90
|
+
metricsService;
|
|
88
91
|
inFlight = new Set();
|
|
89
92
|
logDebug;
|
|
90
|
-
constructor(logger, errorBuilder, repositoriesRegistry, resourcesRegistry, syncEngine, upgradeEngine, executionContextCreator, externalProvidersRegistry, auditLogsResolver, extractionSourceFactory) {
|
|
93
|
+
constructor(logger, errorBuilder, repositoriesRegistry, resourcesRegistry, syncEngine, upgradeEngine, executionContextCreator, externalProvidersRegistry, auditLogsResolver, extractionSourceFactory, auditLogsService, metricsService) {
|
|
91
94
|
this.logger = logger;
|
|
92
95
|
this.errorBuilder = errorBuilder;
|
|
93
96
|
this.repositoriesRegistry = repositoriesRegistry;
|
|
@@ -98,6 +101,8 @@ let ExternalDataPipelineRunBackendService = class ExternalDataPipelineRunBackend
|
|
|
98
101
|
this.externalProvidersRegistry = externalProvidersRegistry;
|
|
99
102
|
this.auditLogsResolver = auditLogsResolver;
|
|
100
103
|
this.extractionSourceFactory = extractionSourceFactory;
|
|
104
|
+
this.auditLogsService = auditLogsService;
|
|
105
|
+
this.metricsService = metricsService;
|
|
101
106
|
this.logDebug = this.logger.debugByType('ExternalDataPipelineRun');
|
|
102
107
|
this.logger.setDebugTypeLogging('ExternalDataPipelineRun', false);
|
|
103
108
|
}
|
|
@@ -306,26 +311,52 @@ let ExternalDataPipelineRunBackendService = class ExternalDataPipelineRunBackend
|
|
|
306
311
|
truncated: rejections.length > MAX_LOGGED_REJECTIONS,
|
|
307
312
|
});
|
|
308
313
|
}
|
|
309
|
-
/**
|
|
314
|
+
/**
|
|
315
|
+
* PR-10 — one audit row per run, fire-and-forget through the shared seam.
|
|
316
|
+
*
|
|
317
|
+
* The emission goes through {@link emitAuditObservation}, so a run whose attribution row never
|
|
318
|
+
* reached the pipeline lands on `audit_observation_dropped_total` instead of nowhere. The feature
|
|
319
|
+
* detection decides an ARGUMENT rather than an early return: handing the seam `undefined` is how
|
|
320
|
+
* this site reports `SERVICE_UNAVAILABLE`, and returning early would restore the silence that let
|
|
321
|
+
* this seam sit unwired in production without anything saying so.
|
|
322
|
+
*/
|
|
310
323
|
recordRunReadThroughAccess(executionContext, resourceType, declaration, counts) {
|
|
324
|
+
let emit;
|
|
311
325
|
try {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
326
|
+
// The test thunk first, the injected production service second — see the constructor.
|
|
327
|
+
const auditLogsService = this.auditLogsResolver?.() ?? this.auditLogsService;
|
|
328
|
+
const sink = auditLogsService?.logHttpApiReadThroughAccess;
|
|
329
|
+
if (typeof sink === 'function') {
|
|
330
|
+
emit = () => sink.call(auditLogsService, {
|
|
331
|
+
resourceType,
|
|
332
|
+
operationIdentifier: 'externalDataPipelineRun',
|
|
333
|
+
providerRef: declaration.binding.providerRef,
|
|
334
|
+
remoteEntityRef: declaration.binding.entityRef,
|
|
335
|
+
dialect: declaration.binding.dialect,
|
|
336
|
+
rowCount: counts.extractedRows,
|
|
337
|
+
rejectedRows: counts.rejectedRows,
|
|
338
|
+
completedPass: counts.completedPass,
|
|
339
|
+
}, executionContext);
|
|
340
|
+
}
|
|
325
341
|
}
|
|
326
342
|
catch {
|
|
327
|
-
//
|
|
343
|
+
// A thunk that throws leaves `emit` undefined, so the observation is reported as UNAVAILABLE
|
|
344
|
+
// rather than swallowed. Observation only — never the reason a run fails.
|
|
328
345
|
}
|
|
346
|
+
emitAuditObservation({
|
|
347
|
+
observation: AuditObservationKind.HTTP_API_READ_THROUGH_ACCESS,
|
|
348
|
+
emit,
|
|
349
|
+
metricsService: this.metricsService,
|
|
350
|
+
logger: this.logger,
|
|
351
|
+
// Enough to name WHICH run went unrecorded, and how much it moved — the counts are what
|
|
352
|
+
// separate a run that read nothing from one that read a tenant's whole remote table.
|
|
353
|
+
context: {
|
|
354
|
+
observedResourceType: resourceType,
|
|
355
|
+
observedProviderRef: declaration.binding.providerRef,
|
|
356
|
+
observedRemoteEntityRef: declaration.binding.entityRef,
|
|
357
|
+
observedRowCount: counts.extractedRows,
|
|
358
|
+
},
|
|
359
|
+
});
|
|
329
360
|
}
|
|
330
361
|
};
|
|
331
362
|
ExternalDataPipelineRunBackendService = __decorate([
|
|
@@ -341,7 +372,11 @@ ExternalDataPipelineRunBackendService = __decorate([
|
|
|
341
372
|
__param(7, optional()),
|
|
342
373
|
__param(8, unmanaged()),
|
|
343
374
|
__param(9, unmanaged()),
|
|
344
|
-
|
|
375
|
+
__param(10, inject(SAAS_SERVICE_TYPES.AuditLogsService)),
|
|
376
|
+
__param(10, optional()),
|
|
377
|
+
__param(11, inject(SAAS_SERVICE_TYPES.MetricsService)),
|
|
378
|
+
__param(11, optional()),
|
|
379
|
+
__metadata("design:paramtypes", [Function, Function, Function, Function, Function, Function, Function, Object, Function, Function, Object, Object])
|
|
345
380
|
], ExternalDataPipelineRunBackendService);
|
|
346
381
|
export { ExternalDataPipelineRunBackendService };
|
|
347
382
|
//# sourceMappingURL=external-data-pipeline-run.backend.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-data-pipeline-run.backend.service.js","sourceRoot":"","sources":["../../../../src/external-data/external-data-pipeline-run.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The ETL pipeline RUN service (partial-resource paper v3.1, PR-5/PR-6/PR-9/PR-10/PR-12) — the\n * orchestrator that turns a declared `externalDataPipeline` into destination rows: E (extraction source over\n * the shared read client) → T (pure transform) → L (the data-seeding engines' imperative doors).\n *\n * ## The one decision that carries the paper's ⚠ traps: MODE SELECTION (PR-6)\n *\n * A run that COMPLETES a pass over the remote population loads through `runSyncSeed` — the full\n * reconcile INCLUDING the Stage-4 orphan walk (a destination row whose remote sibling vanished is\n * handled per the declared `orphanPolicy`). A run that stops mid-pass (`maxRowsPerRun` reached)\n * loads through `runUpgradeSeed` — the SAME reconcile loop with NO orphan stage, because \"absent\n * from a partial extraction\" is not evidence of remote deletion. A partial run orphans NOTHING;\n * the persisted cursor lets the next run continue the pass where this one stopped.\n *\n * ## Change detection (PR-30)\n *\n * The assembled seed pins `version: 1` forever and declares\n * `reconcileStrategy: CONTENT` — a pipeline's change signal is the REMOTE VALUE, not a version\n * bump. Managed-field content comparison decides write-vs-skip per row, so an unchanged remote\n * population costs zero destination writes (and zero RAG re-ingestions) per pass.\n *\n * ## Ledger split (PR-9)\n *\n * Per-entry load outcome lives on the `DataSeedRun` ledger row every run writes through the\n * engines (one row per pipeline — `seedKey` + constant version, recovered and reset each run).\n * The `ExternalDataPipelineState` row carries what data-seeding cannot know: the extraction CURSOR\n * (surviving restarts, so populations larger than one run's budget eventually sync end to end)\n * and the ETL-side last-run summary (extracted/rejected happen BEFORE the seed engine sees\n * anything). Transform rejections are logged per row (bounded) and counted on the summary; the\n * rejected rows' previous destination versions simply survive.\n *\n * ## Attribution (PR-10)\n *\n * ONE read-through audit row per run through the same lazily-resolved seam as the virtual\n * repository (`logHttpApiReadThroughAccess`), carrying the run outcome counts — a pipeline run\n * is bulk read-through access to an external system and lands in the same audit lane.\n *\n * ## Concurrency\n *\n * Single-flight per pipeline is IN-PROCESS (a second `runPipeline` for the same resource while\n * one is in flight answers `already-running`). A cross-instance double run is deliberately not\n * locked out: every load is an idempotent business-key MERGE and extraction pages are\n * drift-safe, so the second run wastes work but corrupts nothing — the same posture as\n * concurrent seed passes.\n */\n\nimport { inject, injectable, optional, unmanaged } from 'inversify';\nimport {\n CoreResourceOperation,\n ErrorCustomMessageReference,\n ErrorType,\n type ResourceType,\n} from '@wildo-ai/saas-models';\nimport {\n ExternalDataDestinationPopulation,\n ExternalDataOrphanPolicy,\n type ExternalDataPipelineDeclaration,\n} from '@wildo-ai/saas-models/external-data';\n\nimport {\n DataSeedMode,\n DataSeedReconcileStrategy,\n DataSeedScopeKind,\n DataSeedSyncOrphanPolicy,\n DataSeedTriggerKind,\n DataSeedTriggerOrigin,\n type DataSeedDefinition,\n type DataSeedStaticEntry,\n} from '~wildo-backend-lib/data-seeding/models/data-seed.shared.schemas';\nimport { DataSeedRunStatus } from '~wildo-backend-lib/data-seeding/models/data-seed-run.shared.schemas';\nimport type { DataSeedScopeAnchor } from '~wildo-backend-lib/data-seeding/services/shared/data-seed-scope-anchor.shared.types';\nimport type { SyncSeedEngineBackendService } from '~wildo-backend-lib/data-seeding/services/engines/sync-seed-engine.backend.service';\nimport type { UpgradeSeedEngineBackendService } from '~wildo-backend-lib/data-seeding/services/engines/upgrade-seed-engine.backend.service';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport type { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport type { RepositoriesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport type { ResourcesRegistryBackendService } from '~wildo-backend-lib/resources/services/resources-registry.backend.service';\nimport type { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { BackendResourceType } from '~wildo-backend-lib/resources/models/resources-types.backend.schemas';\nimport type { ExternalDataPipelineState } from '~wildo-backend-lib/external-data/models/external-data-pipeline-state.backend.schemas';\nimport { HttpApiReadClient } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-read-client.backend';\nimport { ExternalProvidersHttpApiAccessResolver } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-provider-access.backend';\nimport type { HttpApiAuditLogsResolver } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service';\nimport { HttpApiExternalDataExtractionSource, type ExternalDataExtractionSource } from './external-data-extraction-source.backend';\n/*\n * entrypoint-closure-waiver: `etl-transform.backend` is published only by `./external-data-models` (one\n * door per room), and nothing nominal crosses into this root-exported module's public surface —\n * `ExternalDataTransformedRow`/`ExternalDataRowRejection` are structural interfaces and `ExternalDataPipelineRunReport`\n * names none of them nominally. Probed 2026-08-28 after the barrel split:\n * `tsc -p tsconfig.build.json --noEmit` with declaration emit — zero TS2742/TS2883/TS7056.\n */\nimport { transformExternalDataPage, type ExternalDataRowRejection } from './external-data-transform.backend';\n\n/** How many per-row rejection reasons are LOGGED per run — the count is always exact. */\nconst MAX_LOGGED_REJECTIONS = 25;\n\nexport interface ExternalDataPipelineRunInput {\n /** The DESTINATION resource type declaring the `externalDataPipeline`. */\n resourceType: string;\n /** `ADMIN_MANUAL` for the on-demand door, `SCHEDULED_RERUN` for the cron batch (PR-12). */\n triggerOrigin: DataSeedTriggerOrigin.ADMIN_MANUAL | DataSeedTriggerOrigin.SCHEDULED_RERUN;\n triggeredByUserId: string | null;\n}\n\nexport interface ExternalDataPipelineRunReport {\n outcome: 'completed-pass' | 'partial-pass' | 'already-running';\n extractedRows: number;\n rejectedRows: number;\n /**\n * Declared entries HANDED TO the seed engine (extracted − rejected) — what was submitted, never\n * what was written. Named `submittedEntries` rather than `loadedEntries` because the old name\n * read as a write count and was believed as one: a run reporting `loadedEntries: 2` had in fact\n * written one row and failed the other. `loadStatus` is the field that answers what landed.\n */\n submittedEntries: number;\n /**\n * The seed engine's verdict on the LOAD — `PARTIAL`/`FAILED` means go read `seedRunId`. Distinct\n * from `outcome`, which reports only whether the EXTRACTION pass completed.\n */\n loadStatus: DataSeedRunStatus | null;\n /** `_id` of the `DataSeedRun` ledger row (per-entry outcome detail); null when none ran. */\n seedRunId: string | null;\n /** The persisted continuation — non-null exactly for `partial-pass`. */\n cursor: string | null;\n durationMs: number;\n}\n\n/** Test seam: build the extraction source for one run (production default: the HTTP source). */\nexport type ExternalDataExtractionSourceFactory = (\n declaration: ExternalDataPipelineDeclaration,\n internalContext: ExecutionContext<any>,\n) => ExternalDataExtractionSource;\n\n@injectable()\nexport class ExternalDataPipelineRunBackendService {\n private readonly inFlight = new Set<string>();\n private readonly logDebug: (message: string, data?: unknown) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService) private readonly repositoriesRegistry: RepositoriesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.ResourceRegistryService) private readonly resourcesRegistry: ResourcesRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.SyncSeedEngine) private readonly syncEngine: SyncSeedEngineBackendService,\n @inject(SAAS_SERVICE_TYPES.UpgradeSeedEngine) private readonly upgradeEngine: UpgradeSeedEngineBackendService,\n @inject(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService) private readonly executionContextCreator: ExecutionContextCreatorBackendService,\n /**\n * Resolves provider credentials for the extraction client. `@optional()` so a container\n * without external-connector bindings still constructs the service — a run then fails with\n * the resolver's own actionable error, never at boot.\n */\n @inject(SAAS_SERVICE_TYPES.ExternalProvidersRegistryService) @optional() private readonly externalProvidersRegistry?: unknown,\n /**\n * The read-through audit seam (PR-10) — same structural, lazily-resolved contract as the\n * virtual repository's: absent binding means no emission, and emission failure never fails\n * the run it observes.\n */\n /*\n * `@unmanaged()`, because this class IS container-constructed and the two seams below are not the\n * container's to resolve. The contract was copied from `HttpApiResourceRepositoryBackendService`,\n * where an undecorated optional parameter is fine — that class carries no `@injectable()` and is\n * built with `new`. Under `@injectable()` the same shape is a boot failure: Inversify validates\n * EVERY constructor parameter, so an undecorated one aborts container setup with\n * \"unexpected missing metadata\" long before any ETL code runs.\n */\n @unmanaged() private readonly auditLogsResolver?: HttpApiAuditLogsResolver,\n /** Test seam — production leaves it unset and gets the HTTP source over the shared client. */\n @unmanaged() private readonly extractionSourceFactory?: ExternalDataExtractionSourceFactory,\n ) {\n this.logDebug = this.logger.debugByType('ExternalDataPipelineRun');\n this.logger.setDebugTypeLogging('ExternalDataPipelineRun', false);\n }\n\n /** The on-demand door (PR-12). The scheduled batch calls this per due pipeline. */\n public async runPipeline(input: ExternalDataPipelineRunInput): Promise<ExternalDataPipelineRunReport> {\n if (this.inFlight.has(input.resourceType)) {\n return {\n outcome: 'already-running', extractedRows: 0, rejectedRows: 0,\n submittedEntries: 0, loadStatus: null, seedRunId: null, cursor: null, durationMs: 0,\n };\n }\n this.inFlight.add(input.resourceType);\n try {\n return await this.executeRun(input);\n } finally {\n this.inFlight.delete(input.resourceType);\n }\n }\n\n /** Every registered resource that declares an `externalDataPipeline` — the scheduled batch's population. */\n public listDeclaredPipelines(): Array<{ resourceType: string; declaration: ExternalDataPipelineDeclaration }> {\n return (this.resourcesRegistry.getResourceTypes() as string[])\n .flatMap((resourceType) => {\n const configuration = this.resourcesRegistry.getResourceConfiguration(resourceType as ResourceType) as\n | { externalDataPipeline?: ExternalDataPipelineDeclaration }\n | undefined;\n return configuration?.externalDataPipeline ? [{ resourceType, declaration: configuration.externalDataPipeline }] : [];\n });\n }\n\n private async executeRun(input: ExternalDataPipelineRunInput): Promise<ExternalDataPipelineRunReport> {\n const startedAtMs = Date.now();\n const { resourceType, triggerOrigin, triggeredByUserId } = input;\n\n const configuration = this.resourcesRegistry.getResourceConfiguration(resourceType as ResourceType) as {\n externalDataPipeline?: ExternalDataPipelineDeclaration;\n };\n const declaration = configuration?.externalDataPipeline;\n if (!declaration) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.RESOURCES_REGISTRY_INITIALIZATION_FAILED,\n context: { reason: 'etl_pipeline_without_declaration', resourceType },\n });\n }\n\n const internalContext = await this.executionContextCreator.createForInternalSystemOperation();\n const stateContext = await this.executionContextCreator.createForInternalRepositoryOperation({\n resourceType: BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE,\n operationIdentifier: CoreResourceOperation.CREATE,\n });\n const stateRepo = this.repositoriesRegistry.getRepositoryOrThrow(\n BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE as unknown as ResourceType,\n stateContext,\n );\n\n let state = await stateRepo.read<ExternalDataPipelineState>(stateContext, { pipelineResourceType: resourceType });\n if (!state) {\n state = (await stateRepo.create(stateContext, {\n pipelineResourceType: resourceType,\n cursor: null,\n passStartedAt: null,\n lastRunAt: null,\n lastRunSummary: null,\n } as never)) as unknown as ExternalDataPipelineState;\n }\n const resumingCursor = state.cursor ?? undefined;\n const passStartedAt = resumingCursor === undefined ? new Date() : (state.passStartedAt ?? new Date());\n\n // ── E: bounded page walk from the persisted cursor ──────────────────────────\n const source = (this.extractionSourceFactory ?? this.buildHttpExtractionSource.bind(this))(declaration, internalContext);\n // PR-21 — WARN-only drift probe, once per run, before extraction. A probe failure is\n // swallowed: drift detection must never be the reason a run fails.\n try {\n for (const warning of (await source.describeContractDrift?.()) ?? []) {\n this.logger.warn(`ExternalDataPipelineRun[${resourceType}]: schema drift — ${warning}`);\n }\n } catch {\n // Diagnostic only.\n }\n const extractedRows: Array<Record<string, unknown>> = [];\n let cursor = resumingCursor;\n let passComplete = false;\n while (extractedRows.length < declaration.maxRowsPerRun) {\n const page = await source.extractPage(cursor, Math.min(declaration.maxRowsPerRun - extractedRows.length, 1_000));\n extractedRows.push(...page.rows);\n cursor = page.nextCursor;\n if (page.complete) {\n passComplete = true;\n break;\n }\n }\n\n // ── T: pure transform; per-row rejections reported, never fatal ─────────────\n const { rows, rejections } = transformExternalDataPage(declaration, extractedRows);\n this.logRejections(resourceType, rejections);\n const entries: DataSeedStaticEntry[] = rows.map((row) => ({\n businessKey: { [declaration.remoteKeyLocalField]: row.businessKeyValue },\n data: row.data,\n }));\n\n // ── L: mode selection is THE PR-6 guard — a partial run orphans NOTHING ─────\n const seed = this.assembleSeedDefinition(resourceType, declaration, passComplete);\n const scope = await this.resolveApplicationScopeAnchor(internalContext);\n const engineInput = {\n seed,\n trigger: { triggerKind: DataSeedTriggerKind.ON_SCHEDULED_REFRESH as const },\n triggerOrigin,\n scope,\n entries,\n triggeredByUserId,\n rowMetadataSource: `external-data:${resourceType}`,\n internalContext,\n };\n const seedReport = passComplete\n ? await this.syncEngine.runSyncSeed(engineInput)\n : await this.upgradeEngine.runUpgradeSeed(engineInput);\n\n // ── Persist the state row: the cursor IS the pass continuation ──────────────\n const durationMs = Date.now() - startedAtMs;\n const seedRunId = seedReport.runId ?? null;\n // The LOAD verdict, carried separately from `outcome` (which is about the EXTRACTION pass).\n // Both are reported: a full pass that failed to write part of what it read is neither a clean\n // success nor a partial pass, and collapsing them would hide exactly that case.\n const loadStatus = seedReport.status ?? null;\n await stateRepo.update(stateContext, state._id, {\n cursor: passComplete ? null : (cursor ?? null),\n passStartedAt: passComplete ? null : passStartedAt,\n lastRunAt: new Date(startedAtMs),\n lastRunSummary: {\n completedPass: passComplete,\n extractedRows: extractedRows.length,\n rejectedRows: rejections.length,\n loadStatus,\n seedRunId,\n durationMs,\n },\n } as never);\n\n this.recordRunReadThroughAccess(internalContext, resourceType, declaration, {\n extractedRows: extractedRows.length,\n rejectedRows: rejections.length,\n completedPass: passComplete,\n });\n\n return {\n outcome: passComplete ? 'completed-pass' : 'partial-pass',\n extractedRows: extractedRows.length,\n rejectedRows: rejections.length,\n submittedEntries: entries.length,\n loadStatus,\n seedRunId,\n cursor: passComplete ? null : (cursor ?? null),\n durationMs,\n };\n }\n\n /**\n * The assembled seed is EPHEMERAL (never registered): `version` is pinned at 1 forever and\n * `reconcileStrategy: CONTENT` carries change detection (PR-30) — bumping the version per run\n * would route every row through the migrator path and rewrite the whole corpus each pass.\n */\n private assembleSeedDefinition(\n resourceType: string,\n declaration: ExternalDataPipelineDeclaration,\n passComplete: boolean,\n ): DataSeedDefinition {\n const managedFields = [\n declaration.remoteKeyLocalField,\n ...declaration.mapping.map((entry) => entry.localField),\n ];\n return {\n seedKey: `external-data:${resourceType}`,\n scope: { kind: DataSeedScopeKind.APPLICATION },\n resourceType,\n triggers: [{ triggerKind: DataSeedTriggerKind.ON_SCHEDULED_REFRESH }],\n mode: passComplete ? DataSeedMode.SYNC : DataSeedMode.UPGRADE,\n version: 1,\n managedFields,\n reconcileStrategy: DataSeedReconcileStrategy.CONTENT,\n ...(passComplete ? { onOrphan: this.mapOrphanPolicy(this.effectiveOrphanPolicy(declaration)) } : {}),\n } as DataSeedDefinition;\n }\n\n /**\n * The seam between the two closed vocabularies (never merged by value overlap — the ETL\n * declaration must not depend on data-seeding's enum, and each member's semantics are owned\n * where it is declared).\n */\n private mapOrphanPolicy(orphanPolicy: ExternalDataOrphanPolicy): DataSeedSyncOrphanPolicy {\n switch (orphanPolicy) {\n case ExternalDataOrphanPolicy.DELETE:\n return DataSeedSyncOrphanPolicy.DELETE;\n case ExternalDataOrphanPolicy.DEPRECATE:\n return DataSeedSyncOrphanPolicy.DEPRECATE;\n case ExternalDataOrphanPolicy.REPORT:\n return DataSeedSyncOrphanPolicy.REPORT;\n }\n }\n\n /**\n * ⚠ OPEN-population caveat, named where it is decided: the SYNC orphan walk considers every\n * row of the destination, including caller-minted rows on an OPEN population. Those rows have\n * no `__seed` metadata and a business key outside the declared set, so DELETE/DEPRECATE would\n * hit them. Slice 1 therefore downgrades OPEN populations' orphan handling to REPORT.\n */\n private effectiveOrphanPolicy(declaration: ExternalDataPipelineDeclaration): ExternalDataOrphanPolicy {\n return declaration.population === ExternalDataDestinationPopulation.OPEN ? ExternalDataOrphanPolicy.REPORT : declaration.orphanPolicy;\n }\n\n private buildHttpExtractionSource(\n declaration: ExternalDataPipelineDeclaration,\n internalContext: ExecutionContext<any>,\n ): ExternalDataExtractionSource {\n const readClient = new HttpApiReadClient(\n declaration.binding,\n new ExternalProvidersHttpApiAccessResolver(this.externalProvidersRegistry as never),\n );\n return new HttpApiExternalDataExtractionSource(declaration, readClient, internalContext);\n }\n\n private async resolveApplicationScopeAnchor(internalContext: ExecutionContext<any>): Promise<DataSeedScopeAnchor> {\n const appRepo = this.repositoriesRegistry.getRepositoryOrThrow('applications' as ResourceType, internalContext);\n const application = (await appRepo.read<{ _id: string }>(internalContext, {})) ?? null;\n if (!application) {\n throw this.errorBuilder.buildError(ErrorType.INTERNAL, internalContext, {\n customMessageReference: ErrorCustomMessageReference.INTERNAL,\n context: { message: 'ExternalDataPipelineRun: no APPLICATION row exists — bootstrap order violation.' },\n });\n }\n return { scopeKind: DataSeedScopeKind.APPLICATION, relatedId: application._id, relatedResourceType: null };\n }\n\n private logRejections(resourceType: string, rejections: ExternalDataRowRejection[]): void {\n if (rejections.length === 0) return;\n this.logger.warn(`ExternalDataPipelineRun[${resourceType}]: ${rejections.length} row(s) rejected by transform (previous versions survive).`, {\n rejections: rejections.slice(0, MAX_LOGGED_REJECTIONS),\n truncated: rejections.length > MAX_LOGGED_REJECTIONS,\n });\n }\n\n /** PR-10 — one audit row per run, fire-and-forget through the shared seam. */\n private recordRunReadThroughAccess(\n executionContext: ExecutionContext<any>,\n resourceType: string,\n declaration: ExternalDataPipelineDeclaration,\n counts: { extractedRows: number; rejectedRows: number; completedPass: boolean },\n ): void {\n try {\n const auditLogsService = this.auditLogsResolver?.();\n if (typeof auditLogsService?.logHttpApiReadThroughAccess !== 'function') return;\n void auditLogsService.logHttpApiReadThroughAccess({\n resourceType,\n operationIdentifier: 'externalDataPipelineRun',\n providerRef: declaration.binding.providerRef,\n remoteEntityRef: declaration.binding.entityRef,\n dialect: declaration.binding.dialect,\n rowCount: counts.extractedRows,\n rejectedRows: counts.rejectedRows,\n completedPass: counts.completedPass,\n }, executionContext)?.catch?.(() => undefined);\n } catch {\n // Observation only — never the reason a run fails.\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"external-data-pipeline-run.backend.service.js","sourceRoot":"","sources":["../../../../src/external-data/external-data-pipeline-run.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The ETL pipeline RUN service (partial-resource paper v3.1, PR-5/PR-6/PR-9/PR-10/PR-12) — the\n * orchestrator that turns a declared `externalDataPipeline` into destination rows: E (extraction source over\n * the shared read client) → T (pure transform) → L (the data-seeding engines' imperative doors).\n *\n * ## The one decision that carries the paper's ⚠ traps: MODE SELECTION (PR-6)\n *\n * A run that COMPLETES a pass over the remote population loads through `runSyncSeed` — the full\n * reconcile INCLUDING the Stage-4 orphan walk (a destination row whose remote sibling vanished is\n * handled per the declared `orphanPolicy`). A run that stops mid-pass (`maxRowsPerRun` reached)\n * loads through `runUpgradeSeed` — the SAME reconcile loop with NO orphan stage, because \"absent\n * from a partial extraction\" is not evidence of remote deletion. A partial run orphans NOTHING;\n * the persisted cursor lets the next run continue the pass where this one stopped.\n *\n * ## Change detection (PR-30)\n *\n * The assembled seed pins `version: 1` forever and declares\n * `reconcileStrategy: CONTENT` — a pipeline's change signal is the REMOTE VALUE, not a version\n * bump. Managed-field content comparison decides write-vs-skip per row, so an unchanged remote\n * population costs zero destination writes (and zero RAG re-ingestions) per pass.\n *\n * ## Ledger split (PR-9)\n *\n * Per-entry load outcome lives on the `DataSeedRun` ledger row every run writes through the\n * engines (one row per pipeline — `seedKey` + constant version, recovered and reset each run).\n * The `ExternalDataPipelineState` row carries what data-seeding cannot know: the extraction CURSOR\n * (surviving restarts, so populations larger than one run's budget eventually sync end to end)\n * and the ETL-side last-run summary (extracted/rejected happen BEFORE the seed engine sees\n * anything). Transform rejections are logged per row (bounded) and counted on the summary; the\n * rejected rows' previous destination versions simply survive.\n *\n * ## Attribution (PR-10)\n *\n * ONE read-through audit row per run through the same lazily-resolved seam as the virtual\n * repository (`logHttpApiReadThroughAccess`), carrying the run outcome counts — a pipeline run\n * is bulk read-through access to an external system and lands in the same audit lane.\n *\n * ## Concurrency\n *\n * Single-flight per pipeline is IN-PROCESS (a second `runPipeline` for the same resource while\n * one is in flight answers `already-running`). A cross-instance double run is deliberately not\n * locked out: every load is an idempotent business-key MERGE and extraction pages are\n * drift-safe, so the second run wastes work but corrupts nothing — the same posture as\n * concurrent seed passes.\n */\n\nimport { inject, injectable, optional, unmanaged } from 'inversify';\nimport {\n CoreResourceOperation,\n ErrorCustomMessageReference,\n ErrorType,\n type ResourceType,\n} from '@wildo-ai/saas-models';\nimport {\n ExternalDataDestinationPopulation,\n ExternalDataOrphanPolicy,\n type ExternalDataPipelineDeclaration,\n} from '@wildo-ai/saas-models/external-data';\n\nimport {\n DataSeedMode,\n DataSeedReconcileStrategy,\n DataSeedScopeKind,\n DataSeedSyncOrphanPolicy,\n DataSeedTriggerKind,\n DataSeedTriggerOrigin,\n type DataSeedDefinition,\n type DataSeedStaticEntry,\n} from '~wildo-backend-lib/data-seeding/models/data-seed.shared.schemas';\nimport { DataSeedRunStatus } from '~wildo-backend-lib/data-seeding/models/data-seed-run.shared.schemas';\nimport type { DataSeedScopeAnchor } from '~wildo-backend-lib/data-seeding/services/shared/data-seed-scope-anchor.shared.types';\nimport type { SyncSeedEngineBackendService } from '~wildo-backend-lib/data-seeding/services/engines/sync-seed-engine.backend.service';\nimport type { UpgradeSeedEngineBackendService } from '~wildo-backend-lib/data-seeding/services/engines/upgrade-seed-engine.backend.service';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport type { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport type { RepositoriesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport type { ResourcesRegistryBackendService } from '~wildo-backend-lib/resources/services/resources-registry.backend.service';\nimport type { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { BackendResourceType } from '~wildo-backend-lib/resources/models/resources-types.backend.schemas';\nimport type { ExternalDataPipelineState } from '~wildo-backend-lib/external-data/models/external-data-pipeline-state.backend.schemas';\nimport { HttpApiReadClient } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-read-client.backend';\nimport { ExternalProvidersHttpApiAccessResolver } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-provider-access.backend';\nimport type { HttpApiAuditLogsResolver } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service';\nimport {\n AuditObservationKind,\n type AuditObservationLossMetricsRecorder,\n emitAuditObservation,\n} from '~wildo-backend-lib/monitoring/observability/audit-observation-emission.backend';\nimport { HttpApiExternalDataExtractionSource, type ExternalDataExtractionSource } from './external-data-extraction-source.backend';\n/*\n * entrypoint-closure-waiver: `etl-transform.backend` is published only by `./external-data-models` (one\n * door per room), and nothing nominal crosses into this root-exported module's public surface —\n * `ExternalDataTransformedRow`/`ExternalDataRowRejection` are structural interfaces and `ExternalDataPipelineRunReport`\n * names none of them nominally. Probed 2026-08-28 after the barrel split:\n * `tsc -p tsconfig.build.json --noEmit` with declaration emit — zero TS2742/TS2883/TS7056.\n */\nimport { transformExternalDataPage, type ExternalDataRowRejection } from './external-data-transform.backend';\n\n/** How many per-row rejection reasons are LOGGED per run — the count is always exact. */\nconst MAX_LOGGED_REJECTIONS = 25;\n\nexport interface ExternalDataPipelineRunInput {\n /** The DESTINATION resource type declaring the `externalDataPipeline`. */\n resourceType: string;\n /** `ADMIN_MANUAL` for the on-demand door, `SCHEDULED_RERUN` for the cron batch (PR-12). */\n triggerOrigin: DataSeedTriggerOrigin.ADMIN_MANUAL | DataSeedTriggerOrigin.SCHEDULED_RERUN;\n triggeredByUserId: string | null;\n}\n\nexport interface ExternalDataPipelineRunReport {\n outcome: 'completed-pass' | 'partial-pass' | 'already-running';\n extractedRows: number;\n rejectedRows: number;\n /**\n * Declared entries HANDED TO the seed engine (extracted − rejected) — what was submitted, never\n * what was written. Named `submittedEntries` rather than `loadedEntries` because the old name\n * read as a write count and was believed as one: a run reporting `loadedEntries: 2` had in fact\n * written one row and failed the other. `loadStatus` is the field that answers what landed.\n */\n submittedEntries: number;\n /**\n * The seed engine's verdict on the LOAD — `PARTIAL`/`FAILED` means go read `seedRunId`. Distinct\n * from `outcome`, which reports only whether the EXTRACTION pass completed.\n */\n loadStatus: DataSeedRunStatus | null;\n /** `_id` of the `DataSeedRun` ledger row (per-entry outcome detail); null when none ran. */\n seedRunId: string | null;\n /** The persisted continuation — non-null exactly for `partial-pass`. */\n cursor: string | null;\n durationMs: number;\n}\n\n/** Test seam: build the extraction source for one run (production default: the HTTP source). */\nexport type ExternalDataExtractionSourceFactory = (\n declaration: ExternalDataPipelineDeclaration,\n internalContext: ExecutionContext<any>,\n) => ExternalDataExtractionSource;\n\n@injectable()\nexport class ExternalDataPipelineRunBackendService {\n private readonly inFlight = new Set<string>();\n private readonly logDebug: (message: string, data?: unknown) => void;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService) private readonly repositoriesRegistry: RepositoriesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.ResourceRegistryService) private readonly resourcesRegistry: ResourcesRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.SyncSeedEngine) private readonly syncEngine: SyncSeedEngineBackendService,\n @inject(SAAS_SERVICE_TYPES.UpgradeSeedEngine) private readonly upgradeEngine: UpgradeSeedEngineBackendService,\n @inject(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService) private readonly executionContextCreator: ExecutionContextCreatorBackendService,\n /**\n * Resolves provider credentials for the extraction client. `@optional()` so a container\n * without external-connector bindings still constructs the service — a run then fails with\n * the resolver's own actionable error, never at boot.\n */\n @inject(SAAS_SERVICE_TYPES.ExternalProvidersRegistryService) @optional() private readonly externalProvidersRegistry?: unknown,\n /**\n * The read-through audit seam (PR-10) — same structural, lazily-resolved contract as the\n * virtual repository's: absent binding means no emission, and emission failure never fails\n * the run it observes.\n */\n /*\n * `@unmanaged()`, because this class IS container-constructed and the two seams below are not the\n * container's to resolve. The contract was copied from `HttpApiResourceRepositoryBackendService`,\n * where an undecorated optional parameter is fine — that class carries no `@injectable()` and is\n * built with `new`. Under `@injectable()` the same shape is a boot failure: Inversify validates\n * EVERY constructor parameter, so an undecorated one aborts container setup with\n * \"unexpected missing metadata\" long before any ETL code runs.\n */\n @unmanaged() private readonly auditLogsResolver?: HttpApiAuditLogsResolver,\n /** Test seam — production leaves it unset and gets the HTTP source over the shared client. */\n @unmanaged() private readonly extractionSourceFactory?: ExternalDataExtractionSourceFactory,\n /**\n * The PRODUCTION door to the read-through audit sink — and it had to be added, because the\n * `@unmanaged()` thunk above cannot be one.\n *\n * `@unmanaged()` tells Inversify not to resolve a parameter, and this class is bound with\n * `.to(...)`, so the container constructs it and passes `undefined` there. That made the seam a\n * TEST-ONLY door: every scheduled ETL run in production reached `recordRunReadThroughAccess`,\n * found no resolver, and emitted nothing. The sink itself exists\n * (`AuditLogsBackendService.logHttpApiReadThroughAccess`), so nothing was refusing — the row was\n * simply never written, silently, which is exactly the shape the loss counter now makes visible.\n *\n * Two suppliers, and they cannot collide: `@unmanaged()` is structurally unfillable by the\n * container, so the thunk is only ever set by a test constructing this class with `new`, and it\n * takes precedence there so a suite can substitute a double. `@optional()` here for the usual\n * reason — a minimal container binds no audit service and an ETL run must still run.\n *\n * assurance-control: WILDO.AUDIT.ATTRIBUTION — an ETL run's external read is recorded.\n */\n @inject(SAAS_SERVICE_TYPES.AuditLogsService) @optional()\n private readonly auditLogsService?: NonNullable<ReturnType<HttpApiAuditLogsResolver>>,\n /**\n * The loss counter behind that emission. Appended LAST and `@optional()`, so a container with no\n * metrics binding degrades a dropped attribution row to the log channel rather than to nothing.\n */\n @inject(SAAS_SERVICE_TYPES.MetricsService) @optional()\n private readonly metricsService?: AuditObservationLossMetricsRecorder,\n ) {\n this.logDebug = this.logger.debugByType('ExternalDataPipelineRun');\n this.logger.setDebugTypeLogging('ExternalDataPipelineRun', false);\n }\n\n /** The on-demand door (PR-12). The scheduled batch calls this per due pipeline. */\n public async runPipeline(input: ExternalDataPipelineRunInput): Promise<ExternalDataPipelineRunReport> {\n if (this.inFlight.has(input.resourceType)) {\n return {\n outcome: 'already-running', extractedRows: 0, rejectedRows: 0,\n submittedEntries: 0, loadStatus: null, seedRunId: null, cursor: null, durationMs: 0,\n };\n }\n this.inFlight.add(input.resourceType);\n try {\n return await this.executeRun(input);\n } finally {\n this.inFlight.delete(input.resourceType);\n }\n }\n\n /** Every registered resource that declares an `externalDataPipeline` — the scheduled batch's population. */\n public listDeclaredPipelines(): Array<{ resourceType: string; declaration: ExternalDataPipelineDeclaration }> {\n return (this.resourcesRegistry.getResourceTypes() as string[])\n .flatMap((resourceType) => {\n const configuration = this.resourcesRegistry.getResourceConfiguration(resourceType as ResourceType) as\n | { externalDataPipeline?: ExternalDataPipelineDeclaration }\n | undefined;\n return configuration?.externalDataPipeline ? [{ resourceType, declaration: configuration.externalDataPipeline }] : [];\n });\n }\n\n private async executeRun(input: ExternalDataPipelineRunInput): Promise<ExternalDataPipelineRunReport> {\n const startedAtMs = Date.now();\n const { resourceType, triggerOrigin, triggeredByUserId } = input;\n\n const configuration = this.resourcesRegistry.getResourceConfiguration(resourceType as ResourceType) as {\n externalDataPipeline?: ExternalDataPipelineDeclaration;\n };\n const declaration = configuration?.externalDataPipeline;\n if (!declaration) {\n throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, undefined, {\n customMessageReference: ErrorCustomMessageReference.RESOURCES_REGISTRY_INITIALIZATION_FAILED,\n context: { reason: 'etl_pipeline_without_declaration', resourceType },\n });\n }\n\n const internalContext = await this.executionContextCreator.createForInternalSystemOperation();\n const stateContext = await this.executionContextCreator.createForInternalRepositoryOperation({\n resourceType: BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE,\n operationIdentifier: CoreResourceOperation.CREATE,\n });\n const stateRepo = this.repositoriesRegistry.getRepositoryOrThrow(\n BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE as unknown as ResourceType,\n stateContext,\n );\n\n let state = await stateRepo.read<ExternalDataPipelineState>(stateContext, { pipelineResourceType: resourceType });\n if (!state) {\n state = (await stateRepo.create(stateContext, {\n pipelineResourceType: resourceType,\n cursor: null,\n passStartedAt: null,\n lastRunAt: null,\n lastRunSummary: null,\n } as never)) as unknown as ExternalDataPipelineState;\n }\n const resumingCursor = state.cursor ?? undefined;\n const passStartedAt = resumingCursor === undefined ? new Date() : (state.passStartedAt ?? new Date());\n\n // ── E: bounded page walk from the persisted cursor ──────────────────────────\n const source = (this.extractionSourceFactory ?? this.buildHttpExtractionSource.bind(this))(declaration, internalContext);\n // PR-21 — WARN-only drift probe, once per run, before extraction. A probe failure is\n // swallowed: drift detection must never be the reason a run fails.\n try {\n for (const warning of (await source.describeContractDrift?.()) ?? []) {\n this.logger.warn(`ExternalDataPipelineRun[${resourceType}]: schema drift — ${warning}`);\n }\n } catch {\n // Diagnostic only.\n }\n const extractedRows: Array<Record<string, unknown>> = [];\n let cursor = resumingCursor;\n let passComplete = false;\n while (extractedRows.length < declaration.maxRowsPerRun) {\n const page = await source.extractPage(cursor, Math.min(declaration.maxRowsPerRun - extractedRows.length, 1_000));\n extractedRows.push(...page.rows);\n cursor = page.nextCursor;\n if (page.complete) {\n passComplete = true;\n break;\n }\n }\n\n // ── T: pure transform; per-row rejections reported, never fatal ─────────────\n const { rows, rejections } = transformExternalDataPage(declaration, extractedRows);\n this.logRejections(resourceType, rejections);\n const entries: DataSeedStaticEntry[] = rows.map((row) => ({\n businessKey: { [declaration.remoteKeyLocalField]: row.businessKeyValue },\n data: row.data,\n }));\n\n // ── L: mode selection is THE PR-6 guard — a partial run orphans NOTHING ─────\n const seed = this.assembleSeedDefinition(resourceType, declaration, passComplete);\n const scope = await this.resolveApplicationScopeAnchor(internalContext);\n const engineInput = {\n seed,\n trigger: { triggerKind: DataSeedTriggerKind.ON_SCHEDULED_REFRESH as const },\n triggerOrigin,\n scope,\n entries,\n triggeredByUserId,\n rowMetadataSource: `external-data:${resourceType}`,\n internalContext,\n };\n const seedReport = passComplete\n ? await this.syncEngine.runSyncSeed(engineInput)\n : await this.upgradeEngine.runUpgradeSeed(engineInput);\n\n // ── Persist the state row: the cursor IS the pass continuation ──────────────\n const durationMs = Date.now() - startedAtMs;\n const seedRunId = seedReport.runId ?? null;\n // The LOAD verdict, carried separately from `outcome` (which is about the EXTRACTION pass).\n // Both are reported: a full pass that failed to write part of what it read is neither a clean\n // success nor a partial pass, and collapsing them would hide exactly that case.\n const loadStatus = seedReport.status ?? null;\n await stateRepo.update(stateContext, state._id, {\n cursor: passComplete ? null : (cursor ?? null),\n passStartedAt: passComplete ? null : passStartedAt,\n lastRunAt: new Date(startedAtMs),\n lastRunSummary: {\n completedPass: passComplete,\n extractedRows: extractedRows.length,\n rejectedRows: rejections.length,\n loadStatus,\n seedRunId,\n durationMs,\n },\n } as never);\n\n this.recordRunReadThroughAccess(internalContext, resourceType, declaration, {\n extractedRows: extractedRows.length,\n rejectedRows: rejections.length,\n completedPass: passComplete,\n });\n\n return {\n outcome: passComplete ? 'completed-pass' : 'partial-pass',\n extractedRows: extractedRows.length,\n rejectedRows: rejections.length,\n submittedEntries: entries.length,\n loadStatus,\n seedRunId,\n cursor: passComplete ? null : (cursor ?? null),\n durationMs,\n };\n }\n\n /**\n * The assembled seed is EPHEMERAL (never registered): `version` is pinned at 1 forever and\n * `reconcileStrategy: CONTENT` carries change detection (PR-30) — bumping the version per run\n * would route every row through the migrator path and rewrite the whole corpus each pass.\n */\n private assembleSeedDefinition(\n resourceType: string,\n declaration: ExternalDataPipelineDeclaration,\n passComplete: boolean,\n ): DataSeedDefinition {\n const managedFields = [\n declaration.remoteKeyLocalField,\n ...declaration.mapping.map((entry) => entry.localField),\n ];\n return {\n seedKey: `external-data:${resourceType}`,\n scope: { kind: DataSeedScopeKind.APPLICATION },\n resourceType,\n triggers: [{ triggerKind: DataSeedTriggerKind.ON_SCHEDULED_REFRESH }],\n mode: passComplete ? DataSeedMode.SYNC : DataSeedMode.UPGRADE,\n version: 1,\n managedFields,\n reconcileStrategy: DataSeedReconcileStrategy.CONTENT,\n ...(passComplete ? { onOrphan: this.mapOrphanPolicy(this.effectiveOrphanPolicy(declaration)) } : {}),\n } as DataSeedDefinition;\n }\n\n /**\n * The seam between the two closed vocabularies (never merged by value overlap — the ETL\n * declaration must not depend on data-seeding's enum, and each member's semantics are owned\n * where it is declared).\n */\n private mapOrphanPolicy(orphanPolicy: ExternalDataOrphanPolicy): DataSeedSyncOrphanPolicy {\n switch (orphanPolicy) {\n case ExternalDataOrphanPolicy.DELETE:\n return DataSeedSyncOrphanPolicy.DELETE;\n case ExternalDataOrphanPolicy.DEPRECATE:\n return DataSeedSyncOrphanPolicy.DEPRECATE;\n case ExternalDataOrphanPolicy.REPORT:\n return DataSeedSyncOrphanPolicy.REPORT;\n }\n }\n\n /**\n * ⚠ OPEN-population caveat, named where it is decided: the SYNC orphan walk considers every\n * row of the destination, including caller-minted rows on an OPEN population. Those rows have\n * no `__seed` metadata and a business key outside the declared set, so DELETE/DEPRECATE would\n * hit them. Slice 1 therefore downgrades OPEN populations' orphan handling to REPORT.\n */\n private effectiveOrphanPolicy(declaration: ExternalDataPipelineDeclaration): ExternalDataOrphanPolicy {\n return declaration.population === ExternalDataDestinationPopulation.OPEN ? ExternalDataOrphanPolicy.REPORT : declaration.orphanPolicy;\n }\n\n private buildHttpExtractionSource(\n declaration: ExternalDataPipelineDeclaration,\n internalContext: ExecutionContext<any>,\n ): ExternalDataExtractionSource {\n const readClient = new HttpApiReadClient(\n declaration.binding,\n new ExternalProvidersHttpApiAccessResolver(this.externalProvidersRegistry as never),\n );\n return new HttpApiExternalDataExtractionSource(declaration, readClient, internalContext);\n }\n\n private async resolveApplicationScopeAnchor(internalContext: ExecutionContext<any>): Promise<DataSeedScopeAnchor> {\n const appRepo = this.repositoriesRegistry.getRepositoryOrThrow('applications' as ResourceType, internalContext);\n const application = (await appRepo.read<{ _id: string }>(internalContext, {})) ?? null;\n if (!application) {\n throw this.errorBuilder.buildError(ErrorType.INTERNAL, internalContext, {\n customMessageReference: ErrorCustomMessageReference.INTERNAL,\n context: { message: 'ExternalDataPipelineRun: no APPLICATION row exists — bootstrap order violation.' },\n });\n }\n return { scopeKind: DataSeedScopeKind.APPLICATION, relatedId: application._id, relatedResourceType: null };\n }\n\n private logRejections(resourceType: string, rejections: ExternalDataRowRejection[]): void {\n if (rejections.length === 0) return;\n this.logger.warn(`ExternalDataPipelineRun[${resourceType}]: ${rejections.length} row(s) rejected by transform (previous versions survive).`, {\n rejections: rejections.slice(0, MAX_LOGGED_REJECTIONS),\n truncated: rejections.length > MAX_LOGGED_REJECTIONS,\n });\n }\n\n /**\n * PR-10 — one audit row per run, fire-and-forget through the shared seam.\n *\n * The emission goes through {@link emitAuditObservation}, so a run whose attribution row never\n * reached the pipeline lands on `audit_observation_dropped_total` instead of nowhere. The feature\n * detection decides an ARGUMENT rather than an early return: handing the seam `undefined` is how\n * this site reports `SERVICE_UNAVAILABLE`, and returning early would restore the silence that let\n * this seam sit unwired in production without anything saying so.\n */\n private recordRunReadThroughAccess(\n executionContext: ExecutionContext<any>,\n resourceType: string,\n declaration: ExternalDataPipelineDeclaration,\n counts: { extractedRows: number; rejectedRows: number; completedPass: boolean },\n ): void {\n let emit: (() => unknown) | undefined;\n try {\n // The test thunk first, the injected production service second — see the constructor.\n const auditLogsService = this.auditLogsResolver?.() ?? this.auditLogsService;\n const sink = auditLogsService?.logHttpApiReadThroughAccess;\n if (typeof sink === 'function') {\n emit = (): unknown => sink.call(auditLogsService, {\n resourceType,\n operationIdentifier: 'externalDataPipelineRun',\n providerRef: declaration.binding.providerRef,\n remoteEntityRef: declaration.binding.entityRef,\n dialect: declaration.binding.dialect,\n rowCount: counts.extractedRows,\n rejectedRows: counts.rejectedRows,\n completedPass: counts.completedPass,\n }, executionContext);\n }\n } catch {\n // A thunk that throws leaves `emit` undefined, so the observation is reported as UNAVAILABLE\n // rather than swallowed. Observation only — never the reason a run fails.\n }\n\n emitAuditObservation({\n observation: AuditObservationKind.HTTP_API_READ_THROUGH_ACCESS,\n emit,\n metricsService: this.metricsService,\n logger: this.logger,\n // Enough to name WHICH run went unrecorded, and how much it moved — the counts are what\n // separate a run that read nothing from one that read a tenant's whole remote table.\n context: {\n observedResourceType: resourceType,\n observedProviderRef: declaration.binding.providerRef,\n observedRemoteEntityRef: declaration.binding.entityRef,\n observedRowCount: counts.extractedRows,\n },\n });\n }\n}\n"]}
|
|
@@ -13,9 +13,11 @@ export interface ExternalProviderSelectionResolutionEvidence {
|
|
|
13
13
|
readonly authorityKind: ExternalProviderSelectionAuthorityKind;
|
|
14
14
|
readonly overrideStatus: ExternalProviderSelectionOverrideStatus;
|
|
15
15
|
readonly applicationPrimaryProviderRef: string | null;
|
|
16
|
-
|
|
16
|
+
/** The selection's `whenUnavailable` refs — substitutes for an unavailable primary, never a failover chain. */
|
|
17
|
+
readonly applicationSubstituteProviderRefs: readonly string[];
|
|
17
18
|
readonly environmentPrimaryProviderRef: string | null;
|
|
18
|
-
|
|
19
|
+
/** The environment override's `whenUnavailable` refs. Same semantics as the application's. */
|
|
20
|
+
readonly environmentSubstituteProviderRefs: readonly string[];
|
|
19
21
|
readonly providerRuntimeArtifact: ProviderRuntimeArtifactEvidenceMetadata | null;
|
|
20
22
|
}
|
|
21
23
|
//# sourceMappingURL=provider-selection-resolution-evidence.backend.definitions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-selection-resolution-evidence.backend.definitions.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/models/provider-selection-resolution-evidence.backend.definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,+DAA+D,CAAC;AAE7H,oBAAY,sCAAsC;IAChD,4BAA4B,iCAAiC;IAC7D,kBAAkB,uBAAuB;IACzC,oBAAoB,yBAAyB;CAC9C;AAED,oBAAY,uCAAuC;IACjD,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,2CAA2C;IAC1D,QAAQ,CAAC,aAAa,EAAE,sCAAsC,CAAC;IAC/D,QAAQ,CAAC,cAAc,EAAE,uCAAuC,CAAC;IACjE,QAAQ,CAAC,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,QAAQ,CAAC
|
|
1
|
+
{"version":3,"file":"provider-selection-resolution-evidence.backend.definitions.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/models/provider-selection-resolution-evidence.backend.definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,+DAA+D,CAAC;AAE7H,oBAAY,sCAAsC;IAChD,4BAA4B,iCAAiC;IAC7D,kBAAkB,uBAAuB;IACzC,oBAAoB,yBAAyB;CAC9C;AAED,oBAAY,uCAAuC;IACjD,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,2CAA2C;IAC1D,QAAQ,CAAC,aAAa,EAAE,sCAAsC,CAAC;IAC/D,QAAQ,CAAC,cAAc,EAAE,uCAAuC,CAAC;IACjE,QAAQ,CAAC,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,+GAA+G;IAC/G,QAAQ,CAAC,iCAAiC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9D,QAAQ,CAAC,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,8FAA8F;IAC9F,QAAQ,CAAC,iCAAiC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9D,QAAQ,CAAC,uBAAuB,EAAE,uCAAuC,GAAG,IAAI,CAAC;CAClF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-selection-resolution-evidence.backend.definitions.js","sourceRoot":"","sources":["../../../../../src/external-providers/models/provider-selection-resolution-evidence.backend.definitions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,sCAIX;AAJD,WAAY,sCAAsC;IAChD,uGAA6D,CAAA;IAC7D,mFAAyC,CAAA;IACzC,uFAA6C,CAAA;AAC/C,CAAC,EAJW,sCAAsC,KAAtC,sCAAsC,QAIjD;AAED,MAAM,CAAN,IAAY,uCAIX;AAJD,WAAY,uCAAuC;IACjD,4DAAiB,CAAA;IACjB,8DAAmB,CAAA;IACnB,kEAAuB,CAAA;AACzB,CAAC,EAJW,uCAAuC,KAAvC,uCAAuC,QAIlD","sourcesContent":["import type { ProviderRuntimeArtifactEvidenceMetadata } from '../../config/models/provider-runtime-artifact.backend.schemas';\n\nexport enum ExternalProviderSelectionAuthorityKind {\n APPLICATION_RUNTIME_ARTIFACT = 'APPLICATION_RUNTIME_ARTIFACT',\n DEFAULT_RESOLUTION = 'DEFAULT_RESOLUTION',\n ENVIRONMENT_OVERRIDE = 'ENVIRONMENT_OVERRIDE',\n}\n\nexport enum ExternalProviderSelectionOverrideStatus {\n ABSENT = 'ABSENT',\n APPLIED = 'APPLIED',\n MALFORMED = 'MALFORMED',\n}\n\nexport interface ExternalProviderSelectionResolutionEvidence {\n readonly authorityKind: ExternalProviderSelectionAuthorityKind;\n readonly overrideStatus: ExternalProviderSelectionOverrideStatus;\n readonly applicationPrimaryProviderRef: string | null;\n readonly
|
|
1
|
+
{"version":3,"file":"provider-selection-resolution-evidence.backend.definitions.js","sourceRoot":"","sources":["../../../../../src/external-providers/models/provider-selection-resolution-evidence.backend.definitions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,sCAIX;AAJD,WAAY,sCAAsC;IAChD,uGAA6D,CAAA;IAC7D,mFAAyC,CAAA;IACzC,uFAA6C,CAAA;AAC/C,CAAC,EAJW,sCAAsC,KAAtC,sCAAsC,QAIjD;AAED,MAAM,CAAN,IAAY,uCAIX;AAJD,WAAY,uCAAuC;IACjD,4DAAiB,CAAA;IACjB,8DAAmB,CAAA;IACnB,kEAAuB,CAAA;AACzB,CAAC,EAJW,uCAAuC,KAAvC,uCAAuC,QAIlD","sourcesContent":["import type { ProviderRuntimeArtifactEvidenceMetadata } from '../../config/models/provider-runtime-artifact.backend.schemas';\n\nexport enum ExternalProviderSelectionAuthorityKind {\n APPLICATION_RUNTIME_ARTIFACT = 'APPLICATION_RUNTIME_ARTIFACT',\n DEFAULT_RESOLUTION = 'DEFAULT_RESOLUTION',\n ENVIRONMENT_OVERRIDE = 'ENVIRONMENT_OVERRIDE',\n}\n\nexport enum ExternalProviderSelectionOverrideStatus {\n ABSENT = 'ABSENT',\n APPLIED = 'APPLIED',\n MALFORMED = 'MALFORMED',\n}\n\nexport interface ExternalProviderSelectionResolutionEvidence {\n readonly authorityKind: ExternalProviderSelectionAuthorityKind;\n readonly overrideStatus: ExternalProviderSelectionOverrideStatus;\n readonly applicationPrimaryProviderRef: string | null;\n /** The selection's `whenUnavailable` refs — substitutes for an unavailable primary, never a failover chain. */\n readonly applicationSubstituteProviderRefs: readonly string[];\n readonly environmentPrimaryProviderRef: string | null;\n /** The environment override's `whenUnavailable` refs. Same semantics as the application's. */\n readonly environmentSubstituteProviderRefs: readonly string[];\n readonly providerRuntimeArtifact: ProviderRuntimeArtifactEvidenceMetadata | null;\n}\n"]}
|
package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ProviderOperationExecutorBackendService` — the ONE door through which an application executes a
|
|
3
|
+
* provider-declared operation (S3a, #331; plan D4).
|
|
4
|
+
*
|
|
5
|
+
* A custom backend service names a provider and an operation; everything between that and the wire
|
|
6
|
+
* lives here: resolving the provider's runtime contract, loading its catalogue on demand and
|
|
7
|
+
* memoizing it, validating the caller's input against the operation's own schema, compiling the
|
|
8
|
+
* request, resolving identity through the shared access port, executing under the provider's rate
|
|
9
|
+
* budget and semantics, and parsing the answer.
|
|
10
|
+
*
|
|
11
|
+
* ## What it deliberately does NOT do
|
|
12
|
+
*
|
|
13
|
+
* - **It does not resolve secrets.** `HttpApiProviderAccessResolver` does, over the provider
|
|
14
|
+
* registry — the same port the ETL lane uses. When #329 makes that registry the COMPOSED one, a
|
|
15
|
+
* package-shipped provider's key arrives here with no edit. A second secret path would be a
|
|
16
|
+
* second thing to get wrong.
|
|
17
|
+
* - **It does not decide IDENTITY.** Whose account a call spends, and on whose behalf, is the
|
|
18
|
+
* connection target the resolver is handed; a delegated target is served or refused THERE. This
|
|
19
|
+
* read "it does not implement `USER_DELEGATED` … the resolver refuses it by name today" until
|
|
20
|
+
* #333, which retired that mode for the two-axis `ExternalProvider_ConnectionShape` and lifted
|
|
21
|
+
* the refusal — neither change reached this class, which is the point of asking the port.
|
|
22
|
+
* - **It does not page.** `pagination` on an operation is a hint the caller reads.
|
|
23
|
+
* - **It does not AUDIT — yet, and this is the one gap worth stating loudly.** The seam is built
|
|
24
|
+
* and called on every outbound call (`ProviderOperationAuditResolver`, the lazily-resolved thunk
|
|
25
|
+
* this repository uses for the same job in the HTTP-API repository), but the
|
|
26
|
+
* `CoreAuditableEventType` member and the audit-logs method behind it belong to S3b, which the
|
|
27
|
+
* plan's seam table requires to agree the event NAMES with S5a before either commits. So the
|
|
28
|
+
* emission point exists and answers nothing until S3b writes the sink. That is a real hole, not
|
|
29
|
+
* a design: an application calling a vendor on a user's behalf must leave a trail, and until
|
|
30
|
+
* S3b lands it leaves none.
|
|
31
|
+
*
|
|
32
|
+
* ## Bound by FACTORY, not by decoration
|
|
33
|
+
*
|
|
34
|
+
* This class carried "Not `@injectable`, on purpose" and deferred registration to the slice that
|
|
35
|
+
* needed it injected. That slice arrived: an application scopes a provider from the scraped
|
|
36
|
+
* catalogue and a service of its own calls an operation, which it cannot do while the only door is a
|
|
37
|
+
* class nothing binds.
|
|
38
|
+
*
|
|
39
|
+
* It is still a plain class. `SAAS_SERVICE_TYPES.ProviderOperationExecutorService` is bound with
|
|
40
|
+
* `toDynamicValue`, so the lane's classes stay constructible with `new` — the repositories registry
|
|
41
|
+
* builds its own resolver that way — and no injection token has to be invented for
|
|
42
|
+
* `ConnectionTargetAuthorizationPort`, which nothing binds and whose absence is deliberately
|
|
43
|
+
* fail-closed.
|
|
44
|
+
*
|
|
45
|
+
* Singleton, because this memoizes a catalogue per `(providerRef, domain)` and holds one rate-limit
|
|
46
|
+
* window per provider. A transient would reload the catalogue per call and give every caller its own
|
|
47
|
+
* window, which is not a rate limit.
|
|
48
|
+
*/
|
|
49
|
+
import type { ExternalProvider_ConnectionTarget } from '@wildo-ai/external-connectors-models';
|
|
50
|
+
import type { ProviderOperationExecute, ProviderRestOperation, ProviderRestOperationCatalogue } from '@wildo-ai/external-connectors-models';
|
|
51
|
+
import type { ExecutionContext } from '../../runtime/models/execution-context.backend.schemas';
|
|
52
|
+
import type { HttpApiFetchLike } from '../../base-classes/services/repositories/http-api/http-api-transport.backend';
|
|
53
|
+
import type { HttpApiProviderAccessResolver } from '../../base-classes/services/repositories/http-api/http-api-provider-access.backend';
|
|
54
|
+
import type { ExternalProvidersRegistryBackendService } from '../../external-providers/services/external-providers-registry.backend.service';
|
|
55
|
+
/** Why an operation could not be reached at all — each member names a different remedy. */
|
|
56
|
+
export declare enum ProviderOperationLookupFailureKind {
|
|
57
|
+
/** The provider declares no `rest` runtime contract; it may not even be a REST provider. */
|
|
58
|
+
PROVIDER_NOT_REST = "PROVIDER_NOT_REST",
|
|
59
|
+
/** The provider is REST but declares no operation catalogue — nothing to call. */
|
|
60
|
+
PROVIDER_DECLARES_NO_OPERATIONS = "PROVIDER_DECLARES_NO_OPERATIONS",
|
|
61
|
+
/** The catalogue loaded and holds no operation by that id. */
|
|
62
|
+
OPERATION_NOT_IN_CATALOGUE = "OPERATION_NOT_IN_CATALOGUE",
|
|
63
|
+
/** The provider's own loader threw. */
|
|
64
|
+
CATALOGUE_LOAD_FAILED = "CATALOGUE_LOAD_FAILED"
|
|
65
|
+
}
|
|
66
|
+
export declare class ProviderOperationLookupError extends Error {
|
|
67
|
+
readonly detail: {
|
|
68
|
+
readonly kind: ProviderOperationLookupFailureKind;
|
|
69
|
+
readonly providerRef: string;
|
|
70
|
+
readonly operationId?: string;
|
|
71
|
+
readonly cause?: unknown;
|
|
72
|
+
};
|
|
73
|
+
constructor(message: string, detail: {
|
|
74
|
+
readonly kind: ProviderOperationLookupFailureKind;
|
|
75
|
+
readonly providerRef: string;
|
|
76
|
+
readonly operationId?: string;
|
|
77
|
+
readonly cause?: unknown;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The audit seam — structural and lazily resolved, the pattern this repository already uses for
|
|
82
|
+
* the HTTP-API read-through trail. The executor never holds the audit service, only a thunk; an
|
|
83
|
+
* absent binding means no emission, and an emission failure never fails the call it observes.
|
|
84
|
+
*
|
|
85
|
+
* TODO(assurance-control): WILDO.AUDIT.ATTRIBUTION — an outbound provider call made on a user's
|
|
86
|
+
* behalf must be recorded with the real initiating user. The sink behind this thunk is S3b's, and
|
|
87
|
+
* the `CoreAuditableEventType` member it writes must be agreed with S5a first (plan seam table).
|
|
88
|
+
*/
|
|
89
|
+
/**
|
|
90
|
+
* The credential store, reached the way the audit sink is — through a thunk, so this class takes no
|
|
91
|
+
* dependency on `security/connected-accounts` and a unit harness needs neither.
|
|
92
|
+
*
|
|
93
|
+
* Optional in both directions: a host that binds no store records nothing, and an APPLICATION-owned
|
|
94
|
+
* call has no row to stamp.
|
|
95
|
+
*/
|
|
96
|
+
export type ProviderCredentialUseRecorder = () => {
|
|
97
|
+
recordCredentialUse?: (use: {
|
|
98
|
+
organizationId: string;
|
|
99
|
+
providerRef: string;
|
|
100
|
+
secretSlug: string;
|
|
101
|
+
source: string;
|
|
102
|
+
credentialId?: string;
|
|
103
|
+
outcome?: {
|
|
104
|
+
accepted: boolean;
|
|
105
|
+
providerMessage?: string;
|
|
106
|
+
};
|
|
107
|
+
}) => Promise<void>;
|
|
108
|
+
} | undefined;
|
|
109
|
+
export type ProviderOperationAuditResolver = () => {
|
|
110
|
+
logProviderOperationCall?: (data: ProviderOperationAuditRecord, requestExecutionContext?: ExecutionContext<any>) => Promise<void>;
|
|
111
|
+
} | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* What one outbound provider call is worth recording. Ids and shape only, never a payload.
|
|
114
|
+
*
|
|
115
|
+
* assurance-control: WILDO.ACCESS.AUTHORIZATION_DECISION_AUDIT — records WHOSE third-party account an
|
|
116
|
+
* outbound call spent, which the initiator's own ids cannot answer once one execution may spend
|
|
117
|
+
* several.
|
|
118
|
+
*/
|
|
119
|
+
export interface ProviderOperationAuditRecord {
|
|
120
|
+
providerRef: string;
|
|
121
|
+
operationId: string;
|
|
122
|
+
domain: string;
|
|
123
|
+
method: string;
|
|
124
|
+
/** READ or WRITE, as the operation declares it — the axis a reviewer filters on first. */
|
|
125
|
+
classification: string;
|
|
126
|
+
/**
|
|
127
|
+
* WHOSE ACCOUNT the call spent — the first question of any provider incident, and one the
|
|
128
|
+
* initiator's own ids cannot answer.
|
|
129
|
+
*
|
|
130
|
+
* Distinct from `organizationId` below, which records the tenant the REQUEST was scoped to. Those
|
|
131
|
+
* are the same tenant in the ordinary case and different ones exactly where it matters: a user
|
|
132
|
+
* action fanning out to every organization that user belongs to spends N accounts under one
|
|
133
|
+
* initiating scope. A trail carrying only the initiator's organization would attribute every one
|
|
134
|
+
* of those calls to the wrong tenant.
|
|
135
|
+
*/
|
|
136
|
+
connectionOwnerScope: string;
|
|
137
|
+
connectionOwnerId?: string;
|
|
138
|
+
connectionDelegation: string;
|
|
139
|
+
/** HTTP status of the answer; absent when the call never got one. */
|
|
140
|
+
status?: number;
|
|
141
|
+
/** Present when the call failed, naming the failure kind rather than the vendor's prose. */
|
|
142
|
+
failureKind?: string;
|
|
143
|
+
initiatorUserId?: string;
|
|
144
|
+
organizationId?: string;
|
|
145
|
+
executionType?: string;
|
|
146
|
+
}
|
|
147
|
+
export interface ProviderOperationCallInput {
|
|
148
|
+
providerRef: string;
|
|
149
|
+
operationId: string;
|
|
150
|
+
/**
|
|
151
|
+
* The catalogue DOMAIN the operation belongs to, when the caller knows it. Passing it lets the
|
|
152
|
+
* provider's loader answer one domain instead of every one — the whole point of the lazy loader
|
|
153
|
+
* — and is what keeps a vendor with hundreds of operations from evaluating them all to run one.
|
|
154
|
+
* Absent, the whole catalogue is loaded once and memoized.
|
|
155
|
+
*/
|
|
156
|
+
domain?: string;
|
|
157
|
+
input?: Readonly<Record<string, unknown>>;
|
|
158
|
+
/**
|
|
159
|
+
* WHOSE ACCOUNT this call spends. Defaults to the floor — the application's own, acting as itself.
|
|
160
|
+
*
|
|
161
|
+
* On the CALL rather than on the provider or the execution context, because one execution may
|
|
162
|
+
* legitimately spend several tenants' accounts: a single user action pushing a message to every
|
|
163
|
+
* organization that user belongs to issues N calls with N targets and one initiator. The context
|
|
164
|
+
* still decides whether the execution MAY act for each named owner.
|
|
165
|
+
*/
|
|
166
|
+
connection?: ExternalProvider_ConnectionTarget;
|
|
167
|
+
}
|
|
168
|
+
export interface ProviderOperationCallResult<TOutput = unknown> {
|
|
169
|
+
status: number;
|
|
170
|
+
/** The payload at the operation's `resultPath`, parsed through `outputSchema` when declared. */
|
|
171
|
+
output: TOutput;
|
|
172
|
+
/** The whole parsed body, before `resultPath` and before validation. */
|
|
173
|
+
rawBody: unknown;
|
|
174
|
+
operation: ProviderRestOperation;
|
|
175
|
+
}
|
|
176
|
+
export declare class ProviderOperationExecutorBackendService {
|
|
177
|
+
private readonly externalProvidersRegistry;
|
|
178
|
+
private readonly providerAccessResolver;
|
|
179
|
+
private readonly fetchImpl?;
|
|
180
|
+
private readonly auditResolver?;
|
|
181
|
+
private readonly warn;
|
|
182
|
+
private readonly credentialUseRecorder?;
|
|
183
|
+
/** Per `(providerRef, domain)`, exactly as the loader's contract promises. */
|
|
184
|
+
private readonly catalogueCache;
|
|
185
|
+
/** Per provider, so the rate window survives between calls. */
|
|
186
|
+
private readonly clientCache;
|
|
187
|
+
/** Deprecation is logged once per operation, never per call — a log nobody can read is not a warning. */
|
|
188
|
+
private readonly deprecationsWarned;
|
|
189
|
+
constructor(externalProvidersRegistry: ExternalProvidersRegistryBackendService, providerAccessResolver: HttpApiProviderAccessResolver, fetchImpl?: HttpApiFetchLike, auditResolver?: ProviderOperationAuditResolver, warn?: (message: string) => void, credentialUseRecorder?: ProviderCredentialUseRecorder);
|
|
190
|
+
/**
|
|
191
|
+
* The provider's `rest` runtime contract, refusing by NAME when there is none: every branch here
|
|
192
|
+
* is an authoring or configuration gap someone must fix, never a transient.
|
|
193
|
+
*/
|
|
194
|
+
private restContractOf;
|
|
195
|
+
/**
|
|
196
|
+
* Load a catalogue once per `(providerRef, domain)`.
|
|
197
|
+
*
|
|
198
|
+
* The PROMISE is cached rather than its value, so two concurrent calls for the same pair share
|
|
199
|
+
* one load instead of racing two — and a failed load is EVICTED, because caching a rejection
|
|
200
|
+
* would make one bad moment permanent for the process's whole life.
|
|
201
|
+
*/
|
|
202
|
+
loadCatalogue(providerRef: string, domain?: string): Promise<ProviderRestOperationCatalogue>;
|
|
203
|
+
/** One operation, by id. */
|
|
204
|
+
resolveOperation(providerRef: string, operationId: string, domain?: string): Promise<ProviderRestOperation>;
|
|
205
|
+
private clientFor;
|
|
206
|
+
/** Execute one declared operation end to end. */
|
|
207
|
+
/**
|
|
208
|
+
* Adapt this executor to what a GENERATED TYPED CLIENT takes.
|
|
209
|
+
*
|
|
210
|
+
* `createSlackClient(execute)` wants `(providerRef, operationId, input) => Promise<unknown>` — no
|
|
211
|
+
* execution context and no connection target, because the generated package must carry no runtime
|
|
212
|
+
* dependency on the engine and cannot name either type. Those two are exactly what a call needs and
|
|
213
|
+
* what only the caller knows, so they are bound HERE, once, by the service that has them:
|
|
214
|
+
*
|
|
215
|
+
* ```ts
|
|
216
|
+
* const slack = createSlackClient(this.providerOperations.forExecution(executionContext));
|
|
217
|
+
* await slack.slackPostMessage({ channel: 'C123', text: 'Deal closed' });
|
|
218
|
+
* ```
|
|
219
|
+
*
|
|
220
|
+
* The `connection` default is the floor — the application's own account, acting as itself —
|
|
221
|
+
* matching {@link execute}. A caller spending a tenant's account passes the target explicitly, and
|
|
222
|
+
* the context still decides whether the execution may act for that owner.
|
|
223
|
+
*
|
|
224
|
+
* Returns `output` rather than the whole envelope, because that is what the typed client's
|
|
225
|
+
* `Promise<unknown>` promises. A caller who needs the status or the raw body calls {@link execute}
|
|
226
|
+
* directly — the adapter is ergonomics, never a narrower door.
|
|
227
|
+
*/
|
|
228
|
+
forExecution(executionContext: ExecutionContext<any>, defaults?: {
|
|
229
|
+
readonly connection?: ExternalProvider_ConnectionTarget;
|
|
230
|
+
readonly domain?: string;
|
|
231
|
+
}): ProviderOperationExecute;
|
|
232
|
+
execute<TOutput = unknown>(call: ProviderOperationCallInput, executionContext: ExecutionContext<any>): Promise<ProviderOperationCallResult<TOutput>>;
|
|
233
|
+
/**
|
|
234
|
+
* Record one outbound call. Fire-and-forget and feature-detected, per the house pattern: a
|
|
235
|
+
* partial audit binding or a store failure must never fail the call it observes.
|
|
236
|
+
*
|
|
237
|
+
* Called on BOTH the success and the failure path deliberately — a refused or failed outbound
|
|
238
|
+
* call is exactly what a reviewer wants to see, and a trail that records only what worked is a
|
|
239
|
+
* trail that hides the attempts.
|
|
240
|
+
*/
|
|
241
|
+
/**
|
|
242
|
+
* Stamp the stored credential with what the provider said. Best-effort, and after the call.
|
|
243
|
+
*
|
|
244
|
+
* Fire-and-forget for the same reason the audit emit is: the outbound call has already happened, so
|
|
245
|
+
* failing the caller because a bookkeeping write did not land would turn a successful integration
|
|
246
|
+
* into an error. Nothing downstream reads the result, and the store logs its own failures with the
|
|
247
|
+
* row named.
|
|
248
|
+
*
|
|
249
|
+
* Only a tenant's OWN credential has a row. An APPLICATION-owned resolution carries no provenance
|
|
250
|
+
* and is skipped here rather than filtered later, so the deployment environment can never acquire a
|
|
251
|
+
* row describing a credential the tenant never set.
|
|
252
|
+
*/
|
|
253
|
+
private recordCredentialOutcome;
|
|
254
|
+
private record;
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=provider-operation-executor.backend.service.d.ts.map
|
package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-operation-executor.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-operation-executor.backend.service.ts"],"names":[],"mappings":"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"}
|