@wildo-ai/saas-backend-lib 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (972) hide show
  1. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
  2. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
  3. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
  4. package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
  5. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
  6. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
  7. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
  8. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
  9. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
  10. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
  11. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
  12. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
  13. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +199 -0
  14. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
  15. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
  16. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
  17. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
  18. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
  19. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts +14 -3
  20. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
  21. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +138 -24
  22. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
  23. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts +3 -1
  24. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
  25. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js +8 -3
  26. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
  27. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts +11 -0
  28. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
  29. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js +11 -2
  30. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js.map +1 -1
  31. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
  32. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
  33. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
  34. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
  35. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
  36. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
  37. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
  38. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
  39. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +48 -4
  40. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
  41. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +102 -30
  42. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
  43. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
  44. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
  45. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
  46. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
  47. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
  48. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
  49. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
  50. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
  51. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
  52. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js +16 -0
  53. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js.map +1 -1
  54. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts +20 -6
  55. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
  56. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +96 -32
  57. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
  58. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts +3 -1
  59. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
  60. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js +32 -7
  61. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js.map +1 -1
  62. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts +8 -5
  63. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
  64. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.js.map +1 -1
  65. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +80 -0
  66. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
  67. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +298 -23
  68. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
  69. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts +71 -1
  70. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
  71. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +85 -5
  72. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
  73. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +21 -0
  74. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
  75. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +146 -4
  76. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
  77. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
  78. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
  79. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
  80. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts +3 -26
  81. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
  82. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js +3 -68
  83. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js.map +1 -1
  84. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
  85. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
  86. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
  87. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
  88. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
  89. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
  90. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
  91. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
  92. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
  93. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +533 -43
  94. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
  95. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
  96. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
  97. package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
  98. package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
  99. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
  100. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
  101. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
  102. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
  103. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
  104. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
  105. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
  106. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
  107. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
  108. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
  109. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
  110. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
  111. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
  112. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
  113. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
  114. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
  115. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
  116. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
  117. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
  118. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
  119. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
  120. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
  121. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
  122. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
  123. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
  124. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
  125. package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
  126. package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
  127. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
  128. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
  129. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
  130. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
  131. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
  132. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +54 -13
  133. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
  134. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
  135. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
  136. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
  137. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
  138. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
  139. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
  140. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
  141. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
  142. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
  143. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  144. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
  145. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
  146. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
  147. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
  148. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
  149. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
  150. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
  151. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
  152. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
  153. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
  154. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
  155. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
  156. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
  157. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
  158. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
  159. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
  160. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
  161. package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
  162. package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
  163. package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
  164. package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
  165. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
  166. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
  167. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +263 -13
  168. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
  169. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +376 -58
  170. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
  171. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +264 -7
  172. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
  173. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +414 -5
  174. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
  175. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
  176. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
  177. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
  178. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +16 -0
  179. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -0
  180. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +140 -0
  181. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -0
  182. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
  183. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
  184. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +65 -6
  185. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
  186. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
  187. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
  188. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
  189. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
  190. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
  191. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +45 -0
  192. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
  193. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
  194. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
  195. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
  196. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
  197. package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
  198. package/dist/esm/config/custom/application-config-controller.backend.service.js +7 -1
  199. package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -1
  200. package/dist/esm/config/models/app-config.backend.schemas.d.ts +146 -46
  201. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
  202. package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
  203. package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
  204. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
  205. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
  206. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
  207. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
  208. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
  209. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
  210. package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
  211. package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
  212. package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
  213. package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
  214. package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
  215. package/dist/esm/config/services/app-configuration.backend.utils.d.ts +43 -1
  216. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
  217. package/dist/esm/config/services/app-configuration.backend.utils.js +52 -3
  218. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
  219. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
  220. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
  221. package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
  222. package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
  223. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts +2 -2
  224. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js +2 -2
  225. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js.map +1 -1
  226. package/dist/esm/databases/models/filter.backend.schemas.js +2 -2
  227. package/dist/esm/databases/models/filter.backend.schemas.js.map +1 -1
  228. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
  229. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js +20 -1
  230. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js.map +1 -1
  231. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
  232. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
  233. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
  234. package/dist/esm/databases/services/redis.service.d.ts +27 -0
  235. package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
  236. package/dist/esm/databases/services/redis.service.js +29 -0
  237. package/dist/esm/databases/services/redis.service.js.map +1 -1
  238. package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
  239. package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
  240. package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
  241. package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
  242. package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
  243. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
  244. package/dist/esm/errors/services/error-handler.backend.service.js +134 -8
  245. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
  246. package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
  247. package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
  248. package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
  249. package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
  250. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
  251. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
  252. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
  253. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
  254. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
  255. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
  256. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
  257. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
  258. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts +41 -0
  259. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -0
  260. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js +40 -0
  261. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js.map +1 -0
  262. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts +64 -0
  263. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -0
  264. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js +193 -0
  265. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js.map +1 -0
  266. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +72 -4
  267. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
  268. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +60 -19
  269. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
  270. package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
  271. package/dist/esm/external-data/external-data-transform.backend.js +7 -1
  272. package/dist/esm/external-data/external-data-transform.backend.js.map +1 -1
  273. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts +2 -0
  274. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
  275. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js +13 -0
  276. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js.map +1 -1
  277. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
  278. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
  279. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
  280. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
  281. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
  282. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
  283. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
  284. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
  285. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
  286. package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
  287. package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
  288. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
  289. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
  290. package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
  291. package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
  292. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
  293. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
  294. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
  295. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
  296. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
  297. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
  298. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
  299. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
  300. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
  301. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
  302. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
  303. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
  304. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
  305. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
  306. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
  307. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
  308. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
  309. package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
  310. package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
  311. package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
  312. package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
  313. package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
  314. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +306 -7
  315. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
  316. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +539 -45
  317. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
  318. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
  319. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
  320. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
  321. package/dist/esm/files/controllers/file.controller.d.ts +24 -1
  322. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
  323. package/dist/esm/files/controllers/file.controller.js +83 -11
  324. package/dist/esm/files/controllers/file.controller.js.map +1 -1
  325. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts +17 -0
  326. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -0
  327. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js +1 -0
  328. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -0
  329. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +5 -1
  330. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
  331. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +76 -13
  332. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
  333. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +18 -0
  334. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
  335. package/dist/esm/files/services/file-operation-handler.backend.service.js +36 -28
  336. package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
  337. package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
  338. package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
  339. package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
  340. package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
  341. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
  342. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
  343. package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
  344. package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
  345. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +214 -0
  346. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -0
  347. package/dist/esm/files/services/file-upload-grant.backend.service.js +566 -0
  348. package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -0
  349. package/dist/esm/files/services/files.backend.service.d.ts +87 -0
  350. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
  351. package/dist/esm/files/services/files.backend.service.js +252 -19
  352. package/dist/esm/files/services/files.backend.service.js.map +1 -1
  353. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
  354. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
  355. package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
  356. package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
  357. package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
  358. package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
  359. package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
  360. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
  361. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
  362. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
  363. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
  364. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
  365. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
  366. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
  367. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
  368. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
  369. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
  370. package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
  371. package/dist/esm/files/utils/file-uploader.utils.js +12 -0
  372. package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
  373. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
  374. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
  375. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
  376. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
  377. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
  378. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
  379. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
  380. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
  381. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
  382. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
  383. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
  384. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
  385. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
  386. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
  387. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
  388. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
  389. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
  390. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +200 -44
  391. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
  392. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
  393. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
  394. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
  395. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
  396. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
  397. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
  398. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
  399. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
  400. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
  401. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
  402. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
  403. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
  404. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
  405. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
  406. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
  407. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
  408. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
  409. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
  410. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
  411. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
  412. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
  413. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
  414. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
  415. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
  416. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
  417. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
  418. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
  419. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
  420. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
  421. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
  422. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
  423. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
  424. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
  425. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
  426. package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
  427. package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
  428. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +107 -1
  429. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
  430. package/dist/esm/flows-actors/services/agents.backend.service.js +519 -56
  431. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
  432. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
  433. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
  434. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
  435. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
  436. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
  437. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
  438. package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
  439. package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
  440. package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
  441. package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
  442. package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
  443. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
  444. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
  445. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
  446. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
  447. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
  448. package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
  449. package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
  450. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
  451. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
  452. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
  453. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
  454. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts +151 -41
  455. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
  456. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +308 -143
  457. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
  458. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
  459. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
  460. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
  461. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
  462. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
  463. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
  464. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
  465. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
  466. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
  467. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
  468. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
  469. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
  470. package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
  471. package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
  472. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
  473. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
  474. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
  475. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
  476. package/dist/esm/index.d.ts +15 -5
  477. package/dist/esm/index.d.ts.map +1 -1
  478. package/dist/esm/index.js +45 -5
  479. package/dist/esm/index.js.map +1 -1
  480. package/dist/esm/inject/models/container.d.ts.map +1 -1
  481. package/dist/esm/inject/models/container.js +82 -10
  482. package/dist/esm/inject/models/container.js.map +1 -1
  483. package/dist/esm/inject/models/service-types.d.ts +20 -3
  484. package/dist/esm/inject/models/service-types.d.ts.map +1 -1
  485. package/dist/esm/inject/models/service-types.js +21 -3
  486. package/dist/esm/inject/models/service-types.js.map +1 -1
  487. package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
  488. package/dist/esm/mcp/controllers/mcp.controller.js +32 -4
  489. package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
  490. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts +34 -0
  491. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
  492. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js +42 -0
  493. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
  494. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +84 -1
  495. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
  496. package/dist/esm/mcp/services/mcp-server.backend.service.js +235 -11
  497. package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
  498. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts +64 -2
  499. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
  500. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +152 -6
  501. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
  502. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
  503. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
  504. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
  505. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
  506. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
  507. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
  508. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
  509. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
  510. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
  511. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
  512. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
  513. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
  514. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
  515. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
  516. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
  517. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
  518. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
  519. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
  520. package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
  521. package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
  522. package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
  523. package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
  524. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
  525. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
  526. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
  527. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
  528. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
  529. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
  530. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
  531. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
  532. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
  533. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
  534. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
  535. package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
  536. package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
  537. package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
  538. package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
  539. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
  540. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
  541. package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
  542. package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
  543. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
  544. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
  545. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
  546. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
  547. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
  548. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
  549. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
  550. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
  551. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
  552. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
  553. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
  554. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
  555. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
  556. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
  557. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
  558. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
  559. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
  560. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
  561. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
  562. package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
  563. package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
  564. package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
  565. package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
  566. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
  567. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
  568. package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
  569. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
  570. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
  571. package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
  572. package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
  573. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +108 -13
  574. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
  575. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +432 -101
  576. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
  577. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
  578. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
  579. package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
  580. package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
  581. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
  582. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
  583. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
  584. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
  585. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
  586. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  587. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +54 -7
  588. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
  589. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts +5 -5
  590. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
  591. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js +14 -13
  592. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js.map +1 -1
  593. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts +2 -1
  594. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
  595. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +18 -8
  596. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
  597. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
  598. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +20 -18
  599. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
  600. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
  601. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
  602. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
  603. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
  604. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
  605. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
  606. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
  607. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
  608. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
  609. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
  610. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
  611. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js +4 -1
  612. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js.map +1 -1
  613. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
  614. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
  615. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
  616. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
  617. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
  618. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
  619. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
  620. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
  621. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
  622. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
  623. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
  624. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
  625. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
  626. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
  627. package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
  628. package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
  629. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
  630. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
  631. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
  632. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
  633. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
  634. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
  635. package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
  636. package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
  637. package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
  638. package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
  639. package/dist/esm/queue/job-consumer.backend.service.js +1 -4
  640. package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
  641. package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
  642. package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
  643. package/dist/esm/queue/job-executor.backend.service.js +1 -4
  644. package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
  645. package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
  646. package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
  647. package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
  648. package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
  649. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
  650. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
  651. package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
  652. package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
  653. package/dist/esm/queue/queue.backend.service.d.ts +3 -3
  654. package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
  655. package/dist/esm/queue/queue.backend.service.js +26 -4
  656. package/dist/esm/queue/queue.backend.service.js.map +1 -1
  657. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
  658. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
  659. package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
  660. package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
  661. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
  662. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
  663. package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
  664. package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
  665. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
  666. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
  667. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
  668. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
  669. package/dist/esm/requests/service/websocket.service.d.ts +9 -0
  670. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
  671. package/dist/esm/requests/service/websocket.service.js +88 -15
  672. package/dist/esm/requests/service/websocket.service.js.map +1 -1
  673. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
  674. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +16 -2
  675. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
  676. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
  677. package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
  678. package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
  679. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
  680. package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
  681. package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
  682. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
  683. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
  684. package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
  685. package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
  686. package/dist/esm/resources/services/resource-id.backend.service.js +3 -3
  687. package/dist/esm/resources/services/resource-id.backend.service.js.map +1 -1
  688. package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
  689. package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
  690. package/dist/esm/resources/services/resources-registry.backend.service.js +91 -7
  691. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
  692. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
  693. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
  694. package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
  695. package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
  696. package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
  697. package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
  698. package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
  699. package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
  700. package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
  701. package/dist/esm/runtime/services/execution-context-creator.backend.service.js +13 -7
  702. package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
  703. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
  704. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
  705. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
  706. package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
  707. package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
  708. package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
  709. package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
  710. package/dist/esm/runtime/services/start-application.backend.service.d.ts +47 -1
  711. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
  712. package/dist/esm/runtime/services/start-application.backend.service.js +343 -77
  713. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
  714. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
  715. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
  716. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
  717. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
  718. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
  719. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
  720. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
  721. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
  722. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
  723. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
  724. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
  725. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
  726. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
  727. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
  728. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
  729. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
  730. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
  731. package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
  732. package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
  733. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts +3 -23
  734. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
  735. package/dist/esm/security/authentications/models/jwt.backend.schemas.js +20 -45
  736. package/dist/esm/security/authentications/models/jwt.backend.schemas.js.map +1 -1
  737. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
  738. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
  739. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
  740. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
  741. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
  742. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
  743. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
  744. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
  745. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
  746. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
  747. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
  748. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
  749. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
  750. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
  751. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
  752. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
  753. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
  754. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
  755. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
  756. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
  757. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
  758. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
  759. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
  760. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts +9 -1
  761. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
  762. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +77 -2
  763. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
  764. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
  765. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js +5 -3
  766. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js.map +1 -1
  767. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
  768. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
  769. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
  770. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
  771. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
  772. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
  773. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
  774. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
  775. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
  776. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
  777. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
  778. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
  779. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
  780. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
  781. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +41 -1
  782. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
  783. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +87 -4
  784. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
  785. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
  786. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
  787. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
  788. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
  789. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
  790. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
  791. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
  792. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
  793. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
  794. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
  795. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
  796. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
  797. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
  798. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
  799. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
  800. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
  801. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
  802. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
  803. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
  804. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
  805. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
  806. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
  807. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
  808. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
  809. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
  810. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
  811. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
  812. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
  813. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
  814. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
  815. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
  816. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
  817. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
  818. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
  819. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
  820. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
  821. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
  822. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
  823. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
  824. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
  825. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
  826. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
  827. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
  828. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
  829. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
  830. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
  831. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js +24 -1
  832. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js.map +1 -1
  833. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
  834. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
  835. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
  836. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
  837. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
  838. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
  839. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
  840. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts +117 -0
  841. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -0
  842. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js +104 -0
  843. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js.map +1 -0
  844. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
  845. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
  846. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
  847. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
  848. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
  849. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
  850. package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
  851. package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
  852. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
  853. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
  854. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
  855. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
  856. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +175 -14
  857. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
  858. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +385 -49
  859. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
  860. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
  861. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
  862. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
  863. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
  864. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
  865. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
  866. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
  867. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
  868. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
  869. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
  870. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
  871. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
  872. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
  873. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
  874. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
  875. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
  876. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
  877. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
  878. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
  879. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
  880. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
  881. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
  882. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
  883. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
  884. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
  885. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  886. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
  887. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
  888. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
  889. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
  890. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
  891. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
  892. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
  893. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
  894. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
  895. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
  896. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
  897. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
  898. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
  899. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
  900. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
  901. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
  902. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
  903. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
  904. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
  905. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  906. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
  907. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
  908. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
  909. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
  910. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
  911. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
  912. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
  913. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
  914. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
  915. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
  916. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
  917. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
  918. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
  919. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
  920. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +18 -1
  921. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
  922. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +110 -74
  923. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -1
  924. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts +22 -0
  925. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -0
  926. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js +22 -0
  927. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js.map +1 -0
  928. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +17 -3
  929. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
  930. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js +12 -0
  931. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -1
  932. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +41 -3
  933. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
  934. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +83 -20
  935. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
  936. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
  937. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
  938. package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
  939. package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
  940. package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
  941. package/dist/esm/security/jwt/services/jwt.backend.service.js +1 -18
  942. package/dist/esm/security/jwt/services/jwt.backend.service.js.map +1 -1
  943. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
  944. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
  945. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
  946. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
  947. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
  948. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
  949. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
  950. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
  951. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
  952. package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
  953. package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
  954. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
  955. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
  956. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
  957. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
  958. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
  959. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
  960. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
  961. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
  962. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
  963. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
  964. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
  965. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
  966. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
  967. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
  968. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
  969. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
  970. package/dist/tsconfig.build.tsbuildinfo +1 -1
  971. package/package.json +17 -9
  972. package/dist/esm/.builder.pid +0 -9
