@wildo-ai/saas-backend-lib 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +199 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +27 -6
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +47 -4
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +96 -29
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +9 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +49 -0
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +171 -18
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +23 -3
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +20 -0
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +529 -41
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
- package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +48 -7
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
- package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +225 -13
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +340 -62
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +244 -7
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +386 -5
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +6 -2
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +31 -9
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +57 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +31 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +142 -46
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
- package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
- package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
- package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts +33 -0
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +39 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
- package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js +129 -8
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
- package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +59 -2
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +52 -17
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
- package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
- package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +292 -7
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +533 -45
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +21 -13
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +39 -15
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
- package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
- package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
- package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +53 -2
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.js +127 -3
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
- package/dist/esm/files/services/files.backend.service.d.ts +68 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +175 -5
- package/dist/esm/files/services/files.backend.service.js.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
- package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
- package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +196 -40
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
- package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
- package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +28 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +204 -18
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
- package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +8 -4
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
- package/dist/esm/index.d.ts +11 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +31 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +78 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +17 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +19 -3
- package/dist/esm/inject/models/service-types.js.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.js +20 -0
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +56 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.js +107 -11
- package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +22 -0
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
- package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
- package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
- package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
- package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
- package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +99 -13
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +422 -66
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
- package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +46 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +16 -6
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +12 -12
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
- package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.js +1 -4
- package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.js +1 -4
- package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
- package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
- package/dist/esm/queue/queue.backend.service.d.ts +3 -3
- package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue.backend.service.js +26 -4
- package/dist/esm/queue/queue.backend.service.js.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts +9 -0
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +32 -8
- package/dist/esm/requests/service/websocket.service.js.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +14 -2
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
- package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
- package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +90 -6
- package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
- package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
- package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts +19 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.js +261 -77
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +68 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +17 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +49 -17
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +74 -8
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +175 -19
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +21 -3
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +26 -16
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
- package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -9
|
@@ -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":"AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EAAE,iCAAiC,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,8EAA8E,CAAC;AACnL,OAAO,EAAE,kCAAkC,EAAE,gCAAgC,EAAE,MAAM,+DAA+D,CAAC;AAGrJ,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,EAGL,SAAS,EAET,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EAEtB,SAAS,EACT,2BAA2B,EAC3B,aAAa,GAEd,MAAM,uBAAuB,CAAC;AAqB/B,MAAM,uBAAuB,GAAsB;IACjD,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,oBAAoB;CAClC,CAAC;AAGK,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IASjB;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAxBT,QAAQ,CAA+D;IACzE,cAAc,GAAkB,IAAI,CAAC;IAC5B,cAAc,CAAiB;IACxC,WAAW,GAAG,KAAK,CAAC;IACpB,eAAe,GAAa,EAAE,CAAC;IAEvC,YAEmB,gBAAyC,EAEzC,OAAqB,EAErB,WAAsC,EAEtC,iBAAkD,EAElD,kBAAuD,EAEvD,eAAoD,EAEpD,wBAAgE,EAEhE,MAAqB,EAErB,YAAwC;QAhBxC,qBAAgB,GAAhB,gBAAgB,CAAyB;QAEzC,YAAO,GAAP,OAAO,CAAc;QAErB,gBAAW,GAAX,WAAW,CAA2B;QAEtC,sBAAiB,GAAjB,iBAAiB,CAAiC;QAElD,uBAAkB,GAAlB,kBAAkB,CAAqC;QAEvD,oBAAe,GAAf,eAAe,CAAqC;QAEpD,6BAAwB,GAAxB,wBAAwB,CAAwC;QAEhE,WAAM,GAAN,MAAM,CAAe;QAErB,iBAAY,GAAZ,YAAY,CAA4B;QAEzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACpE,0EAA0E;QAC1E,IAAI,CAAC,cAAc,GAAG;YACpB,QAAQ,EAAE,MAAM,EAAE;YAClB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;YACvB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAY,aAAa;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,SAA4B,EAAE;QACjD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,EAAE,GAAG,uBAAuB,EAAE,GAAG,MAAM,EAAE,CAAC;QAE/D,sBAAsB;QACtB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAE7B,uEAAuE;QACvE,MAAM,sBAAsB,GAAG;YAC7B,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE;YAC9C,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE;SAC3D,CAAC;QAEF,KAAK,MAAM,WAAW,IAAI,sBAAsB,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAC/C,IAAI,CAAC,aAAa,EAClB,WAAW,CAAC,QAAQ,EACpB,WAAW,CAAC,OAAO,CACpB,CAAC;YAEF,uDAAuD;YACvD,MAAM,OAAO,GAAmB,KAAK,EAAE,GAAmB,EAAE,OAAgB,EAAE,EAAE;gBAC9E,8FAA8F;gBAC9F,kFAAkF;gBAClF,MAAM,gCAAgC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YAC/F,CAAC,CAAC;YAEF,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAErC,IAAI,CAAC,QAAQ,CAAC,8BAA8B,EAAE;gBAC5C,SAAS;gBACT,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;aACvC,CAAC,CAAC;QACL,CAAC;QAED,mFAAmF;QACnF,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAE5F,MAAM,gBAAgB,GAAmB,KAAK,EAAE,GAAmB,EAAE,OAAgB,EAAE,EAAE;YACvF,wFAAwF;YACxF,MAAM,gCAAgC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACxG,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE9C,IAAI,CAAC,QAAQ,CAAC,wCAAwC,EAAE;YACtD,SAAS,EAAE,kBAAkB;YAC7B,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;YACpC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;YACtC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;YACpC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,GAAmB,EACnB,OAAgB,EAChB,MAAyB;QAEzB,IAAI,GAAe,CAAC;QAEpB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;gBAC/C,GAAG,2BAA2B,CAAC,UAAU,CAAC;aAC3C,CAAC,CAAC;YACH,kCAAkC;YAClC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,gGAAgG;QAChG,kGAAkG;QAClG,iGAAiG;QACjG,kGAAkG;QAClG,kCAAkC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAE5D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;QAElD,4CAA4C;QAC5C,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QAElC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAElF,4EAA4E;YAC5E,mEAAmE;YACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEnD,kFAAkF;YAClF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;gBACvC,oDAAoD;gBACpD,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,oCAAoC;YACpC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEtD,8BAA8B;YAC9B,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACnE,CAAC;YAED,iEAAiE;YACjE,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBACrC,MAAM;gBACN,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;gBACtC,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACvB,CAAC,CAAC;YAEH,sBAAsB;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjB,IAAI,CAAC,QAAQ,CAAC,4BAA4B,EAAE;gBAC1C,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gFAAgF;YAChF,6EAA6E;YAC7E,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACzE,CAAC;gBAAS,CAAC;YACT,oDAAoD;YACpD,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,gBAAgB,CAC5B,GAAe,EACf,MAAiB,EACjB,GAAmB,EACnB,OAAgB,EAChB,MAAyB,EACzB,SAAiB;QAEjB,MAAM,YAAY,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC;QACvG,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;QAElD,iDAAiD;QACjD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW;YACpC,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QAExE,IAAI,WAAW,EAAE,CAAC;YAChB,4EAA4E;YAC5E,2EAA2E;YAC3E,sEAAsE;YACtE,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC;YAChC,MAAM,WAAW,GAAqB;gBACpC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,oBAAoB,CAAC,WAAW;gBACxG,UAAU,EAAE,UAAU;gBACtB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,oBAAoB,CAAC,WAAW;gBACxG,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,UAAU,IAAI,oBAAoB,CAAC,UAAU;gBACpG,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,oBAAoB,CAAC,SAAS;aAC5F,CAAC;YAEF,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAEtE,kDAAkD;YAClD,MAAM,QAAQ,GAAe;gBAC3B,GAAG,GAAG;gBACN,UAAU,EAAE,YAAY,GAAG,CAAC;aAC7B,CAAC;YAEF,4EAA4E;YAC5E,0EAA0E;YAC1E,+CAA+C;YAC/C,MAAM,eAAe,GAAG,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAC1F,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACxE,OAAO;oBACP,aAAa;iBACd,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,wEAAwE;gBACxE,uDAAuD;gBACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;oBACzE,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,GAAG,2BAA2B,CAAC,aAAa,CAAC;iBAC9C,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,8EAA8E;YAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjB,gFAAgF;YAChF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,CAAC;gBAAC,OAAO,aAAa,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC,yCAAyC,EAAE;wBACvD,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,KAAK,EAAE,mBAAmB,CAAC,aAAa,CAAC;qBAC1C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE;gBAC5D,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,YAAY,GAAG,CAAC;gBAC5B,UAAU;gBACV,OAAO,EAAE,KAAK;gBACd,yEAAyE;gBACzE,0EAA0E;gBAC1E,wEAAwE;gBACxE,4CAA4C;gBAC5C,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACzE,CAAC,CAAC;QAEL,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEzD,0BAA0B;YAC1B,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACnE,CAAC;YAED,qEAAqE;YACrE,2EAA2E;YAC3E,2DAA2D;YAC3D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAEhC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;gBAC1C,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,YAAY;gBACxB,UAAU;gBACV,gEAAgE;gBAChE,uEAAuE;gBACvE,uEAAuE;gBACvE,kCAAkC;gBAClC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,QAA4C,EAC5C,YAAoB,EACpB,UAAkB;QAElB,0BAA0B;QAC1B,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6EAA6E;QAC7E,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,sBAAsB,CAAC,KAAK,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,cAAc,CAC1B,GAAe,EACf,KAAc,EACd,GAAmB,EACnB,OAAgB,EAChB,MAAyB,EACzB,SAAiB;QAEjB,MAAM,YAAY,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC;QACvG,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;QAElD,0EAA0E;QAC1E,4EAA4E;QAC5E,4EAA4E;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,cAAc,GAA4B;YAC9C,SAAS,EAAE,SAAS,CAAC,IAAI;YACzB,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC;QAEF,2BAA2B;QAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QAE5F,IAAI,WAAW,EAAE,CAAC;YAChB,sEAAsE;YACtE,wDAAwD;YACxD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC;YAChC,MAAM,WAAW,GAAqB;gBACpC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,oBAAoB,CAAC,WAAW;gBACxG,UAAU,EAAE,UAAU;gBACtB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,oBAAoB,CAAC,WAAW;gBACxG,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,UAAU,IAAI,oBAAoB,CAAC,UAAU;gBACpG,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,oBAAoB,CAAC,SAAS;aAC5F,CAAC;YAEF,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAEtE,kDAAkD;YAClD,MAAM,QAAQ,GAAe;gBAC3B,GAAG,GAAG;gBACN,UAAU,EAAE,YAAY,GAAG,CAAC;aAC7B,CAAC;YAEF,qEAAqE;YACrE,MAAM,eAAe,GAAG,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAC1F,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACxE,OAAO;oBACP,aAAa;iBACd,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;oBACzE,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,GAAG,2BAA2B,CAAC,aAAa,CAAC;iBAC9C,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,8EAA8E;YAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE;gBAC5D,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,YAAY,GAAG,CAAC;gBAC5B,UAAU;gBACV,OAAO,EAAE,KAAK;gBACd,GAAG,cAAc;aAClB,CAAC,CAAC;QAEL,CAAC;aAAM,CAAC;YACN,8CAA8C;YAE9C,wBAAwB;YACxB,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEzD,0BAA0B;YAC1B,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAc;oBAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,KAAK,EAAE;wBACL,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ;wBAC1C,QAAQ,EAAE,aAAa,CAAC,IAAI;wBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,OAAO,EAAE,SAAS,CAAC,OAAO;wBAC1B,cAAc,EAAE,EAAE;wBAClB,sBAAsB,EAAE,2BAA2B,CAAC,QAAQ;wBAC5D,UAAU,EAAE,GAAG;qBAChB;oBACD,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;oBAC9B,WAAW,EAAE,IAAI,IAAI,EAAE;oBACvB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACnC,CAAC;gBAEF,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YACtE,CAAC;YAED,qEAAqE;YACrE,2EAA2E;YAC3E,2DAA2D;YAC3D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAEhC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;gBAC1C,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,YAAY;gBACxB,UAAU;gBACV,GAAG,cAAc;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAc,EAAE,YAAoB,EAAE,UAAkB;QAC1E,0BAA0B;QAC1B,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,qBAAqB,CAAC;YAC7C,6EAA6E;YAC7E,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,sBAAsB,CAAC,KAAK,CAAC;QAC7E,CAAC;QAED,8BAA8B;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAc;QAOjC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACf,OAAQ,KAAa,CAAC,IAAI,KAAK,QAAQ,CACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAAc;QAMrC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;gBACpD,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,OAAO,EAAE;gBACP,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC;aACpC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB,CAClC,GAAmB,EACnB,OAAgB,EAChB,MAAyB;QAEzB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAErC,4CAA4C;QAC5C,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QAElC,IAAI,CAAC;YACH,iDAAiD;YACjD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAExE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBAC3C,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;gBAC3B,mBAAmB,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB;gBAC3C,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,sBAAsB;YACtB,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAElF,4EAA4E;YAC5E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEnD,kFAAkF;YAClF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;gBACvC,6BAA6B;gBAC7B,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAM,CAAC,CAAC;gBAElE,oEAAoE;gBACpE,wEAAwE;gBACxE,gBAAgB;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;oBAClD,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9D,CAAC,CAAC;gBAEH,yEAAyE;gBACzE,6DAA6D;gBAC7D,+DAA+D;gBAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,oCAAoC;YACpC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEtD,sBAAsB;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;gBACvD,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qEAAqE;YACrE,6EAA6E;YAC7E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;gBAClD,GAAG,2BAA2B,CAAC,KAAK,CAAC;aACtC,CAAC,CAAC;YAEH,yEAAyE;YACzE,6DAA6D;YAC7D,+DAA+D;YAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAElC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF,CAAA;AAxnBY,yBAAyB;IADrC,UAAU,EAAE;IASR,WAAA,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAE3C,WAAA,MAAM,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAA;IAEjD,WAAA,MAAM,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAA;IAEpD,WAAA,MAAM,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAA;IAEnD,WAAA,MAAM,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAA;IAEvD,WAAA,MAAM,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAA;IAEvD,WAAA,MAAM,CAAC,kBAAkB,CAAC,+BAA+B,CAAC,CAAA;IAE1D,WAAA,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAEjC,WAAA,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;qCAfZ,uBAAuB,UAI5B,yBAAyB;QAEnB,+BAA+B;QAE9B,mCAAmC;QAEtC,mCAAmC;QAE1B,sCAAsC;QAExD,aAAa;QAEP,0BAA0B;GAzBhD,yBAAyB,CAwnBrC","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
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-monitoring.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/queue-monitoring.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAE7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"queue-monitoring.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/queue-monitoring.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAE7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAElB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,qBACa,6BAA6B;IAStC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAZ/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,CAA4B;IAClD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,YAAY,CAAS;gBAIV,MAAM,EAAE,aAAa,EAErB,aAAa,EAAE,uBAAuB,EAEtC,YAAY,EAAE,YAAY;IAM7C;;OAEG;IACH,eAAe,CAAC,UAAU,GAAE,MAAc,GAAG,IAAI;IA2BjD;;OAEG;IACH,cAAc,IAAI,IAAI;IAStB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAI3C;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,GAAG,IAAI;IAK1E;;;OAGG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA4C/D;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAsErD;;;;;;OAMG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;YACW,cAAc;IAmB5B;;OAEG;YACW,YAAY;IAkB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAgB3B"}
|
|
@@ -21,21 +21,20 @@ import { SAAS_SERVICE_TYPES } from '../inject/models/service-types.js';
|
|
|
21
21
|
import { LoggerService } from '../monitoring/logger/services/logger.service.js';
|
|
22
22
|
import { describeCaughtError, projectCaughtErrorLogFields } from '../errors/utils/error-log-level-classification.backend.utils.js';
|
|
23
23
|
import { AppConfigurationService } from '../config/services/app-configuration.backend.service.js';
|
|
24
|
-
import { RabbitMQAdapterBackendService } from './adapters/rabbitmq-adapter.backend.service.js';
|
|
25
24
|
import { QueueHealthStatus, } from '@wildo-ai/saas-models';
|
|
26
25
|
let QueueMonitoringBackendService = class QueueMonitoringBackendService {
|
|
27
26
|
logger;
|
|
28
27
|
configService;
|
|
29
|
-
|
|
28
|
+
queueAdapter;
|
|
30
29
|
logDebug;
|
|
31
30
|
alertCallbacks = [];
|
|
32
31
|
alertThresholds = new Map();
|
|
33
32
|
monitoringInterval = null;
|
|
34
33
|
isMonitoring = false;
|
|
35
|
-
constructor(logger, configService,
|
|
34
|
+
constructor(logger, configService, queueAdapter) {
|
|
36
35
|
this.logger = logger;
|
|
37
36
|
this.configService = configService;
|
|
38
|
-
this.
|
|
37
|
+
this.queueAdapter = queueAdapter;
|
|
39
38
|
this.logDebug = this.logger.debugByType('QueueMonitoringBackendService');
|
|
40
39
|
this.logger.setDebugTypeLogging('QueueMonitoringBackendService', false);
|
|
41
40
|
}
|
|
@@ -95,20 +94,26 @@ let QueueMonitoringBackendService = class QueueMonitoringBackendService {
|
|
|
95
94
|
* Also checks the corresponding dead letter queue if it exists.
|
|
96
95
|
*/
|
|
97
96
|
async getQueueMetrics(queueName) {
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
/*
|
|
98
|
+
* Asks the ADAPTER how deep the queue is, rather than reaching through it for an amqplib
|
|
99
|
+
* channel (#502). Behaviour is unchanged for RabbitMQ — `null` here is what a null channel
|
|
100
|
+
* produced before, and it still yields empty metrics — but the question is now one every
|
|
101
|
+
* adapter can answer about itself, so a broker-free runtime reports real numbers instead of
|
|
102
|
+
* being structurally unable to be monitored.
|
|
103
|
+
*
|
|
104
|
+
* Dead-letter depth stays unreported: on RabbitMQ `checkQueue` CLOSES the channel when the
|
|
105
|
+
* queue does not exist, and only specific DLQs exist (`operations.deadletter`, not the
|
|
106
|
+
* per-variant `operations.priority.deadletter`). That needs an explicit queue-name list, and it
|
|
107
|
+
* is unrelated to this change.
|
|
108
|
+
*/
|
|
109
|
+
const pendingCount = await this.queueAdapter.getQueueDepth(queueName);
|
|
110
|
+
if (pendingCount === null) {
|
|
100
111
|
return this.createEmptyMetrics(queueName);
|
|
101
112
|
}
|
|
102
113
|
try {
|
|
103
|
-
// Get queue info from RabbitMQ
|
|
104
|
-
const queueInfo = await channel.checkQueue(queueName);
|
|
105
|
-
// Note: Dead letter queue check is skipped because channel.checkQueue() closes the channel
|
|
106
|
-
// if the queue doesn't exist. Only specific DLQ queues exist (operations.deadletter, etc.),
|
|
107
|
-
// not per-variant (operations.priority.deadletter). DLQ monitoring should be done via
|
|
108
|
-
// explicit queue name list instead.
|
|
109
114
|
return {
|
|
110
115
|
queueName,
|
|
111
|
-
pendingCount
|
|
116
|
+
pendingCount,
|
|
112
117
|
processingCount: 0, // Would need consumer tracking
|
|
113
118
|
deadLetterCount: 0, // Skipped - see note above
|
|
114
119
|
publishRatePerMinute: 0, // Would need historical tracking
|
|
@@ -195,10 +200,14 @@ let QueueMonitoringBackendService = class QueueMonitoringBackendService {
|
|
|
195
200
|
};
|
|
196
201
|
}
|
|
197
202
|
/**
|
|
198
|
-
*
|
|
203
|
+
* Whether the queue substrate this runtime uses is connected.
|
|
204
|
+
*
|
|
205
|
+
* Named `isRabbitMQHealthy` for its callers' sake and answered by whichever adapter is bound
|
|
206
|
+
* (#502) — an in-memory queue reports connected once `connect()` has run, which is the honest
|
|
207
|
+
* answer to "can this runtime enqueue work" regardless of what is behind it.
|
|
199
208
|
*/
|
|
200
209
|
async isRabbitMQHealthy() {
|
|
201
|
-
return this.
|
|
210
|
+
return this.queueAdapter.isConnected();
|
|
202
211
|
}
|
|
203
212
|
/**
|
|
204
213
|
* Evaluate queue health based on thresholds.
|
|
@@ -291,8 +300,7 @@ QueueMonitoringBackendService = __decorate([
|
|
|
291
300
|
__param(1, inject(SAAS_SERVICE_TYPES.AppConfigService)),
|
|
292
301
|
__param(2, inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)),
|
|
293
302
|
__metadata("design:paramtypes", [LoggerService,
|
|
294
|
-
AppConfigurationService,
|
|
295
|
-
RabbitMQAdapterBackendService])
|
|
303
|
+
AppConfigurationService, Object])
|
|
296
304
|
], QueueMonitoringBackendService);
|
|
297
305
|
export { QueueMonitoringBackendService };
|
|
298
306
|
//# sourceMappingURL=queue-monitoring.backend.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-monitoring.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/queue-monitoring.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Queue Monitoring Backend Service\n *\n * Provides metrics, health checks, and alerting for the queue system.\n * Integrates with RabbitMQ for queue statistics and the job tracking system.\n */\n\nimport { injectable, inject } from 'inversify';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { RabbitMQAdapterBackendService } from './adapters/rabbitmq-adapter.backend.service';\nimport {\n QueueMetrics,\n QueueHealthSummary,\n QueueHealthStatus,\n QueueAlertThreshold,\n} from '@wildo-ai/saas-models';\n\n/**\n * Alert callback type for queue monitoring.\n */\nexport type QueueAlertCallback = (\n alertType: string,\n queueName: string,\n details: Record<string, unknown>\n) => void | Promise<void>;\n\n@injectable()\nexport class QueueMonitoringBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private alertCallbacks: QueueAlertCallback[] = [];\n private alertThresholds: Map<string, QueueAlertThreshold> = new Map();\n private monitoringInterval: NodeJS.Timeout | null = null;\n private isMonitoring = false;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly configService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly rabbitMQAdapter: RabbitMQAdapterBackendService,\n ) {\n this.logDebug = this.logger.debugByType('QueueMonitoringBackendService');\n this.logger.setDebugTypeLogging('QueueMonitoringBackendService', false);\n }\n\n /**\n * Start monitoring queues at the specified interval.\n */\n startMonitoring(intervalMs: number = 30000): void {\n if (this.isMonitoring) {\n this.logger.warn('Queue monitoring is already running');\n return;\n }\n\n this.isMonitoring = true;\n this.logDebug('Starting queue monitoring', { intervalMs });\n\n this.monitoringInterval = setInterval(async () => {\n try {\n await this.checkAllQueues();\n } catch (error) {\n this.logger.error('Error during queue monitoring check', {\n ...projectCaughtErrorLogFields(error),\n });\n }\n }, intervalMs);\n\n // Initial check\n this.checkAllQueues().catch((error) => {\n this.logger.error('Error during initial queue monitoring check', {\n ...projectCaughtErrorLogFields(error),\n });\n });\n }\n\n /**\n * Stop monitoring queues.\n */\n stopMonitoring(): void {\n if (this.monitoringInterval) {\n clearInterval(this.monitoringInterval);\n this.monitoringInterval = null;\n }\n this.isMonitoring = false;\n this.logDebug('Queue monitoring stopped');\n }\n\n /**\n * Register an alert callback.\n */\n onAlert(callback: QueueAlertCallback): void {\n this.alertCallbacks.push(callback);\n }\n\n /**\n * Set alert thresholds for a queue.\n */\n setAlertThreshold(queueName: string, threshold: QueueAlertThreshold): void {\n this.alertThresholds.set(queueName, threshold);\n this.logDebug('Alert threshold set', { queueName, threshold });\n }\n\n /**\n * Get metrics for a specific queue.\n * Also checks the corresponding dead letter queue if it exists.\n */\n async getQueueMetrics(queueName: string): Promise<QueueMetrics> {\n const channel = this.rabbitMQAdapter.getChannel();\n\n if (!channel) {\n return this.createEmptyMetrics(queueName);\n }\n\n try {\n // Get queue info from RabbitMQ\n const queueInfo = await channel.checkQueue(queueName);\n\n // Note: Dead letter queue check is skipped because channel.checkQueue() closes the channel\n // if the queue doesn't exist. Only specific DLQ queues exist (operations.deadletter, etc.),\n // not per-variant (operations.priority.deadletter). DLQ monitoring should be done via\n // explicit queue name list instead.\n\n return {\n queueName,\n pendingCount: queueInfo.messageCount,\n processingCount: 0, // Would need consumer tracking\n deadLetterCount: 0, // Skipped - see note above\n publishRatePerMinute: 0, // Would need historical tracking\n consumeRatePerMinute: 0,\n avgProcessingTimeMs: 0,\n p95ProcessingTimeMs: 0,\n p99ProcessingTimeMs: 0,\n errorRate: 0,\n retryRate: 0,\n collectedAt: new Date(),\n };\n } catch (error) {\n // Queue might not exist yet\n this.logDebug('Could not get queue metrics', {\n queueName,\n error: describeCaughtError(error),\n });\n return this.createEmptyMetrics(queueName);\n }\n }\n\n /**\n * Get health summary for all monitored queues.\n */\n async getHealthSummary(): Promise<QueueHealthSummary> {\n const appId = this.configService.applicationId;\n // Mono-env: queue names are wildo.queue.{appId}.{category}[.{variant}]\n const queues = [\n `wildo.queue.${appId}.operations`,\n `wildo.queue.${appId}.operations.priority`,\n `wildo.queue.${appId}.scheduled`,\n `wildo.queue.${appId}.callbacks`,\n ];\n\n let overallStatus: QueueHealthStatus = QueueHealthStatus.HEALTHY;\n let healthyQueues = 0;\n let degradedQueues = 0;\n let unhealthyQueues = 0;\n const activeAlerts: Array<{\n queueName: string;\n alertType: string;\n value: number;\n threshold: number;\n triggeredAt: Date;\n }> = [];\n\n for (const queueName of queues) {\n const metrics = await this.getQueueMetrics(queueName);\n\n // Check thresholds\n const threshold = this.alertThresholds.get(queueName);\n if (threshold) {\n const status = this.evaluateQueueHealth(metrics, threshold);\n\n if (status === QueueHealthStatus.UNHEALTHY) {\n overallStatus = QueueHealthStatus.UNHEALTHY;\n unhealthyQueues++;\n activeAlerts.push({\n queueName,\n alertType: 'pending_count_exceeded',\n value: metrics.pendingCount,\n threshold: threshold.pendingCountThreshold ?? 0,\n triggeredAt: new Date(),\n });\n } else if (status === QueueHealthStatus.DEGRADED) {\n if (overallStatus === QueueHealthStatus.HEALTHY) {\n overallStatus = QueueHealthStatus.DEGRADED;\n }\n degradedQueues++;\n activeAlerts.push({\n queueName,\n alertType: 'queue_degraded',\n value: metrics.pendingCount,\n threshold: threshold.pendingCountThreshold ?? 0,\n triggeredAt: new Date(),\n });\n } else {\n healthyQueues++;\n }\n } else {\n healthyQueues++;\n }\n }\n\n return {\n status: overallStatus,\n healthyQueues,\n degradedQueues,\n unhealthyQueues,\n activeAlerts,\n checkedAt: new Date(),\n };\n }\n\n /**\n * Check if RabbitMQ connection is healthy.\n */\n async isRabbitMQHealthy(): Promise<boolean> {\n return this.rabbitMQAdapter.isConnected();\n }\n\n /**\n * Evaluate queue health based on thresholds.\n */\n private evaluateQueueHealth(\n metrics: QueueMetrics,\n threshold: QueueAlertThreshold\n ): QueueHealthStatus {\n // Check pending count threshold\n if (threshold.pendingCountThreshold !== undefined) {\n if (metrics.pendingCount >= threshold.pendingCountThreshold * 2) {\n return QueueHealthStatus.UNHEALTHY;\n }\n if (metrics.pendingCount >= threshold.pendingCountThreshold) {\n return QueueHealthStatus.DEGRADED;\n }\n }\n\n // Check dead letter threshold\n if (threshold.deadLetterThreshold !== undefined) {\n if (metrics.deadLetterCount >= threshold.deadLetterThreshold) {\n return QueueHealthStatus.UNHEALTHY;\n }\n }\n\n // Check error rate threshold\n if (threshold.errorRateThreshold !== undefined) {\n if (metrics.errorRate >= threshold.errorRateThreshold) {\n return QueueHealthStatus.DEGRADED;\n }\n }\n\n // Check latency threshold\n if (threshold.latencyThresholdMs !== undefined) {\n if (metrics.p95ProcessingTimeMs >= threshold.latencyThresholdMs) {\n return QueueHealthStatus.DEGRADED;\n }\n }\n\n return QueueHealthStatus.HEALTHY;\n }\n\n /**\n * Check all queues and trigger alerts if needed.\n */\n private async checkAllQueues(): Promise<void> {\n const summary = await this.getHealthSummary();\n\n if (summary.status !== QueueHealthStatus.HEALTHY) {\n for (const alert of summary.activeAlerts) {\n await this.triggerAlert(\n summary.status === QueueHealthStatus.UNHEALTHY ? 'critical' : 'warning',\n alert.queueName,\n {\n alertType: alert.alertType,\n value: alert.value,\n threshold: alert.threshold,\n summary,\n }\n );\n }\n }\n }\n\n /**\n * Trigger an alert to all registered callbacks.\n */\n private async triggerAlert(\n alertType: string,\n queueName: string,\n details: Record<string, unknown>\n ): Promise<void> {\n this.logger.warn('Queue alert triggered', { alertType, queueName, details });\n\n for (const callback of this.alertCallbacks) {\n try {\n await callback(alertType, queueName, details);\n } catch (error) {\n this.logger.error('Error in alert callback', {\n ...projectCaughtErrorLogFields(error),\n });\n }\n }\n }\n\n /**\n * Create empty metrics for a queue.\n */\n private createEmptyMetrics(queueName: string): QueueMetrics {\n return {\n queueName,\n pendingCount: 0,\n processingCount: 0,\n deadLetterCount: 0,\n publishRatePerMinute: 0,\n consumeRatePerMinute: 0,\n avgProcessingTimeMs: 0,\n p95ProcessingTimeMs: 0,\n p99ProcessingTimeMs: 0,\n errorRate: 0,\n retryRate: 0,\n collectedAt: new Date(),\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"queue-monitoring.backend.service.js","sourceRoot":"","sources":["../../../../src/queue/queue-monitoring.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,8EAA8E,CAAC;AAChJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAE/G,OAAO,EAGL,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAYxB,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IASrB;IAEA;IAEA;IAZT,QAAQ,CAA+D;IACzE,cAAc,GAAyB,EAAE,CAAC;IAC1C,eAAe,GAAqC,IAAI,GAAG,EAAE,CAAC;IAC9D,kBAAkB,GAA0B,IAAI,CAAC;IACjD,YAAY,GAAG,KAAK,CAAC;IAE7B,YAEmB,MAAqB,EAErB,aAAsC,EAEtC,YAA0B;QAJ1B,WAAM,GAAN,MAAM,CAAe;QAErB,kBAAa,GAAb,aAAa,CAAyB;QAEtC,iBAAY,GAAZ,YAAY,CAAc;QAE3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,aAAqB,KAAK;QACxC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,2BAA2B,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC/C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;oBACvD,GAAG,2BAA2B,CAAC,KAAK,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,UAAU,CAAC,CAAC;QAEf,gBAAgB;QAChB,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;gBAC/D,GAAG,2BAA2B,CAAC,KAAK,CAAC;aACtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,QAA4B;QAClC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,SAAiB,EAAE,SAA8B;QACjE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC;;;;;;;;;;;WAWG;QACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEtE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC;YACH,OAAO;gBACL,SAAS;gBACT,YAAY;gBACZ,eAAe,EAAE,CAAC,EAAE,+BAA+B;gBACnD,eAAe,EAAE,CAAC,EAAE,2BAA2B;gBAC/C,oBAAoB,EAAE,CAAC,EAAE,iCAAiC;gBAC1D,oBAAoB,EAAE,CAAC;gBACvB,mBAAmB,EAAE,CAAC;gBACtB,mBAAmB,EAAE,CAAC;gBACtB,mBAAmB,EAAE,CAAC;gBACtB,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4BAA4B;YAC5B,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE;gBAC3C,SAAS;gBACT,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QAC/C,uEAAuE;QACvE,MAAM,MAAM,GAAG;YACb,eAAe,KAAK,aAAa;YACjC,eAAe,KAAK,sBAAsB;YAC1C,eAAe,KAAK,YAAY;YAChC,eAAe,KAAK,YAAY;SACjC,CAAC;QAEF,IAAI,aAAa,GAAsB,iBAAiB,CAAC,OAAO,CAAC;QACjE,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,MAAM,YAAY,GAMb,EAAE,CAAC;QAER,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAEtD,mBAAmB;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAE5D,IAAI,MAAM,KAAK,iBAAiB,CAAC,SAAS,EAAE,CAAC;oBAC3C,aAAa,GAAG,iBAAiB,CAAC,SAAS,CAAC;oBAC5C,eAAe,EAAE,CAAC;oBAClB,YAAY,CAAC,IAAI,CAAC;wBAChB,SAAS;wBACT,SAAS,EAAE,wBAAwB;wBACnC,KAAK,EAAE,OAAO,CAAC,YAAY;wBAC3B,SAAS,EAAE,SAAS,CAAC,qBAAqB,IAAI,CAAC;wBAC/C,WAAW,EAAE,IAAI,IAAI,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,MAAM,KAAK,iBAAiB,CAAC,QAAQ,EAAE,CAAC;oBACjD,IAAI,aAAa,KAAK,iBAAiB,CAAC,OAAO,EAAE,CAAC;wBAChD,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC;oBAC7C,CAAC;oBACD,cAAc,EAAE,CAAC;oBACjB,YAAY,CAAC,IAAI,CAAC;wBAChB,SAAS;wBACT,SAAS,EAAE,gBAAgB;wBAC3B,KAAK,EAAE,OAAO,CAAC,YAAY;wBAC3B,SAAS,EAAE,SAAS,CAAC,qBAAqB,IAAI,CAAC;wBAC/C,WAAW,EAAE,IAAI,IAAI,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,aAAa,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,aAAa;YACb,cAAc;YACd,eAAe;YACf,YAAY;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,OAAqB,EACrB,SAA8B;QAE9B,gCAAgC;QAChC,IAAI,SAAS,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAClD,IAAI,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC,qBAAqB,GAAG,CAAC,EAAE,CAAC;gBAChE,OAAO,iBAAiB,CAAC,SAAS,CAAC;YACrC,CAAC;YACD,IAAI,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC;gBAC5D,OAAO,iBAAiB,CAAC,QAAQ,CAAC;YACpC,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,IAAI,SAAS,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAChD,IAAI,OAAO,CAAC,eAAe,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;gBAC7D,OAAO,iBAAiB,CAAC,SAAS,CAAC;YACrC,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,SAAS,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;gBACtD,OAAO,iBAAiB,CAAC,QAAQ,CAAC;YACpC,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,IAAI,SAAS,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,mBAAmB,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;gBAChE,OAAO,iBAAiB,CAAC,QAAQ,CAAC;YACpC,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,OAAO,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,CAAC,OAAO,EAAE,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,YAAY,CACrB,OAAO,CAAC,MAAM,KAAK,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACvE,KAAK,CAAC,SAAS,EACf;oBACE,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO;iBACR,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,SAAiB,EACjB,SAAiB,EACjB,OAAgC;QAEhC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAE7E,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;oBAC3C,GAAG,2BAA2B,CAAC,KAAK,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,SAAiB;QAC1C,OAAO;YACL,SAAS;YACT,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;YAClB,eAAe,EAAE,CAAC;YAClB,oBAAoB,EAAE,CAAC;YACvB,oBAAoB,EAAE,CAAC;YACvB,mBAAmB,EAAE,CAAC;YACtB,mBAAmB,EAAE,CAAC;YACtB,mBAAmB,EAAE,CAAC;YACtB,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC;IACJ,CAAC;CACF,CAAA;AAvTY,6BAA6B;IADzC,UAAU,EAAE;IASR,WAAA,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAEjC,WAAA,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAE3C,WAAA,MAAM,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAA;qCAHzB,aAAa;QAEN,uBAAuB;GAX9C,6BAA6B,CAuTzC","sourcesContent":["/**\n * Queue Monitoring Backend Service\n *\n * Provides metrics, health checks, and alerting for the queue system.\n * Integrates with RabbitMQ for queue statistics and the job tracking system.\n */\n\nimport { injectable, inject } from 'inversify';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { QueueAdapter } from './adapters/queue-adapter.backend.interface';\nimport {\n QueueMetrics,\n QueueHealthSummary,\n QueueHealthStatus,\n QueueAlertThreshold,\n} from '@wildo-ai/saas-models';\n\n/**\n * Alert callback type for queue monitoring.\n */\nexport type QueueAlertCallback = (\n alertType: string,\n queueName: string,\n details: Record<string, unknown>\n) => void | Promise<void>;\n\n@injectable()\nexport class QueueMonitoringBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private alertCallbacks: QueueAlertCallback[] = [];\n private alertThresholds: Map<string, QueueAlertThreshold> = new Map();\n private monitoringInterval: NodeJS.Timeout | null = null;\n private isMonitoring = false;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly configService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RabbitMQAdapterService)\n private readonly queueAdapter: QueueAdapter,\n ) {\n this.logDebug = this.logger.debugByType('QueueMonitoringBackendService');\n this.logger.setDebugTypeLogging('QueueMonitoringBackendService', false);\n }\n\n /**\n * Start monitoring queues at the specified interval.\n */\n startMonitoring(intervalMs: number = 30000): void {\n if (this.isMonitoring) {\n this.logger.warn('Queue monitoring is already running');\n return;\n }\n\n this.isMonitoring = true;\n this.logDebug('Starting queue monitoring', { intervalMs });\n\n this.monitoringInterval = setInterval(async () => {\n try {\n await this.checkAllQueues();\n } catch (error) {\n this.logger.error('Error during queue monitoring check', {\n ...projectCaughtErrorLogFields(error),\n });\n }\n }, intervalMs);\n\n // Initial check\n this.checkAllQueues().catch((error) => {\n this.logger.error('Error during initial queue monitoring check', {\n ...projectCaughtErrorLogFields(error),\n });\n });\n }\n\n /**\n * Stop monitoring queues.\n */\n stopMonitoring(): void {\n if (this.monitoringInterval) {\n clearInterval(this.monitoringInterval);\n this.monitoringInterval = null;\n }\n this.isMonitoring = false;\n this.logDebug('Queue monitoring stopped');\n }\n\n /**\n * Register an alert callback.\n */\n onAlert(callback: QueueAlertCallback): void {\n this.alertCallbacks.push(callback);\n }\n\n /**\n * Set alert thresholds for a queue.\n */\n setAlertThreshold(queueName: string, threshold: QueueAlertThreshold): void {\n this.alertThresholds.set(queueName, threshold);\n this.logDebug('Alert threshold set', { queueName, threshold });\n }\n\n /**\n * Get metrics for a specific queue.\n * Also checks the corresponding dead letter queue if it exists.\n */\n async getQueueMetrics(queueName: string): Promise<QueueMetrics> {\n /*\n * Asks the ADAPTER how deep the queue is, rather than reaching through it for an amqplib\n * channel (#502). Behaviour is unchanged for RabbitMQ — `null` here is what a null channel\n * produced before, and it still yields empty metrics — but the question is now one every\n * adapter can answer about itself, so a broker-free runtime reports real numbers instead of\n * being structurally unable to be monitored.\n *\n * Dead-letter depth stays unreported: on RabbitMQ `checkQueue` CLOSES the channel when the\n * queue does not exist, and only specific DLQs exist (`operations.deadletter`, not the\n * per-variant `operations.priority.deadletter`). That needs an explicit queue-name list, and it\n * is unrelated to this change.\n */\n const pendingCount = await this.queueAdapter.getQueueDepth(queueName);\n\n if (pendingCount === null) {\n return this.createEmptyMetrics(queueName);\n }\n\n try {\n return {\n queueName,\n pendingCount,\n processingCount: 0, // Would need consumer tracking\n deadLetterCount: 0, // Skipped - see note above\n publishRatePerMinute: 0, // Would need historical tracking\n consumeRatePerMinute: 0,\n avgProcessingTimeMs: 0,\n p95ProcessingTimeMs: 0,\n p99ProcessingTimeMs: 0,\n errorRate: 0,\n retryRate: 0,\n collectedAt: new Date(),\n };\n } catch (error) {\n // Queue might not exist yet\n this.logDebug('Could not get queue metrics', {\n queueName,\n error: describeCaughtError(error),\n });\n return this.createEmptyMetrics(queueName);\n }\n }\n\n /**\n * Get health summary for all monitored queues.\n */\n async getHealthSummary(): Promise<QueueHealthSummary> {\n const appId = this.configService.applicationId;\n // Mono-env: queue names are wildo.queue.{appId}.{category}[.{variant}]\n const queues = [\n `wildo.queue.${appId}.operations`,\n `wildo.queue.${appId}.operations.priority`,\n `wildo.queue.${appId}.scheduled`,\n `wildo.queue.${appId}.callbacks`,\n ];\n\n let overallStatus: QueueHealthStatus = QueueHealthStatus.HEALTHY;\n let healthyQueues = 0;\n let degradedQueues = 0;\n let unhealthyQueues = 0;\n const activeAlerts: Array<{\n queueName: string;\n alertType: string;\n value: number;\n threshold: number;\n triggeredAt: Date;\n }> = [];\n\n for (const queueName of queues) {\n const metrics = await this.getQueueMetrics(queueName);\n\n // Check thresholds\n const threshold = this.alertThresholds.get(queueName);\n if (threshold) {\n const status = this.evaluateQueueHealth(metrics, threshold);\n\n if (status === QueueHealthStatus.UNHEALTHY) {\n overallStatus = QueueHealthStatus.UNHEALTHY;\n unhealthyQueues++;\n activeAlerts.push({\n queueName,\n alertType: 'pending_count_exceeded',\n value: metrics.pendingCount,\n threshold: threshold.pendingCountThreshold ?? 0,\n triggeredAt: new Date(),\n });\n } else if (status === QueueHealthStatus.DEGRADED) {\n if (overallStatus === QueueHealthStatus.HEALTHY) {\n overallStatus = QueueHealthStatus.DEGRADED;\n }\n degradedQueues++;\n activeAlerts.push({\n queueName,\n alertType: 'queue_degraded',\n value: metrics.pendingCount,\n threshold: threshold.pendingCountThreshold ?? 0,\n triggeredAt: new Date(),\n });\n } else {\n healthyQueues++;\n }\n } else {\n healthyQueues++;\n }\n }\n\n return {\n status: overallStatus,\n healthyQueues,\n degradedQueues,\n unhealthyQueues,\n activeAlerts,\n checkedAt: new Date(),\n };\n }\n\n /**\n * Whether the queue substrate this runtime uses is connected.\n *\n * Named `isRabbitMQHealthy` for its callers' sake and answered by whichever adapter is bound\n * (#502) — an in-memory queue reports connected once `connect()` has run, which is the honest\n * answer to \"can this runtime enqueue work\" regardless of what is behind it.\n */\n async isRabbitMQHealthy(): Promise<boolean> {\n return this.queueAdapter.isConnected();\n }\n\n /**\n * Evaluate queue health based on thresholds.\n */\n private evaluateQueueHealth(\n metrics: QueueMetrics,\n threshold: QueueAlertThreshold\n ): QueueHealthStatus {\n // Check pending count threshold\n if (threshold.pendingCountThreshold !== undefined) {\n if (metrics.pendingCount >= threshold.pendingCountThreshold * 2) {\n return QueueHealthStatus.UNHEALTHY;\n }\n if (metrics.pendingCount >= threshold.pendingCountThreshold) {\n return QueueHealthStatus.DEGRADED;\n }\n }\n\n // Check dead letter threshold\n if (threshold.deadLetterThreshold !== undefined) {\n if (metrics.deadLetterCount >= threshold.deadLetterThreshold) {\n return QueueHealthStatus.UNHEALTHY;\n }\n }\n\n // Check error rate threshold\n if (threshold.errorRateThreshold !== undefined) {\n if (metrics.errorRate >= threshold.errorRateThreshold) {\n return QueueHealthStatus.DEGRADED;\n }\n }\n\n // Check latency threshold\n if (threshold.latencyThresholdMs !== undefined) {\n if (metrics.p95ProcessingTimeMs >= threshold.latencyThresholdMs) {\n return QueueHealthStatus.DEGRADED;\n }\n }\n\n return QueueHealthStatus.HEALTHY;\n }\n\n /**\n * Check all queues and trigger alerts if needed.\n */\n private async checkAllQueues(): Promise<void> {\n const summary = await this.getHealthSummary();\n\n if (summary.status !== QueueHealthStatus.HEALTHY) {\n for (const alert of summary.activeAlerts) {\n await this.triggerAlert(\n summary.status === QueueHealthStatus.UNHEALTHY ? 'critical' : 'warning',\n alert.queueName,\n {\n alertType: alert.alertType,\n value: alert.value,\n threshold: alert.threshold,\n summary,\n }\n );\n }\n }\n }\n\n /**\n * Trigger an alert to all registered callbacks.\n */\n private async triggerAlert(\n alertType: string,\n queueName: string,\n details: Record<string, unknown>\n ): Promise<void> {\n this.logger.warn('Queue alert triggered', { alertType, queueName, details });\n\n for (const callback of this.alertCallbacks) {\n try {\n await callback(alertType, queueName, details);\n } catch (error) {\n this.logger.error('Error in alert callback', {\n ...projectCaughtErrorLogFields(error),\n });\n }\n }\n }\n\n /**\n * Create empty metrics for a queue.\n */\n private createEmptyMetrics(queueName: string): QueueMetrics {\n return {\n queueName,\n pendingCount: 0,\n processingCount: 0,\n deadLetterCount: 0,\n publishRatePerMinute: 0,\n consumeRatePerMinute: 0,\n avgProcessingTimeMs: 0,\n p95ProcessingTimeMs: 0,\n p99ProcessingTimeMs: 0,\n errorRate: 0,\n retryRate: 0,\n collectedAt: new Date(),\n };\n }\n}\n"]}
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* @wildo_source:part:start saas.backend.queue.worker-topology facet:layer:backend facet:audience:app-developer
|
|
3
|
+
*
|
|
4
|
+
* Where an application's background jobs actually run.
|
|
5
|
+
*
|
|
6
|
+
* ⚠️ **Queue consumers are NOT a separate tier.** They run inside each backend API pod, so every pod
|
|
7
|
+
* both ENQUEUES jobs (as an API handler) and CONSUMES them (as a worker). The consequence is the one
|
|
8
|
+
* that matters when a queue backs up: **scaling job processing means scaling the BACKEND**, not
|
|
9
|
+
* adding worker processes.
|
|
10
|
+
*
|
|
11
|
+
* ⚠️ **A declared `workers:` entry is a different thing entirely, and its name misleads.** That is a
|
|
12
|
+
* standalone HTTP service the backend CALLS — it never connects to the broker, has no database and
|
|
13
|
+
* no cache, and cannot read or write application resources except through what the caller puts in the
|
|
14
|
+
* request. Adding one does not add queue capacity.
|
|
15
|
+
*
|
|
2
16
|
* Queue Worker Initializer Backend Service
|
|
3
17
|
*
|
|
4
18
|
* Initializes queue workers within the backend API application.
|
|
5
|
-
* Workers are NOT separate microservices - they run inside each backend API pod.
|
|
6
19
|
*
|
|
7
20
|
* This service is called during application startup to:
|
|
8
21
|
* 1. Connect to RabbitMQ
|
|
@@ -13,6 +26,8 @@
|
|
|
13
26
|
* Every backend API pod can both:
|
|
14
27
|
* - Enqueue jobs (as API handlers)
|
|
15
28
|
* - Consume and execute jobs (as workers)
|
|
29
|
+
*
|
|
30
|
+
* @wildo_source:part:end saas.backend.queue.worker-topology
|
|
16
31
|
*/
|
|
17
32
|
import { LoggerService } from '../monitoring/logger/services/logger.service';
|
|
18
33
|
import { AppConfigurationService } from '../config/services/app-configuration.backend.service';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-worker-initializer.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/queue-worker-initializer.backend.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"queue-worker-initializer.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/queue/queue-worker-initializer.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAE7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AASD,qBACa,oCAAoC;IAO7C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAEjC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAhB7B,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjF,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAA+C;gBAI1C,MAAM,EAAE,aAAa,EAErB,gBAAgB,EAAE,uBAAuB,EAEzC,YAAY,EAAE,mBAAmB,EAEjC,WAAW,EAAE,yBAAyB,EAEtC,eAAe,EAAE,mCAAmC,EAEpD,UAAU,EAAE,6BAA6B;IAM5D;;;;;OAKG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkF3D;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBhC"}
|