@wildo-ai/saas-backend-lib 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +199 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts +14 -3
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +138 -24
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts +3 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js +8 -3
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js +11 -2
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +48 -4
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +102 -30
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js +16 -0
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts +20 -6
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +96 -32
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts +3 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js +32 -7
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts +8 -5
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +80 -0
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +298 -23
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts +71 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +85 -5
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +21 -0
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +146 -4
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts +3 -26
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js +3 -68
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +533 -43
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
- package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +54 -13
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
- package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +263 -13
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +376 -58
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +264 -7
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +414 -5
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +16 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +140 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +65 -6
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +45 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js +7 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +146 -46
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
- package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
- package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
- package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts +43 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +52 -3
- package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js.map +1 -1
- package/dist/esm/databases/models/filter.backend.schemas.js +2 -2
- package/dist/esm/databases/models/filter.backend.schemas.js.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js +20 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
- package/dist/esm/databases/services/redis.service.d.ts +27 -0
- package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/redis.service.js +29 -0
- package/dist/esm/databases/services/redis.service.js.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
- package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js +134 -8
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
- package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts +41 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js +40 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts +64 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js +193 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js.map +1 -0
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +72 -4
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +60 -19
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.js +7 -1
- package/dist/esm/external-data/external-data-transform.backend.js.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts +2 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js +13 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
- package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
- package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +306 -7
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +539 -45
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts +24 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +83 -11
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts +17 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -0
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +5 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +76 -13
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +18 -0
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.js +36 -28
- package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
- package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
- package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
- package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +214 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js +566 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -0
- package/dist/esm/files/services/files.backend.service.d.ts +87 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +252 -19
- package/dist/esm/files/services/files.backend.service.js.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
- package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
- package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.js +12 -0
- package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +200 -44
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
- package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
- package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +107 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +519 -56
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
- package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts +151 -41
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +308 -143
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
- package/dist/esm/index.d.ts +15 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +45 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +82 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +20 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +21 -3
- package/dist/esm/inject/models/service-types.js.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.js +32 -4
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts +34 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js +42 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +84 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.js +235 -11
- package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts +64 -2
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +152 -6
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
- package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
- package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
- package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
- package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
- package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +108 -13
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +432 -101
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
- package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +54 -7
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts +5 -5
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js +14 -13
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts +2 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +18 -8
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +20 -18
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js +4 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
- package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.js +1 -4
- package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.js +1 -4
- package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
- package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
- package/dist/esm/queue/queue.backend.service.d.ts +3 -3
- package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue.backend.service.js +26 -4
- package/dist/esm/queue/queue.backend.service.js.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts +9 -0
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +88 -15
- package/dist/esm/requests/service/websocket.service.js.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +16 -2
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
- package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
- package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
- package/dist/esm/resources/services/resource-id.backend.service.js +3 -3
- package/dist/esm/resources/services/resource-id.backend.service.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +91 -7
- package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
- package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js +13 -7
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
- package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts +47 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.js +343 -77
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts +3 -23
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.js +20 -45
- package/dist/esm/security/authentications/models/jwt.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts +9 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +77 -2
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js +5 -3
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +41 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +87 -4
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js +24 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts +117 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js +104 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +175 -14
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +385 -49
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +18 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +110 -74
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js.map +1 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +17 -3
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js +12 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +41 -3
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +83 -20
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.js +1 -18
- package/dist/esm/security/jwt/services/jwt.backend.service.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
- package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +17 -9
- package/dist/esm/.builder.pid +0 -9
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { LoggerService } from '../monitoring/logger/services/logger.service';
|
|
14
14
|
import { AppConfigurationService } from '../config/services/app-configuration.backend.service';
|
|
15
|
-
import {
|
|
15
|
+
import type { QueueAdapter } from './adapters/queue-adapter.backend.interface';
|
|
16
16
|
import { JobStatusTrackingBackendService } from './job-status-tracking.backend.service';
|
|
17
17
|
import { JobPayload } from '@wildo-ai/saas-models';
|
|
18
18
|
/**
|
|
@@ -41,7 +41,7 @@ export declare class DomainQueueConsumerBackendService {
|
|
|
41
41
|
private _applicationId;
|
|
42
42
|
private readonly limiters;
|
|
43
43
|
private readonly consumingDomains;
|
|
44
|
-
constructor(appConfigService: AppConfigurationService, adapter:
|
|
44
|
+
constructor(appConfigService: AppConfigurationService, adapter: QueueAdapter, jobStatusTracking: JobStatusTrackingBackendService, logger: LoggerService);
|
|
45
45
|
/** Lazy getter for applicationId - avoids accessing config in constructor */
|
|
46
46
|
private get applicationId();
|
|
47
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-queue-consumer.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/domain-queue-consumer.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAG7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"domain-queue-consumer.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/domain-queue-consumer.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAG7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE/E,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EACL,UAAU,EAOX,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAYD,qBACa,iCAAiC;IAQ1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbzB,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjF,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;gBAIxC,gBAAgB,EAAE,uBAAuB,EAEzC,OAAO,EAAE,YAAY,EAErB,iBAAiB,EAAE,+BAA+B,EAElD,MAAM,EAAE,aAAa;IAOxC,6EAA6E;IAC7E,OAAO,KAAK,aAAa,GAKxB;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmD3B;;;;;;OAMG;IACG,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,qBAAqB,GACtC,OAAO,CAAC,IAAI,CAAC;IA8EhB;;OAEG;YACW,mBAAmB;IAqFjC;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,IAAI;IAcR;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;CAGhC"}
|
|
@@ -29,7 +29,6 @@ import { LoggerService } from '../monitoring/logger/services/logger.service.js';
|
|
|
29
29
|
import { projectCaughtErrorLogFields } from '../errors/utils/error-log-level-classification.backend.utils.js';
|
|
30
30
|
import { adoptCorrelationIdIntoCurrentFrame } from '../runtime/models/request-context.als.backend.js';
|
|
31
31
|
import { AppConfigurationService } from '../config/services/app-configuration.backend.service.js';
|
|
32
|
-
import { RabbitMQAdapterBackendService } from './adapters/rabbitmq-adapter.backend.service.js';
|
|
33
32
|
import { JobStatusTrackingBackendService } from './job-status-tracking.backend.service.js';
|
|
34
33
|
import { QueueNamingUtils, QueueVariant, getQueueCategory, JobRetryUtils, QUEUE_RETRY_DEFAULTS, } from '@wildo-ai/saas-models';
|
|
35
34
|
/**
|
|
@@ -317,9 +316,7 @@ DomainQueueConsumerBackendService = __decorate([
|
|
|
317
316
|
__param(1, inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)),
|
|
318
317
|
__param(2, inject(SAAS_SERVICE_TYPES.JobStatusTrackingService)),
|
|
319
318
|
__param(3, inject(SAAS_SERVICE_TYPES.Logger)),
|
|
320
|
-
__metadata("design:paramtypes", [AppConfigurationService,
|
|
321
|
-
RabbitMQAdapterBackendService,
|
|
322
|
-
JobStatusTrackingBackendService,
|
|
319
|
+
__metadata("design:paramtypes", [AppConfigurationService, Object, JobStatusTrackingBackendService,
|
|
323
320
|
LoggerService])
|
|
324
321
|
], DomainQueueConsumerBackendService);
|
|
325
322
|
export { DomainQueueConsumerBackendService };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-queue-consumer.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/domain-queue-consumer.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Domain Queue Consumer Backend Service\n *\n * Consumes domain-specific queues (email, agents, rag, etc.) with rate limiting.\n * Uses Bottleneck for controlling throughput to external services.\n *\n * Domain queues are used for:\n * - Email sending (rate limited per provider)\n * - Agent interactions (rate limited per AI provider)\n * - RAG indexing (controlled throughput)\n * - Webhook deliveries (rate limited per endpoint)\n */\n\nimport { injectable, inject } from 'inversify';\nimport Bottleneck from 'bottleneck';\nimport type { ConsumeMessage, Channel } from 'amqplib';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { adoptCorrelationIdIntoCurrentFrame } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { RabbitMQAdapterBackendService, MessageHandler } from './adapters/rabbitmq-adapter.backend.service';\nimport { JobStatusTrackingBackendService } from './job-status-tracking.backend.service';\nimport {\n JobPayload,\n QueueNamingUtils,\n QueueVariant,\n getQueueCategory,\n JobRetryUtils,\n QueueRetryConfig,\n QUEUE_RETRY_DEFAULTS,\n} from '@wildo-ai/saas-models';\n\n\n/**\n * Domain job handler signature.\n */\nexport type DomainJobHandler = (job: JobPayload) => Promise<any>;\n\n/**\n * Rate limit configuration for a domain.\n */\nexport interface DomainRateLimitConfig {\n /** Maximum concurrent jobs */\n maxConcurrent?: number;\n /** Minimum time between job starts (ms) */\n minTime?: number;\n /** Maximum jobs per window */\n reservoir?: number;\n /** Window size for reservoir refresh (ms) */\n reservoirRefreshInterval?: number;\n}\n\n/**\n * Default rate limit configuration.\n */\nconst DEFAULT_RATE_LIMIT: DomainRateLimitConfig = {\n maxConcurrent: 10,\n minTime: 0,\n reservoir: undefined,\n reservoirRefreshInterval: undefined,\n};\n\n@injectable()\nexport class DomainQueueConsumerBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private _applicationId: string | null = null;\n private readonly limiters: Map<string, Bottleneck> = new Map();\n private readonly consumingDomains: Set<string> = new Set();\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly adapter: RabbitMQAdapterBackendService,\n @inject(SAAS_SERVICE_TYPES.JobStatusTrackingService)\n private readonly jobStatusTracking: JobStatusTrackingBackendService,\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n ) {\n this.logDebug = this.logger.debugByType('DomainQueueConsumerBackendService');\n this.logger.setDebugTypeLogging('DomainQueueConsumerBackendService', false);\n // Lazy-load applicationId to avoid accessing config before initialization\n }\n\n /** Lazy getter for applicationId - avoids accessing config in constructor */\n private get applicationId(): string {\n if (!this._applicationId) {\n this._applicationId = this.appConfigService.applicationId;\n }\n return this._applicationId;\n }\n\n /**\n * Get or create rate limiter for a domain.\n */\n private getLimiterForDomain(domainName: string, customConfig?: DomainRateLimitConfig): Bottleneck {\n const key = domainName;\n\n if (this.limiters.has(key)) {\n return this.limiters.get(key)!;\n }\n\n // Get domain configuration from registry\n const domainConfig = getQueueCategory(`domain-${domainName}`);\n\n // Merge configurations: custom > registry > default\n const config: DomainRateLimitConfig = {\n ...DEFAULT_RATE_LIMIT,\n ...(domainConfig?.rateLimit ? {\n maxConcurrent: domainConfig.concurrency,\n reservoir: domainConfig.rateLimit.max,\n reservoirRefreshInterval: domainConfig.rateLimit.windowMs,\n } : {}),\n ...customConfig,\n };\n\n const limiter = new Bottleneck({\n maxConcurrent: config.maxConcurrent,\n minTime: config.minTime,\n reservoir: config.reservoir,\n reservoirRefreshAmount: config.reservoir,\n reservoirRefreshInterval: config.reservoirRefreshInterval,\n });\n\n // Log rate limiting events\n limiter.on('depleted', () => {\n this.logger.warn('Rate limit reservoir depleted', { domainName });\n });\n\n limiter.on('error', (error) => {\n this.logger.error('Bottleneck error', {\n domainName,\n ...projectCaughtErrorLogFields(error),\n });\n });\n\n this.limiters.set(key, limiter);\n\n this.logDebug('Rate limiter created for domain', {\n domainName,\n config,\n });\n\n return limiter;\n }\n\n /**\n * Start consuming a domain queue with rate limiting.\n *\n * @param domainName - Domain name (e.g., 'email', 'agents', 'rag')\n * @param handler - Function to process each job\n * @param rateLimitConfig - Optional rate limit overrides\n */\n async consumeDomain(\n domainName: string,\n handler: DomainJobHandler,\n rateLimitConfig?: DomainRateLimitConfig\n ): Promise<void> {\n if (this.consumingDomains.has(domainName)) {\n this.logger.warn('Already consuming domain queue', { domainName });\n return;\n }\n\n const queueName = QueueNamingUtils.buildDomainQueueName(this.applicationId, domainName);\n // Domain queues have no priority variant, so the DLQ is a direct suffix of\n // the queue name (enum-referenced, not a magic string).\n const deadLetterQueueName = `${queueName}.${QueueVariant.DEADLETTER}`;\n const limiter = this.getLimiterForDomain(domainName, rateLimitConfig);\n\n // Assert the terminal dead-letter queue first (the main queue below names it\n // as its dead-letter target; no consumer, no DLX of its own).\n await this.adapter.assertQueue(deadLetterQueueName, { durable: true });\n\n // Assert the domain queue, dead-lettering permanent failures to the DLQ. When\n // `executeWithTracking` exhausts retries (or a message is unparseable) it\n // `nack(false,false)`s — the DLX parks the message in `<queue>.deadletter`\n // instead of discarding it. Default exchange ('') routed by queue name,\n // mirroring the operations queues and the retry delay queues.\n await this.adapter.assertQueue(queueName, {\n durable: true,\n deadLetterExchange: '',\n deadLetterRoutingKey: deadLetterQueueName,\n });\n\n // Create message handler that uses rate limiting\n const messageHandler: MessageHandler = async (msg: ConsumeMessage, channel: Channel) => {\n let job: JobPayload;\n\n try {\n job = JSON.parse(msg.content.toString());\n } catch (parseError) {\n this.logger.error('Failed to parse domain job message', {\n domainName,\n ...projectCaughtErrorLogFields(parseError),\n });\n channel.nack(msg, false, false);\n return;\n }\n\n // This domain job belongs to the trace of the request that enqueued it — adopt that request's\n // `originCorrelationId` into the frame the adapter established, exactly as the operations lane\n // does. Without it the domain lane (email / agents / rag) would execute under an unrelated fresh\n // id and its logs and audit rows would not join back to the originating request. Absent or\n // malformed id ⇒ the frame keeps its fresh one, so the job stays independently traceable.\n adoptCorrelationIdIntoCurrentFrame(job.originCorrelationId);\n\n // Schedule through rate limiter\n try {\n await limiter.schedule(\n { id: job.jobId },\n async () => {\n await this.executeWithTracking(job, handler, msg, channel, queueName);\n }\n );\n } catch (error) {\n // Rate limiter error (e.g., shutdown)\n this.logger.error('Rate limiter scheduling failed', {\n domainName,\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(error),\n });\n channel.nack(msg, false, true); // Requeue on limiter failure\n }\n };\n\n // Start consuming\n await this.adapter.consume(queueName, messageHandler);\n this.consumingDomains.add(domainName);\n\n this.logDebug('Domain queue consumer started', {\n domainName,\n queueName,\n });\n }\n\n /**\n * Execute job with status tracking.\n */\n private async executeWithTracking(\n job: JobPayload,\n handler: DomainJobHandler,\n msg: ConsumeMessage,\n channel: Channel,\n sourceQueueName: string\n ): Promise<void> {\n const startTime = Date.now();\n\n try {\n // Mark started\n await this.jobStatusTracking.markStarted(job.jobId, 'domain-worker');\n\n // Execute handler\n await handler(job);\n\n // Mark completed\n await this.jobStatusTracking.markCompleted(job.jobId);\n\n // Acknowledge\n channel.ack(msg);\n\n this.logDebug('Domain job completed', {\n jobId: job.jobId,\n domainCategory: job.domainCategory,\n durationMs: Date.now() - startTime,\n });\n\n } catch (error) {\n this.logger.error('Domain job failed', {\n jobId: job.jobId,\n domainCategory: job.domainCategory,\n ...projectCaughtErrorLogFields(error),\n durationMs: Date.now() - startTime,\n });\n\n // Check retry count\n const currentRetry = job.retryCount ?? 0;\n const maxRetries = job.maxRetries ?? QUEUE_RETRY_DEFAULTS.maxRetries;\n\n if (currentRetry < maxRetries) {\n // Durable backoff retry. NOTE: we must NOT `nack(requeue)` the original —\n // that redelivers the SAME message body with an unchanged retryCount,\n // producing a tight infinite requeue loop on a persistently-failing job.\n // Instead publish an incremented copy through a broker delay queue and ACK\n // the original (mirrors the operations consumer).\n const backoff = job.retryConfig;\n const retryConfig: QueueRetryConfig = {\n retryPolicy: backoff?.retryPolicy ?? QUEUE_RETRY_DEFAULTS.retryPolicy,\n maxRetries,\n baseDelayMs: backoff?.baseDelayMs ?? QUEUE_RETRY_DEFAULTS.baseDelayMs,\n maxDelayMs: backoff?.maxDelayMs ?? QUEUE_RETRY_DEFAULTS.maxDelayMs,\n timeoutMs: job.timeoutMs ?? QUEUE_RETRY_DEFAULTS.timeoutMs,\n };\n const delay = JobRetryUtils.calculateDelay(retryConfig, currentRetry);\n const retryJob: JobPayload = { ...job, retryCount: currentRetry + 1 };\n\n try {\n await this.adapter.scheduleDelayedRetry(sourceQueueName, retryJob, delay);\n channel.ack(msg);\n this.logDebug('Domain job retry scheduled (durable delay queue)', {\n jobId: job.jobId,\n domainCategory: job.domainCategory,\n retryCount: currentRetry + 1,\n maxRetries,\n delayMs: delay,\n });\n } catch (scheduleError) {\n // Could not hand off to the broker — requeue original rather than lose it.\n this.logger.error('Failed to schedule domain retry; requeueing original', {\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(scheduleError),\n });\n channel.nack(msg, false, true);\n }\n } else {\n // Max retries exhausted → dead-letter. The domain queue's DLX parks the\n // message in `<queue>.deadletter` (nack without requeue) for inspection;\n // record the terminal DEAD_LETTER tracking state first.\n await this.jobStatusTracking.markDeadLettered(job.jobId);\n channel.nack(msg, false, false);\n }\n }\n }\n\n /**\n * Stop consuming a domain queue.\n */\n async stopDomain(domainName: string): Promise<void> {\n if (!this.consumingDomains.has(domainName)) {\n return;\n }\n\n const queueName = QueueNamingUtils.buildDomainQueueName(this.applicationId, domainName);\n await this.adapter.cancelConsumer(queueName);\n\n // Stop the rate limiter\n const limiter = this.limiters.get(domainName);\n if (limiter) {\n await limiter.stop({ dropWaitingJobs: false });\n this.limiters.delete(domainName);\n }\n\n this.consumingDomains.delete(domainName);\n\n this.logDebug('Domain queue consumer stopped', { domainName });\n }\n\n /**\n * Stop all domain consumers.\n */\n async stopAll(): Promise<void> {\n const domains = [...this.consumingDomains];\n\n for (const domainName of domains) {\n await this.stopDomain(domainName);\n }\n\n this.logDebug('All domain queue consumers stopped', {\n domainCount: domains.length,\n });\n }\n\n /**\n * Get rate limiter statistics for a domain.\n */\n getLimiterStats(domainName: string): {\n running: number;\n queued: number;\n done: number;\n } | null {\n const limiter = this.limiters.get(domainName);\n if (!limiter) {\n return null;\n }\n\n const counts = limiter.counts();\n return {\n running: counts.RUNNING,\n queued: counts.QUEUED,\n done: counts.DONE,\n };\n }\n\n /**\n * Get list of consuming domains.\n */\n getConsumingDomains(): string[] {\n return [...this.consumingDomains];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"domain-queue-consumer.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/domain-queue-consumer.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Domain Queue Consumer Backend Service\n *\n * Consumes domain-specific queues (email, agents, rag, etc.) with rate limiting.\n * Uses Bottleneck for controlling throughput to external services.\n *\n * Domain queues are used for:\n * - Email sending (rate limited per provider)\n * - Agent interactions (rate limited per AI provider)\n * - RAG indexing (controlled throughput)\n * - Webhook deliveries (rate limited per endpoint)\n */\n\nimport { injectable, inject } from 'inversify';\nimport Bottleneck from 'bottleneck';\nimport type { ConsumeMessage, Channel } from 'amqplib';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { adoptCorrelationIdIntoCurrentFrame } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { QueueAdapter } from './adapters/queue-adapter.backend.interface';\nimport type { MessageHandler } from './adapters/queue-adapter.backend.interface';\nimport { JobStatusTrackingBackendService } from './job-status-tracking.backend.service';\nimport {\n JobPayload,\n QueueNamingUtils,\n QueueVariant,\n getQueueCategory,\n JobRetryUtils,\n QueueRetryConfig,\n QUEUE_RETRY_DEFAULTS,\n} from '@wildo-ai/saas-models';\n\n\n/**\n * Domain job handler signature.\n */\nexport type DomainJobHandler = (job: JobPayload) => Promise<any>;\n\n/**\n * Rate limit configuration for a domain.\n */\nexport interface DomainRateLimitConfig {\n /** Maximum concurrent jobs */\n maxConcurrent?: number;\n /** Minimum time between job starts (ms) */\n minTime?: number;\n /** Maximum jobs per window */\n reservoir?: number;\n /** Window size for reservoir refresh (ms) */\n reservoirRefreshInterval?: number;\n}\n\n/**\n * Default rate limit configuration.\n */\nconst DEFAULT_RATE_LIMIT: DomainRateLimitConfig = {\n maxConcurrent: 10,\n minTime: 0,\n reservoir: undefined,\n reservoirRefreshInterval: undefined,\n};\n\n@injectable()\nexport class DomainQueueConsumerBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private _applicationId: string | null = null;\n private readonly limiters: Map<string, Bottleneck> = new Map();\n private readonly consumingDomains: Set<string> = new Set();\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly adapter: QueueAdapter,\n @inject(SAAS_SERVICE_TYPES.JobStatusTrackingService)\n private readonly jobStatusTracking: JobStatusTrackingBackendService,\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n ) {\n this.logDebug = this.logger.debugByType('DomainQueueConsumerBackendService');\n this.logger.setDebugTypeLogging('DomainQueueConsumerBackendService', false);\n // Lazy-load applicationId to avoid accessing config before initialization\n }\n\n /** Lazy getter for applicationId - avoids accessing config in constructor */\n private get applicationId(): string {\n if (!this._applicationId) {\n this._applicationId = this.appConfigService.applicationId;\n }\n return this._applicationId;\n }\n\n /**\n * Get or create rate limiter for a domain.\n */\n private getLimiterForDomain(domainName: string, customConfig?: DomainRateLimitConfig): Bottleneck {\n const key = domainName;\n\n if (this.limiters.has(key)) {\n return this.limiters.get(key)!;\n }\n\n // Get domain configuration from registry\n const domainConfig = getQueueCategory(`domain-${domainName}`);\n\n // Merge configurations: custom > registry > default\n const config: DomainRateLimitConfig = {\n ...DEFAULT_RATE_LIMIT,\n ...(domainConfig?.rateLimit ? {\n maxConcurrent: domainConfig.concurrency,\n reservoir: domainConfig.rateLimit.max,\n reservoirRefreshInterval: domainConfig.rateLimit.windowMs,\n } : {}),\n ...customConfig,\n };\n\n const limiter = new Bottleneck({\n maxConcurrent: config.maxConcurrent,\n minTime: config.minTime,\n reservoir: config.reservoir,\n reservoirRefreshAmount: config.reservoir,\n reservoirRefreshInterval: config.reservoirRefreshInterval,\n });\n\n // Log rate limiting events\n limiter.on('depleted', () => {\n this.logger.warn('Rate limit reservoir depleted', { domainName });\n });\n\n limiter.on('error', (error) => {\n this.logger.error('Bottleneck error', {\n domainName,\n ...projectCaughtErrorLogFields(error),\n });\n });\n\n this.limiters.set(key, limiter);\n\n this.logDebug('Rate limiter created for domain', {\n domainName,\n config,\n });\n\n return limiter;\n }\n\n /**\n * Start consuming a domain queue with rate limiting.\n *\n * @param domainName - Domain name (e.g., 'email', 'agents', 'rag')\n * @param handler - Function to process each job\n * @param rateLimitConfig - Optional rate limit overrides\n */\n async consumeDomain(\n domainName: string,\n handler: DomainJobHandler,\n rateLimitConfig?: DomainRateLimitConfig\n ): Promise<void> {\n if (this.consumingDomains.has(domainName)) {\n this.logger.warn('Already consuming domain queue', { domainName });\n return;\n }\n\n const queueName = QueueNamingUtils.buildDomainQueueName(this.applicationId, domainName);\n // Domain queues have no priority variant, so the DLQ is a direct suffix of\n // the queue name (enum-referenced, not a magic string).\n const deadLetterQueueName = `${queueName}.${QueueVariant.DEADLETTER}`;\n const limiter = this.getLimiterForDomain(domainName, rateLimitConfig);\n\n // Assert the terminal dead-letter queue first (the main queue below names it\n // as its dead-letter target; no consumer, no DLX of its own).\n await this.adapter.assertQueue(deadLetterQueueName, { durable: true });\n\n // Assert the domain queue, dead-lettering permanent failures to the DLQ. When\n // `executeWithTracking` exhausts retries (or a message is unparseable) it\n // `nack(false,false)`s — the DLX parks the message in `<queue>.deadletter`\n // instead of discarding it. Default exchange ('') routed by queue name,\n // mirroring the operations queues and the retry delay queues.\n await this.adapter.assertQueue(queueName, {\n durable: true,\n deadLetterExchange: '',\n deadLetterRoutingKey: deadLetterQueueName,\n });\n\n // Create message handler that uses rate limiting\n const messageHandler: MessageHandler = async (msg: ConsumeMessage, channel: Channel) => {\n let job: JobPayload;\n\n try {\n job = JSON.parse(msg.content.toString());\n } catch (parseError) {\n this.logger.error('Failed to parse domain job message', {\n domainName,\n ...projectCaughtErrorLogFields(parseError),\n });\n channel.nack(msg, false, false);\n return;\n }\n\n // This domain job belongs to the trace of the request that enqueued it — adopt that request's\n // `originCorrelationId` into the frame the adapter established, exactly as the operations lane\n // does. Without it the domain lane (email / agents / rag) would execute under an unrelated fresh\n // id and its logs and audit rows would not join back to the originating request. Absent or\n // malformed id ⇒ the frame keeps its fresh one, so the job stays independently traceable.\n adoptCorrelationIdIntoCurrentFrame(job.originCorrelationId);\n\n // Schedule through rate limiter\n try {\n await limiter.schedule(\n { id: job.jobId },\n async () => {\n await this.executeWithTracking(job, handler, msg, channel, queueName);\n }\n );\n } catch (error) {\n // Rate limiter error (e.g., shutdown)\n this.logger.error('Rate limiter scheduling failed', {\n domainName,\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(error),\n });\n channel.nack(msg, false, true); // Requeue on limiter failure\n }\n };\n\n // Start consuming\n await this.adapter.consume(queueName, messageHandler);\n this.consumingDomains.add(domainName);\n\n this.logDebug('Domain queue consumer started', {\n domainName,\n queueName,\n });\n }\n\n /**\n * Execute job with status tracking.\n */\n private async executeWithTracking(\n job: JobPayload,\n handler: DomainJobHandler,\n msg: ConsumeMessage,\n channel: Channel,\n sourceQueueName: string\n ): Promise<void> {\n const startTime = Date.now();\n\n try {\n // Mark started\n await this.jobStatusTracking.markStarted(job.jobId, 'domain-worker');\n\n // Execute handler\n await handler(job);\n\n // Mark completed\n await this.jobStatusTracking.markCompleted(job.jobId);\n\n // Acknowledge\n channel.ack(msg);\n\n this.logDebug('Domain job completed', {\n jobId: job.jobId,\n domainCategory: job.domainCategory,\n durationMs: Date.now() - startTime,\n });\n\n } catch (error) {\n this.logger.error('Domain job failed', {\n jobId: job.jobId,\n domainCategory: job.domainCategory,\n ...projectCaughtErrorLogFields(error),\n durationMs: Date.now() - startTime,\n });\n\n // Check retry count\n const currentRetry = job.retryCount ?? 0;\n const maxRetries = job.maxRetries ?? QUEUE_RETRY_DEFAULTS.maxRetries;\n\n if (currentRetry < maxRetries) {\n // Durable backoff retry. NOTE: we must NOT `nack(requeue)` the original —\n // that redelivers the SAME message body with an unchanged retryCount,\n // producing a tight infinite requeue loop on a persistently-failing job.\n // Instead publish an incremented copy through a broker delay queue and ACK\n // the original (mirrors the operations consumer).\n const backoff = job.retryConfig;\n const retryConfig: QueueRetryConfig = {\n retryPolicy: backoff?.retryPolicy ?? QUEUE_RETRY_DEFAULTS.retryPolicy,\n maxRetries,\n baseDelayMs: backoff?.baseDelayMs ?? QUEUE_RETRY_DEFAULTS.baseDelayMs,\n maxDelayMs: backoff?.maxDelayMs ?? QUEUE_RETRY_DEFAULTS.maxDelayMs,\n timeoutMs: job.timeoutMs ?? QUEUE_RETRY_DEFAULTS.timeoutMs,\n };\n const delay = JobRetryUtils.calculateDelay(retryConfig, currentRetry);\n const retryJob: JobPayload = { ...job, retryCount: currentRetry + 1 };\n\n try {\n await this.adapter.scheduleDelayedRetry(sourceQueueName, retryJob, delay);\n channel.ack(msg);\n this.logDebug('Domain job retry scheduled (durable delay queue)', {\n jobId: job.jobId,\n domainCategory: job.domainCategory,\n retryCount: currentRetry + 1,\n maxRetries,\n delayMs: delay,\n });\n } catch (scheduleError) {\n // Could not hand off to the broker — requeue original rather than lose it.\n this.logger.error('Failed to schedule domain retry; requeueing original', {\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(scheduleError),\n });\n channel.nack(msg, false, true);\n }\n } else {\n // Max retries exhausted → dead-letter. The domain queue's DLX parks the\n // message in `<queue>.deadletter` (nack without requeue) for inspection;\n // record the terminal DEAD_LETTER tracking state first.\n await this.jobStatusTracking.markDeadLettered(job.jobId);\n channel.nack(msg, false, false);\n }\n }\n }\n\n /**\n * Stop consuming a domain queue.\n */\n async stopDomain(domainName: string): Promise<void> {\n if (!this.consumingDomains.has(domainName)) {\n return;\n }\n\n const queueName = QueueNamingUtils.buildDomainQueueName(this.applicationId, domainName);\n await this.adapter.cancelConsumer(queueName);\n\n // Stop the rate limiter\n const limiter = this.limiters.get(domainName);\n if (limiter) {\n await limiter.stop({ dropWaitingJobs: false });\n this.limiters.delete(domainName);\n }\n\n this.consumingDomains.delete(domainName);\n\n this.logDebug('Domain queue consumer stopped', { domainName });\n }\n\n /**\n * Stop all domain consumers.\n */\n async stopAll(): Promise<void> {\n const domains = [...this.consumingDomains];\n\n for (const domainName of domains) {\n await this.stopDomain(domainName);\n }\n\n this.logDebug('All domain queue consumers stopped', {\n domainCount: domains.length,\n });\n }\n\n /**\n * Get rate limiter statistics for a domain.\n */\n getLimiterStats(domainName: string): {\n running: number;\n queued: number;\n done: number;\n } | null {\n const limiter = this.limiters.get(domainName);\n if (!limiter) {\n return null;\n }\n\n const counts = limiter.counts();\n return {\n running: counts.RUNNING,\n queued: counts.QUEUED,\n done: counts.DONE,\n };\n }\n\n /**\n * Get list of consuming domains.\n */\n getConsumingDomains(): string[] {\n return [...this.consumingDomains];\n }\n}\n"]}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import { LoggerService } from '../monitoring/logger/services/logger.service';
|
|
13
13
|
import { AppConfigurationService } from '../config/services/app-configuration.backend.service';
|
|
14
14
|
import { ErrorBuilderBackendService } from '../errors/services/error-builder.backend.service';
|
|
15
|
-
import {
|
|
15
|
+
import type { QueueAdapter } from './adapters/queue-adapter.backend.interface';
|
|
16
16
|
import { JobExecutorBackendService } from './job-executor.backend.service';
|
|
17
17
|
import { JobStatusTrackingBackendService } from './job-status-tracking.backend.service';
|
|
18
18
|
import { JobCompletionRegistryBackendService } from './job-completion-registry.backend.service';
|
|
@@ -51,7 +51,7 @@ export declare class JobConsumerBackendService {
|
|
|
51
51
|
private readonly workerIdentity;
|
|
52
52
|
private isConsuming;
|
|
53
53
|
private consumingQueues;
|
|
54
|
-
constructor(appConfigService: AppConfigurationService, adapter:
|
|
54
|
+
constructor(appConfigService: AppConfigurationService, adapter: QueueAdapter, jobExecutor: JobExecutorBackendService, jobStatusTracking: JobStatusTrackingBackendService, completionRegistry: JobCompletionRegistryBackendService, shutdownManager: WorkerShutdownManagerBackendService, scheduledMessageVerifier: ScheduledMessageVerifierBackendService, logger: LoggerService, errorBuilder: ErrorBuilderBackendService);
|
|
55
55
|
/** Lazy getter for applicationId - avoids accessing config in constructor */
|
|
56
56
|
private get applicationId();
|
|
57
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-consumer.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/job-consumer.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAG9G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"job-consumer.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/job-consumer.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAG9G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAUL,gBAAgB,EAKjB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzC;AAOD,qBACa,yBAAyB;IASlC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAEzC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAxB/B,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjF,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAgB;gBAIpB,gBAAgB,EAAE,uBAAuB,EAEzC,OAAO,EAAE,YAAY,EAErB,WAAW,EAAE,yBAAyB,EAEtC,iBAAiB,EAAE,+BAA+B,EAElD,kBAAkB,EAAE,mCAAmC,EAEvD,eAAe,EAAE,mCAAmC,EAEpD,wBAAwB,EAAE,sCAAsC,EAEhE,MAAM,EAAE,aAAa,EAErB,YAAY,EAAE,0BAA0B;IAY3D,6EAA6E;IAC7E,OAAO,KAAK,aAAa,GAKxB;IAED;;OAEG;IACG,cAAc,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+DnE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBpC;;OAEG;YACW,aAAa;IAqF3B;;;OAGG;YACW,gBAAgB;IAiH9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;;OAGG;YACW,cAAc;IAmH5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;YACW,sBAAsB;IA+EpC;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB"}
|
|
@@ -30,7 +30,6 @@ import { AppConfigurationService } from '../config/services/app-configuration.ba
|
|
|
30
30
|
import { ErrorBuilderBackendService } from '../errors/services/error-builder.backend.service.js';
|
|
31
31
|
import { projectWildoBackendErrorLogFields, describeCaughtError, projectCaughtErrorLogFields } from '../errors/utils/error-log-level-classification.backend.utils.js';
|
|
32
32
|
import { adoptCorrelationIdIntoCurrentFrame, runInFreshRequestContextIfAbsent } from '../runtime/models/request-context.als.backend.js';
|
|
33
|
-
import { RabbitMQAdapterBackendService } from './adapters/rabbitmq-adapter.backend.service.js';
|
|
34
33
|
import { JobExecutorBackendService } from './job-executor.backend.service.js';
|
|
35
34
|
import { JobStatusTrackingBackendService } from './job-status-tracking.backend.service.js';
|
|
36
35
|
import { JobCompletionRegistryBackendService } from './job-completion-registry.backend.service.js';
|
|
@@ -563,9 +562,7 @@ JobConsumerBackendService = __decorate([
|
|
|
563
562
|
__param(6, inject(SAAS_SERVICE_TYPES.ScheduledMessageVerifierService)),
|
|
564
563
|
__param(7, inject(SAAS_SERVICE_TYPES.Logger)),
|
|
565
564
|
__param(8, inject(SAAS_SERVICE_TYPES.ErrorBuilderService)),
|
|
566
|
-
__metadata("design:paramtypes", [AppConfigurationService,
|
|
567
|
-
RabbitMQAdapterBackendService,
|
|
568
|
-
JobExecutorBackendService,
|
|
565
|
+
__metadata("design:paramtypes", [AppConfigurationService, Object, JobExecutorBackendService,
|
|
569
566
|
JobStatusTrackingBackendService,
|
|
570
567
|
JobCompletionRegistryBackendService,
|
|
571
568
|
WorkerShutdownManagerBackendService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-consumer.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/job-consumer.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Job Consumer Backend Service\n *\n * Handles the complete message lifecycle:\n * - Consumes messages from RabbitMQ\n * - Executes jobs via JobExecutorBackendService\n * - Handles retry logic with exponential backoff\n * - Sends RPC replies for QUEUED mode\n * - Tracks job status\n * - Acknowledges/rejects messages appropriately\n */\n\nimport { injectable, inject } from 'inversify';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as os from 'os';\nimport type { ConsumeMessage, Channel } from 'amqplib';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { projectWildoBackendErrorLogFields, describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { adoptCorrelationIdIntoCurrentFrame, runInFreshRequestContextIfAbsent } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\nimport { RabbitMQAdapterBackendService, MessageHandler } from './adapters/rabbitmq-adapter.backend.service';\nimport { JobExecutorBackendService } from './job-executor.backend.service';\nimport { JobStatusTrackingBackendService } from './job-status-tracking.backend.service';\nimport { JobCompletionRegistryBackendService } from './job-completion-registry.backend.service';\nimport { WorkerShutdownManagerBackendService } from './worker-shutdown-manager.backend.service';\nimport { ScheduledMessageVerifierBackendService } from './scheduled-message-verifier.backend.service';\nimport {\n JobPayload,\n JobResult,\n JobStatus,\n JobPriority,\n JobRetryUtils,\n QueueNamingUtils,\n QueueVariant,\n QUEUE_RETRY_DEFAULTS,\n ErrorHandling_Strategy,\n QueueRetryConfig,\n ErrorType,\n ErrorCustomMessageReference,\n ErrorSeverity,\n ErrorActionBackend,\n} from '@wildo-ai/saas-models';\n\n/**\n * Worker identification for tracking.\n */\ninterface WorkerIdentity {\n workerId: string;\n hostname: string;\n pid: number;\n}\n\n/**\n * Consumer configuration.\n */\nexport interface JobConsumerConfig {\n /** Whether to enable retry logic */\n enableRetry?: boolean;\n /** Default retry configuration */\n retryConfig?: Partial<QueueRetryConfig>;\n}\n\nconst DEFAULT_CONSUMER_CONFIG: JobConsumerConfig = {\n enableRetry: true,\n retryConfig: QUEUE_RETRY_DEFAULTS,\n};\n\n@injectable()\nexport class JobConsumerBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private _applicationId: string | null = null;\n private readonly workerIdentity: WorkerIdentity;\n private isConsuming = false;\n private consumingQueues: string[] = [];\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly adapter: RabbitMQAdapterBackendService,\n @inject(SAAS_SERVICE_TYPES.JobExecutorBackendService)\n private readonly jobExecutor: JobExecutorBackendService,\n @inject(SAAS_SERVICE_TYPES.JobStatusTrackingService)\n private readonly jobStatusTracking: JobStatusTrackingBackendService,\n @inject(SAAS_SERVICE_TYPES.JobCompletionRegistryService)\n private readonly completionRegistry: JobCompletionRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.WorkerShutdownManagerService)\n private readonly shutdownManager: WorkerShutdownManagerBackendService,\n @inject(SAAS_SERVICE_TYPES.ScheduledMessageVerifierService)\n private readonly scheduledMessageVerifier: ScheduledMessageVerifierBackendService,\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n ) {\n this.logDebug = this.logger.debugByType('JobConsumerBackendService');\n this.logger.setDebugTypeLogging('JobConsumerBackendService', false);\n // Lazy-load applicationId to avoid accessing config before initialization\n this.workerIdentity = {\n workerId: uuidv4(),\n hostname: os.hostname(),\n pid: process.pid,\n };\n }\n\n /** Lazy getter for applicationId - avoids accessing config in constructor */\n private get applicationId(): string {\n if (!this._applicationId) {\n this._applicationId = this.appConfigService.applicationId;\n }\n return this._applicationId;\n }\n\n /**\n * Start consuming from all operation and scheduled queues.\n */\n async startConsuming(config: JobConsumerConfig = {}): Promise<void> {\n if (this.isConsuming) {\n this.logger.warn('Consumer already running');\n return;\n }\n\n const mergedConfig = { ...DEFAULT_CONSUMER_CONFIG, ...config };\n\n // Connect to RabbitMQ\n await this.adapter.connect();\n\n // Start consuming from operations queues (normal and priority variant)\n const operationsQueueConfigs = [\n { category: 'operations', variant: undefined },\n { category: 'operations', variant: QueueVariant.PRIORITY },\n ];\n\n for (const queueConfig of operationsQueueConfigs) {\n const queueName = QueueNamingUtils.buildQueueName(\n this.applicationId,\n queueConfig.category,\n queueConfig.variant\n );\n\n // Create handler that matches MessageHandler signature\n const handler: MessageHandler = async (msg: ConsumeMessage, channel: Channel) => {\n // Phase 1 — each consumed job runs in its own correlation frame (fresh id). Phase 6 will seed\n // it from the enqueuing request's originCorrelationId carried on the job payload.\n await runInFreshRequestContextIfAbsent(() => this.handleMessage(msg, channel, mergedConfig));\n };\n\n await this.adapter.consume(queueName, handler);\n this.consumingQueues.push(queueName);\n\n this.logDebug('Started consuming from queue', {\n queueName,\n workerId: this.workerIdentity.workerId,\n });\n }\n\n // Start consuming from scheduled queue (JWT-signed messages from crontabs-manager)\n const scheduledQueueName = QueueNamingUtils.buildQueueName(this.applicationId, 'scheduled');\n\n const scheduledHandler: MessageHandler = async (msg: ConsumeMessage, channel: Channel) => {\n // Phase 1 — each cron tick (scheduled-queue message) runs in its own correlation frame.\n await runInFreshRequestContextIfAbsent(() => this.handleScheduledMessage(msg, channel, mergedConfig));\n };\n\n await this.adapter.consume(scheduledQueueName, scheduledHandler);\n this.consumingQueues.push(scheduledQueueName);\n\n this.logDebug('Started consuming from scheduled queue', {\n queueName: scheduledQueueName,\n workerId: this.workerIdentity.workerId,\n });\n\n this.isConsuming = true;\n this.logDebug('Job consumer started', {\n workerId: this.workerIdentity.workerId,\n queues: this.consumingQueues.length,\n });\n }\n\n /**\n * Stop consuming and close connections.\n */\n async stopConsuming(): Promise<void> {\n if (!this.isConsuming) {\n return;\n }\n\n // Cancel all consumers\n for (const queueName of this.consumingQueues) {\n await this.adapter.cancelConsumer(queueName);\n }\n\n this.consumingQueues = [];\n this.isConsuming = false;\n\n this.logDebug('Job consumer stopped', {\n workerId: this.workerIdentity.workerId,\n });\n }\n\n /**\n * Handle a single message from the queue.\n */\n private async handleMessage(\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig\n ): Promise<void> {\n let job: JobPayload;\n\n try {\n job = JSON.parse(msg.content.toString());\n } catch (parseError) {\n this.logger.error('Failed to parse job message', {\n ...projectCaughtErrorLogFields(parseError),\n });\n // Invalid message - don't requeue\n channel.nack(msg, false, false);\n return;\n }\n\n // Phase 6 — this job belongs to the trace of the request that enqueued it: adopt that request's\n // originCorrelationId into the (freshly-minted) consume frame, so every log line + audit row this\n // job produces on the worker carries the originating request's correlationId. Absent/malformed →\n // the frame keeps its fresh id (a job with no originating request stays independently traceable).\n adoptCorrelationIdIntoCurrentFrame(job.originCorrelationId);\n\n const startTime = Date.now();\n const { replyTo, correlationId } = msg.properties;\n\n // Track in-flight job for graceful shutdown\n this.shutdownManager.jobStarted();\n\n this.logDebug('Processing job', {\n jobId: job.jobId,\n jobType: job.jobType,\n priority: job.priority,\n retryCount: job.retryCount ?? 0,\n });\n\n try {\n // Mark job as started\n await this.jobStatusTracking.markStarted(job.jobId, this.workerIdentity.workerId);\n\n // Execute the job - returns JobResult which may indicate success OR failure\n // The executor catches all errors and returns a result with status\n const result = await this.jobExecutor.execute(job);\n\n // Check if job failed (executor returns result with FAILED status, doesn't throw)\n if (result.status === JobStatus.FAILED) {\n // Convert the error result to proper retry handling\n await this.handleJobFailure(job, result, msg, channel, config, startTime);\n return;\n }\n\n // Mark as completed only on success\n await this.jobStatusTracking.markCompleted(job.jobId);\n\n // Send RPC reply if requested\n if (replyTo && correlationId) {\n await this.adapter.publishResult(replyTo, correlationId, result);\n }\n\n // Dispatch to completion handlers (for BACKGROUND_JOB callbacks)\n await this.completionRegistry.dispatch({\n result,\n operationPathKey: job.operationPathKey,\n batchRef: job.batchRef,\n });\n\n // Acknowledge success\n channel.ack(msg);\n\n this.logDebug('Job completed successfully', {\n jobId: job.jobId,\n durationMs: Date.now() - startTime,\n });\n\n } catch (error) {\n // This catch block handles unexpected errors (e.g., from markStarted, dispatch)\n // NOT job execution errors (those are returned by executor as FAILED status)\n await this.handleJobError(job, error, msg, channel, config, startTime);\n } finally {\n // Always track job completion for graceful shutdown\n this.shutdownManager.jobCompleted();\n }\n }\n\n /**\n * Handle job failure when executor returns FAILED status (not an exception).\n * The executor catches errors and returns a JobResult with status FAILED.\n */\n private async handleJobFailure(\n job: JobPayload,\n result: JobResult,\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig,\n startTime: number\n ): Promise<void> {\n const currentRetry = job.retryCount ?? 0;\n const maxRetries = job.maxRetries ?? config.retryConfig?.maxRetries ?? QUEUE_RETRY_DEFAULTS.maxRetries;\n const { replyTo, correlationId } = msg.properties;\n\n // Extract error handling strategy from the error\n const errorStrategy = result.error?.errorHandlingStrategy;\n const shouldRetry = config.enableRetry &&\n this.shouldRetryFromStrategy(errorStrategy, currentRetry, maxRetries);\n\n if (shouldRetry) {\n // Resolve backoff from the job's per-operation retryConfig, falling back to\n // the consumer config then the framework defaults (per-field, so a partial\n // authored retryConfig still gets sane values for the axes it omits).\n const backoff = job.retryConfig;\n const retryConfig: QueueRetryConfig = {\n retryPolicy: backoff?.retryPolicy ?? config.retryConfig?.retryPolicy ?? QUEUE_RETRY_DEFAULTS.retryPolicy,\n maxRetries: maxRetries,\n baseDelayMs: backoff?.baseDelayMs ?? config.retryConfig?.baseDelayMs ?? QUEUE_RETRY_DEFAULTS.baseDelayMs,\n maxDelayMs: backoff?.maxDelayMs ?? config.retryConfig?.maxDelayMs ?? QUEUE_RETRY_DEFAULTS.maxDelayMs,\n timeoutMs: job.timeoutMs ?? config.retryConfig?.timeoutMs ?? QUEUE_RETRY_DEFAULTS.timeoutMs,\n };\n\n const delay = JobRetryUtils.calculateDelay(retryConfig, currentRetry);\n\n // Create updated job with incremented retry count\n const retryJob: JobPayload = {\n ...job,\n retryCount: currentRetry + 1,\n };\n\n // Durable backoff: hand the retry to the broker (delay queue holds it, then\n // dead-letters it back) instead of an in-process setTimeout that would be\n // lost if this worker crashes during the wait.\n const operationsQueue = QueueNamingUtils.buildQueueName(this.applicationId, 'operations');\n try {\n await this.adapter.scheduleDelayedRetry(operationsQueue, retryJob, delay, {\n replyTo,\n correlationId,\n });\n } catch (scheduleError) {\n // Could not hand the retry to the broker — requeue the ORIGINAL (do not\n // ACK) so it is redelivered rather than silently lost.\n this.logger.error('Failed to schedule durable retry; requeueing original', {\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(scheduleError),\n });\n channel.nack(msg, false, true);\n return;\n }\n\n // ACK original message (retry is now durably owned by the broker delay queue)\n channel.ack(msg);\n\n // Best-effort tracking update → RETRYING + lastRetryAt (never block the retry).\n if (result.error) {\n try {\n await this.jobStatusTracking.markFailed(job.jobId, result.error);\n } catch (trackingError) {\n this.logDebug('Failed to mark job retrying (non-fatal)', {\n jobId: job.jobId,\n error: describeCaughtError(trackingError),\n });\n }\n }\n\n this.logger.warn('Job retry scheduled (durable delay queue)', {\n jobId: job.jobId,\n retryCount: currentRetry + 1,\n maxRetries,\n delayMs: delay,\n // The queue is a non-HTTP boundary and owns its own operational level (a\n // scheduled retry is a `warn`, not classified from the error's severity).\n // Reuse the canonical field projection to restore the full error detail\n // that no longer self-logs at construction.\n ...(result.error ? projectWildoBackendErrorLogFields(result.error) : {}),\n });\n\n } else {\n // Max retries exceeded or non-retryable error\n await this.jobStatusTracking.markDeadLettered(job.jobId);\n\n // Send error reply if RPC\n if (replyTo && correlationId) {\n await this.adapter.publishResult(replyTo, correlationId, result);\n }\n\n // Reject without requeue → the operations queue's DLX now parks this\n // permanently-failed job in `operations.deadletter` (previously the broker\n // discarded it because no dead-letter-exchange was wired).\n channel.nack(msg, false, false);\n\n this.logger.error('Job failed permanently', {\n jobId: job.jobId,\n retryCount: currentRetry,\n maxRetries,\n // Permanent (dead-lettered) failure is operationally an `error`\n // regardless of the underlying error's business severity, so the level\n // stays explicit; the projection restores the full error detail (type,\n // status, context) and the stack.\n ...(result.error ? projectWildoBackendErrorLogFields(result.error) : {}),\n ...(result.error?.stack ? { stack: result.error.stack } : {}),\n });\n }\n }\n\n /**\n * Check if retry should happen based on error strategy.\n */\n private shouldRetryFromStrategy(\n strategy: ErrorHandling_Strategy | undefined,\n currentRetry: number,\n maxRetries: number\n ): boolean {\n // Check retry count limit\n if (currentRetry >= maxRetries) {\n return false;\n }\n\n // Only retry if strategy is explicitly RETRY or undefined (default to retry)\n return strategy === undefined || strategy === ErrorHandling_Strategy.RETRY;\n }\n\n /**\n * Handle unexpected errors (not job execution failures).\n * This handles errors from status tracking, dispatch, etc.\n */\n private async handleJobError(\n job: JobPayload,\n error: unknown,\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig,\n startTime: number\n ): Promise<void> {\n const currentRetry = job.retryCount ?? 0;\n const maxRetries = job.maxRetries ?? config.retryConfig?.maxRetries ?? QUEUE_RETRY_DEFAULTS.maxRetries;\n const { replyTo, correlationId } = msg.properties;\n\n // This is a raw caught exception (not a returned JobResult). Normalize it\n // once so both the retry and permanent-failure logs carry the full detail —\n // errors no longer self-log at construction, so the queue boundary owns it.\n const errorInfo = this.extractErrorInfo(error);\n const errorLogFields: Record<string, unknown> = {\n errorType: errorInfo.type,\n ...(errorInfo.customMessageReference ? { customMessageReference: errorInfo.customMessageReference } : {}),\n ...(errorInfo.statusCode ? { statusCode: errorInfo.statusCode } : {}),\n ...(errorInfo.context ? { context: errorInfo.context } : {}),\n };\n\n // Check if we should retry\n const shouldRetry = config.enableRetry && this.shouldRetry(error, currentRetry, maxRetries);\n\n if (shouldRetry) {\n // Resolve backoff from the job's per-operation retryConfig (per-field\n // fallback to consumer config then framework defaults).\n const backoff = job.retryConfig;\n const retryConfig: QueueRetryConfig = {\n retryPolicy: backoff?.retryPolicy ?? config.retryConfig?.retryPolicy ?? QUEUE_RETRY_DEFAULTS.retryPolicy,\n maxRetries: maxRetries,\n baseDelayMs: backoff?.baseDelayMs ?? config.retryConfig?.baseDelayMs ?? QUEUE_RETRY_DEFAULTS.baseDelayMs,\n maxDelayMs: backoff?.maxDelayMs ?? config.retryConfig?.maxDelayMs ?? QUEUE_RETRY_DEFAULTS.maxDelayMs,\n timeoutMs: job.timeoutMs ?? config.retryConfig?.timeoutMs ?? QUEUE_RETRY_DEFAULTS.timeoutMs,\n };\n\n const delay = JobRetryUtils.calculateDelay(retryConfig, currentRetry);\n\n // Create updated job with incremented retry count\n const retryJob: JobPayload = {\n ...job,\n retryCount: currentRetry + 1,\n };\n\n // Durable backoff via the broker delay queue (see handleJobFailure).\n const operationsQueue = QueueNamingUtils.buildQueueName(this.applicationId, 'operations');\n try {\n await this.adapter.scheduleDelayedRetry(operationsQueue, retryJob, delay, {\n replyTo,\n correlationId,\n });\n } catch (scheduleError) {\n this.logger.error('Failed to schedule durable retry; requeueing original', {\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(scheduleError),\n });\n channel.nack(msg, false, true);\n return;\n }\n\n // ACK original message (retry is now durably owned by the broker delay queue)\n channel.ack(msg);\n\n this.logger.warn('Job retry scheduled (durable delay queue)', {\n jobId: job.jobId,\n retryCount: currentRetry + 1,\n maxRetries,\n delayMs: delay,\n ...errorLogFields,\n });\n\n } else {\n // Max retries exceeded or non-retryable error\n\n // Mark as dead-lettered\n await this.jobStatusTracking.markDeadLettered(job.jobId);\n\n // Send error reply if RPC\n if (replyTo && correlationId) {\n const jobResult: JobResult = {\n jobId: job.jobId,\n status: JobStatus.FAILED,\n error: {\n type: errorInfo.type ?? ErrorType.INTERNAL,\n severity: ErrorSeverity.HIGH,\n timestamp: new Date(),\n context: errorInfo.context,\n backendActions: [],\n customMessageReference: ErrorCustomMessageReference.INTERNAL,\n statusCode: 500,\n },\n startedAt: new Date(startTime),\n completedAt: new Date(),\n durationMs: Date.now() - startTime,\n };\n\n await this.adapter.publishResult(replyTo, correlationId, jobResult);\n }\n\n // Reject without requeue → the operations queue's DLX now parks this\n // permanently-failed job in `operations.deadletter` (previously the broker\n // discarded it because no dead-letter-exchange was wired).\n channel.nack(msg, false, false);\n\n this.logger.error('Job failed permanently', {\n jobId: job.jobId,\n retryCount: currentRetry,\n maxRetries,\n ...errorLogFields,\n });\n }\n }\n\n /**\n * Determine if an error is retryable.\n */\n private shouldRetry(error: unknown, currentRetry: number, maxRetries: number): boolean {\n // Check retry count limit\n if (currentRetry >= maxRetries) {\n return false;\n }\n\n // Check if error specifies non-retryable\n if (this.isWildoError(error)) {\n const strategy = error.errorHandlingStrategy;\n // Only retry if strategy is explicitly RETRY or undefined (default to retry)\n return strategy === undefined || strategy === ErrorHandling_Strategy.RETRY;\n }\n\n // Default: retry on any error\n return true;\n }\n\n /**\n * Type guard for WildoError_Backend.\n */\n private isWildoError(error: unknown): error is {\n type: ErrorType;\n errorHandlingStrategy?: ErrorHandling_Strategy;\n customMessageReference?: ErrorCustomMessageReference;\n statusCode?: number;\n context?: Record<string, unknown>;\n } {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'type' in error &&\n typeof (error as any).type === 'string'\n );\n }\n\n /**\n * Extract error information for result/logging.\n */\n private extractErrorInfo(error: unknown): {\n type?: ErrorType;\n customMessageReference?: ErrorCustomMessageReference;\n statusCode?: number;\n context?: Record<string, unknown>;\n } {\n if (this.isWildoError(error)) {\n return {\n type: error.type,\n customMessageReference: error.customMessageReference,\n statusCode: error.statusCode,\n context: error.context,\n };\n }\n\n return {\n type: ErrorType.INTERNAL,\n context: {\n message: describeCaughtError(error),\n },\n };\n }\n\n /**\n * Handle a scheduled message (JWT-signed from crontabs-batches-manager).\n */\n private async handleScheduledMessage(\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig\n ): Promise<void> {\n const token = msg.content.toString();\n\n // Track in-flight job for graceful shutdown\n this.shutdownManager.jobStarted();\n\n try {\n // Verify the JWT token and convert to JobPayload\n const job = await this.scheduledMessageVerifier.verifyAndConvert(token);\n\n this.logger.info('Processing scheduled job', {\n jobId: job.jobId,\n hasBatchRef: !!job.batchRef,\n hasOperationPathKey: !!job.operationPathKey,\n applicationId: job.applicationId,\n });\n\n const startTime = Date.now();\n\n // Mark job as started\n await this.jobStatusTracking.markStarted(job.jobId, this.workerIdentity.workerId);\n\n // Execute the job - returns JobResult which may indicate success OR failure\n const result = await this.jobExecutor.execute(job);\n\n // Check if job failed (executor returns result with FAILED status, doesn't throw)\n if (result.status === JobStatus.FAILED) {\n // Mark as failed in tracking\n await this.jobStatusTracking.markFailed(job.jobId, result.error!);\n\n // Log failure — the queue owns the operational level (`error`); the\n // projection restores the full error detail that no longer self-logs at\n // construction.\n this.logger.error('Scheduled job execution failed', {\n jobId: job.jobId,\n durationMs: Date.now() - startTime,\n ...(result.error ? projectWildoBackendErrorLogFields(result.error) : {}),\n ...(result.error?.stack ? { stack: result.error.stack } : {}),\n });\n\n // Reject without requeue: scheduled jobs don't retry via the queue (they\n // re-run on the next schedule). The message is now parked in\n // `scheduled.deadletter` as a stale audit copy for inspection.\n channel.nack(msg, false, false);\n return;\n }\n\n // Mark as completed only on success\n await this.jobStatusTracking.markCompleted(job.jobId);\n\n // Acknowledge success\n channel.ack(msg);\n\n this.logger.info('Scheduled job completed successfully', {\n jobId: job.jobId,\n durationMs: Date.now() - startTime,\n });\n\n } catch (error) {\n // This catches errors from token verification, status tracking, etc.\n // NOT job execution errors (those are returned by executor as FAILED status)\n this.logger.error('Scheduled job processing error', {\n ...projectCaughtErrorLogFields(error),\n });\n\n // Reject without requeue: scheduled jobs don't retry via the queue (they\n // re-run on the next schedule). The message is now parked in\n // `scheduled.deadletter` as a stale audit copy for inspection.\n channel.nack(msg, false, false);\n\n } finally {\n this.shutdownManager.jobCompleted();\n }\n }\n\n /**\n * Get worker identity for external access.\n */\n getWorkerIdentity(): WorkerIdentity {\n return { ...this.workerIdentity };\n }\n\n /**\n * Check if consumer is running.\n */\n isRunning(): boolean {\n return this.isConsuming;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"job-consumer.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/job-consumer.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Job Consumer Backend Service\n *\n * Handles the complete message lifecycle:\n * - Consumes messages from RabbitMQ\n * - Executes jobs via JobExecutorBackendService\n * - Handles retry logic with exponential backoff\n * - Sends RPC replies for QUEUED mode\n * - Tracks job status\n * - Acknowledges/rejects messages appropriately\n */\n\nimport { injectable, inject } from 'inversify';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as os from 'os';\nimport type { ConsumeMessage, Channel } from 'amqplib';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { projectWildoBackendErrorLogFields, describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { adoptCorrelationIdIntoCurrentFrame, runInFreshRequestContextIfAbsent } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\nimport type { QueueAdapter } from './adapters/queue-adapter.backend.interface';\nimport type { MessageHandler } from './adapters/queue-adapter.backend.interface';\nimport { JobExecutorBackendService } from './job-executor.backend.service';\nimport { JobStatusTrackingBackendService } from './job-status-tracking.backend.service';\nimport { JobCompletionRegistryBackendService } from './job-completion-registry.backend.service';\nimport { WorkerShutdownManagerBackendService } from './worker-shutdown-manager.backend.service';\nimport { ScheduledMessageVerifierBackendService } from './scheduled-message-verifier.backend.service';\nimport {\n JobPayload,\n JobResult,\n JobStatus,\n JobPriority,\n JobRetryUtils,\n QueueNamingUtils,\n QueueVariant,\n QUEUE_RETRY_DEFAULTS,\n ErrorHandling_Strategy,\n QueueRetryConfig,\n ErrorType,\n ErrorCustomMessageReference,\n ErrorSeverity,\n ErrorActionBackend,\n} from '@wildo-ai/saas-models';\n\n/**\n * Worker identification for tracking.\n */\ninterface WorkerIdentity {\n workerId: string;\n hostname: string;\n pid: number;\n}\n\n/**\n * Consumer configuration.\n */\nexport interface JobConsumerConfig {\n /** Whether to enable retry logic */\n enableRetry?: boolean;\n /** Default retry configuration */\n retryConfig?: Partial<QueueRetryConfig>;\n}\n\nconst DEFAULT_CONSUMER_CONFIG: JobConsumerConfig = {\n enableRetry: true,\n retryConfig: QUEUE_RETRY_DEFAULTS,\n};\n\n@injectable()\nexport class JobConsumerBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private _applicationId: string | null = null;\n private readonly workerIdentity: WorkerIdentity;\n private isConsuming = false;\n private consumingQueues: string[] = [];\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly adapter: QueueAdapter,\n @inject(SAAS_SERVICE_TYPES.JobExecutorBackendService)\n private readonly jobExecutor: JobExecutorBackendService,\n @inject(SAAS_SERVICE_TYPES.JobStatusTrackingService)\n private readonly jobStatusTracking: JobStatusTrackingBackendService,\n @inject(SAAS_SERVICE_TYPES.JobCompletionRegistryService)\n private readonly completionRegistry: JobCompletionRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.WorkerShutdownManagerService)\n private readonly shutdownManager: WorkerShutdownManagerBackendService,\n @inject(SAAS_SERVICE_TYPES.ScheduledMessageVerifierService)\n private readonly scheduledMessageVerifier: ScheduledMessageVerifierBackendService,\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n ) {\n this.logDebug = this.logger.debugByType('JobConsumerBackendService');\n this.logger.setDebugTypeLogging('JobConsumerBackendService', false);\n // Lazy-load applicationId to avoid accessing config before initialization\n this.workerIdentity = {\n workerId: uuidv4(),\n hostname: os.hostname(),\n pid: process.pid,\n };\n }\n\n /** Lazy getter for applicationId - avoids accessing config in constructor */\n private get applicationId(): string {\n if (!this._applicationId) {\n this._applicationId = this.appConfigService.applicationId;\n }\n return this._applicationId;\n }\n\n /**\n * Start consuming from all operation and scheduled queues.\n */\n async startConsuming(config: JobConsumerConfig = {}): Promise<void> {\n if (this.isConsuming) {\n this.logger.warn('Consumer already running');\n return;\n }\n\n const mergedConfig = { ...DEFAULT_CONSUMER_CONFIG, ...config };\n\n // Connect to RabbitMQ\n await this.adapter.connect();\n\n // Start consuming from operations queues (normal and priority variant)\n const operationsQueueConfigs = [\n { category: 'operations', variant: undefined },\n { category: 'operations', variant: QueueVariant.PRIORITY },\n ];\n\n for (const queueConfig of operationsQueueConfigs) {\n const queueName = QueueNamingUtils.buildQueueName(\n this.applicationId,\n queueConfig.category,\n queueConfig.variant\n );\n\n // Create handler that matches MessageHandler signature\n const handler: MessageHandler = async (msg: ConsumeMessage, channel: Channel) => {\n // Phase 1 — each consumed job runs in its own correlation frame (fresh id). Phase 6 will seed\n // it from the enqueuing request's originCorrelationId carried on the job payload.\n await runInFreshRequestContextIfAbsent(() => this.handleMessage(msg, channel, mergedConfig));\n };\n\n await this.adapter.consume(queueName, handler);\n this.consumingQueues.push(queueName);\n\n this.logDebug('Started consuming from queue', {\n queueName,\n workerId: this.workerIdentity.workerId,\n });\n }\n\n // Start consuming from scheduled queue (JWT-signed messages from crontabs-manager)\n const scheduledQueueName = QueueNamingUtils.buildQueueName(this.applicationId, 'scheduled');\n\n const scheduledHandler: MessageHandler = async (msg: ConsumeMessage, channel: Channel) => {\n // Phase 1 — each cron tick (scheduled-queue message) runs in its own correlation frame.\n await runInFreshRequestContextIfAbsent(() => this.handleScheduledMessage(msg, channel, mergedConfig));\n };\n\n await this.adapter.consume(scheduledQueueName, scheduledHandler);\n this.consumingQueues.push(scheduledQueueName);\n\n this.logDebug('Started consuming from scheduled queue', {\n queueName: scheduledQueueName,\n workerId: this.workerIdentity.workerId,\n });\n\n this.isConsuming = true;\n this.logDebug('Job consumer started', {\n workerId: this.workerIdentity.workerId,\n queues: this.consumingQueues.length,\n });\n }\n\n /**\n * Stop consuming and close connections.\n */\n async stopConsuming(): Promise<void> {\n if (!this.isConsuming) {\n return;\n }\n\n // Cancel all consumers\n for (const queueName of this.consumingQueues) {\n await this.adapter.cancelConsumer(queueName);\n }\n\n this.consumingQueues = [];\n this.isConsuming = false;\n\n this.logDebug('Job consumer stopped', {\n workerId: this.workerIdentity.workerId,\n });\n }\n\n /**\n * Handle a single message from the queue.\n */\n private async handleMessage(\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig\n ): Promise<void> {\n let job: JobPayload;\n\n try {\n job = JSON.parse(msg.content.toString());\n } catch (parseError) {\n this.logger.error('Failed to parse job message', {\n ...projectCaughtErrorLogFields(parseError),\n });\n // Invalid message - don't requeue\n channel.nack(msg, false, false);\n return;\n }\n\n // Phase 6 — this job belongs to the trace of the request that enqueued it: adopt that request's\n // originCorrelationId into the (freshly-minted) consume frame, so every log line + audit row this\n // job produces on the worker carries the originating request's correlationId. Absent/malformed →\n // the frame keeps its fresh id (a job with no originating request stays independently traceable).\n adoptCorrelationIdIntoCurrentFrame(job.originCorrelationId);\n\n const startTime = Date.now();\n const { replyTo, correlationId } = msg.properties;\n\n // Track in-flight job for graceful shutdown\n this.shutdownManager.jobStarted();\n\n this.logDebug('Processing job', {\n jobId: job.jobId,\n jobType: job.jobType,\n priority: job.priority,\n retryCount: job.retryCount ?? 0,\n });\n\n try {\n // Mark job as started\n await this.jobStatusTracking.markStarted(job.jobId, this.workerIdentity.workerId);\n\n // Execute the job - returns JobResult which may indicate success OR failure\n // The executor catches all errors and returns a result with status\n const result = await this.jobExecutor.execute(job);\n\n // Check if job failed (executor returns result with FAILED status, doesn't throw)\n if (result.status === JobStatus.FAILED) {\n // Convert the error result to proper retry handling\n await this.handleJobFailure(job, result, msg, channel, config, startTime);\n return;\n }\n\n // Mark as completed only on success\n await this.jobStatusTracking.markCompleted(job.jobId);\n\n // Send RPC reply if requested\n if (replyTo && correlationId) {\n await this.adapter.publishResult(replyTo, correlationId, result);\n }\n\n // Dispatch to completion handlers (for BACKGROUND_JOB callbacks)\n await this.completionRegistry.dispatch({\n result,\n operationPathKey: job.operationPathKey,\n batchRef: job.batchRef,\n });\n\n // Acknowledge success\n channel.ack(msg);\n\n this.logDebug('Job completed successfully', {\n jobId: job.jobId,\n durationMs: Date.now() - startTime,\n });\n\n } catch (error) {\n // This catch block handles unexpected errors (e.g., from markStarted, dispatch)\n // NOT job execution errors (those are returned by executor as FAILED status)\n await this.handleJobError(job, error, msg, channel, config, startTime);\n } finally {\n // Always track job completion for graceful shutdown\n this.shutdownManager.jobCompleted();\n }\n }\n\n /**\n * Handle job failure when executor returns FAILED status (not an exception).\n * The executor catches errors and returns a JobResult with status FAILED.\n */\n private async handleJobFailure(\n job: JobPayload,\n result: JobResult,\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig,\n startTime: number\n ): Promise<void> {\n const currentRetry = job.retryCount ?? 0;\n const maxRetries = job.maxRetries ?? config.retryConfig?.maxRetries ?? QUEUE_RETRY_DEFAULTS.maxRetries;\n const { replyTo, correlationId } = msg.properties;\n\n // Extract error handling strategy from the error\n const errorStrategy = result.error?.errorHandlingStrategy;\n const shouldRetry = config.enableRetry &&\n this.shouldRetryFromStrategy(errorStrategy, currentRetry, maxRetries);\n\n if (shouldRetry) {\n // Resolve backoff from the job's per-operation retryConfig, falling back to\n // the consumer config then the framework defaults (per-field, so a partial\n // authored retryConfig still gets sane values for the axes it omits).\n const backoff = job.retryConfig;\n const retryConfig: QueueRetryConfig = {\n retryPolicy: backoff?.retryPolicy ?? config.retryConfig?.retryPolicy ?? QUEUE_RETRY_DEFAULTS.retryPolicy,\n maxRetries: maxRetries,\n baseDelayMs: backoff?.baseDelayMs ?? config.retryConfig?.baseDelayMs ?? QUEUE_RETRY_DEFAULTS.baseDelayMs,\n maxDelayMs: backoff?.maxDelayMs ?? config.retryConfig?.maxDelayMs ?? QUEUE_RETRY_DEFAULTS.maxDelayMs,\n timeoutMs: job.timeoutMs ?? config.retryConfig?.timeoutMs ?? QUEUE_RETRY_DEFAULTS.timeoutMs,\n };\n\n const delay = JobRetryUtils.calculateDelay(retryConfig, currentRetry);\n\n // Create updated job with incremented retry count\n const retryJob: JobPayload = {\n ...job,\n retryCount: currentRetry + 1,\n };\n\n // Durable backoff: hand the retry to the broker (delay queue holds it, then\n // dead-letters it back) instead of an in-process setTimeout that would be\n // lost if this worker crashes during the wait.\n const operationsQueue = QueueNamingUtils.buildQueueName(this.applicationId, 'operations');\n try {\n await this.adapter.scheduleDelayedRetry(operationsQueue, retryJob, delay, {\n replyTo,\n correlationId,\n });\n } catch (scheduleError) {\n // Could not hand the retry to the broker — requeue the ORIGINAL (do not\n // ACK) so it is redelivered rather than silently lost.\n this.logger.error('Failed to schedule durable retry; requeueing original', {\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(scheduleError),\n });\n channel.nack(msg, false, true);\n return;\n }\n\n // ACK original message (retry is now durably owned by the broker delay queue)\n channel.ack(msg);\n\n // Best-effort tracking update → RETRYING + lastRetryAt (never block the retry).\n if (result.error) {\n try {\n await this.jobStatusTracking.markFailed(job.jobId, result.error);\n } catch (trackingError) {\n this.logDebug('Failed to mark job retrying (non-fatal)', {\n jobId: job.jobId,\n error: describeCaughtError(trackingError),\n });\n }\n }\n\n this.logger.warn('Job retry scheduled (durable delay queue)', {\n jobId: job.jobId,\n retryCount: currentRetry + 1,\n maxRetries,\n delayMs: delay,\n // The queue is a non-HTTP boundary and owns its own operational level (a\n // scheduled retry is a `warn`, not classified from the error's severity).\n // Reuse the canonical field projection to restore the full error detail\n // that no longer self-logs at construction.\n ...(result.error ? projectWildoBackendErrorLogFields(result.error) : {}),\n });\n\n } else {\n // Max retries exceeded or non-retryable error\n await this.jobStatusTracking.markDeadLettered(job.jobId);\n\n // Send error reply if RPC\n if (replyTo && correlationId) {\n await this.adapter.publishResult(replyTo, correlationId, result);\n }\n\n // Reject without requeue → the operations queue's DLX now parks this\n // permanently-failed job in `operations.deadletter` (previously the broker\n // discarded it because no dead-letter-exchange was wired).\n channel.nack(msg, false, false);\n\n this.logger.error('Job failed permanently', {\n jobId: job.jobId,\n retryCount: currentRetry,\n maxRetries,\n // Permanent (dead-lettered) failure is operationally an `error`\n // regardless of the underlying error's business severity, so the level\n // stays explicit; the projection restores the full error detail (type,\n // status, context) and the stack.\n ...(result.error ? projectWildoBackendErrorLogFields(result.error) : {}),\n ...(result.error?.stack ? { stack: result.error.stack } : {}),\n });\n }\n }\n\n /**\n * Check if retry should happen based on error strategy.\n */\n private shouldRetryFromStrategy(\n strategy: ErrorHandling_Strategy | undefined,\n currentRetry: number,\n maxRetries: number\n ): boolean {\n // Check retry count limit\n if (currentRetry >= maxRetries) {\n return false;\n }\n\n // Only retry if strategy is explicitly RETRY or undefined (default to retry)\n return strategy === undefined || strategy === ErrorHandling_Strategy.RETRY;\n }\n\n /**\n * Handle unexpected errors (not job execution failures).\n * This handles errors from status tracking, dispatch, etc.\n */\n private async handleJobError(\n job: JobPayload,\n error: unknown,\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig,\n startTime: number\n ): Promise<void> {\n const currentRetry = job.retryCount ?? 0;\n const maxRetries = job.maxRetries ?? config.retryConfig?.maxRetries ?? QUEUE_RETRY_DEFAULTS.maxRetries;\n const { replyTo, correlationId } = msg.properties;\n\n // This is a raw caught exception (not a returned JobResult). Normalize it\n // once so both the retry and permanent-failure logs carry the full detail —\n // errors no longer self-log at construction, so the queue boundary owns it.\n const errorInfo = this.extractErrorInfo(error);\n const errorLogFields: Record<string, unknown> = {\n errorType: errorInfo.type,\n ...(errorInfo.customMessageReference ? { customMessageReference: errorInfo.customMessageReference } : {}),\n ...(errorInfo.statusCode ? { statusCode: errorInfo.statusCode } : {}),\n ...(errorInfo.context ? { context: errorInfo.context } : {}),\n };\n\n // Check if we should retry\n const shouldRetry = config.enableRetry && this.shouldRetry(error, currentRetry, maxRetries);\n\n if (shouldRetry) {\n // Resolve backoff from the job's per-operation retryConfig (per-field\n // fallback to consumer config then framework defaults).\n const backoff = job.retryConfig;\n const retryConfig: QueueRetryConfig = {\n retryPolicy: backoff?.retryPolicy ?? config.retryConfig?.retryPolicy ?? QUEUE_RETRY_DEFAULTS.retryPolicy,\n maxRetries: maxRetries,\n baseDelayMs: backoff?.baseDelayMs ?? config.retryConfig?.baseDelayMs ?? QUEUE_RETRY_DEFAULTS.baseDelayMs,\n maxDelayMs: backoff?.maxDelayMs ?? config.retryConfig?.maxDelayMs ?? QUEUE_RETRY_DEFAULTS.maxDelayMs,\n timeoutMs: job.timeoutMs ?? config.retryConfig?.timeoutMs ?? QUEUE_RETRY_DEFAULTS.timeoutMs,\n };\n\n const delay = JobRetryUtils.calculateDelay(retryConfig, currentRetry);\n\n // Create updated job with incremented retry count\n const retryJob: JobPayload = {\n ...job,\n retryCount: currentRetry + 1,\n };\n\n // Durable backoff via the broker delay queue (see handleJobFailure).\n const operationsQueue = QueueNamingUtils.buildQueueName(this.applicationId, 'operations');\n try {\n await this.adapter.scheduleDelayedRetry(operationsQueue, retryJob, delay, {\n replyTo,\n correlationId,\n });\n } catch (scheduleError) {\n this.logger.error('Failed to schedule durable retry; requeueing original', {\n jobId: job.jobId,\n ...projectCaughtErrorLogFields(scheduleError),\n });\n channel.nack(msg, false, true);\n return;\n }\n\n // ACK original message (retry is now durably owned by the broker delay queue)\n channel.ack(msg);\n\n this.logger.warn('Job retry scheduled (durable delay queue)', {\n jobId: job.jobId,\n retryCount: currentRetry + 1,\n maxRetries,\n delayMs: delay,\n ...errorLogFields,\n });\n\n } else {\n // Max retries exceeded or non-retryable error\n\n // Mark as dead-lettered\n await this.jobStatusTracking.markDeadLettered(job.jobId);\n\n // Send error reply if RPC\n if (replyTo && correlationId) {\n const jobResult: JobResult = {\n jobId: job.jobId,\n status: JobStatus.FAILED,\n error: {\n type: errorInfo.type ?? ErrorType.INTERNAL,\n severity: ErrorSeverity.HIGH,\n timestamp: new Date(),\n context: errorInfo.context,\n backendActions: [],\n customMessageReference: ErrorCustomMessageReference.INTERNAL,\n statusCode: 500,\n },\n startedAt: new Date(startTime),\n completedAt: new Date(),\n durationMs: Date.now() - startTime,\n };\n\n await this.adapter.publishResult(replyTo, correlationId, jobResult);\n }\n\n // Reject without requeue → the operations queue's DLX now parks this\n // permanently-failed job in `operations.deadletter` (previously the broker\n // discarded it because no dead-letter-exchange was wired).\n channel.nack(msg, false, false);\n\n this.logger.error('Job failed permanently', {\n jobId: job.jobId,\n retryCount: currentRetry,\n maxRetries,\n ...errorLogFields,\n });\n }\n }\n\n /**\n * Determine if an error is retryable.\n */\n private shouldRetry(error: unknown, currentRetry: number, maxRetries: number): boolean {\n // Check retry count limit\n if (currentRetry >= maxRetries) {\n return false;\n }\n\n // Check if error specifies non-retryable\n if (this.isWildoError(error)) {\n const strategy = error.errorHandlingStrategy;\n // Only retry if strategy is explicitly RETRY or undefined (default to retry)\n return strategy === undefined || strategy === ErrorHandling_Strategy.RETRY;\n }\n\n // Default: retry on any error\n return true;\n }\n\n /**\n * Type guard for WildoError_Backend.\n */\n private isWildoError(error: unknown): error is {\n type: ErrorType;\n errorHandlingStrategy?: ErrorHandling_Strategy;\n customMessageReference?: ErrorCustomMessageReference;\n statusCode?: number;\n context?: Record<string, unknown>;\n } {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'type' in error &&\n typeof (error as any).type === 'string'\n );\n }\n\n /**\n * Extract error information for result/logging.\n */\n private extractErrorInfo(error: unknown): {\n type?: ErrorType;\n customMessageReference?: ErrorCustomMessageReference;\n statusCode?: number;\n context?: Record<string, unknown>;\n } {\n if (this.isWildoError(error)) {\n return {\n type: error.type,\n customMessageReference: error.customMessageReference,\n statusCode: error.statusCode,\n context: error.context,\n };\n }\n\n return {\n type: ErrorType.INTERNAL,\n context: {\n message: describeCaughtError(error),\n },\n };\n }\n\n /**\n * Handle a scheduled message (JWT-signed from crontabs-batches-manager).\n */\n private async handleScheduledMessage(\n msg: ConsumeMessage,\n channel: Channel,\n config: JobConsumerConfig\n ): Promise<void> {\n const token = msg.content.toString();\n\n // Track in-flight job for graceful shutdown\n this.shutdownManager.jobStarted();\n\n try {\n // Verify the JWT token and convert to JobPayload\n const job = await this.scheduledMessageVerifier.verifyAndConvert(token);\n\n this.logger.info('Processing scheduled job', {\n jobId: job.jobId,\n hasBatchRef: !!job.batchRef,\n hasOperationPathKey: !!job.operationPathKey,\n applicationId: job.applicationId,\n });\n\n const startTime = Date.now();\n\n // Mark job as started\n await this.jobStatusTracking.markStarted(job.jobId, this.workerIdentity.workerId);\n\n // Execute the job - returns JobResult which may indicate success OR failure\n const result = await this.jobExecutor.execute(job);\n\n // Check if job failed (executor returns result with FAILED status, doesn't throw)\n if (result.status === JobStatus.FAILED) {\n // Mark as failed in tracking\n await this.jobStatusTracking.markFailed(job.jobId, result.error!);\n\n // Log failure — the queue owns the operational level (`error`); the\n // projection restores the full error detail that no longer self-logs at\n // construction.\n this.logger.error('Scheduled job execution failed', {\n jobId: job.jobId,\n durationMs: Date.now() - startTime,\n ...(result.error ? projectWildoBackendErrorLogFields(result.error) : {}),\n ...(result.error?.stack ? { stack: result.error.stack } : {}),\n });\n\n // Reject without requeue: scheduled jobs don't retry via the queue (they\n // re-run on the next schedule). The message is now parked in\n // `scheduled.deadletter` as a stale audit copy for inspection.\n channel.nack(msg, false, false);\n return;\n }\n\n // Mark as completed only on success\n await this.jobStatusTracking.markCompleted(job.jobId);\n\n // Acknowledge success\n channel.ack(msg);\n\n this.logger.info('Scheduled job completed successfully', {\n jobId: job.jobId,\n durationMs: Date.now() - startTime,\n });\n\n } catch (error) {\n // This catches errors from token verification, status tracking, etc.\n // NOT job execution errors (those are returned by executor as FAILED status)\n this.logger.error('Scheduled job processing error', {\n ...projectCaughtErrorLogFields(error),\n });\n\n // Reject without requeue: scheduled jobs don't retry via the queue (they\n // re-run on the next schedule). The message is now parked in\n // `scheduled.deadletter` as a stale audit copy for inspection.\n channel.nack(msg, false, false);\n\n } finally {\n this.shutdownManager.jobCompleted();\n }\n }\n\n /**\n * Get worker identity for external access.\n */\n getWorkerIdentity(): WorkerIdentity {\n return { ...this.workerIdentity };\n }\n\n /**\n * Check if consumer is running.\n */\n isRunning(): boolean {\n return this.isConsuming;\n }\n}\n"]}
|
|
@@ -9,7 +9,7 @@ import { ErrorBuilderBackendService } from '../errors/services/error-builder.bac
|
|
|
9
9
|
import { ServicesRegistryHandlerBackendService } from '../base-classes/services/services/services-registry-handler.backend.service';
|
|
10
10
|
import { ExecutionContextCreatorBackendService } from '../runtime/services/execution-context-creator.backend.service';
|
|
11
11
|
import { BatchesCronjobsExecutor_BackendService } from '../base-classes/services/batches/batches-cronjobs-executor.backend.service';
|
|
12
|
-
import {
|
|
12
|
+
import type { QueueAdapter } from './adapters/queue-adapter.backend.interface';
|
|
13
13
|
import { JobPayloadStorageBackendService } from './job-payload-storage.backend.service';
|
|
14
14
|
import { JobPayload, JobResult } from '@wildo-ai/saas-models';
|
|
15
15
|
export declare class JobExecutorBackendService {
|
|
@@ -22,7 +22,7 @@ export declare class JobExecutorBackendService {
|
|
|
22
22
|
private readonly errorBuilder;
|
|
23
23
|
protected logDebug: (message: string, context?: Record<string, unknown>) => void;
|
|
24
24
|
private readonly workerId;
|
|
25
|
-
constructor(servicesRegistry: ServicesRegistryHandlerBackendService, executionContextCreator: ExecutionContextCreatorBackendService, batchExecutor: BatchesCronjobsExecutor_BackendService, adapter:
|
|
25
|
+
constructor(servicesRegistry: ServicesRegistryHandlerBackendService, executionContextCreator: ExecutionContextCreatorBackendService, batchExecutor: BatchesCronjobsExecutor_BackendService, adapter: QueueAdapter, payloadStorage: JobPayloadStorageBackendService, logger: LoggerService, errorBuilder: ErrorBuilderBackendService);
|
|
26
26
|
/**
|
|
27
27
|
* Execute a job and return result.
|
|
28
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-executor.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/job-executor.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EAAE,qCAAqC,EAAE,MAAM,6FAA6F,CAAC;AACpJ,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAC;AACtI,OAAO,EAAE,sCAAsC,EAAE,MAAM,4FAA4F,CAAC;AACpJ,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"job-executor.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/job-executor.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EAAE,qCAAqC,EAAE,MAAM,6FAA6F,CAAC;AACpJ,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAC;AACtI,OAAO,EAAE,sCAAsC,EAAE,MAAM,4FAA4F,CAAC;AACpJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EACL,UAAU,EACV,SAAS,EAQV,MAAM,uBAAuB,CAAC;AAgB/B,qBACa,yBAAyB;IAMlC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAEjC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAExC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAjB/B,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAIf,gBAAgB,EAAE,qCAAqC,EAEvD,uBAAuB,EAAE,qCAAqC,EAE9D,aAAa,EAAE,sCAAsC,EAErD,OAAO,EAAE,YAAY,EAErB,cAAc,EAAE,+BAA+B,EAE/C,MAAM,EAAE,aAAa,EAErB,YAAY,EAAE,0BAA0B;IAO3D;;OAEG;IACU,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAwEzD;;OAEG;YACW,wBAAwB;IA4BtC;;OAEG;YACW,kBAAkB;IAgBhC;;OAEG;YACW,oBAAoB;IAsBlC;;OAEG;IACI,WAAW,IAAI,MAAM;CAG7B"}
|
|
@@ -24,7 +24,6 @@ import { ErrorBuilderBackendService } from '../errors/services/error-builder.bac
|
|
|
24
24
|
import { ServicesRegistryHandlerBackendService } from '../base-classes/services/services/services-registry-handler.backend.service.js';
|
|
25
25
|
import { ExecutionContextCreatorBackendService } from '../runtime/services/execution-context-creator.backend.service.js';
|
|
26
26
|
import { BatchesCronjobsExecutor_BackendService } from '../base-classes/services/batches/batches-cronjobs-executor.backend.service.js';
|
|
27
|
-
import { RabbitMQAdapterBackendService } from './adapters/rabbitmq-adapter.backend.service.js';
|
|
28
27
|
import { JobPayloadStorageBackendService } from './job-payload-storage.backend.service.js';
|
|
29
28
|
import { JobStatus, JobType, ErrorType, ErrorCustomMessageReference, ResourceSerializationUtils, ResourcesConfig_OperationPathUtils, } from '@wildo-ai/saas-models';
|
|
30
29
|
/**
|
|
@@ -196,9 +195,7 @@ JobExecutorBackendService = __decorate([
|
|
|
196
195
|
__param(6, inject(SAAS_SERVICE_TYPES.ErrorBuilderService)),
|
|
197
196
|
__metadata("design:paramtypes", [ServicesRegistryHandlerBackendService,
|
|
198
197
|
ExecutionContextCreatorBackendService,
|
|
199
|
-
BatchesCronjobsExecutor_BackendService,
|
|
200
|
-
RabbitMQAdapterBackendService,
|
|
201
|
-
JobPayloadStorageBackendService,
|
|
198
|
+
BatchesCronjobsExecutor_BackendService, Object, JobPayloadStorageBackendService,
|
|
202
199
|
LoggerService,
|
|
203
200
|
ErrorBuilderBackendService])
|
|
204
201
|
], JobExecutorBackendService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-executor.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/job-executor.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Job Executor Backend Service\n *\n * Executes queued jobs on worker pods.\n * Handles resource operations, custom batches, and scheduled crons.\n */\n\nimport { injectable, inject } from 'inversify';\nimport * as os from 'os';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { ServicesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/services/services-registry-handler.backend.service';\nimport { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport { BatchesCronjobsExecutor_BackendService } from '~wildo-backend-lib/base-classes/services/batches/batches-cronjobs-executor.backend.service';\nimport { RabbitMQAdapterBackendService } from './adapters/rabbitmq-adapter.backend.service';\nimport { JobPayloadStorageBackendService } from './job-payload-storage.backend.service';\nimport {\n JobPayload,\n JobResult,\n JobStatus,\n JobType,\n ErrorType,\n ErrorCustomMessageReference,\n ResourceSerializationUtils,\n ResourcesConfig_OperationPathUtils,\n WildoError_Backend,\n} from '@wildo-ai/saas-models';\n\n/**\n * Type guard to check if an error is a WildoError_Backend.\n * Uses duck typing since WildoError_Backend is a type, not a class.\n */\nfunction isWildoError(error: unknown): error is WildoError_Backend {\n return (\n error !== null &&\n typeof error === 'object' &&\n 'type' in error &&\n 'statusCode' in error &&\n 'backendActions' in error\n );\n}\n\n@injectable()\nexport class JobExecutorBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private readonly workerId: string;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.ServicesRegistryHandlerService)\n private readonly servicesRegistry: ServicesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService)\n private readonly executionContextCreator: ExecutionContextCreatorBackendService,\n @inject(SAAS_SERVICE_TYPES.BatchesCronjobsExecutorService)\n private readonly batchExecutor: BatchesCronjobsExecutor_BackendService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly adapter: RabbitMQAdapterBackendService,\n @inject(SAAS_SERVICE_TYPES.JobPayloadStorageService)\n private readonly payloadStorage: JobPayloadStorageBackendService,\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n ) {\n this.logDebug = this.logger.debugByType('JobExecutorBackendService');\n this.logger.setDebugTypeLogging('JobExecutorBackendService', false);\n this.workerId = process.env.K8S_POD_NAME || os.hostname();\n }\n\n /**\n * Execute a job and return result.\n */\n public async execute(job: JobPayload): Promise<JobResult> {\n const startedAt = new Date();\n\n try {\n // Resolve input data - check if stored externally first\n let inputData: unknown;\n if (job.inputPayloadStorageId) {\n // Retrieve from external storage\n inputData = await this.payloadStorage.retrieve(job.inputPayloadStorageId);\n this.logDebug('Retrieved external payload', {\n jobId: job.jobId,\n storageId: job.inputPayloadStorageId,\n });\n } else if (job.inputDataJson) {\n inputData = JSON.parse(job.inputDataJson);\n }\n\n // Execute based on job type\n let result: any;\n\n switch (job.jobType) {\n case JobType.RESOURCE_OPERATION:\n result = await this.executeResourceOperation(job, inputData);\n break;\n case JobType.CUSTOM_BATCH:\n result = await this.executeCustomBatch(job, inputData);\n break;\n case JobType.SCHEDULED_CRON:\n result = await this.executeScheduledCron(job, inputData);\n break;\n default:\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_EXECUTION_FAILED,\n context: { jobType: job.jobType, message: 'Unknown job type' },\n }\n );\n }\n\n // Build success result\n const jobResult: JobResult = {\n jobId: job.jobId,\n status: JobStatus.COMPLETED,\n resultJson: result !== undefined ? JSON.stringify(result) : undefined,\n startedAt,\n completedAt: new Date(),\n durationMs: Date.now() - startedAt.getTime(),\n };\n\n return jobResult;\n\n } catch (error) {\n // Convert to WildoError\n const wildoError = isWildoError(error)\n ? error\n : this.errorBuilder.buildFromStandardError(error as Error);\n\n const jobResult: JobResult = {\n jobId: job.jobId,\n status: JobStatus.FAILED,\n error: wildoError,\n startedAt,\n completedAt: new Date(),\n durationMs: Date.now() - startedAt.getTime(),\n };\n\n return jobResult;\n }\n }\n\n /**\n * Execute resource operation with reconstructed execution context.\n */\n private async executeResourceOperation(job: JobPayload, inputData: unknown): Promise<any> {\n if (!job.executionContextJson || !job.operationPathJson) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_EXECUTION_CONTEXT_INVALID,\n context: { message: 'Resource operation requires executionContextJson and operationPathJson' },\n }\n );\n }\n\n // Reconstruct execution context from serialized data\n const executionContext = await this.executionContextCreator.reconstructFromSerializedData(\n job.executionContextJson,\n job.operationPathJson\n );\n const operationPath = ResourceSerializationUtils.deserializeOperationPath(job.operationPathJson);\n\n // Execute by the serialized operation path and preserve the enqueue-time\n // target id. Context-addressed routes are resolved and authorized before\n // enqueueing; worker replay must not re-derive identity from context.\n return this.servicesRegistry.doByOperationPath(operationPath, executionContext, job.inputId, inputData, {\n isWorkerExecution: true,\n ...(job.inputId ? { contextAddressedOperationAuthorizationId: job.inputId } : {}),\n });\n }\n\n /**\n * Execute custom batch job.\n */\n private async executeCustomBatch(job: JobPayload, inputData: unknown): Promise<any> {\n if (!job.batchRef) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_BATCH_REF_NOT_FOUND,\n context: { message: 'Custom batch job requires batchRef' },\n }\n );\n }\n\n // Custom batch executor creates its own internal context\n return this.batchExecutor.executeCustomBatch(job.batchRef, inputData, new Map());\n }\n\n /**\n * Execute scheduled cron job (after JWT verification in consumer).\n */\n private async executeScheduledCron(job: JobPayload, inputData: unknown): Promise<any> {\n // Scheduled jobs can be either resource-oriented or custom batches\n if (job.operationPathKey) {\n // Resource-oriented scheduled job\n // operationPathKey is in format: \"resource | operation | variantType | variant | isBulk:false\"\n const operationPath = ResourcesConfig_OperationPathUtils.parseOperationPathKey(job.operationPathKey);\n return this.batchExecutor.executeBatchFromResource(operationPath, inputData);\n } else if (job.batchRef) {\n // Custom batch\n return this.batchExecutor.executeCustomBatch(job.batchRef, inputData, new Map());\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_EXECUTION_FAILED,\n context: { message: 'Scheduled job has neither operationPathKey nor batchRef' },\n }\n );\n }\n\n /**\n * Get worker ID for this executor.\n */\n public getWorkerId(): string {\n return this.workerId;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"job-executor.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/job-executor.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Job Executor Backend Service\n *\n * Executes queued jobs on worker pods.\n * Handles resource operations, custom batches, and scheduled crons.\n */\n\nimport { injectable, inject } from 'inversify';\nimport * as os from 'os';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { ServicesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/services/services-registry-handler.backend.service';\nimport { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport { BatchesCronjobsExecutor_BackendService } from '~wildo-backend-lib/base-classes/services/batches/batches-cronjobs-executor.backend.service';\nimport type { QueueAdapter } from './adapters/queue-adapter.backend.interface';\nimport { JobPayloadStorageBackendService } from './job-payload-storage.backend.service';\nimport {\n JobPayload,\n JobResult,\n JobStatus,\n JobType,\n ErrorType,\n ErrorCustomMessageReference,\n ResourceSerializationUtils,\n ResourcesConfig_OperationPathUtils,\n WildoError_Backend,\n} from '@wildo-ai/saas-models';\n\n/**\n * Type guard to check if an error is a WildoError_Backend.\n * Uses duck typing since WildoError_Backend is a type, not a class.\n */\nfunction isWildoError(error: unknown): error is WildoError_Backend {\n return (\n error !== null &&\n typeof error === 'object' &&\n 'type' in error &&\n 'statusCode' in error &&\n 'backendActions' in error\n );\n}\n\n@injectable()\nexport class JobExecutorBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private readonly workerId: string;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.ServicesRegistryHandlerService)\n private readonly servicesRegistry: ServicesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService)\n private readonly executionContextCreator: ExecutionContextCreatorBackendService,\n @inject(SAAS_SERVICE_TYPES.BatchesCronjobsExecutorService)\n private readonly batchExecutor: BatchesCronjobsExecutor_BackendService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly adapter: QueueAdapter,\n @inject(SAAS_SERVICE_TYPES.JobPayloadStorageService)\n private readonly payloadStorage: JobPayloadStorageBackendService,\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n ) {\n this.logDebug = this.logger.debugByType('JobExecutorBackendService');\n this.logger.setDebugTypeLogging('JobExecutorBackendService', false);\n this.workerId = process.env.K8S_POD_NAME || os.hostname();\n }\n\n /**\n * Execute a job and return result.\n */\n public async execute(job: JobPayload): Promise<JobResult> {\n const startedAt = new Date();\n\n try {\n // Resolve input data - check if stored externally first\n let inputData: unknown;\n if (job.inputPayloadStorageId) {\n // Retrieve from external storage\n inputData = await this.payloadStorage.retrieve(job.inputPayloadStorageId);\n this.logDebug('Retrieved external payload', {\n jobId: job.jobId,\n storageId: job.inputPayloadStorageId,\n });\n } else if (job.inputDataJson) {\n inputData = JSON.parse(job.inputDataJson);\n }\n\n // Execute based on job type\n let result: any;\n\n switch (job.jobType) {\n case JobType.RESOURCE_OPERATION:\n result = await this.executeResourceOperation(job, inputData);\n break;\n case JobType.CUSTOM_BATCH:\n result = await this.executeCustomBatch(job, inputData);\n break;\n case JobType.SCHEDULED_CRON:\n result = await this.executeScheduledCron(job, inputData);\n break;\n default:\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_EXECUTION_FAILED,\n context: { jobType: job.jobType, message: 'Unknown job type' },\n }\n );\n }\n\n // Build success result\n const jobResult: JobResult = {\n jobId: job.jobId,\n status: JobStatus.COMPLETED,\n resultJson: result !== undefined ? JSON.stringify(result) : undefined,\n startedAt,\n completedAt: new Date(),\n durationMs: Date.now() - startedAt.getTime(),\n };\n\n return jobResult;\n\n } catch (error) {\n // Convert to WildoError\n const wildoError = isWildoError(error)\n ? error\n : this.errorBuilder.buildFromStandardError(error as Error);\n\n const jobResult: JobResult = {\n jobId: job.jobId,\n status: JobStatus.FAILED,\n error: wildoError,\n startedAt,\n completedAt: new Date(),\n durationMs: Date.now() - startedAt.getTime(),\n };\n\n return jobResult;\n }\n }\n\n /**\n * Execute resource operation with reconstructed execution context.\n */\n private async executeResourceOperation(job: JobPayload, inputData: unknown): Promise<any> {\n if (!job.executionContextJson || !job.operationPathJson) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_EXECUTION_CONTEXT_INVALID,\n context: { message: 'Resource operation requires executionContextJson and operationPathJson' },\n }\n );\n }\n\n // Reconstruct execution context from serialized data\n const executionContext = await this.executionContextCreator.reconstructFromSerializedData(\n job.executionContextJson,\n job.operationPathJson\n );\n const operationPath = ResourceSerializationUtils.deserializeOperationPath(job.operationPathJson);\n\n // Execute by the serialized operation path and preserve the enqueue-time\n // target id. Context-addressed routes are resolved and authorized before\n // enqueueing; worker replay must not re-derive identity from context.\n return this.servicesRegistry.doByOperationPath(operationPath, executionContext, job.inputId, inputData, {\n isWorkerExecution: true,\n ...(job.inputId ? { contextAddressedOperationAuthorizationId: job.inputId } : {}),\n });\n }\n\n /**\n * Execute custom batch job.\n */\n private async executeCustomBatch(job: JobPayload, inputData: unknown): Promise<any> {\n if (!job.batchRef) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_BATCH_REF_NOT_FOUND,\n context: { message: 'Custom batch job requires batchRef' },\n }\n );\n }\n\n // Custom batch executor creates its own internal context\n return this.batchExecutor.executeCustomBatch(job.batchRef, inputData, new Map());\n }\n\n /**\n * Execute scheduled cron job (after JWT verification in consumer).\n */\n private async executeScheduledCron(job: JobPayload, inputData: unknown): Promise<any> {\n // Scheduled jobs can be either resource-oriented or custom batches\n if (job.operationPathKey) {\n // Resource-oriented scheduled job\n // operationPathKey is in format: \"resource | operation | variantType | variant | isBulk:false\"\n const operationPath = ResourcesConfig_OperationPathUtils.parseOperationPathKey(job.operationPathKey);\n return this.batchExecutor.executeBatchFromResource(operationPath, inputData);\n } else if (job.batchRef) {\n // Custom batch\n return this.batchExecutor.executeCustomBatch(job.batchRef, inputData, new Map());\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.JOB_EXECUTION_FAILED,\n context: { message: 'Scheduled job has neither operationPathKey nor batchRef' },\n }\n );\n }\n\n /**\n * Get worker ID for this executor.\n */\n public getWorkerId(): string {\n return this.workerId;\n }\n}\n"]}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { LoggerService } from '../monitoring/logger/services/logger.service';
|
|
8
8
|
import { AppConfigurationService } from '../config/services/app-configuration.backend.service';
|
|
9
|
-
import {
|
|
9
|
+
import type { QueueAdapter } from './adapters/queue-adapter.backend.interface';
|
|
10
10
|
import { QueueMetrics, QueueHealthSummary, QueueAlertThreshold } from '@wildo-ai/saas-models';
|
|
11
11
|
/**
|
|
12
12
|
* Alert callback type for queue monitoring.
|
|
@@ -15,13 +15,13 @@ export type QueueAlertCallback = (alertType: string, queueName: string, details:
|
|
|
15
15
|
export declare class QueueMonitoringBackendService {
|
|
16
16
|
private readonly logger;
|
|
17
17
|
private readonly configService;
|
|
18
|
-
private readonly
|
|
18
|
+
private readonly queueAdapter;
|
|
19
19
|
protected logDebug: (message: string, context?: Record<string, unknown>) => void;
|
|
20
20
|
private alertCallbacks;
|
|
21
21
|
private alertThresholds;
|
|
22
22
|
private monitoringInterval;
|
|
23
23
|
private isMonitoring;
|
|
24
|
-
constructor(logger: LoggerService, configService: AppConfigurationService,
|
|
24
|
+
constructor(logger: LoggerService, configService: AppConfigurationService, queueAdapter: QueueAdapter);
|
|
25
25
|
/**
|
|
26
26
|
* Start monitoring queues at the specified interval.
|
|
27
27
|
*/
|
|
@@ -48,7 +48,11 @@ export declare class QueueMonitoringBackendService {
|
|
|
48
48
|
*/
|
|
49
49
|
getHealthSummary(): Promise<QueueHealthSummary>;
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
51
|
+
* Whether the queue substrate this runtime uses is connected.
|
|
52
|
+
*
|
|
53
|
+
* Named `isRabbitMQHealthy` for its callers' sake and answered by whichever adapter is bound
|
|
54
|
+
* (#502) — an in-memory queue reports connected once `connect()` has run, which is the honest
|
|
55
|
+
* answer to "can this runtime enqueue work" regardless of what is behind it.
|
|
52
56
|
*/
|
|
53
57
|
isRabbitMQHealthy(): Promise<boolean>;
|
|
54
58
|
/**
|