@@ -0,0 +1,47 @@
1
+ import { QueueAdapterType } from '@wildo-ai/saas-models';
2
+ import { SAAS_SERVICE_TYPES } from '../../inject/models/service-types.js';
3
+ import { InMemoryQueueAdapterBackendService } from '../../queue/adapters/in-memory-queue-adapter.backend.service.js';
4
+ import { RabbitMQAdapterBackendService } from '../../queue/adapters/rabbitmq-adapter.backend.service.js';
5
+ /**
6
+ * The one place a queue adapter is chosen (#502).
7
+ *
8
+ * ## Why this function exists at all
9
+ *
10
+ * `QueueAdapterType` had **zero readers**. It declared three adapters while one class existed and
11
+ * every consumer injected that class by name, so the enum was a vocabulary describing a choice
12
+ * nothing could make — and adding an adapter without adding a way to select it would have produced a
13
+ * second unreachable thing rather than fixing the first.
14
+ *
15
+ * So the enum is now read HERE, and this is the only site that maps a member to an implementation.
16
+ * A `Record` over the type rather than a `switch` with a default, for the reason
17
+ * `invariant-call-site-enumeration.md` #21 records: a `default:` arm silently absorbs a new member
18
+ * into whatever it returns, while a total record makes adding one a compile error until somebody
19
+ * says which class serves it.
20
+ *
21
+ * ## The default is RabbitMQ, and that is not a placeholder
22
+ *
23
+ * A deployed application wants a broker: durability across a restart, visibility across processes,
24
+ * and permissions per runtime are the properties it is buying. {@link QueueAdapterType.MEMORY} is
25
+ * for a test lane, and for a single-process runtime that has declared it wants no broker — it is not
26
+ * a smaller RabbitMQ, and `InMemoryQueueAdapterBackendService` says exactly what it does not provide.
27
+ */
28
+ const QUEUE_ADAPTER_IMPLEMENTATIONS = {
29
+ [QueueAdapterType.RABBITMQ]: RabbitMQAdapterBackendService,
30
+ [QueueAdapterType.MEMORY]: InMemoryQueueAdapterBackendService,
31
+ };
32
+ /**
33
+ * Bind the queue adapter a runtime will use.
34
+ *
35
+ * Rebinds when the token is already bound, so a test lane can select the in-memory adapter against a
36
+ * container the framework has already configured — which is the shape every consumer of this
37
+ * actually needs, and a bind-only version would have forced each of them to build a container from
38
+ * scratch.
39
+ */
40
+ export function bindQueueAdapter(container, adapterType) {
41
+ const implementation = QUEUE_ADAPTER_IMPLEMENTATIONS[adapterType];
42
+ if (container.isBound(SAAS_SERVICE_TYPES.RabbitMQAdapterService)) {
43
+ container.unbind(SAAS_SERVICE_TYPES.RabbitMQAdapterService);
44
+ }
45
+ container.bind(SAAS_SERVICE_TYPES.RabbitMQAdapterService).to(implementation).inSingletonScope();
46
+ }
47
+ //# sourceMappingURL=queue-adapter.backend.binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-adapter.backend.binding.js","sourceRoot":"","sources":["../../../../../src/queue/adapters/queue-adapter.backend.binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,kCAAkC,EAAE,MAAM,2EAA2E,CAAC;AAC/H,OAAO,EAAE,6BAA6B,EAAE,MAAM,oEAAoE,CAAC;AAEnH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,6BAA6B,GAAG;IACpC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,6BAA6B;IAC1D,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,kCAAkC;CACiB,CAAC;AAEjF;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAoB,EAAE,WAA6B;IAClF,MAAM,cAAc,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAClE,IAAI,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjE,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;IAC9D,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAClG,CAAC","sourcesContent":["import type { Container } from 'inversify';\nimport { QueueAdapterType } from '@wildo-ai/saas-models';\n\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { InMemoryQueueAdapterBackendService } from '~wildo-backend-lib/queue/adapters/in-memory-queue-adapter.backend.service';\nimport { RabbitMQAdapterBackendService } from '~wildo-backend-lib/queue/adapters/rabbitmq-adapter.backend.service';\n\n/**\n * The one place a queue adapter is chosen (#502).\n *\n * ## Why this function exists at all\n *\n * `QueueAdapterType` had **zero readers**. It declared three adapters while one class existed and\n * every consumer injected that class by name, so the enum was a vocabulary describing a choice\n * nothing could make — and adding an adapter without adding a way to select it would have produced a\n * second unreachable thing rather than fixing the first.\n *\n * So the enum is now read HERE, and this is the only site that maps a member to an implementation.\n * A `Record` over the type rather than a `switch` with a default, for the reason\n * `invariant-call-site-enumeration.md` #21 records: a `default:` arm silently absorbs a new member\n * into whatever it returns, while a total record makes adding one a compile error until somebody\n * says which class serves it.\n *\n * ## The default is RabbitMQ, and that is not a placeholder\n *\n * A deployed application wants a broker: durability across a restart, visibility across processes,\n * and permissions per runtime are the properties it is buying. {@link QueueAdapterType.MEMORY} is\n * for a test lane, and for a single-process runtime that has declared it wants no broker — it is not\n * a smaller RabbitMQ, and `InMemoryQueueAdapterBackendService` says exactly what it does not provide.\n */\nconst QUEUE_ADAPTER_IMPLEMENTATIONS = {\n [QueueAdapterType.RABBITMQ]: RabbitMQAdapterBackendService,\n [QueueAdapterType.MEMORY]: InMemoryQueueAdapterBackendService,\n} as const satisfies Record<QueueAdapterType, new (...args: never[]) => unknown>;\n\n/**\n * Bind the queue adapter a runtime will use.\n *\n * Rebinds when the token is already bound, so a test lane can select the in-memory adapter against a\n * container the framework has already configured — which is the shape every consumer of this\n * actually needs, and a bind-only version would have forced each of them to build a container from\n * scratch.\n */\nexport function bindQueueAdapter(container: Container, adapterType: QueueAdapterType): void {\n const implementation = QUEUE_ADAPTER_IMPLEMENTATIONS[adapterType];\n if (container.isBound(SAAS_SERVICE_TYPES.RabbitMQAdapterService)) {\n container.unbind(SAAS_SERVICE_TYPES.RabbitMQAdapterService);\n }\n container.bind(SAAS_SERVICE_TYPES.RabbitMQAdapterService).to(implementation).inSingletonScope();\n}\n"]}
@@ -0,0 +1,87 @@
1
+ import type { JobPayload, JobResult } from '@wildo-ai/saas-models';
2
+ import type { PublishOptions, QueueAssertOptions } from '../../queue/adapters/queue-adapter.backend.options';
3
+ /**
4
+ * The queue port every background-work consumer depends on (#502).
5
+ *
6
+ * ## Why this exists, and what it deliberately excludes
7
+ *
8
+ * `QueueAdapterType` declared RabbitMQ, Redis and in-memory adapters and there was **one** class,
9
+ * injected concretely by every consumer through `SAAS_SERVICE_TYPES.RabbitMQAdapterService`. So the
10
+ * enum offered a choice nothing could make, and there was no shape a second adapter could satisfy.
11
+ *
12
+ * The surface here is not the RabbitMQ class's public API — it is what consumers were **measured**
13
+ * to call. Two amqplib escape hatches are excluded on purpose:
14
+ *
15
+ * - `getChannel()` / `getTopologyChannel()` return an amqplib `Channel`, which nothing but a broker
16
+ * can produce. Their one consumer outside the adapter was queue monitoring, reading a queue depth,
17
+ * and that is now {@link QueueAdapter.getQueueDepth} — a question every adapter can answer about
18
+ * itself instead of a connection handle only one of them has.
19
+ *
20
+ * Anything genuinely RabbitMQ-specific stays on `RabbitMQAdapterBackendService` and is reached by
21
+ * naming that class, which is an honest dependency rather than a port with a hole in it.
22
+ */
23
+ /**
24
+ * One delivered message, in the shape a handler reads it.
25
+ *
26
+ * Structurally satisfied by amqplib's `ConsumeMessage`, so the RabbitMQ adapter passes its own
27
+ * messages through unchanged and no translation layer sits on the hot path. Handlers were measured
28
+ * to read `content` and `properties` only; `fields` is carried because the redelivery flag is the
29
+ * kind of thing a retry decision legitimately reaches for, and omitting it would push a consumer
30
+ * straight back to the amqplib type.
31
+ */
32
+ export interface QueueConsumeMessage {
33
+ readonly content: Buffer;
34
+ readonly fields: {
35
+ readonly redelivered: boolean;
36
+ };
37
+ readonly properties: {
38
+ readonly correlationId?: string | null;
39
+ readonly replyTo?: string;
40
+ };
41
+ }
42
+ /**
43
+ * Settling a delivery: the only thing handlers ever did with the `Channel` they were handed.
44
+ *
45
+ * Measured across every consumer before this was carved: **15 `nack` and 7 `ack`**, and nothing
46
+ * else. An amqplib `Channel` satisfies this structurally, which is what keeps the RabbitMQ path
47
+ * unchanged — it hands the real channel over and the narrower type simply stops a handler reaching
48
+ * for `sendToQueue` or `prefetch` from inside a message callback.
49
+ */
50
+ export interface QueueMessageAcknowledger {
51
+ ack(message: QueueConsumeMessage): void;
52
+ nack(message: QueueConsumeMessage, allUpTo?: boolean, requeue?: boolean): void;
53
+ }
54
+ export type MessageHandler = (message: QueueConsumeMessage, acknowledger: QueueMessageAcknowledger) => Promise<void>;
55
+ /** What a background-work consumer needs from a queue, and nothing more. */
56
+ export interface QueueAdapter {
57
+ connect(): Promise<void>;
58
+ close(): Promise<void>;
59
+ isConnected(): boolean;
60
+ assertQueue(queueName: string, options?: QueueAssertOptions): Promise<void>;
61
+ publish(queueName: string, payload: JobPayload, options?: PublishOptions): Promise<void>;
62
+ /**
63
+ * Re-deliver a job after a delay.
64
+ *
65
+ * A first-class port method rather than "publish to a queue you named yourself", because the delay
66
+ * is realised very differently per adapter — RabbitMQ needs a per-delay queue with a TTL and a
67
+ * dead-letter exchange back to the source, while an in-memory adapter needs a timer. A consumer
68
+ * that had to know which is a consumer that cannot change adapters.
69
+ */
70
+ scheduleDelayedRetry(sourceQueueName: string, job: JobPayload, delayMs: number, options?: PublishOptions): Promise<void>;
71
+ consume(queueName: string, handler: MessageHandler): Promise<string>;
72
+ cancelConsumer(queueName: string): Promise<void>;
73
+ setupReplyQueue(appId: string, onReply: (correlationId: string, result: JobResult) => void): Promise<string>;
74
+ publishResult(replyTo: string, correlationId: string, result: JobResult): Promise<void>;
75
+ getReplyQueueName(): string | null;
76
+ /**
77
+ * How many messages are waiting, or `null` when this adapter cannot say.
78
+ *
79
+ * `null` is an ANSWER — "not observable here" — and monitoring reports empty metrics for it,
80
+ * exactly as it already did when no channel was open. It is not an error, because a queue depth
81
+ * being unavailable is not a fault in the runtime being monitored.
82
+ */
83
+ getQueueDepth(queueName: string): Promise<number | null>;
84
+ /** Identifies the consuming process, so a reply queue is addressed to one runtime. */
85
+ getPodId(): string;
86
+ }
87
+ //# sourceMappingURL=queue-adapter.backend.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-adapter.backend.interface.d.ts","sourceRoot":"","sources":["../../../../../src/queue/adapters/queue-adapter.backend.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAE1H;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAUzB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5F;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAChF;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,wBAAwB,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,WAAW,IAAI,OAAO,CAAC;IAEvB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF;;;;;;;OAOG;IACH,oBAAoB,CAClB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7G,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;;;OAMG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzD,sFAAsF;IACtF,QAAQ,IAAI,MAAM,CAAC;CACpB"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=queue-adapter.backend.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-adapter.backend.interface.js","sourceRoot":"","sources":["../../../../../src/queue/adapters/queue-adapter.backend.interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { JobPayload, JobResult } from '@wildo-ai/saas-models';\n\nimport type { PublishOptions, QueueAssertOptions } from '~wildo-backend-lib/queue/adapters/queue-adapter.backend.options';\n\n/**\n * The queue port every background-work consumer depends on (#502).\n *\n * ## Why this exists, and what it deliberately excludes\n *\n * `QueueAdapterType` declared RabbitMQ, Redis and in-memory adapters and there was **one** class,\n * injected concretely by every consumer through `SAAS_SERVICE_TYPES.RabbitMQAdapterService`. So the\n * enum offered a choice nothing could make, and there was no shape a second adapter could satisfy.\n *\n * The surface here is not the RabbitMQ class's public API — it is what consumers were **measured**\n * to call. Two amqplib escape hatches are excluded on purpose:\n *\n * - `getChannel()` / `getTopologyChannel()` return an amqplib `Channel`, which nothing but a broker\n * can produce. Their one consumer outside the adapter was queue monitoring, reading a queue depth,\n * and that is now {@link QueueAdapter.getQueueDepth} — a question every adapter can answer about\n * itself instead of a connection handle only one of them has.\n *\n * Anything genuinely RabbitMQ-specific stays on `RabbitMQAdapterBackendService` and is reached by\n * naming that class, which is an honest dependency rather than a port with a hole in it.\n */\n\n/**\n * One delivered message, in the shape a handler reads it.\n *\n * Structurally satisfied by amqplib's `ConsumeMessage`, so the RabbitMQ adapter passes its own\n * messages through unchanged and no translation layer sits on the hot path. Handlers were measured\n * to read `content` and `properties` only; `fields` is carried because the redelivery flag is the\n * kind of thing a retry decision legitimately reaches for, and omitting it would push a consumer\n * straight back to the amqplib type.\n */\nexport interface QueueConsumeMessage {\n readonly content: Buffer;\n /*\n * NO index signature on either member, and that is load-bearing rather than minimal.\n *\n * amqplib's `ConsumeMessageFields` and `MessageProperties` are closed interfaces, and an index\n * signature makes them un-assignable (\"index signature for type 'string' is missing\") — so the\n * RabbitMQ adapter could not hand its own messages through and would have needed a translation\n * layer on the hot path, purely to satisfy a convenience this port does not need. Declaring only\n * the members consumers were measured to read keeps the real message structurally compatible.\n */\n readonly fields: { readonly redelivered: boolean };\n readonly properties: { readonly correlationId?: string | null; readonly replyTo?: string };\n}\n\n/**\n * Settling a delivery: the only thing handlers ever did with the `Channel` they were handed.\n *\n * Measured across every consumer before this was carved: **15 `nack` and 7 `ack`**, and nothing\n * else. An amqplib `Channel` satisfies this structurally, which is what keeps the RabbitMQ path\n * unchanged — it hands the real channel over and the narrower type simply stops a handler reaching\n * for `sendToQueue` or `prefetch` from inside a message callback.\n */\nexport interface QueueMessageAcknowledger {\n ack(message: QueueConsumeMessage): void;\n nack(message: QueueConsumeMessage, allUpTo?: boolean, requeue?: boolean): void;\n}\n\nexport type MessageHandler = (\n message: QueueConsumeMessage,\n acknowledger: QueueMessageAcknowledger,\n) => Promise<void>;\n\n/** What a background-work consumer needs from a queue, and nothing more. */\nexport interface QueueAdapter {\n connect(): Promise<void>;\n close(): Promise<void>;\n isConnected(): boolean;\n\n assertQueue(queueName: string, options?: QueueAssertOptions): Promise<void>;\n publish(queueName: string, payload: JobPayload, options?: PublishOptions): Promise<void>;\n /**\n * Re-deliver a job after a delay.\n *\n * A first-class port method rather than \"publish to a queue you named yourself\", because the delay\n * is realised very differently per adapter — RabbitMQ needs a per-delay queue with a TTL and a\n * dead-letter exchange back to the source, while an in-memory adapter needs a timer. A consumer\n * that had to know which is a consumer that cannot change adapters.\n */\n scheduleDelayedRetry(\n sourceQueueName: string,\n job: JobPayload,\n delayMs: number,\n options?: PublishOptions,\n ): Promise<void>;\n\n consume(queueName: string, handler: MessageHandler): Promise<string>;\n cancelConsumer(queueName: string): Promise<void>;\n\n setupReplyQueue(appId: string, onReply: (correlationId: string, result: JobResult) => void): Promise<string>;\n publishResult(replyTo: string, correlationId: string, result: JobResult): Promise<void>;\n getReplyQueueName(): string | null;\n\n /**\n * How many messages are waiting, or `null` when this adapter cannot say.\n *\n * `null` is an ANSWER — \"not observable here\" — and monitoring reports empty metrics for it,\n * exactly as it already did when no channel was open. It is not an error, because a queue depth\n * being unavailable is not a fault in the runtime being monitored.\n */\n getQueueDepth(queueName: string): Promise<number | null>;\n\n /** Identifies the consuming process, so a reply queue is addressed to one runtime. */\n getPodId(): string;\n}\n"]}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Broker-neutral options shared by every queue adapter (#502).
3
+ *
4
+ * These sat inside `rabbitmq-adapter.backend.service.ts` while there was only one adapter. They
5
+ * describe INTENT — durability, a dead-letter destination, a correlation id — rather than any
6
+ * broker's wire format, so leaving them there would have made the port import the implementation it
7
+ * exists to abstract.
8
+ *
9
+ * An adapter that cannot honour an option ignores it rather than refusing: an in-memory queue has no
10
+ * meaningful `persistent`, and a caller asking for durability from a queue that lives in a process is
11
+ * not making a mistake — it is asking for the same job semantics on a different substrate.
12
+ */
13
+ /** Queue assertion options. */
14
+ export interface QueueAssertOptions {
15
+ durable?: boolean;
16
+ exclusive?: boolean;
17
+ autoDelete?: boolean;
18
+ deadLetterExchange?: string;
19
+ deadLetterRoutingKey?: string;
20
+ messageTtl?: number;
21
+ maxLength?: number;
22
+ }
23
+ /** Publish options for messages. */
24
+ export interface PublishOptions {
25
+ correlationId?: string;
26
+ replyTo?: string;
27
+ persistent?: boolean;
28
+ expiration?: string;
29
+ priority?: number;
30
+ }
31
+ //# sourceMappingURL=queue-adapter.backend.options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-adapter.backend.options.d.ts","sourceRoot":"","sources":["../../../../../src/queue/adapters/queue-adapter.backend.options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+BAA+B;AAC/B,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Broker-neutral options shared by every queue adapter (#502).
3
+ *
4
+ * These sat inside `rabbitmq-adapter.backend.service.ts` while there was only one adapter. They
5
+ * describe INTENT — durability, a dead-letter destination, a correlation id — rather than any
6
+ * broker's wire format, so leaving them there would have made the port import the implementation it
7
+ * exists to abstract.
8
+ *
9
+ * An adapter that cannot honour an option ignores it rather than refusing: an in-memory queue has no
10
+ * meaningful `persistent`, and a caller asking for durability from a queue that lives in a process is
11
+ * not making a mistake — it is asking for the same job semantics on a different substrate.
12
+ */
13
+ //# sourceMappingURL=queue-adapter.backend.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-adapter.backend.options.js","sourceRoot":"","sources":["../../../../../src/queue/adapters/queue-adapter.backend.options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG","sourcesContent":["/**\n * Broker-neutral options shared by every queue adapter (#502).\n *\n * These sat inside `rabbitmq-adapter.backend.service.ts` while there was only one adapter. They\n * describe INTENT — durability, a dead-letter destination, a correlation id — rather than any\n * broker's wire format, so leaving them there would have made the port import the implementation it\n * exists to abstract.\n *\n * An adapter that cannot honour an option ignores it rather than refusing: an in-memory queue has no\n * meaningful `persistent`, and a caller asking for durability from a queue that lives in a process is\n * not making a mistake — it is asking for the same job semantics on a different substrate.\n */\n\n/** Queue assertion options. */\nexport interface QueueAssertOptions {\n durable?: boolean;\n exclusive?: boolean;\n autoDelete?: boolean;\n deadLetterExchange?: string;\n deadLetterRoutingKey?: string;\n messageTtl?: number;\n maxLength?: number;\n}\n\n/** Publish options for messages. */\nexport interface PublishOptions {\n correlationId?: string;\n replyTo?: string;\n persistent?: boolean;\n expiration?: string;\n priority?: number;\n}\n"]}
@@ -10,6 +10,8 @@ import { AppConfigurationService } from '../../config/services/app-configuration
10
10
  import { ErrorBuilderBackendService } from '../../errors/services/error-builder.backend.service';
11
11
  import { JobPayload, JobResult } from '@wildo-ai/saas-models';
12
12
  import type { Channel, ConsumeMessage } from 'amqplib';
13
+ import type { MessageHandler, QueueAdapter } from '../../queue/adapters/queue-adapter.backend.interface';
14
+ import type { PublishOptions, QueueAssertOptions } from '../../queue/adapters/queue-adapter.backend.options';
13
15
  /**
14
16
  * RabbitMQ configuration for connection.
15
17
  */
@@ -24,32 +26,15 @@ export interface RabbitMQConfig {
24
26
  channelMax?: number;
25
27
  }
26
28
  /**
27
- * Queue assertion options.
28
- */
29
- export interface QueueAssertOptions {
30
- durable?: boolean;
31
- exclusive?: boolean;
32
- autoDelete?: boolean;
33
- deadLetterExchange?: string;
34
- deadLetterRoutingKey?: string;
35
- messageTtl?: number;
36
- maxLength?: number;
37
- }
38
- /**
39
- * Publish options for messages.
40
- */
41
- export interface PublishOptions {
42
- correlationId?: string;
43
- replyTo?: string;
44
- persistent?: boolean;
45
- expiration?: string;
46
- priority?: number;
47
- }
48
- /**
49
- * Message handler type for consumers.
29
+ * The RabbitMQ realisation of {@link QueueAdapter} (#502).
30
+ *
31
+ * Everything a background-work consumer needs is declared on the port; what remains here and NOT on
32
+ * it is genuinely broker-specific — `configure()` takes a `RabbitMQConfig`, and `getChannel()` /
33
+ * `getTopologyChannel()` hand out an amqplib `Channel` that only a broker can produce. A caller that
34
+ * needs one of those names this class, which is an honest dependency rather than a port with a hole
35
+ * in it.
50
36
  */
51
- export type MessageHandler = (msg: ConsumeMessage, channel: Channel) => Promise<void>;
52
- export declare class RabbitMQAdapterBackendService {
37
+ export declare class RabbitMQAdapterBackendService implements QueueAdapter {
53
38
  private readonly logger;
54
39
  private readonly appConfigService;
55
40
  private readonly errorBuilder;
@@ -268,6 +253,15 @@ export declare class RabbitMQAdapterBackendService {
268
253
  /**
269
254
  * Get pod ID for this instance.
270
255
  */
256
+ /**
257
+ * Queue depth from the broker, or `null` when no channel is open (#502).
258
+ *
259
+ * This replaces monitoring reaching for `getChannel()` and calling `checkQueue` itself. The
260
+ * behaviour is unchanged — `null` here produces the same empty metrics that a null channel already
261
+ * produced — but the question is now one every adapter can answer about itself, instead of a
262
+ * connection handle only this one can hand out.
263
+ */
264
+ getQueueDepth(queueName: string): Promise<number | null>;
271
265
  getPodId(): string;
272
266
  }
273
267
  //# sourceMappingURL=rabbitmq-adapter.backend.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-adapter.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/queue/adapters/rabbitmq-adapter.backend.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rabbitmq-adapter.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/queue/adapters/rabbitmq-adapter.backend.service.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,15 @@ import { ErrorBuilderBackendService } from '../../errors/services/error-builder.
25
25
  import { describeCaughtError, projectCaughtErrorLogFields } from '../../errors/utils/error-log-level-classification.backend.utils.js';
26
26
  import { runInFreshRequestContextIfAbsent } from '../../runtime/models/request-context.als.backend.js';
27
27
  import { ErrorType, ErrorCustomMessageReference, RabbitMQQueueArgKeys, buildReplyQueueName, buildDelayQueueName, buildRabbitMQConnectionUrl, } from '@wildo-ai/saas-models';
28
+ /**
29
+ * The RabbitMQ realisation of {@link QueueAdapter} (#502).
30
+ *
31
+ * Everything a background-work consumer needs is declared on the port; what remains here and NOT on
32
+ * it is genuinely broker-specific — `configure()` takes a `RabbitMQConfig`, and `getChannel()` /
33
+ * `getTopologyChannel()` hand out an amqplib `Channel` that only a broker can produce. A caller that
34
+ * needs one of those names this class, which is an honest dependency rather than a port with a hole
35
+ * in it.
36
+ */
28
37
  let RabbitMQAdapterBackendService = class RabbitMQAdapterBackendService {
29
38
  logger;
30
39
  appConfigService;
@@ -662,6 +671,30 @@ let RabbitMQAdapterBackendService = class RabbitMQAdapterBackendService {
662
671
  /**
663
672
  * Get pod ID for this instance.
664
673
  */
674
+ /**
675
+ * Queue depth from the broker, or `null` when no channel is open (#502).
676
+ *
677
+ * This replaces monitoring reaching for `getChannel()` and calling `checkQueue` itself. The
678
+ * behaviour is unchanged — `null` here produces the same empty metrics that a null channel already
679
+ * produced — but the question is now one every adapter can answer about itself, instead of a
680
+ * connection handle only this one can hand out.
681
+ */
682
+ async getQueueDepth(queueName) {
683
+ const channel = this.getChannel();
684
+ if (!channel) {
685
+ return null;
686
+ }
687
+ // `checkQueue` CLOSES the channel when the queue does not exist — the reason monitoring stopped
688
+ // probing dead-letter queues (see `getQueueMetrics`). Reported as "not observable" rather than
689
+ // thrown: a queue that has not been asserted yet is not a fault in the runtime being monitored.
690
+ try {
691
+ const queueInfo = await channel.checkQueue(queueName);
692
+ return queueInfo.messageCount;
693
+ }
694
+ catch {
695
+ return null;
696
+ }
697
+ }
665
698
  getPodId() {
666
699
  return this.podId;
667
700
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-adapter.backend.service.js","sourceRoot":"","sources":["../../../../../src/queue/adapters/rabbitmq-adapter.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RabbitMQ Adapter for Queue System\n *\n * Provides connection management, publishing, and consuming capabilities.\n * Uses amqplib for RabbitMQ communication.\n */\n\nimport { buildRuntimePrincipalQueueSegment, runtimePrincipalKindFromRuntimeProfile } from '@wildo-ai/platform-config-lib';\nimport { injectable, inject, Container } from 'inversify';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { runInFreshRequestContextIfAbsent } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\nimport {\n ErrorType,\n ErrorCustomMessageReference,\n JobPayload,\n JobResult,\n RabbitMQQueueArgKeys,\n buildQueueName,\n buildReplyQueueName,\n buildDelayQueueName,\n buildRabbitMQConnectionUrl,\n} from '@wildo-ai/saas-models';\n\n// Import amqplib types\n// Note: We use 'any' for Connection because amqplib types are complex and vary between versions\nimport type { Channel, ConsumeMessage, Options } from 'amqplib';\n\n// Connection type from amqplib - using any for compatibility with different type versions\ntype AmqpConnection = any;\n\n/**\n * RabbitMQ configuration for connection.\n */\nexport interface RabbitMQConfig {\n host: string;\n port: number;\n username: string;\n password: string;\n vhost?: string;\n heartbeat?: number;\n connectionTimeout?: number;\n channelMax?: number;\n}\n\n/**\n * Queue assertion options.\n */\nexport interface QueueAssertOptions {\n durable?: boolean;\n exclusive?: boolean;\n autoDelete?: boolean;\n deadLetterExchange?: string;\n deadLetterRoutingKey?: string;\n messageTtl?: number;\n maxLength?: number;\n}\n\n/**\n * Publish options for messages.\n */\nexport interface PublishOptions {\n correlationId?: string;\n replyTo?: string;\n persistent?: boolean;\n expiration?: string;\n priority?: number;\n}\n\n/**\n * Message handler type for consumers.\n */\nexport type MessageHandler = (msg: ConsumeMessage, channel: Channel) => Promise<void>;\n\n@injectable()\nexport class RabbitMQAdapterBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private connection: AmqpConnection | null = null;\n private channel: Channel | null = null;\n /**\n * Dedicated channel used ONLY for topology declarations (`assertQueue`).\n *\n * Queue declarations can fail with `406 PRECONDITION_FAILED` when an\n * already-existing durable queue is redeclared with different immutable\n * arguments (e.g. a pre-DLX `operations` queue redeclared with an\n * `x-dead-letter-exchange`). RabbitMQ responds to a 406 by **closing the\n * channel it arrived on**. If declarations ran on the primary\n * publish/consume channel, one incompatible legacy queue would tear down the\n * whole channel — the adapter would report itself disconnected, every\n * subsequent (compatible) declaration would be skipped, and the app would\n * crash-loop during bring-up.\n *\n * Isolating declarations on their own channel means a 406 kills only THIS\n * channel; the primary channel stays alive, and the topology channel is\n * lazily recreated on the next declaration. See {@link getTopologyChannel}.\n */\n private topologyChannel: Channel | null = null;\n private readonly config: RabbitMQConfig | null = null;\n private isConfigured = false;\n private consumerTags: Map<string, string> = new Map();\n /**\n * Names of retry/delay queues already asserted on the current channel.\n * `scheduleDelayedRetry` declares a delay queue per distinct delay value; this\n * cache skips the redundant round-trip on subsequent retries. Cleared when the\n * channel closes so a fresh channel re-asserts (queues are durable, but a reset\n * vhost / broker would otherwise be assumed present).\n */\n private assertedDelayQueues: Set<string> = new Set();\n private replyQueueName: string | null = null;\n private readonly podId: string;\n /**\n * Opt-in gate for automatic topology remediation of a `406\n * PRECONDITION_FAILED` on `assertQueue`. When enabled AND the mismatched\n * queue is **empty**, the adapter deletes the legacy queue and re-declares it\n * with the desired arguments instead of throwing. Read once from\n * `WILDO_QUEUE_TOPOLOGY_AUTO_REMEDIATE=true`.\n *\n * Fail-closed by default (`false`): auto-deleting a queue is a data-loss\n * footgun outside greenfield/dev, so the framework refuses to do it unless an\n * operator explicitly opts in. Even when enabled, a queue that still holds\n * messages is NEVER auto-deleted — the assertion re-throws so a human\n * decides. See {@link remediateMismatchedQueue}.\n */\n private readonly topologyAutoRemediateEnabled: boolean;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n // Appended LAST — this constructor is resolved positionally by several\n // containers, and inserting mid-list silently shifts every later dependency.\n @inject(SAAS_SERVICE_TYPES.Container) private readonly container: Container,\n ) {\n this.logDebug = this.logger.debugByType('RabbitMQAdapterBackendService');\n this.logger.setDebugTypeLogging('RabbitMQAdapterBackendService', false);\n // Get pod ID from environment or generate one\n this.podId = process.env.K8S_POD_NAME ||\n process.env.HOSTNAME ||\n `local-${Math.random().toString(36).substring(2, 10)}`;\n this.topologyAutoRemediateEnabled =\n process.env.WILDO_QUEUE_TOPOLOGY_AUTO_REMEDIATE === 'true';\n }\n\n /**\n * Configure the RabbitMQ adapter with connection settings.\n * Must be called before connect().\n */\n public configure(config: RabbitMQConfig): void {\n (this as any).config = config;\n this.isConfigured = true;\n this.logger.info('RabbitMQ adapter configured', { host: config.host, port: config.port });\n }\n\n /**\n * Connect to RabbitMQ server.\n */\n public async connect(): Promise<void> {\n if (!this.isConfigured || !this.config) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_INITIALIZATION_FAILED,\n context: { message: 'RabbitMQ adapter not configured. Call configure() first.' },\n }\n );\n }\n\n try {\n // Dynamic import amqplib\n const amqp = await import('amqplib');\n\n const connectionUrl = buildRabbitMQConnectionUrl({\n host: this.config.host,\n port: this.config.port,\n username: this.config.username,\n password: this.config.password,\n vhost: this.config.vhost,\n });\n\n this.connection = await amqp.connect(connectionUrl, {\n heartbeat: this.config.heartbeat ?? 60,\n timeout: this.config.connectionTimeout ?? 30000,\n });\n\n // Handle connection events\n this.connection.on('error', (err) => {\n this.logger.error('RabbitMQ connection error', { error: err.message });\n });\n\n this.connection.on('close', () => {\n this.logger.warn('RabbitMQ connection closed');\n this.connection = null;\n this.channel = null;\n // The topology channel dies with the connection too.\n this.topologyChannel = null;\n });\n\n // Create the primary publish/consume channel.\n this.channel = await this.connection.createChannel();\n\n // Handle channel events (prevent unhandled errors during RabbitMQ restarts)\n this.channel.on('error', (err) => {\n this.logger.error('RabbitMQ channel error', { error: err.message });\n });\n\n this.channel.on('close', () => {\n this.logger.warn('RabbitMQ channel closed');\n this.channel = null;\n // Force re-assertion of delay queues on the next channel.\n this.assertedDelayQueues.clear();\n });\n\n // Set prefetch for fair dispatch\n await this.channel.prefetch(1);\n\n // Eagerly create the dedicated topology-declaration channel so the first\n // `assertQueue` does not pay a channel round-trip. Its lifecycle is\n // independent of the primary channel: a `406 PRECONDITION_FAILED` closes\n // only this channel, never the primary publish/consume path.\n this.topologyChannel = await this.createTopologyChannel(this.connection);\n\n this.logger.info('Connected to RabbitMQ', { host: this.config.host });\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CONNECTION_FAILED,\n context: {\n host: this.config.host,\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n /**\n * Check if connected to RabbitMQ.\n */\n public isConnected(): boolean {\n return this.connection !== null && this.channel !== null;\n }\n\n /**\n * Get the channel for direct operations.\n */\n public getChannel(): Channel {\n if (!this.channel) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CHANNEL_CLOSED,\n context: { message: 'RabbitMQ channel not available' },\n }\n );\n }\n return this.channel;\n }\n\n /**\n * Create a dedicated topology-declaration channel with isolated error\n * handling. A `406 PRECONDITION_FAILED` on a declaration closes only this\n * channel; the close handler nulls the reference so it is lazily recreated on\n * the next declaration. Never carries consumers or publishes.\n */\n private async createTopologyChannel(connection: AmqpConnection): Promise<Channel> {\n const channel: Channel = await connection.createChannel();\n\n channel.on('error', (err: Error) => {\n // Expected on a 406 arg-mismatch declaration. Log, but do NOT treat as a\n // connection failure — the primary channel is unaffected.\n this.logger.error('RabbitMQ topology channel error', { error: err.message });\n });\n\n channel.on('close', () => {\n this.topologyChannel = null;\n // A delay queue asserted on a now-closed channel must be re-asserted.\n this.assertedDelayQueues.clear();\n });\n\n return channel;\n }\n\n /**\n * Get the dedicated topology-declaration channel, recreating it if a prior\n * `406` (or a broker restart) closed it. Public so callers that must declare\n * with raw arguments not modelled by {@link QueueAssertOptions} (e.g. a\n * quorum-queue `x-queue-type`) still benefit from primary-channel isolation.\n */\n public async getTopologyChannel(): Promise<Channel> {\n if (this.topologyChannel) {\n return this.topologyChannel;\n }\n if (!this.connection) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CHANNEL_CLOSED,\n context: { message: 'RabbitMQ connection not available for topology channel' },\n }\n );\n }\n this.topologyChannel = await this.createTopologyChannel(this.connection);\n return this.topologyChannel;\n }\n\n /**\n * Translate {@link QueueAssertOptions} into amqplib's `Options.AssertQueue`.\n *\n * `deadLetterExchange === ''` is meaningful: it selects the DEFAULT exchange,\n * which routes a dead-lettered message by `x-dead-letter-routing-key` (a queue\n * name) — this is exactly how the durable retry/delay queues loop a held\n * message back to its source queue. Only skip when the caller passed nothing\n * (`undefined`), i.e. does not want dead-lettering at all.\n */\n private buildAssertQueueOptions(options: QueueAssertOptions): Options.AssertQueue {\n const queueOptions: Options.AssertQueue = {\n durable: options.durable ?? true,\n exclusive: options.exclusive ?? false,\n autoDelete: options.autoDelete ?? false,\n arguments: {} as Record<string, unknown>,\n };\n\n if (options.deadLetterExchange !== undefined) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.DEAD_LETTER_EXCHANGE] =\n options.deadLetterExchange;\n if (options.deadLetterRoutingKey) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.DEAD_LETTER_ROUTING_KEY] =\n options.deadLetterRoutingKey;\n }\n }\n if (options.messageTtl) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.MESSAGE_TTL] = options.messageTtl;\n }\n if (options.maxLength) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.MAX_LENGTH] = options.maxLength;\n }\n\n return queueOptions;\n }\n\n /**\n * Assert a queue exists (create if not).\n *\n * Declared on the dedicated {@link topologyChannel} so an arg-mismatch `406`\n * cannot tear down the primary publish/consume channel. When the mismatch is\n * unrecoverable in place (a pre-existing queue with different immutable args)\n * and {@link topologyAutoRemediateEnabled} is set, an EMPTY legacy queue is\n * deleted and re-declared with the desired args; otherwise the `406`\n * propagates with a descriptive, operator-actionable error.\n */\n public async assertQueue(\n queueName: string,\n options: QueueAssertOptions = {}\n ): Promise<void> {\n const queueOptions = this.buildAssertQueueOptions(options);\n\n try {\n const channel = await this.getTopologyChannel();\n await channel.assertQueue(queueName, queueOptions);\n } catch (error) {\n if (!this.isPreconditionFailed(error)) {\n throw error;\n }\n if (!this.topologyAutoRemediateEnabled) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_INITIALIZATION_FAILED,\n context: {\n queueName,\n message:\n `Queue '${queueName}' already exists with incompatible arguments ` +\n `(406 PRECONDITION_FAILED). RabbitMQ cannot mutate a live queue's args. ` +\n `Delete the stale queue once so it re-declares with the new args, or set ` +\n `WILDO_QUEUE_TOPOLOGY_AUTO_REMEDIATE=true to auto-delete it when empty.`,\n error: describeCaughtError(error),\n },\n }\n );\n }\n await this.remediateMismatchedQueue(queueName, queueOptions);\n }\n\n this.logger.debug('Queue asserted', { queueName, options });\n }\n\n /**\n * Whether an amqplib channel error is a `406 PRECONDITION_FAILED` (immutable\n * queue-argument mismatch on a redeclaration).\n */\n private isPreconditionFailed(error: unknown): boolean {\n const e = error as { code?: number; message?: unknown } | null;\n return (\n e?.code === 406 ||\n (typeof e?.message === 'string' && e.message.includes('PRECONDITION_FAILED'))\n );\n }\n\n /**\n * Remediate a `406` arg-mismatch by deleting the legacy queue and\n * re-declaring it with the desired arguments — but ONLY when the queue is\n * empty. A non-empty queue is never auto-deleted; the assertion re-throws so a\n * human decides (data loss must be an explicit human action, never a\n * bring-up side effect). Runs on a fresh topology channel (the prior one was\n * closed by the 406).\n */\n private async remediateMismatchedQueue(\n queueName: string,\n queueOptions: Options.AssertQueue\n ): Promise<void> {\n // The 406 already killed the topology channel broker-side; its `close`\n // event nulls the cached reference, but that arrives on a later microtask,\n // so the cache may still point at the dead channel here. Discard it\n // explicitly and force a fresh one — `checkQueue`/`deleteQueue` on a closed\n // channel would otherwise reject.\n this.topologyChannel = null;\n const channel = await this.getTopologyChannel();\n\n const { messageCount } = await channel.checkQueue(queueName);\n if (messageCount > 0) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_INITIALIZATION_FAILED,\n context: {\n queueName,\n messageCount,\n message:\n `Refusing to auto-remediate queue '${queueName}': it holds ${messageCount} ` +\n `message(s). Drain or manually delete it before it can re-declare with the ` +\n `new arguments.`,\n },\n }\n );\n }\n\n await channel.deleteQueue(queueName);\n await channel.assertQueue(queueName, queueOptions);\n this.logger.warn('Topology auto-remediation: deleted empty mismatched queue and re-declared', {\n queueName,\n });\n }\n\n /**\n * Publish a job payload to a queue.\n */\n public async publish(\n queueName: string,\n payload: JobPayload,\n options: PublishOptions = {}\n ): Promise<void> {\n const channel = this.getChannel();\n\n try {\n const content = Buffer.from(JSON.stringify(payload));\n\n const publishOptions: Options.Publish = {\n persistent: options.persistent ?? true,\n correlationId: options.correlationId,\n replyTo: options.replyTo,\n priority: options.priority,\n };\n\n if (options.expiration) {\n publishOptions.expiration = options.expiration;\n }\n\n channel.sendToQueue(queueName, content, publishOptions);\n\n this.logger.debug('Message published', {\n queueName,\n jobId: payload.jobId,\n // NOT `correlationId`. This is the AMQP RPC REPLY-MATCHING id (`Options.Publish.correlationId`),\n // a different id from the request's Wildo `correlationId` that the logger's request-context\n // mixin already stamps on every line. Logging it under the name `correlationId` merged OVER the\n // mixin and SHADOWED the request's trace id — and on the fire-and-forget path, where this is\n // `undefined`, it replaced a real id with `\"[undefined]\"`, making the publish line unattributable.\n // Same distinction the job schema draws by naming its field `rpcReplyCorrelationId`.\n ...(options.correlationId ? { rpcReplyCorrelationId: options.correlationId } : {}),\n });\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_PUBLISH_FAILED,\n context: {\n queueName,\n jobId: payload.jobId,\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n /**\n * Schedule a durable, broker-timed retry of a failed job.\n *\n * Replaces the old in-process `setTimeout` backoff (which lost the retry if the\n * worker crashed during the wait, since the original message was already ACKed).\n * The job is published to a dedicated **delay queue** that holds it for\n * `delayMs` via RabbitMQ's per-queue `x-message-ttl`, then dead-letters it back\n * to `sourceQueueName` (through the default exchange, routed by queue name) for\n * re-delivery. The delay queue has NO consumer — the broker owns the wait, so a\n * held retry survives a worker (or broker) restart because both the queue and\n * the message are durable/persistent.\n *\n * One delay queue is declared per distinct `delayMs`, so every message in a\n * given delay queue shares the same TTL — avoiding RabbitMQ's per-message-TTL\n * head-of-line blocking (a short-delay message never waits behind a longer one).\n *\n * Contract: the caller MUST have incremented `retryCount` on `job` before\n * calling, and MUST ACK the original message afterward — the retry is now\n * durably owned by the broker.\n *\n * @param sourceQueueName - Queue the message returns to when the delay elapses\n * @param job - The (retry-incremented) job payload to redeliver\n * @param delayMs - How long the broker holds the message before redelivery\n * @param options - Publish options to preserve across the hop (RPC replyTo/correlationId)\n */\n public async scheduleDelayedRetry(\n sourceQueueName: string,\n job: JobPayload,\n delayMs: number,\n options: PublishOptions = {}\n ): Promise<void> {\n const delayQueueName = buildDelayQueueName(sourceQueueName, delayMs);\n\n // Lazily declare the delay queue (idempotent; cached to skip the round-trip).\n if (!this.assertedDelayQueues.has(delayQueueName)) {\n await this.assertQueue(delayQueueName, {\n durable: true,\n messageTtl: delayMs,\n deadLetterExchange: '', // default exchange → routes by routing key (queue name)\n deadLetterRoutingKey: sourceQueueName,\n });\n this.assertedDelayQueues.add(delayQueueName);\n }\n\n // Publish persistent so the held retry survives a broker restart.\n await this.publish(delayQueueName, job, options);\n\n this.logDebug('Retry scheduled via delay queue', {\n jobId: job.jobId,\n delayQueueName,\n delayMs,\n retryCount: job.retryCount,\n });\n }\n\n /**\n * Publish a job result to a reply queue.\n */\n public async publishResult(\n replyTo: string,\n correlationId: string,\n result: JobResult\n ): Promise<void> {\n const channel = this.getChannel();\n\n try {\n const content = Buffer.from(JSON.stringify(result));\n\n channel.sendToQueue(replyTo, content, {\n correlationId,\n persistent: false, // Reply messages don't need persistence\n });\n\n this.logger.debug('Result published', {\n replyTo,\n // See the note in `publish` — this is the RPC reply-matching id, not the request's trace id.\n rpcReplyCorrelationId: correlationId,\n jobId: result.jobId,\n status: result.status,\n });\n } catch (error) {\n this.logger.error('Failed to publish result', {\n replyTo,\n // See the note in `publish`. This one is at ERROR level, where shadowing the request's trace id\n // is worst: the line an operator reaches for first would name an unrelated RPC id instead.\n rpcReplyCorrelationId: correlationId,\n ...projectCaughtErrorLogFields(error),\n });\n }\n }\n\n /**\n * Set up a consumer for a queue.\n *\n * **Every consumed message runs inside a request-context frame, established HERE.** A consumed\n * message is an independent unit of work with no ambient context of its own, so without a frame its\n * log lines carry no `correlationId`, `buildError` has no id to fall back on, and any audit row it\n * writes lands unattributed. Framing at the ADAPTER rather than in each consumer is deliberate: this\n * method is the single door every AMQP consumer passes through — the job consumer, the domain-queue\n * consumer, the scheduled/cron lane, and the minion tick lane (which injects this same service from\n * `saas-minions-lib`) — so a future consumer cannot forget it. Hand-applying the wrapper per consumer\n * is precisely the \"invariant applied at N-1 of N call sites\" shape that has already produced repeat\n * findings in this codebase (`.claude/rules/invariant-call-site-enumeration.md`).\n *\n * `runInFreshRequestContextIfAbsent` (not `runWithRequestContext`) so it is idempotent: a consumer\n * that already established its own frame keeps it, and a message consumed from inside an existing\n * request (rare, but possible for an in-process drain) stays part of that request's trace.\n *\n * The frame wraps the error branch too — a message that fails still gets an attributable log line.\n * What this canNOT do is adopt the enqueuing request's `originCorrelationId`: that lives INSIDE the\n * payload, which only the consumer knows how to parse, so adoption stays each consumer's job\n * (`adoptCorrelationIdIntoCurrentFrame`) and this frame is the fresh id it starts from.\n */\n public async consume(\n queueName: string,\n handler: MessageHandler\n ): Promise<string> {\n const channel = this.getChannel();\n\n try {\n const { consumerTag } = await channel.consume(\n queueName,\n async (msg) => {\n if (!msg) return;\n\n await runInFreshRequestContextIfAbsent(async () => {\n try {\n await handler(msg, channel);\n } catch (error) {\n this.logger.error('Consumer handler error', {\n queueName,\n ...projectCaughtErrorLogFields(error),\n });\n // Nack without requeue on handler error. When the consumed queue has\n // a dead-letter-exchange wired (operations / scheduled / domain all\n // do now), the broker parks the message in that queue's `.deadletter`\n // for inspection; on a queue without a DLX it is discarded.\n channel.nack(msg, false, false);\n }\n });\n },\n { noAck: false }\n );\n\n this.consumerTags.set(queueName, consumerTag);\n this.logDebug('Consumer started', { queueName, consumerTag });\n\n return consumerTag;\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CONSUME_FAILED,\n context: {\n queueName,\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n /**\n * Cancel a consumer.\n */\n public async cancelConsumer(queueName: string): Promise<void> {\n const channel = this.getChannel();\n const consumerTag = this.consumerTags.get(queueName);\n\n if (consumerTag) {\n await channel.cancel(consumerTag);\n this.consumerTags.delete(queueName);\n this.logDebug('Consumer cancelled', { queueName, consumerTag });\n }\n }\n\n /**\n * Set up reply queue for RPC pattern (per pod).\n */\n\n /**\n * The runtime segment embedded in this process's reply-queue name.\n *\n * `undefined` for the application backend, deliberately: it keeps the\n * historical `wildo.reply.<appId>.<podId>` layout, so an existing deployment's\n * queue names do not move and its broker permission keeps matching. A named\n * runtime contributes `<kind>-<name>`, which is what a per-principal read\n * regex anchors on.\n *\n * Resolved fail-SAFE. An unresolvable principal cannot be a minion (minion\n * startup binds and initializes it), so falling back to the backend layout\n * preserves today's behaviour for minimal and test containers rather than\n * inventing a segment nobody granted.\n */\n private resolveReplyPrincipalSegment(): string | undefined {\n try {\n const descriptor = this.container\n .get<{ describe(): { runtimeProfile: string; runtimeKey?: string } }>(SAAS_SERVICE_TYPES.RuntimePrincipalService)\n .describe();\n // Derived through the SHARED builder, never locally. The broker permission\n // this queue name must satisfy is built from the same function, so the two\n // cannot drift; they previously agreed only because every minion name so\n // far happened to survive sanitisation unchanged.\n return buildRuntimePrincipalQueueSegment(\n runtimePrincipalKindFromRuntimeProfile(descriptor.runtimeProfile),\n descriptor.runtimeKey,\n );\n } catch {\n return undefined;\n }\n }\n\n public async setupReplyQueue(\n appId: string,\n onReply: (correlationId: string, result: JobResult) => void\n ): Promise<string> {\n const channel = this.getChannel();\n\n // The reply queue carries the OWNING RUNTIME in its name (see\n // `buildReplyQueueName`). Without it a minion's reply queue and the\n // application backend's differ only by an opaque per-process token, so a\n // broker permission cannot admit one and refuse the other — which is why\n // narrowing a minion's `read` refused its own replies and crash-looped it.\n this.replyQueueName = buildReplyQueueName(appId, this.podId, this.resolveReplyPrincipalSegment());\n\n // Create exclusive, auto-delete reply queue\n await channel.assertQueue(this.replyQueueName, {\n exclusive: true,\n autoDelete: true,\n durable: false,\n });\n\n // Start consuming replies\n await channel.consume(\n this.replyQueueName,\n (msg) => {\n if (!msg) return;\n\n const correlationId = msg.properties.correlationId;\n try {\n const result: JobResult = JSON.parse(msg.content.toString());\n onReply(correlationId, result);\n } catch (error) {\n this.logger.error('Failed to parse reply', {\n correlationId,\n ...projectCaughtErrorLogFields(error),\n });\n }\n\n channel.ack(msg);\n },\n { noAck: false }\n );\n\n this.logger.info('Reply queue set up', { replyQueueName: this.replyQueueName });\n\n return this.replyQueueName;\n }\n\n /**\n * Get the reply queue name for this pod.\n */\n public getReplyQueueName(): string | null {\n return this.replyQueueName;\n }\n\n /**\n * Acknowledge a message.\n */\n public ack(msg: ConsumeMessage): void {\n const channel = this.getChannel();\n channel.ack(msg);\n }\n\n /**\n * Reject a message.\n */\n public nack(msg: ConsumeMessage, requeue: boolean = false): void {\n const channel = this.getChannel();\n channel.nack(msg, false, requeue);\n }\n\n /**\n * Close the connection gracefully.\n */\n public async close(): Promise<void> {\n // Cancel all consumers\n for (const [queueName, consumerTag] of this.consumerTags) {\n try {\n await this.channel?.cancel(consumerTag);\n this.logger.debug('Consumer cancelled', { queueName, consumerTag });\n } catch (error) {\n this.logger.warn('Failed to cancel consumer', { queueName, error });\n }\n }\n this.consumerTags.clear();\n\n // Close the topology-declaration channel (best-effort; independent of the\n // primary channel).\n if (this.topologyChannel) {\n try {\n await this.topologyChannel.close();\n this.logger.debug('Topology channel closed');\n } catch (error) {\n this.logger.warn('Failed to close topology channel', { error });\n }\n this.topologyChannel = null;\n }\n\n // Close channel\n if (this.channel) {\n try {\n await this.channel.close();\n this.logger.debug('Channel closed');\n } catch (error) {\n this.logger.warn('Failed to close channel', { error });\n }\n this.channel = null;\n }\n\n // Close connection\n if (this.connection) {\n try {\n await this.connection.close();\n this.logger.info('RabbitMQ connection closed');\n } catch (error) {\n this.logger.warn('Failed to close connection', { error });\n }\n this.connection = null;\n }\n }\n\n /**\n * Get pod ID for this instance.\n */\n public getPodId(): string {\n return this.podId;\n }\n}\n"]}
1
+ {"version":3,"file":"rabbitmq-adapter.backend.service.js","sourceRoot":"","sources":["../../../../../src/queue/adapters/rabbitmq-adapter.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RabbitMQ Adapter for Queue System\n *\n * Provides connection management, publishing, and consuming capabilities.\n * Uses amqplib for RabbitMQ communication.\n */\n\nimport { buildRuntimePrincipalQueueSegment, runtimePrincipalKindFromRuntimeProfile } from '@wildo-ai/platform-config-lib';\nimport { injectable, inject, Container } from 'inversify';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { runInFreshRequestContextIfAbsent } from '~wildo-backend-lib/runtime/models/request-context.als.backend';\nimport {\n ErrorType,\n ErrorCustomMessageReference,\n JobPayload,\n JobResult,\n RabbitMQQueueArgKeys,\n buildQueueName,\n buildReplyQueueName,\n buildDelayQueueName,\n buildRabbitMQConnectionUrl,\n} from '@wildo-ai/saas-models';\n\n// Import amqplib types\n// Note: We use 'any' for Connection because amqplib types are complex and vary between versions\nimport type { Channel, ConsumeMessage, Options } from 'amqplib';\nimport type {\n MessageHandler,\n QueueAdapter,\n QueueConsumeMessage,\n} from '~wildo-backend-lib/queue/adapters/queue-adapter.backend.interface';\nimport type {\n PublishOptions,\n QueueAssertOptions,\n} from '~wildo-backend-lib/queue/adapters/queue-adapter.backend.options';\n\n// Connection type from amqplib - using any for compatibility with different type versions\ntype AmqpConnection = any;\n\n/**\n * RabbitMQ configuration for connection.\n */\nexport interface RabbitMQConfig {\n host: string;\n port: number;\n username: string;\n password: string;\n vhost?: string;\n heartbeat?: number;\n connectionTimeout?: number;\n channelMax?: number;\n}\n\n/**\n * The RabbitMQ realisation of {@link QueueAdapter} (#502).\n *\n * Everything a background-work consumer needs is declared on the port; what remains here and NOT on\n * it is genuinely broker-specific — `configure()` takes a `RabbitMQConfig`, and `getChannel()` /\n * `getTopologyChannel()` hand out an amqplib `Channel` that only a broker can produce. A caller that\n * needs one of those names this class, which is an honest dependency rather than a port with a hole\n * in it.\n */\n@injectable()\nexport class RabbitMQAdapterBackendService implements QueueAdapter {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n private connection: AmqpConnection | null = null;\n private channel: Channel | null = null;\n /**\n * Dedicated channel used ONLY for topology declarations (`assertQueue`).\n *\n * Queue declarations can fail with `406 PRECONDITION_FAILED` when an\n * already-existing durable queue is redeclared with different immutable\n * arguments (e.g. a pre-DLX `operations` queue redeclared with an\n * `x-dead-letter-exchange`). RabbitMQ responds to a 406 by **closing the\n * channel it arrived on**. If declarations ran on the primary\n * publish/consume channel, one incompatible legacy queue would tear down the\n * whole channel — the adapter would report itself disconnected, every\n * subsequent (compatible) declaration would be skipped, and the app would\n * crash-loop during bring-up.\n *\n * Isolating declarations on their own channel means a 406 kills only THIS\n * channel; the primary channel stays alive, and the topology channel is\n * lazily recreated on the next declaration. See {@link getTopologyChannel}.\n */\n private topologyChannel: Channel | null = null;\n private readonly config: RabbitMQConfig | null = null;\n private isConfigured = false;\n private consumerTags: Map<string, string> = new Map();\n /**\n * Names of retry/delay queues already asserted on the current channel.\n * `scheduleDelayedRetry` declares a delay queue per distinct delay value; this\n * cache skips the redundant round-trip on subsequent retries. Cleared when the\n * channel closes so a fresh channel re-asserts (queues are durable, but a reset\n * vhost / broker would otherwise be assumed present).\n */\n private assertedDelayQueues: Set<string> = new Set();\n private replyQueueName: string | null = null;\n private readonly podId: string;\n /**\n * Opt-in gate for automatic topology remediation of a `406\n * PRECONDITION_FAILED` on `assertQueue`. When enabled AND the mismatched\n * queue is **empty**, the adapter deletes the legacy queue and re-declares it\n * with the desired arguments instead of throwing. Read once from\n * `WILDO_QUEUE_TOPOLOGY_AUTO_REMEDIATE=true`.\n *\n * Fail-closed by default (`false`): auto-deleting a queue is a data-loss\n * footgun outside greenfield/dev, so the framework refuses to do it unless an\n * operator explicitly opts in. Even when enabled, a queue that still holds\n * messages is NEVER auto-deleted — the assertion re-throws so a human\n * decides. See {@link remediateMismatchedQueue}.\n */\n private readonly topologyAutoRemediateEnabled: boolean;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n // Appended LAST — this constructor is resolved positionally by several\n // containers, and inserting mid-list silently shifts every later dependency.\n @inject(SAAS_SERVICE_TYPES.Container) private readonly container: Container,\n ) {\n this.logDebug = this.logger.debugByType('RabbitMQAdapterBackendService');\n this.logger.setDebugTypeLogging('RabbitMQAdapterBackendService', false);\n // Get pod ID from environment or generate one\n this.podId = process.env.K8S_POD_NAME ||\n process.env.HOSTNAME ||\n `local-${Math.random().toString(36).substring(2, 10)}`;\n this.topologyAutoRemediateEnabled =\n process.env.WILDO_QUEUE_TOPOLOGY_AUTO_REMEDIATE === 'true';\n }\n\n /**\n * Configure the RabbitMQ adapter with connection settings.\n * Must be called before connect().\n */\n public configure(config: RabbitMQConfig): void {\n (this as any).config = config;\n this.isConfigured = true;\n this.logger.info('RabbitMQ adapter configured', { host: config.host, port: config.port });\n }\n\n /**\n * Connect to RabbitMQ server.\n */\n public async connect(): Promise<void> {\n if (!this.isConfigured || !this.config) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_INITIALIZATION_FAILED,\n context: { message: 'RabbitMQ adapter not configured. Call configure() first.' },\n }\n );\n }\n\n try {\n // Dynamic import amqplib\n const amqp = await import('amqplib');\n\n const connectionUrl = buildRabbitMQConnectionUrl({\n host: this.config.host,\n port: this.config.port,\n username: this.config.username,\n password: this.config.password,\n vhost: this.config.vhost,\n });\n\n this.connection = await amqp.connect(connectionUrl, {\n heartbeat: this.config.heartbeat ?? 60,\n timeout: this.config.connectionTimeout ?? 30000,\n });\n\n // Handle connection events\n this.connection.on('error', (err) => {\n this.logger.error('RabbitMQ connection error', { error: err.message });\n });\n\n this.connection.on('close', () => {\n this.logger.warn('RabbitMQ connection closed');\n this.connection = null;\n this.channel = null;\n // The topology channel dies with the connection too.\n this.topologyChannel = null;\n });\n\n // Create the primary publish/consume channel.\n this.channel = await this.connection.createChannel();\n\n // Handle channel events (prevent unhandled errors during RabbitMQ restarts)\n this.channel.on('error', (err) => {\n this.logger.error('RabbitMQ channel error', { error: err.message });\n });\n\n this.channel.on('close', () => {\n this.logger.warn('RabbitMQ channel closed');\n this.channel = null;\n // Force re-assertion of delay queues on the next channel.\n this.assertedDelayQueues.clear();\n });\n\n // Set prefetch for fair dispatch\n await this.channel.prefetch(1);\n\n // Eagerly create the dedicated topology-declaration channel so the first\n // `assertQueue` does not pay a channel round-trip. Its lifecycle is\n // independent of the primary channel: a `406 PRECONDITION_FAILED` closes\n // only this channel, never the primary publish/consume path.\n this.topologyChannel = await this.createTopologyChannel(this.connection);\n\n this.logger.info('Connected to RabbitMQ', { host: this.config.host });\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CONNECTION_FAILED,\n context: {\n host: this.config.host,\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n /**\n * Check if connected to RabbitMQ.\n */\n public isConnected(): boolean {\n return this.connection !== null && this.channel !== null;\n }\n\n /**\n * Get the channel for direct operations.\n */\n public getChannel(): Channel {\n if (!this.channel) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CHANNEL_CLOSED,\n context: { message: 'RabbitMQ channel not available' },\n }\n );\n }\n return this.channel;\n }\n\n /**\n * Create a dedicated topology-declaration channel with isolated error\n * handling. A `406 PRECONDITION_FAILED` on a declaration closes only this\n * channel; the close handler nulls the reference so it is lazily recreated on\n * the next declaration. Never carries consumers or publishes.\n */\n private async createTopologyChannel(connection: AmqpConnection): Promise<Channel> {\n const channel: Channel = await connection.createChannel();\n\n channel.on('error', (err: Error) => {\n // Expected on a 406 arg-mismatch declaration. Log, but do NOT treat as a\n // connection failure — the primary channel is unaffected.\n this.logger.error('RabbitMQ topology channel error', { error: err.message });\n });\n\n channel.on('close', () => {\n this.topologyChannel = null;\n // A delay queue asserted on a now-closed channel must be re-asserted.\n this.assertedDelayQueues.clear();\n });\n\n return channel;\n }\n\n /**\n * Get the dedicated topology-declaration channel, recreating it if a prior\n * `406` (or a broker restart) closed it. Public so callers that must declare\n * with raw arguments not modelled by {@link QueueAssertOptions} (e.g. a\n * quorum-queue `x-queue-type`) still benefit from primary-channel isolation.\n */\n public async getTopologyChannel(): Promise<Channel> {\n if (this.topologyChannel) {\n return this.topologyChannel;\n }\n if (!this.connection) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CHANNEL_CLOSED,\n context: { message: 'RabbitMQ connection not available for topology channel' },\n }\n );\n }\n this.topologyChannel = await this.createTopologyChannel(this.connection);\n return this.topologyChannel;\n }\n\n /**\n * Translate {@link QueueAssertOptions} into amqplib's `Options.AssertQueue`.\n *\n * `deadLetterExchange === ''` is meaningful: it selects the DEFAULT exchange,\n * which routes a dead-lettered message by `x-dead-letter-routing-key` (a queue\n * name) — this is exactly how the durable retry/delay queues loop a held\n * message back to its source queue. Only skip when the caller passed nothing\n * (`undefined`), i.e. does not want dead-lettering at all.\n */\n private buildAssertQueueOptions(options: QueueAssertOptions): Options.AssertQueue {\n const queueOptions: Options.AssertQueue = {\n durable: options.durable ?? true,\n exclusive: options.exclusive ?? false,\n autoDelete: options.autoDelete ?? false,\n arguments: {} as Record<string, unknown>,\n };\n\n if (options.deadLetterExchange !== undefined) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.DEAD_LETTER_EXCHANGE] =\n options.deadLetterExchange;\n if (options.deadLetterRoutingKey) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.DEAD_LETTER_ROUTING_KEY] =\n options.deadLetterRoutingKey;\n }\n }\n if (options.messageTtl) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.MESSAGE_TTL] = options.messageTtl;\n }\n if (options.maxLength) {\n (queueOptions.arguments as Record<string, unknown>)[RabbitMQQueueArgKeys.MAX_LENGTH] = options.maxLength;\n }\n\n return queueOptions;\n }\n\n /**\n * Assert a queue exists (create if not).\n *\n * Declared on the dedicated {@link topologyChannel} so an arg-mismatch `406`\n * cannot tear down the primary publish/consume channel. When the mismatch is\n * unrecoverable in place (a pre-existing queue with different immutable args)\n * and {@link topologyAutoRemediateEnabled} is set, an EMPTY legacy queue is\n * deleted and re-declared with the desired args; otherwise the `406`\n * propagates with a descriptive, operator-actionable error.\n */\n public async assertQueue(\n queueName: string,\n options: QueueAssertOptions = {}\n ): Promise<void> {\n const queueOptions = this.buildAssertQueueOptions(options);\n\n try {\n const channel = await this.getTopologyChannel();\n await channel.assertQueue(queueName, queueOptions);\n } catch (error) {\n if (!this.isPreconditionFailed(error)) {\n throw error;\n }\n if (!this.topologyAutoRemediateEnabled) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_INITIALIZATION_FAILED,\n context: {\n queueName,\n message:\n `Queue '${queueName}' already exists with incompatible arguments ` +\n `(406 PRECONDITION_FAILED). RabbitMQ cannot mutate a live queue's args. ` +\n `Delete the stale queue once so it re-declares with the new args, or set ` +\n `WILDO_QUEUE_TOPOLOGY_AUTO_REMEDIATE=true to auto-delete it when empty.`,\n error: describeCaughtError(error),\n },\n }\n );\n }\n await this.remediateMismatchedQueue(queueName, queueOptions);\n }\n\n this.logger.debug('Queue asserted', { queueName, options });\n }\n\n /**\n * Whether an amqplib channel error is a `406 PRECONDITION_FAILED` (immutable\n * queue-argument mismatch on a redeclaration).\n */\n private isPreconditionFailed(error: unknown): boolean {\n const e = error as { code?: number; message?: unknown } | null;\n return (\n e?.code === 406 ||\n (typeof e?.message === 'string' && e.message.includes('PRECONDITION_FAILED'))\n );\n }\n\n /**\n * Remediate a `406` arg-mismatch by deleting the legacy queue and\n * re-declaring it with the desired arguments — but ONLY when the queue is\n * empty. A non-empty queue is never auto-deleted; the assertion re-throws so a\n * human decides (data loss must be an explicit human action, never a\n * bring-up side effect). Runs on a fresh topology channel (the prior one was\n * closed by the 406).\n */\n private async remediateMismatchedQueue(\n queueName: string,\n queueOptions: Options.AssertQueue\n ): Promise<void> {\n // The 406 already killed the topology channel broker-side; its `close`\n // event nulls the cached reference, but that arrives on a later microtask,\n // so the cache may still point at the dead channel here. Discard it\n // explicitly and force a fresh one — `checkQueue`/`deleteQueue` on a closed\n // channel would otherwise reject.\n this.topologyChannel = null;\n const channel = await this.getTopologyChannel();\n\n const { messageCount } = await channel.checkQueue(queueName);\n if (messageCount > 0) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_INITIALIZATION_FAILED,\n context: {\n queueName,\n messageCount,\n message:\n `Refusing to auto-remediate queue '${queueName}': it holds ${messageCount} ` +\n `message(s). Drain or manually delete it before it can re-declare with the ` +\n `new arguments.`,\n },\n }\n );\n }\n\n await channel.deleteQueue(queueName);\n await channel.assertQueue(queueName, queueOptions);\n this.logger.warn('Topology auto-remediation: deleted empty mismatched queue and re-declared', {\n queueName,\n });\n }\n\n /**\n * Publish a job payload to a queue.\n */\n public async publish(\n queueName: string,\n payload: JobPayload,\n options: PublishOptions = {}\n ): Promise<void> {\n const channel = this.getChannel();\n\n try {\n const content = Buffer.from(JSON.stringify(payload));\n\n const publishOptions: Options.Publish = {\n persistent: options.persistent ?? true,\n correlationId: options.correlationId,\n replyTo: options.replyTo,\n priority: options.priority,\n };\n\n if (options.expiration) {\n publishOptions.expiration = options.expiration;\n }\n\n channel.sendToQueue(queueName, content, publishOptions);\n\n this.logger.debug('Message published', {\n queueName,\n jobId: payload.jobId,\n // NOT `correlationId`. This is the AMQP RPC REPLY-MATCHING id (`Options.Publish.correlationId`),\n // a different id from the request's Wildo `correlationId` that the logger's request-context\n // mixin already stamps on every line. Logging it under the name `correlationId` merged OVER the\n // mixin and SHADOWED the request's trace id — and on the fire-and-forget path, where this is\n // `undefined`, it replaced a real id with `\"[undefined]\"`, making the publish line unattributable.\n // Same distinction the job schema draws by naming its field `rpcReplyCorrelationId`.\n ...(options.correlationId ? { rpcReplyCorrelationId: options.correlationId } : {}),\n });\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_PUBLISH_FAILED,\n context: {\n queueName,\n jobId: payload.jobId,\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n /**\n * Schedule a durable, broker-timed retry of a failed job.\n *\n * Replaces the old in-process `setTimeout` backoff (which lost the retry if the\n * worker crashed during the wait, since the original message was already ACKed).\n * The job is published to a dedicated **delay queue** that holds it for\n * `delayMs` via RabbitMQ's per-queue `x-message-ttl`, then dead-letters it back\n * to `sourceQueueName` (through the default exchange, routed by queue name) for\n * re-delivery. The delay queue has NO consumer — the broker owns the wait, so a\n * held retry survives a worker (or broker) restart because both the queue and\n * the message are durable/persistent.\n *\n * One delay queue is declared per distinct `delayMs`, so every message in a\n * given delay queue shares the same TTL — avoiding RabbitMQ's per-message-TTL\n * head-of-line blocking (a short-delay message never waits behind a longer one).\n *\n * Contract: the caller MUST have incremented `retryCount` on `job` before\n * calling, and MUST ACK the original message afterward — the retry is now\n * durably owned by the broker.\n *\n * @param sourceQueueName - Queue the message returns to when the delay elapses\n * @param job - The (retry-incremented) job payload to redeliver\n * @param delayMs - How long the broker holds the message before redelivery\n * @param options - Publish options to preserve across the hop (RPC replyTo/correlationId)\n */\n public async scheduleDelayedRetry(\n sourceQueueName: string,\n job: JobPayload,\n delayMs: number,\n options: PublishOptions = {}\n ): Promise<void> {\n const delayQueueName = buildDelayQueueName(sourceQueueName, delayMs);\n\n // Lazily declare the delay queue (idempotent; cached to skip the round-trip).\n if (!this.assertedDelayQueues.has(delayQueueName)) {\n await this.assertQueue(delayQueueName, {\n durable: true,\n messageTtl: delayMs,\n deadLetterExchange: '', // default exchange → routes by routing key (queue name)\n deadLetterRoutingKey: sourceQueueName,\n });\n this.assertedDelayQueues.add(delayQueueName);\n }\n\n // Publish persistent so the held retry survives a broker restart.\n await this.publish(delayQueueName, job, options);\n\n this.logDebug('Retry scheduled via delay queue', {\n jobId: job.jobId,\n delayQueueName,\n delayMs,\n retryCount: job.retryCount,\n });\n }\n\n /**\n * Publish a job result to a reply queue.\n */\n public async publishResult(\n replyTo: string,\n correlationId: string,\n result: JobResult\n ): Promise<void> {\n const channel = this.getChannel();\n\n try {\n const content = Buffer.from(JSON.stringify(result));\n\n channel.sendToQueue(replyTo, content, {\n correlationId,\n persistent: false, // Reply messages don't need persistence\n });\n\n this.logger.debug('Result published', {\n replyTo,\n // See the note in `publish` — this is the RPC reply-matching id, not the request's trace id.\n rpcReplyCorrelationId: correlationId,\n jobId: result.jobId,\n status: result.status,\n });\n } catch (error) {\n this.logger.error('Failed to publish result', {\n replyTo,\n // See the note in `publish`. This one is at ERROR level, where shadowing the request's trace id\n // is worst: the line an operator reaches for first would name an unrelated RPC id instead.\n rpcReplyCorrelationId: correlationId,\n ...projectCaughtErrorLogFields(error),\n });\n }\n }\n\n /**\n * Set up a consumer for a queue.\n *\n * **Every consumed message runs inside a request-context frame, established HERE.** A consumed\n * message is an independent unit of work with no ambient context of its own, so without a frame its\n * log lines carry no `correlationId`, `buildError` has no id to fall back on, and any audit row it\n * writes lands unattributed. Framing at the ADAPTER rather than in each consumer is deliberate: this\n * method is the single door every AMQP consumer passes through — the job consumer, the domain-queue\n * consumer, the scheduled/cron lane, and the minion tick lane (which injects this same service from\n * `saas-minions-lib`) — so a future consumer cannot forget it. Hand-applying the wrapper per consumer\n * is precisely the \"invariant applied at N-1 of N call sites\" shape that has already produced repeat\n * findings in this codebase (`.claude/rules/invariant-call-site-enumeration.md`).\n *\n * `runInFreshRequestContextIfAbsent` (not `runWithRequestContext`) so it is idempotent: a consumer\n * that already established its own frame keeps it, and a message consumed from inside an existing\n * request (rare, but possible for an in-process drain) stays part of that request's trace.\n *\n * The frame wraps the error branch too — a message that fails still gets an attributable log line.\n * What this canNOT do is adopt the enqueuing request's `originCorrelationId`: that lives INSIDE the\n * payload, which only the consumer knows how to parse, so adoption stays each consumer's job\n * (`adoptCorrelationIdIntoCurrentFrame`) and this frame is the fresh id it starts from.\n */\n public async consume(\n queueName: string,\n handler: MessageHandler\n ): Promise<string> {\n const channel = this.getChannel();\n\n try {\n const { consumerTag } = await channel.consume(\n queueName,\n async (msg) => {\n if (!msg) return;\n\n await runInFreshRequestContextIfAbsent(async () => {\n try {\n await handler(msg, channel);\n } catch (error) {\n this.logger.error('Consumer handler error', {\n queueName,\n ...projectCaughtErrorLogFields(error),\n });\n // Nack without requeue on handler error. When the consumed queue has\n // a dead-letter-exchange wired (operations / scheduled / domain all\n // do now), the broker parks the message in that queue's `.deadletter`\n // for inspection; on a queue without a DLX it is discarded.\n channel.nack(msg, false, false);\n }\n });\n },\n { noAck: false }\n );\n\n this.consumerTags.set(queueName, consumerTag);\n this.logDebug('Consumer started', { queueName, consumerTag });\n\n return consumerTag;\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.INFRASTRUCTURE,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.QUEUE_CONSUME_FAILED,\n context: {\n queueName,\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n /**\n * Cancel a consumer.\n */\n public async cancelConsumer(queueName: string): Promise<void> {\n const channel = this.getChannel();\n const consumerTag = this.consumerTags.get(queueName);\n\n if (consumerTag) {\n await channel.cancel(consumerTag);\n this.consumerTags.delete(queueName);\n this.logDebug('Consumer cancelled', { queueName, consumerTag });\n }\n }\n\n /**\n * Set up reply queue for RPC pattern (per pod).\n */\n\n /**\n * The runtime segment embedded in this process's reply-queue name.\n *\n * `undefined` for the application backend, deliberately: it keeps the\n * historical `wildo.reply.<appId>.<podId>` layout, so an existing deployment's\n * queue names do not move and its broker permission keeps matching. A named\n * runtime contributes `<kind>-<name>`, which is what a per-principal read\n * regex anchors on.\n *\n * Resolved fail-SAFE. An unresolvable principal cannot be a minion (minion\n * startup binds and initializes it), so falling back to the backend layout\n * preserves today's behaviour for minimal and test containers rather than\n * inventing a segment nobody granted.\n */\n private resolveReplyPrincipalSegment(): string | undefined {\n try {\n const descriptor = this.container\n .get<{ describe(): { runtimeProfile: string; runtimeKey?: string } }>(SAAS_SERVICE_TYPES.RuntimePrincipalService)\n .describe();\n // Derived through the SHARED builder, never locally. The broker permission\n // this queue name must satisfy is built from the same function, so the two\n // cannot drift; they previously agreed only because every minion name so\n // far happened to survive sanitisation unchanged.\n return buildRuntimePrincipalQueueSegment(\n runtimePrincipalKindFromRuntimeProfile(descriptor.runtimeProfile),\n descriptor.runtimeKey,\n );\n } catch {\n return undefined;\n }\n }\n\n public async setupReplyQueue(\n appId: string,\n onReply: (correlationId: string, result: JobResult) => void\n ): Promise<string> {\n const channel = this.getChannel();\n\n // The reply queue carries the OWNING RUNTIME in its name (see\n // `buildReplyQueueName`). Without it a minion's reply queue and the\n // application backend's differ only by an opaque per-process token, so a\n // broker permission cannot admit one and refuse the other — which is why\n // narrowing a minion's `read` refused its own replies and crash-looped it.\n this.replyQueueName = buildReplyQueueName(appId, this.podId, this.resolveReplyPrincipalSegment());\n\n // Create exclusive, auto-delete reply queue\n await channel.assertQueue(this.replyQueueName, {\n exclusive: true,\n autoDelete: true,\n durable: false,\n });\n\n // Start consuming replies\n await channel.consume(\n this.replyQueueName,\n (msg) => {\n if (!msg) return;\n\n const correlationId = msg.properties.correlationId;\n try {\n const result: JobResult = JSON.parse(msg.content.toString());\n onReply(correlationId, result);\n } catch (error) {\n this.logger.error('Failed to parse reply', {\n correlationId,\n ...projectCaughtErrorLogFields(error),\n });\n }\n\n channel.ack(msg);\n },\n { noAck: false }\n );\n\n this.logger.info('Reply queue set up', { replyQueueName: this.replyQueueName });\n\n return this.replyQueueName;\n }\n\n /**\n * Get the reply queue name for this pod.\n */\n public getReplyQueueName(): string | null {\n return this.replyQueueName;\n }\n\n /**\n * Acknowledge a message.\n */\n public ack(msg: ConsumeMessage): void {\n const channel = this.getChannel();\n channel.ack(msg);\n }\n\n /**\n * Reject a message.\n */\n public nack(msg: ConsumeMessage, requeue: boolean = false): void {\n const channel = this.getChannel();\n channel.nack(msg, false, requeue);\n }\n\n /**\n * Close the connection gracefully.\n */\n public async close(): Promise<void> {\n // Cancel all consumers\n for (const [queueName, consumerTag] of this.consumerTags) {\n try {\n await this.channel?.cancel(consumerTag);\n this.logger.debug('Consumer cancelled', { queueName, consumerTag });\n } catch (error) {\n this.logger.warn('Failed to cancel consumer', { queueName, error });\n }\n }\n this.consumerTags.clear();\n\n // Close the topology-declaration channel (best-effort; independent of the\n // primary channel).\n if (this.topologyChannel) {\n try {\n await this.topologyChannel.close();\n this.logger.debug('Topology channel closed');\n } catch (error) {\n this.logger.warn('Failed to close topology channel', { error });\n }\n this.topologyChannel = null;\n }\n\n // Close channel\n if (this.channel) {\n try {\n await this.channel.close();\n this.logger.debug('Channel closed');\n } catch (error) {\n this.logger.warn('Failed to close channel', { error });\n }\n this.channel = null;\n }\n\n // Close connection\n if (this.connection) {\n try {\n await this.connection.close();\n this.logger.info('RabbitMQ connection closed');\n } catch (error) {\n this.logger.warn('Failed to close connection', { error });\n }\n this.connection = null;\n }\n }\n\n /**\n * Get pod ID for this instance.\n */\n /**\n * Queue depth from the broker, or `null` when no channel is open (#502).\n *\n * This replaces monitoring reaching for `getChannel()` and calling `checkQueue` itself. The\n * behaviour is unchanged — `null` here produces the same empty metrics that a null channel already\n * produced — but the question is now one every adapter can answer about itself, instead of a\n * connection handle only this one can hand out.\n */\n public async getQueueDepth(queueName: string): Promise<number | null> {\n const channel = this.getChannel();\n if (!channel) {\n return null;\n }\n // `checkQueue` CLOSES the channel when the queue does not exist — the reason monitoring stopped\n // probing dead-letter queues (see `getQueueMetrics`). Reported as \"not observable\" rather than\n // thrown: a queue that has not been asserted yet is not a fault in the runtime being monitored.\n try {\n const queueInfo = await channel.checkQueue(queueName);\n return queueInfo.messageCount;\n } catch {\n return null;\n }\n }\n\n public getPodId(): string {\n return this.podId;\n }\n}\n"]}