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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (853) 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.map +1 -1
  20. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +27 -6
  21. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
  22. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
  23. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
  24. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
  25. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
  26. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
  27. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
  28. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
  29. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
  30. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +47 -4
  31. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
  32. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +96 -29
  33. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
  34. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
  35. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
  36. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
  37. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
  38. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
  39. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
  40. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
  41. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
  42. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
  43. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +9 -1
  44. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
  45. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +49 -0
  46. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
  47. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +171 -18
  48. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
  49. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
  50. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +23 -3
  51. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
  52. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
  53. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +20 -0
  54. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
  55. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
  56. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
  57. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
  58. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
  59. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
  60. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
  61. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
  62. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
  63. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
  64. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
  65. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
  66. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
  67. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +529 -41
  68. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
  69. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
  70. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
  71. package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
  72. package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
  73. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
  74. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
  75. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
  76. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
  77. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
  78. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
  79. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
  80. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
  81. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
  82. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
  83. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
  84. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
  85. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
  86. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
  87. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
  88. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
  89. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
  90. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
  91. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
  92. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
  93. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
  94. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
  95. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
  96. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
  97. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
  98. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
  99. package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
  100. package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
  101. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
  102. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
  103. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
  104. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
  105. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
  106. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +48 -7
  107. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
  108. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
  109. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
  110. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
  111. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
  112. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
  113. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
  114. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
  115. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
  116. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
  117. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  118. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
  119. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
  120. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
  121. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
  122. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
  123. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
  124. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
  125. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
  126. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
  127. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
  128. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
  129. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
  130. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
  131. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
  132. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
  133. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
  134. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
  135. package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
  136. package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
  137. package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
  138. package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
  139. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
  140. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
  141. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +225 -13
  142. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
  143. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +340 -62
  144. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
  145. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +244 -7
  146. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
  147. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +386 -5
  148. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
  149. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
  150. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
  151. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
  152. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +6 -2
  153. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
  154. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +31 -9
  155. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
  156. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
  157. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
  158. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +57 -1
  159. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
  160. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
  161. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
  162. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
  163. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
  164. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
  165. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +31 -0
  166. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
  167. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
  168. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
  169. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
  170. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
  171. package/dist/esm/config/models/app-config.backend.schemas.d.ts +142 -46
  172. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
  173. package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
  174. package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
  175. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
  176. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
  177. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
  178. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
  179. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
  180. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
  181. package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
  182. package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
  183. package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
  184. package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
  185. package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
  186. package/dist/esm/config/services/app-configuration.backend.utils.d.ts +33 -0
  187. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
  188. package/dist/esm/config/services/app-configuration.backend.utils.js +39 -1
  189. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
  190. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
  191. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
  192. package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
  193. package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
  194. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
  195. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
  196. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
  197. package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
  198. package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
  199. package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
  200. package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
  201. package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
  202. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
  203. package/dist/esm/errors/services/error-handler.backend.service.js +129 -8
  204. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
  205. package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
  206. package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
  207. package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
  208. package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
  209. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
  210. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
  211. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
  212. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
  213. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
  214. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
  215. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
  216. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
  217. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +59 -2
  218. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
  219. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +52 -17
  220. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
  221. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
  222. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
  223. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
  224. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
  225. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
  226. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
  227. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
  228. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
  229. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
  230. package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
  231. package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
  232. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
  233. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
  234. package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
  235. package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
  236. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
  237. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
  238. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
  239. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
  240. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
  241. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
  242. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
  243. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
  244. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
  245. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
  246. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
  247. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
  248. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
  249. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
  250. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
  251. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
  252. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
  253. package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
  254. package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
  255. package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
  256. package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
  257. package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
  258. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +292 -7
  259. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
  260. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +533 -45
  261. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
  262. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
  263. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
  264. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
  265. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
  266. package/dist/esm/files/controllers/file.controller.js +21 -13
  267. package/dist/esm/files/controllers/file.controller.js.map +1 -1
  268. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
  269. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +39 -15
  270. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
  271. package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
  272. package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
  273. package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
  274. package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
  275. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
  276. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
  277. package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
  278. package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
  279. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +53 -2
  280. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
  281. package/dist/esm/files/services/file-upload-grant.backend.service.js +127 -3
  282. package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
  283. package/dist/esm/files/services/files.backend.service.d.ts +68 -0
  284. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
  285. package/dist/esm/files/services/files.backend.service.js +175 -5
  286. package/dist/esm/files/services/files.backend.service.js.map +1 -1
  287. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
  288. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
  289. package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
  290. package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
  291. package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
  292. package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
  293. package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
  294. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
  295. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
  296. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
  297. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
  298. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
  299. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
  300. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
  301. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
  302. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
  303. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
  304. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
  305. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
  306. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
  307. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
  308. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
  309. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
  310. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
  311. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
  312. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
  313. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
  314. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
  315. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
  316. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
  317. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
  318. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
  319. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
  320. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
  321. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +196 -40
  322. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
  323. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
  324. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
  325. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
  326. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
  327. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
  328. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
  329. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
  330. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
  331. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
  332. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
  333. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
  334. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
  335. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
  336. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
  337. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
  338. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
  339. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
  340. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
  341. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
  342. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
  343. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
  344. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
  345. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
  346. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
  347. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
  348. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
  349. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
  350. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
  351. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
  352. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
  353. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
  354. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
  355. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
  356. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
  357. package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
  358. package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
  359. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +28 -1
  360. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
  361. package/dist/esm/flows-actors/services/agents.backend.service.js +204 -18
  362. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
  363. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
  364. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
  365. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
  366. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
  367. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
  368. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
  369. package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
  370. package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
  371. package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
  372. package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
  373. package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
  374. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
  375. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
  376. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
  377. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
  378. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
  379. package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
  380. package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
  381. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
  382. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
  383. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
  384. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
  385. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
  386. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +8 -4
  387. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
  388. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
  389. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
  390. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
  391. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
  392. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
  393. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
  394. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
  395. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
  396. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
  397. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
  398. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
  399. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
  400. package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
  401. package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
  402. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
  403. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
  404. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
  405. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
  406. package/dist/esm/index.d.ts +11 -4
  407. package/dist/esm/index.d.ts.map +1 -1
  408. package/dist/esm/index.js +31 -4
  409. package/dist/esm/index.js.map +1 -1
  410. package/dist/esm/inject/models/container.d.ts.map +1 -1
  411. package/dist/esm/inject/models/container.js +78 -10
  412. package/dist/esm/inject/models/container.js.map +1 -1
  413. package/dist/esm/inject/models/service-types.d.ts +17 -3
  414. package/dist/esm/inject/models/service-types.d.ts.map +1 -1
  415. package/dist/esm/inject/models/service-types.js +19 -3
  416. package/dist/esm/inject/models/service-types.js.map +1 -1
  417. package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
  418. package/dist/esm/mcp/controllers/mcp.controller.js +20 -0
  419. package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
  420. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +56 -1
  421. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
  422. package/dist/esm/mcp/services/mcp-server.backend.service.js +107 -11
  423. package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
  424. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
  425. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +22 -0
  426. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
  427. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
  428. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
  429. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
  430. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
  431. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
  432. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
  433. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
  434. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
  435. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
  436. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
  437. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
  438. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
  439. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
  440. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
  441. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
  442. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
  443. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
  444. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
  445. package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
  446. package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
  447. package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
  448. package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
  449. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
  450. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
  451. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
  452. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
  453. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
  454. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
  455. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
  456. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
  457. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
  458. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
  459. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
  460. package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
  461. package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
  462. package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
  463. package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
  464. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
  465. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
  466. package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
  467. package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
  468. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
  469. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
  470. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
  471. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
  472. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
  473. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
  474. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
  475. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
  476. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
  477. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
  478. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
  479. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
  480. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
  481. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
  482. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
  483. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
  484. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
  485. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
  486. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
  487. package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
  488. package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
  489. package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
  490. package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
  491. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
  492. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
  493. package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
  494. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
  495. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
  496. package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
  497. package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
  498. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +99 -13
  499. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
  500. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +422 -66
  501. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
  502. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
  503. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
  504. package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
  505. package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
  506. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
  507. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
  508. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
  509. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
  510. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
  511. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  512. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +46 -1
  513. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
  514. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
  515. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +16 -6
  516. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
  517. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
  518. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +12 -12
  519. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
  520. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
  521. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
  522. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
  523. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
  524. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
  525. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
  526. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
  527. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
  528. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
  529. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
  530. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
  531. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
  532. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
  533. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
  534. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
  535. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
  536. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
  537. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
  538. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
  539. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
  540. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
  541. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
  542. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
  543. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
  544. package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
  545. package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
  546. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
  547. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
  548. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
  549. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
  550. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
  551. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
  552. package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
  553. package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
  554. package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
  555. package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
  556. package/dist/esm/queue/job-consumer.backend.service.js +1 -4
  557. package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
  558. package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
  559. package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
  560. package/dist/esm/queue/job-executor.backend.service.js +1 -4
  561. package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
  562. package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
  563. package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
  564. package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
  565. package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
  566. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
  567. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
  568. package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
  569. package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
  570. package/dist/esm/queue/queue.backend.service.d.ts +3 -3
  571. package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
  572. package/dist/esm/queue/queue.backend.service.js +26 -4
  573. package/dist/esm/queue/queue.backend.service.js.map +1 -1
  574. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
  575. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
  576. package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
  577. package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
  578. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
  579. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
  580. package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
  581. package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
  582. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
  583. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
  584. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
  585. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
  586. package/dist/esm/requests/service/websocket.service.d.ts +9 -0
  587. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
  588. package/dist/esm/requests/service/websocket.service.js +32 -8
  589. package/dist/esm/requests/service/websocket.service.js.map +1 -1
  590. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
  591. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +14 -2
  592. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
  593. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
  594. package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
  595. package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
  596. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
  597. package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
  598. package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
  599. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
  600. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
  601. package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
  602. package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
  603. package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
  604. package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
  605. package/dist/esm/resources/services/resources-registry.backend.service.js +90 -6
  606. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
  607. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
  608. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
  609. package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
  610. package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
  611. package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
  612. package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
  613. package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
  614. package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
  615. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
  616. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
  617. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
  618. package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
  619. package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
  620. package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
  621. package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
  622. package/dist/esm/runtime/services/start-application.backend.service.d.ts +19 -1
  623. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
  624. package/dist/esm/runtime/services/start-application.backend.service.js +261 -77
  625. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
  626. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
  627. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
  628. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
  629. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
  630. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
  631. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
  632. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
  633. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
  634. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
  635. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
  636. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
  637. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
  638. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
  639. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
  640. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
  641. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
  642. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
  643. package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
  644. package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
  645. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
  646. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
  647. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
  648. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
  649. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
  650. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
  651. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
  652. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
  653. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
  654. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
  655. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
  656. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
  657. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
  658. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
  659. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
  660. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
  661. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
  662. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
  663. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
  664. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
  665. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
  666. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
  667. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
  668. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
  669. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +68 -1
  670. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
  671. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
  672. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
  673. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
  674. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
  675. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
  676. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
  677. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
  678. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
  679. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
  680. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
  681. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
  682. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
  683. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
  684. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
  685. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +17 -1
  686. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
  687. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +49 -17
  688. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
  689. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
  690. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
  691. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
  692. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
  693. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
  694. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
  695. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
  696. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
  697. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
  698. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
  699. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
  700. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
  701. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
  702. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
  703. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
  704. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
  705. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
  706. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
  707. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
  708. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
  709. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
  710. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
  711. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
  712. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
  713. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
  714. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
  715. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
  716. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
  717. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
  718. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
  719. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
  720. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
  721. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
  722. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
  723. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
  724. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
  725. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
  726. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
  727. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
  728. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
  729. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
  730. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
  731. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
  732. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
  733. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
  734. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
  735. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
  736. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
  737. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
  738. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
  739. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
  740. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
  741. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
  742. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
  743. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
  744. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
  745. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
  746. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
  747. package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
  748. package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
  749. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
  750. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
  751. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
  752. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
  753. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +74 -8
  754. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
  755. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +175 -19
  756. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
  757. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
  758. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
  759. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
  760. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
  761. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
  762. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
  763. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
  764. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
  765. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
  766. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
  767. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
  768. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
  769. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
  770. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
  771. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
  772. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
  773. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
  774. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
  775. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
  776. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
  777. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
  778. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
  779. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
  780. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
  781. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
  782. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  783. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
  784. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
  785. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
  786. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
  787. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
  788. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
  789. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
  790. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
  791. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
  792. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
  793. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
  794. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
  795. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
  796. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
  797. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
  798. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
  799. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
  800. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
  801. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
  802. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  803. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
  804. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
  805. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
  806. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
  807. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
  808. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
  809. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
  810. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
  811. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
  812. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
  813. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
  814. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
  815. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
  816. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
  817. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +21 -3
  818. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
  819. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +26 -16
  820. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
  821. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
  822. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
  823. package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
  824. package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
  825. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
  826. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
  827. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
  828. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
  829. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
  830. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
  831. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
  832. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
  833. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
  834. package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
  835. package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
  836. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
  837. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
  838. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
  839. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
  840. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
  841. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
  842. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
  843. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
  844. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
  845. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
  846. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
  847. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
  848. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
  849. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
  850. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
  851. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
  852. package/dist/tsconfig.build.tsbuildinfo +1 -1
  853. package/package.json +11 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-connection.controller.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/security/connected-accounts/controllers/provider-connection.controller.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,kBAAkB,CAAC;AAsB1B,OAAO,EAAE,gCAAgC,EAAE,MAAM,0FAA0F,CAAC;AAC5I,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAClG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AAC5G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yEAAyE,CAAC;AAC1H,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,qGAAqG,CAAC;AACrK,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,4FAA4F,CAAC;AAC1J,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,iGAAiG,CAAC;AAGzJ,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AASpH,OAAO,KAAK,EAEV,gDAAgD,EACjD,MAAM,mEAAmE,CAAC;AAC3E,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,4DAA4D,CAAC;AAC5H,OAAO,KAAK,EAAE,iDAAiD,EAAE,MAAM,oEAAoE,CAAC;AA6B5I,qBACa,0CAA2C,SAAQ,gCAAgC;IAK5C,OAAO,CAAC,QAAQ,CAAC,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAVpC,MAAM,EAAE,aAAa,EACR,YAAY,EAAE,0BAA0B,EACxC,YAAY,EAAE,mBAAmB,EAChB,YAAY,EAAE,0BAA0B,EAChC,aAAa,EAAE,yCAAyC,EACnD,QAAQ,EAAE,uCAAuC,EACxC,OAAO,EAAE,gDAAgD,EACjE,mBAAmB,EAAE,iCAAiC,EACzD,eAAe,EAAE,yCAAyC,EAClD,uBAAuB,EAAE,iDAAiD,EAChG,SAAS,EAAE,uBAAuB;IAKlG,SAAS,CAAC,WAAW,IAAI,IAAI;IAiB7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;YACW,eAAe;IAkD7B;;;;;;;OAOG;YACW,WAAW;IAsGzB;;;;;OAKG;YACW,cAAc;IAiF5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,eAAe;IA0BvB;;;;;;;;;OASG;YACW,mBAAmB;IA2BjC;;;;;;;OAOG;YACW,SAAS;IAavB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,mBAAmB;IAa3B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;YAQR,aAAa;IAK3B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;CAW9B"}
@@ -0,0 +1,512 @@
1
+ /**
2
+ * Connecting a third-party account — the two HTTP legs of the authorization-code flow.
3
+ *
4
+ * `POST /connections/:providerRef/start` answers with the URL to send somebody to.
5
+ * `GET /connections/callback` receives them back and stores the grant.
6
+ *
7
+ * ## The opposite direction from the OAuth controller next door
8
+ *
9
+ * `oauth-provider-controller` makes this application an OAuth PROVIDER, and
10
+ * `authentication-controller` signs people IN using a vendor as their identity provider. This
11
+ * connects a vendor account so the application can act AS that account. Same RFC, opposite arrow,
12
+ * and nothing is shared but the specification.
13
+ *
14
+ * ## Everything arriving on the callback is attacker-controllable
15
+ *
16
+ * The callback is reached by a redirect through the person's own browser. Its query string is
17
+ * whatever somebody put there. So the callback trusts NOTHING from its own URL except the `state`,
18
+ * which it uses only as a lookup key — the provider, the owner, the PKCE verifier and the redirect
19
+ * URI all come from the record that was written when the redirect went out. A callback that read the
20
+ * owner from a query parameter would let anybody choose whose account a grant is stored against.
21
+ *
22
+ * ## Why the start leg returns a URL instead of redirecting
23
+ *
24
+ * The caller is a fetch from a settings screen, not a browser navigation. A 302 to a vendor would be
25
+ * followed by the fetch, produce an opaque cross-origin response, and never reach the person — the
26
+ * consent screen would render into a response body nobody sees. The screen navigates itself.
27
+ *
28
+ * assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — a principal authorizes this
29
+ * application to act toward a named third party on their behalf.
30
+ */
31
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
32
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
35
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
36
+ };
37
+ var __metadata = (this && this.__metadata) || function (k, v) {
38
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
39
+ };
40
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
41
+ return function (target, key) { decorator(target, key, paramIndex); }
42
+ };
43
+ import 'reflect-metadata';
44
+ import { inject, injectable } from 'inversify';
45
+ import { z } from 'zod';
46
+ import { ErrorType, MANUAL_CONTROLLER_ROUTES_URLS, ManualControllerRouteKey, WildoHeaderKeys, isWildoBackendError, } from '@wildo-ai/saas-models';
47
+ import { ExternalProvider_Connection_OwnerScope, ExternalProvider_ConnectionTargetSchema, ExternalProvider_ExchangeProtocol_Kind, ProviderProtocolRuntimeKind, ExternalProvider_SecretScope, } from '@wildo-ai/external-connectors-models';
48
+ import { AbstractControllerBackendService } from '../../../base-classes/services/controllers/abstract-controller.backend.service.js';
49
+ import { SAAS_SERVICE_TYPES } from '../../../inject/models/service-types.js';
50
+ import { AuthControllerUtils } from '../../../security/authentications/services/utils/auth-controller.utils.js';
51
+ import { describeCaughtError } from '../../../errors/utils/error-log-level-classification.backend.utils.js';
52
+ import { buildProviderOAuth2AuthorizeUrl, createProviderOAuth2Pkce, createProviderOAuth2State, exchangeProviderOAuth2Code, } from '../services/provider-oauth2-exchange.backend.js';
53
+ /**
54
+ * The start request.
55
+ *
56
+ * `target` is validated by the connection-target schema, which already refuses the incoherent
57
+ * combinations — an APPLICATION target naming an owner, a SERVICE call naming somebody to act for.
58
+ * Reusing it here means the connect leg and the call leg cannot disagree about what a target is.
59
+ */
60
+ const StartConnectionRequestSchema = z.object({
61
+ target: ExternalProvider_ConnectionTargetSchema,
62
+ secretSlug: z.string().min(1).max(200).optional(),
63
+ scopes: z.array(z.string().min(1)).optional(),
64
+ /** Answers for the endpoints' `{placeholders}` — which cloud, which directory, which region. */
65
+ connectionParameters: z.record(z.string(), z.string()).optional(),
66
+ });
67
+ /** Where the vendor sends people back. One URI for every provider — see the route's own JSDoc. */
68
+ const CALLBACK_PATH = MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_CALLBACK];
69
+ /**
70
+ * Where the person lands afterwards, on the FRONTEND.
71
+ *
72
+ * The settings hub routes by section ref, and `my-provider-credentials` is the destination this flow
73
+ * connects an account for — so somebody returns to the screen they pressed Connect on rather than to
74
+ * an application home that says nothing about what just happened.
75
+ */
76
+ const PROVIDER_CONNECTION_RETURN_PATH = '/settings/my-provider-credentials';
77
+ let ProviderConnectionControllerBackendService = class ProviderConnectionControllerBackendService extends AbstractControllerBackendService {
78
+ authJwtGuard;
79
+ authEcFactory;
80
+ registry;
81
+ pending;
82
+ targetAuthorization;
83
+ userCredentials;
84
+ organizationCredentials;
85
+ appConfig;
86
+ constructor(logger, errorBuilder, errorHandler, authJwtGuard, authEcFactory, registry, pending, targetAuthorization, userCredentials, organizationCredentials, appConfig) {
87
+ super(logger, errorBuilder, errorHandler, 'ProviderConnectionController');
88
+ this.authJwtGuard = authJwtGuard;
89
+ this.authEcFactory = authEcFactory;
90
+ this.registry = registry;
91
+ this.pending = pending;
92
+ this.targetAuthorization = targetAuthorization;
93
+ this.userCredentials = userCredentials;
94
+ this.organizationCredentials = organizationCredentials;
95
+ this.appConfig = appConfig;
96
+ }
97
+ setupRoutes() {
98
+ this.router.post(MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_START], this.asyncHandler(this.handleStart.bind(this)));
99
+ this.logRouteRegistration('POST', MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_START], 'Begin connecting a third-party account');
100
+ this.router.get(CALLBACK_PATH, this.asyncHandler(this.handleCallback.bind(this)));
101
+ this.logRouteRegistration('GET', CALLBACK_PATH, 'Receive the authorization code and store the grant');
102
+ this.router.get(MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_CATALOGUE], this.asyncHandler(this.handleCatalogue.bind(this)));
103
+ this.logRouteRegistration('GET', MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_CATALOGUE], 'What can be connected');
104
+ }
105
+ /**
106
+ * What can be connected — the question the stored-credential list cannot answer.
107
+ *
108
+ * A settings screen listing somebody's connections shows an empty table on the day they have none,
109
+ * which is precisely the day they need to learn what they might connect. So the CATALOGUE and the
110
+ * ROWS are two reads, deliberately: this one is about the provider, the resource LIST is about the
111
+ * person, and merging them would make "nothing connected" and "nothing connectable" indistinguishable.
112
+ *
113
+ * ## It reports a DECISION, and computes nothing
114
+ *
115
+ * `admissibleConnections` is the recorded decision in the provider's catalogue record — never
116
+ * derived from what a vendor's API happens to support. A vendor with a personal-token endpoint does
117
+ * not thereby become a provider a person may connect individually; somebody decided that, and this
118
+ * route repeats what they decided.
119
+ *
120
+ * ## It answers ADMISSIBILITY, not AUTHORIZATION, and that split is not laziness
121
+ *
122
+ * Whether this caller may act for a given owner depends on the owner's ID, which a catalogue has
123
+ * none of — an organization-scoped shape is admissible for the provider while the caller may be
124
+ * entitled to act for one tenant and not another. So the start leg keeps both gates in the same
125
+ * order every credential path uses, and a screen that renders an owner it cannot act for gets a
126
+ * 403 there rather than a silently missing row here.
127
+ *
128
+ * ## Nothing here is a secret
129
+ *
130
+ * Which vendors an application integrates with is a property of the application, visible on its own
131
+ * marketing pages. No token, no client secret, no env-var VALUE is reported — `connectionParameters`
132
+ * names the placeholders a connection must ANSWER, which is an input to ask a person for.
133
+ */
134
+ async handleCatalogue(req, res) {
135
+ try {
136
+ // Authenticated, though nothing here is owner-specific: an unauthenticated reader has no
137
+ // screen to render it on, and an integration inventory is not something to hand to anybody who
138
+ // can reach the port.
139
+ await this.extractCaller(req);
140
+ const providers = this.registry.getProviderTypes()
141
+ .map((providerRef) => {
142
+ const contract = this.registry.getProviderRuntimeContract(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API);
143
+ const oauth2 = contract?.kind === ProviderProtocolRuntimeKind.REST ? contract.oauth2 : undefined;
144
+ return {
145
+ providerRef,
146
+ /**
147
+ * FALSE for a provider whose credential is pasted rather than granted. Such a provider is
148
+ * still a real integration and still appears — it is authored on the credential screen
149
+ * instead — so omitting it would make a supported vendor look unsupported.
150
+ */
151
+ connectable: oauth2 !== undefined,
152
+ admissibleConnections: this.registry.getProviderAdmissibleConnections(providerRef)
153
+ .map(({ ownerScope, delegation }) => ({ ownerScope, delegation })),
154
+ // Absent, not empty, when the endpoints are plain — the same distinction the contract
155
+ // draws, so "no placeholder" stays separable from "nobody has looked".
156
+ connectionParameters: oauth2?.connectionParameters,
157
+ scopes: oauth2?.scopes,
158
+ };
159
+ })
160
+ // Keep only what somebody could actually connect: a provider admitting at least one
161
+ // NON-APPLICATION owner.
162
+ //
163
+ // The obvious test — "admits nothing" — is INERT here, and measuring is what showed it. A
164
+ // provider with no recorded decision does not admit an empty set:
165
+ // `getProviderAdmissibleConnections` defaults it to APPLICATION/SERVICE, so the length is
166
+ // never zero and that filter removed exactly nothing. With 689 transposed providers and one
167
+ // recorded decision, this route was returning all 689 to a screen that can show one.
168
+ //
169
+ // APPLICATION is the right thing to exclude rather than an approximation of it. That scope
170
+ // means the DEPLOYMENT's own credential, authored in the environment — `storeGrantForTarget`
171
+ // refuses an APPLICATION target outright and says so — leaving no flow to begin, so a
172
+ // Connect button for one could only ever fail.
173
+ .filter((entry) => entry.admissibleConnections.some((shape) => shape.ownerScope !== ExternalProvider_Connection_OwnerScope.APPLICATION));
174
+ res.status(200).json({ providers });
175
+ }
176
+ catch (error) {
177
+ this.handleControllerError(error, res, 'list the connectable providers');
178
+ }
179
+ }
180
+ /**
181
+ * Leg one: decide whether this caller may connect this target, and hand back the URL.
182
+ *
183
+ * The two gates are the SAME pair every credential path goes through, in the same order.
184
+ * ADMISSIBLE — does this provider admit this owner scope at all? AUTHORIZED — may this execution
185
+ * act for that owner? Running them here rather than only at the callback means a person who cannot
186
+ * connect is told so before being sent to a vendor, rather than after granting consent.
187
+ */
188
+ async handleStart(req, res) {
189
+ try {
190
+ const { userId } = await this.extractCaller(req);
191
+ const providerRef = String(req.params.providerRef ?? '');
192
+ const parsed = StartConnectionRequestSchema.safeParse(req.body);
193
+ if (!parsed.success) {
194
+ res.status(400).json({ error: 'VALIDATION_FAILED', message: 'The connection request is not valid.' });
195
+ return;
196
+ }
197
+ const { target, scopes, connectionParameters } = parsed.data;
198
+ const contract = this.registry.getProviderRuntimeContract(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API);
199
+ if (contract?.kind !== ProviderProtocolRuntimeKind.REST || contract.oauth2 === undefined) {
200
+ res.status(400).json({
201
+ error: 'PROVIDER_NOT_CONNECTABLE',
202
+ message: `Provider '${providerRef}' does not declare an OAuth2 contract, so there is nothing to connect. `
203
+ + 'A provider whose credential is pasted is authored on the credential screen instead.',
204
+ });
205
+ return;
206
+ }
207
+ const admitted = this.registry.getProviderAdmissibleConnections(providerRef)
208
+ .some((shape) => shape.ownerScope === target.ownerScope && shape.delegation === target.delegation);
209
+ if (!admitted) {
210
+ res.status(409).json({
211
+ error: 'CONNECTION_NOT_ADMISSIBLE',
212
+ message: `Provider '${providerRef}' does not admit a ${target.ownerScope}-owned, ${target.delegation}-delegated connection.`,
213
+ });
214
+ return;
215
+ }
216
+ if (!await this.mayActFor(target, userId)) {
217
+ // 403 rather than 404: the caller is authenticated and the provider exists; what they may not
218
+ // do is act for THIS owner. Answering 404 would make an authorization decision look like a
219
+ // missing provider and send an operator looking for a registration problem.
220
+ res.status(403).json({
221
+ error: 'FORBIDDEN',
222
+ message: 'You may not connect an account on behalf of that owner.',
223
+ });
224
+ return;
225
+ }
226
+ const secretSlug = parsed.data.secretSlug ?? contract.apiKey.secretRef;
227
+ // WHERE the grant will be stored, and it must be a slug that holds an ACCOUNT.
228
+ //
229
+ // `secretSlug` is caller-supplied and optional, so without this a request could name the
230
+ // provider's OAuth2 client-secret slug and have a minted grant written to it. Nothing would
231
+ // ever read that row — the exchange takes the client secret from the deployment environment,
232
+ // never from a credential row — so the connect would report success and the connection would
233
+ // resolve as absent forever. A refusal that says which slug is wrong is worth more than a
234
+ // silent write to a slot nobody consults.
235
+ const scope = this.registry.getProviderSecretScope(providerRef, secretSlug);
236
+ if (scope !== ExternalProvider_SecretScope.CREDENTIAL) {
237
+ res.status(400).json({
238
+ error: 'SECRET_SLUG_NOT_A_CREDENTIAL',
239
+ message: `'${secretSlug}' identifies provider '${providerRef}'\u2019s own registration, not an account, `
240
+ + 'so a minted grant cannot be stored there. Omit `secretSlug` to use the credential slot the '
241
+ + 'provider declares, or name one that holds an account token.',
242
+ });
243
+ return;
244
+ }
245
+ const state = createProviderOAuth2State();
246
+ const pkce = createProviderOAuth2Pkce();
247
+ const redirectUri = this.callbackUrlFor(req);
248
+ const authorizeUrl = buildProviderOAuth2AuthorizeUrl({
249
+ oauth2: contract.oauth2,
250
+ providerRef,
251
+ clientId: this.requireClientId(providerRef, contract.oauth2.clientIdSecretRef),
252
+ redirectUri,
253
+ state,
254
+ pkce,
255
+ connectionParameters,
256
+ scopes,
257
+ });
258
+ // Recorded BEFORE the URL is handed out. The other order has a window in which somebody
259
+ // completes a flow whose record does not exist yet, and the callback would answer as though
260
+ // their state were forged.
261
+ await this.pending.remember(state, {
262
+ providerRef,
263
+ secretSlug,
264
+ target,
265
+ pkceVerifier: pkce.verifier,
266
+ redirectUri,
267
+ connectionParameters,
268
+ initiatedByUserId: userId,
269
+ // The header only exists on this leg. See the field's own JSDoc.
270
+ frontendServiceName: typeof req.headers[WildoHeaderKeys.FRONTEND_SERVICE_NAME] === 'string'
271
+ ? req.headers[WildoHeaderKeys.FRONTEND_SERVICE_NAME]
272
+ : undefined,
273
+ startedAt: new Date().toISOString(),
274
+ });
275
+ res.status(200).json({ authorizeUrl });
276
+ }
277
+ catch (error) {
278
+ this.handleControllerError(error, res, 'start a provider connection');
279
+ }
280
+ }
281
+ /**
282
+ * Leg two: the person comes back with a code.
283
+ *
284
+ * Consuming the record is the first thing that happens, and it is atomic — so a replayed callback
285
+ * finds nothing and there is no window in which two concurrent callbacks both proceed.
286
+ */
287
+ async handleCallback(req, res) {
288
+ try {
289
+ const state = typeof req.query.state === 'string' ? req.query.state : '';
290
+ const code = typeof req.query.code === 'string' ? req.query.code : '';
291
+ // A vendor that reports a refusal reports it HERE, in the redirect, not at the token endpoint.
292
+ // Treating a missing code as a forged state would tell somebody who simply pressed "Deny" that
293
+ // their request was invalid.
294
+ if (typeof req.query.error === 'string') {
295
+ // The vendor reports a refusal HERE, in the redirect. Somebody who pressed "Deny" is not an
296
+ // error case to explain — they are a person who changed their mind, and they go back to the
297
+ // screen they started from.
298
+ this.finishInBrowser(res, undefined, { connectionError: 'declined' });
299
+ return;
300
+ }
301
+ const pending = state === '' ? null : await this.pending.consume(state);
302
+ if (pending === null || code === '') {
303
+ // ONE answer for expired, already-used, never-existed and missing-code. Distinguishing them
304
+ // would confirm to somebody probing that a state they hold is real.
305
+ //
306
+ // No frontend to return to either: the record that would have named one is exactly what is
307
+ // missing, so this is the one exit that cannot land anywhere but a bare page.
308
+ this.finishInBrowser(res, undefined, { connectionError: 'invalid' });
309
+ return;
310
+ }
311
+ // Re-check that the person finishing the flow is the person who began it. Without it, somebody
312
+ // who obtained a valid state could complete the connection while signed in as themselves and
313
+ // have the grant stored against the original initiator's target.
314
+ const { userId } = await this.extractCaller(req);
315
+ if (pending.initiatedByUserId !== undefined && pending.initiatedByUserId !== userId) {
316
+ this.finishInBrowser(res, pending.frontendServiceName, { connectionError: 'not-yours' });
317
+ return;
318
+ }
319
+ const contract = this.registry.getProviderRuntimeContract(pending.providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API);
320
+ if (contract?.kind !== ProviderProtocolRuntimeKind.REST || contract.oauth2 === undefined) {
321
+ this.finishInBrowser(res, pending.frontendServiceName, {
322
+ connectionError: 'not-connectable',
323
+ providerRef: pending.providerRef,
324
+ });
325
+ return;
326
+ }
327
+ const grant = await exchangeProviderOAuth2Code({
328
+ oauth2: contract.oauth2,
329
+ providerRef: pending.providerRef,
330
+ clientId: this.requireClientId(pending.providerRef, contract.oauth2.clientIdSecretRef),
331
+ clientSecret: this.requireClientSecret(pending.providerRef, contract.oauth2.clientSecretSecretRef),
332
+ connectionParameters: pending.connectionParameters,
333
+ code,
334
+ // The SAME redirect URI that was authorized, from the record rather than rebuilt: vendors
335
+ // verify it byte-for-byte, and a proxy or a host header could make a rebuilt one differ.
336
+ redirectUri: pending.redirectUri,
337
+ pkceVerifier: pending.pkceVerifier,
338
+ });
339
+ // assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — the grant is recorded against
340
+ // the owner the ATTEMPT named, never one the callback's own URL could carry.
341
+ const credentialId = await this.storeGrantForTarget(pending, grant);
342
+ // Logged AFTER the write, so the line means the connection EXISTS rather than that an exchange
343
+ // succeeded. `grantedScopes` is the fact worth having: a vendor may issue a token for fewer
344
+ // scopes than were asked for, and the resulting failure arrives on an unrelated operation
345
+ // weeks later with nothing to correlate against.
346
+ this.logger.info?.('[oauth2-connect] account connected', {
347
+ providerRef: pending.providerRef,
348
+ ownerScope: pending.target.ownerScope,
349
+ credentialId,
350
+ grantedScopes: grant.grantedScopes,
351
+ // Never the token, and never the grant.
352
+ });
353
+ this.finishInBrowser(res, pending.frontendServiceName, { connected: pending.providerRef });
354
+ }
355
+ catch (error) {
356
+ this.handleControllerError(error, res, 'complete a provider connection');
357
+ }
358
+ }
359
+ /**
360
+ * End the callback the way a BROWSER expects: a redirect, never a payload.
361
+ *
362
+ * This leg is reached by the vendor redirecting the person's own browser. Whatever it writes is
363
+ * rendered as a page, so answering `res.json(...)` — which this flow did until it was driven —
364
+ * shows somebody who has just granted consent a raw JSON blob on a backend origin, with no way
365
+ * back. Every exit therefore lands them on the settings screen they started from, with the outcome
366
+ * in the query string for that screen to render.
367
+ *
368
+ * The frontend is resolved from the RECORD's `frontendServiceName`, never from a header: the
369
+ * vendor's redirect carries none of Wildo's own headers. When it cannot be resolved — an attempt
370
+ * whose record is exactly what is missing, or a caller that omitted the header at start — the
371
+ * fallback is a minimal HTML page rather than JSON. It says the same thing in the same medium the
372
+ * browser is already rendering.
373
+ *
374
+ * Status is 303, not 302: the callback arrives as a GET and the destination is a different
375
+ * resource to fetch with GET, which is what 303 means.
376
+ * spec-cite: RFC 9110 §15.4.4 (303 See Other).
377
+ */
378
+ finishInBrowser(res, frontendServiceName, outcome) {
379
+ const base = frontendServiceName === undefined
380
+ ? null
381
+ : AuthControllerUtils.lookupFrontendPublicUrl(this.appConfig.config, frontendServiceName);
382
+ if (base === null) {
383
+ // No origin to return to. Say so in HTML — a person on a vendor redirect is looking at a page,
384
+ // and the one thing not to give them is a payload.
385
+ const detail = outcome.connectionError === undefined
386
+ ? 'The account was connected. You can close this tab and return to the application.'
387
+ : 'This connection attempt could not be completed. Return to the application and start again.';
388
+ res.status(outcome.connectionError === undefined ? 200 : 400)
389
+ .type('html')
390
+ .send(`<!doctype html><meta charset="utf-8"><title>Connection</title><p>${detail}</p>`);
391
+ return;
392
+ }
393
+ const destination = new URL(PROVIDER_CONNECTION_RETURN_PATH, base);
394
+ for (const [key, value] of Object.entries(outcome))
395
+ destination.searchParams.set(key, value);
396
+ res.redirect(303, destination.toString());
397
+ }
398
+ /**
399
+ * Route the minted grant to the store that owns the owner's table.
400
+ *
401
+ * The target comes from the PENDING RECORD, so the row is written for whoever the authorized
402
+ * attempt named. Reading it from the callback's request instead would let somebody choose whose
403
+ * account a grant lands on — the failure the whole state mechanism exists to prevent.
404
+ *
405
+ * An APPLICATION target has no store: the deployment's own credential lives in the environment,
406
+ * and a connect flow that produced one would be writing a row nobody reads.
407
+ */
408
+ async storeGrantForTarget(pending, grant) {
409
+ const { providerRef, secretSlug, target, connectionParameters } = pending;
410
+ if (target.ownerScope === ExternalProvider_Connection_OwnerScope.USER) {
411
+ return this.userCredentials.storeGrant({ userId: target.ownerId, providerRef, secretSlug }, grant, connectionParameters);
412
+ }
413
+ if (target.ownerScope === ExternalProvider_Connection_OwnerScope.ORGANIZATION) {
414
+ return this.organizationCredentials.storeGrant({ organizationId: target.ownerId, providerRef, secretSlug }, grant, connectionParameters);
415
+ }
416
+ throw new Error(`A connection for provider '${providerRef}' completed with an APPLICATION-owned target, which has `
417
+ + 'no credential store: the deployment\'s own credential is authored in the environment. The '
418
+ + 'attempt should have been refused at the start leg.');
419
+ }
420
+ /**
421
+ * May this caller act for that owner?
422
+ *
423
+ * An APPLICATION target has exactly one instance and the application IS the caller, so there is no
424
+ * second party whose account might be spent. Every other target goes through the same membership
425
+ * port the resolution path uses — one answer to "may this execution act for that owner", not two
426
+ * that can disagree.
427
+ */
428
+ async mayActFor(target, userId) {
429
+ if (target.ownerScope === ExternalProvider_Connection_OwnerScope.APPLICATION)
430
+ return true;
431
+ if (target.ownerScope === ExternalProvider_Connection_OwnerScope.USER) {
432
+ // A person connects their OWN account and nobody else's. There is no administrative variant of
433
+ // this resource at any tier, so the only admissible user target is the caller themselves.
434
+ return target.ownerId === userId;
435
+ }
436
+ const ec = await this.authEcFactory.createForAuthenticatedAuthOperation(userId, this.authEcFactory.getUsersReadOperationPath());
437
+ return this.targetAuthorization.mayActFor(target, ec);
438
+ }
439
+ requireClientId(providerRef, secretRef) {
440
+ const value = secretRef === undefined
441
+ ? undefined
442
+ : this.registry.getProviderSecret(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API, secretRef);
443
+ if (!value) {
444
+ throw new Error(`Provider '${providerRef}' cannot be connected: the application's OAuth2 client id is not configured `
445
+ + `(${secretRef ?? 'no client id declared'}). This is a deployment configuration gap.`);
446
+ }
447
+ return value;
448
+ }
449
+ requireClientSecret(providerRef, secretRef) {
450
+ const value = secretRef === undefined
451
+ ? undefined
452
+ : this.registry.getProviderSecret(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API, secretRef);
453
+ if (!value) {
454
+ throw new Error(`Provider '${providerRef}' cannot be connected: the application's OAuth2 client secret is not configured `
455
+ + `(${secretRef ?? 'no client secret declared'}). This is a deployment configuration gap.`);
456
+ }
457
+ return value;
458
+ }
459
+ /**
460
+ * The redirect URI, built once and then carried in the pending record.
461
+ *
462
+ * Derived from the request's own origin so a deployment needs no extra configuration, and stored
463
+ * rather than rebuilt at the callback: a vendor verifies it byte-for-byte, and a proxy that
464
+ * rewrites the host would make the rebuilt one differ from the authorized one.
465
+ */
466
+ callbackUrlFor(req) {
467
+ const forwardedProto = req.get('x-forwarded-proto');
468
+ const protocol = typeof forwardedProto === 'string' && forwardedProto.length > 0
469
+ ? forwardedProto.split(',')[0].trim()
470
+ : req.protocol;
471
+ return `${protocol}://${req.get('host') ?? 'localhost'}${req.baseUrl}${CALLBACK_PATH}`;
472
+ }
473
+ async extractCaller(req) {
474
+ const guardEc = await this.authEcFactory.createForPreAuthOperation(this.authEcFactory.getUsersReadOperationPath());
475
+ return this.authJwtGuard.extractAuthenticatedUser(guardEc, req);
476
+ }
477
+ /**
478
+ * One shape for every failure, and never the vendor's response body.
479
+ *
480
+ * A token endpoint's reply carries credentials even when it fails — several vendors echo the
481
+ * submitted client secret back in a validation message — so the message is logged with its detail
482
+ * and answered without it.
483
+ */
484
+ handleControllerError(error, res, action) {
485
+ this.logger.error?.(`[oauth2-connect] failed to ${action}`, { error: describeCaughtError(error) });
486
+ if (isWildoBackendError(error) && error.type === ErrorType.AUTHENTICATION) {
487
+ res.status(401).json({ error: 'UNAUTHENTICATED', message: 'Sign in and try again.' });
488
+ return;
489
+ }
490
+ res.status(502).json({
491
+ error: 'CONNECTION_FAILED',
492
+ message: `Could not ${action}. The detail is in the application log.`,
493
+ });
494
+ }
495
+ };
496
+ ProviderConnectionControllerBackendService = __decorate([
497
+ injectable(),
498
+ __param(0, inject(SAAS_SERVICE_TYPES.Logger)),
499
+ __param(1, inject(SAAS_SERVICE_TYPES.ErrorBuilderService)),
500
+ __param(2, inject(SAAS_SERVICE_TYPES.ErrorHandlerService)),
501
+ __param(3, inject(SAAS_SERVICE_TYPES.AuthJwtGuardService)),
502
+ __param(4, inject(SAAS_SERVICE_TYPES.AuthExecutionContextFactory)),
503
+ __param(5, inject(SAAS_SERVICE_TYPES.ExternalProvidersRegistryService)),
504
+ __param(6, inject(SAAS_SERVICE_TYPES.ProviderOAuth2PendingAuthorizationService)),
505
+ __param(7, inject(SAAS_SERVICE_TYPES.ConnectionTargetAuthorizationPort)),
506
+ __param(8, inject(SAAS_SERVICE_TYPES.UserProviderCredentialResolver)),
507
+ __param(9, inject(SAAS_SERVICE_TYPES.OrganizationProviderCredentialResolver)),
508
+ __param(10, inject(SAAS_SERVICE_TYPES.AppConfigService)),
509
+ __metadata("design:paramtypes", [Function, Function, Function, Function, Function, Function, Function, Object, Function, Function, Function])
510
+ ], ProviderConnectionControllerBackendService);
511
+ export { ProviderConnectionControllerBackendService };
512
+ //# sourceMappingURL=provider-connection.controller.backend.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-connection.controller.backend.service.js","sourceRoot":"","sources":["../../../../../../src/security/connected-accounts/controllers/provider-connection.controller.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Connecting a third-party account — the two HTTP legs of the authorization-code flow.\n *\n * `POST /connections/:providerRef/start` answers with the URL to send somebody to.\n * `GET /connections/callback` receives them back and stores the grant.\n *\n * ## The opposite direction from the OAuth controller next door\n *\n * `oauth-provider-controller` makes this application an OAuth PROVIDER, and\n * `authentication-controller` signs people IN using a vendor as their identity provider. This\n * connects a vendor account so the application can act AS that account. Same RFC, opposite arrow,\n * and nothing is shared but the specification.\n *\n * ## Everything arriving on the callback is attacker-controllable\n *\n * The callback is reached by a redirect through the person's own browser. Its query string is\n * whatever somebody put there. So the callback trusts NOTHING from its own URL except the `state`,\n * which it uses only as a lookup key — the provider, the owner, the PKCE verifier and the redirect\n * URI all come from the record that was written when the redirect went out. A callback that read the\n * owner from a query parameter would let anybody choose whose account a grant is stored against.\n *\n * ## Why the start leg returns a URL instead of redirecting\n *\n * The caller is a fetch from a settings screen, not a browser navigation. A 302 to a vendor would be\n * followed by the fetch, produce an opaque cross-origin response, and never reach the person — the\n * consent screen would render into a response body nobody sees. The screen navigates itself.\n *\n * assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — a principal authorizes this\n * application to act toward a named third party on their behalf.\n */\n\nimport 'reflect-metadata';\nimport { inject, injectable } from 'inversify';\nimport type { Request, Response } from 'express';\nimport { z } from 'zod';\nimport {\n ErrorType,\n MANUAL_CONTROLLER_ROUTES_URLS,\n ManualControllerRouteKey,\n WildoHeaderKeys,\n isWildoBackendError,\n} from '@wildo-ai/saas-models';\nimport {\n ExternalProvider_Connection_DelegationMode,\n ExternalProvider_Connection_OwnerScope,\n ExternalProvider_ConnectionTargetSchema,\n ExternalProvider_ExchangeProtocol_Kind,\n ProviderProtocolRuntimeKind,\n ExternalProvider_SecretScope,\n} from '@wildo-ai/external-connectors-models';\nimport type { ExternalProvider_ConnectionTarget } from '@wildo-ai/external-connectors-models';\nimport type { ProviderOAuth2Grant } from '@wildo-ai/saas-models';\n\nimport { AbstractControllerBackendService } from '~wildo-backend-lib/base-classes/services/controllers/abstract-controller.backend.service';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport type { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport type { ErrorHandlerService } from '~wildo-backend-lib/errors/services/error-handler.backend.service';\nimport type { AuthJwtGuardBackendService } from '~wildo-backend-lib/security/jwt/services/auth-jwt-guard.backend.service';\nimport type { AuthExecutionContextFactoryBackendService } from '~wildo-backend-lib/security/authentications/services/auth-execution-context-factory.backend.service';\nimport type { ExternalProvidersRegistryBackendService } from '~wildo-backend-lib/external-providers/services/external-providers-registry.backend.service';\nimport type { ConnectionTargetAuthorizationPort } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-provider-access.backend';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { AuthControllerUtils } from '~wildo-backend-lib/security/authentications/services/utils/auth-controller.utils';\nimport type { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\n\nimport {\n buildProviderOAuth2AuthorizeUrl,\n createProviderOAuth2Pkce,\n createProviderOAuth2State,\n exchangeProviderOAuth2Code,\n} from '../services/provider-oauth2-exchange.backend';\nimport type {\n ProviderOAuth2PendingAuthorization,\n ProviderOAuth2PendingAuthorizationBackendService,\n} from '../services/provider-oauth2-pending-authorization.backend.service';\nimport type { UserProviderCredentialStoreBackendService } from '../services/user-provider-credential-store.backend.service';\nimport type { OrganizationProviderCredentialStoreBackendService } from '../services/organization-provider-credential-store.backend.service';\n\n/**\n * The start request.\n *\n * `target` is validated by the connection-target schema, which already refuses the incoherent\n * combinations — an APPLICATION target naming an owner, a SERVICE call naming somebody to act for.\n * Reusing it here means the connect leg and the call leg cannot disagree about what a target is.\n */\nconst StartConnectionRequestSchema = z.object({\n target: ExternalProvider_ConnectionTargetSchema,\n secretSlug: z.string().min(1).max(200).optional(),\n scopes: z.array(z.string().min(1)).optional(),\n /** Answers for the endpoints' `{placeholders}` — which cloud, which directory, which region. */\n connectionParameters: z.record(z.string(), z.string()).optional(),\n});\n\n/** Where the vendor sends people back. One URI for every provider — see the route's own JSDoc. */\nconst CALLBACK_PATH = MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_CALLBACK];\n\n/**\n * Where the person lands afterwards, on the FRONTEND.\n *\n * The settings hub routes by section ref, and `my-provider-credentials` is the destination this flow\n * connects an account for — so somebody returns to the screen they pressed Connect on rather than to\n * an application home that says nothing about what just happened.\n */\nconst PROVIDER_CONNECTION_RETURN_PATH = '/settings/my-provider-credentials';\n\n@injectable()\nexport class ProviderConnectionControllerBackendService extends AbstractControllerBackendService {\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.ErrorHandlerService) errorHandler: ErrorHandlerService,\n @inject(SAAS_SERVICE_TYPES.AuthJwtGuardService) private readonly authJwtGuard: AuthJwtGuardBackendService,\n @inject(SAAS_SERVICE_TYPES.AuthExecutionContextFactory) private readonly authEcFactory: AuthExecutionContextFactoryBackendService,\n @inject(SAAS_SERVICE_TYPES.ExternalProvidersRegistryService) private readonly registry: ExternalProvidersRegistryBackendService,\n @inject(SAAS_SERVICE_TYPES.ProviderOAuth2PendingAuthorizationService) private readonly pending: ProviderOAuth2PendingAuthorizationBackendService,\n @inject(SAAS_SERVICE_TYPES.ConnectionTargetAuthorizationPort) private readonly targetAuthorization: ConnectionTargetAuthorizationPort,\n @inject(SAAS_SERVICE_TYPES.UserProviderCredentialResolver) private readonly userCredentials: UserProviderCredentialStoreBackendService,\n @inject(SAAS_SERVICE_TYPES.OrganizationProviderCredentialResolver) private readonly organizationCredentials: OrganizationProviderCredentialStoreBackendService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService) private readonly appConfig: AppConfigurationService,\n ) {\n super(logger, errorBuilder, errorHandler, 'ProviderConnectionController');\n }\n\n protected setupRoutes(): void {\n this.router.post(\n MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_START],\n this.asyncHandler(this.handleStart.bind(this)),\n );\n this.logRouteRegistration('POST', MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_START], 'Begin connecting a third-party account');\n\n this.router.get(CALLBACK_PATH, this.asyncHandler(this.handleCallback.bind(this)));\n this.logRouteRegistration('GET', CALLBACK_PATH, 'Receive the authorization code and store the grant');\n\n this.router.get(\n MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_CATALOGUE],\n this.asyncHandler(this.handleCatalogue.bind(this)),\n );\n this.logRouteRegistration('GET', MANUAL_CONTROLLER_ROUTES_URLS[ManualControllerRouteKey.PROVIDER_CONNECTION_CATALOGUE], 'What can be connected');\n }\n\n /**\n * What can be connected — the question the stored-credential list cannot answer.\n *\n * A settings screen listing somebody's connections shows an empty table on the day they have none,\n * which is precisely the day they need to learn what they might connect. So the CATALOGUE and the\n * ROWS are two reads, deliberately: this one is about the provider, the resource LIST is about the\n * person, and merging them would make \"nothing connected\" and \"nothing connectable\" indistinguishable.\n *\n * ## It reports a DECISION, and computes nothing\n *\n * `admissibleConnections` is the recorded decision in the provider's catalogue record — never\n * derived from what a vendor's API happens to support. A vendor with a personal-token endpoint does\n * not thereby become a provider a person may connect individually; somebody decided that, and this\n * route repeats what they decided.\n *\n * ## It answers ADMISSIBILITY, not AUTHORIZATION, and that split is not laziness\n *\n * Whether this caller may act for a given owner depends on the owner's ID, which a catalogue has\n * none of — an organization-scoped shape is admissible for the provider while the caller may be\n * entitled to act for one tenant and not another. So the start leg keeps both gates in the same\n * order every credential path uses, and a screen that renders an owner it cannot act for gets a\n * 403 there rather than a silently missing row here.\n *\n * ## Nothing here is a secret\n *\n * Which vendors an application integrates with is a property of the application, visible on its own\n * marketing pages. No token, no client secret, no env-var VALUE is reported — `connectionParameters`\n * names the placeholders a connection must ANSWER, which is an input to ask a person for.\n */\n private async handleCatalogue(req: Request, res: Response): Promise<void> {\n try {\n // Authenticated, though nothing here is owner-specific: an unauthenticated reader has no\n // screen to render it on, and an integration inventory is not something to hand to anybody who\n // can reach the port.\n await this.extractCaller(req);\n\n const providers = this.registry.getProviderTypes()\n .map((providerRef) => {\n const contract = this.registry.getProviderRuntimeContract(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API);\n const oauth2 = contract?.kind === ProviderProtocolRuntimeKind.REST ? contract.oauth2 : undefined;\n return {\n providerRef,\n /**\n * FALSE for a provider whose credential is pasted rather than granted. Such a provider is\n * still a real integration and still appears — it is authored on the credential screen\n * instead — so omitting it would make a supported vendor look unsupported.\n */\n connectable: oauth2 !== undefined,\n admissibleConnections: this.registry.getProviderAdmissibleConnections(providerRef)\n .map(({ ownerScope, delegation }) => ({ ownerScope, delegation })),\n // Absent, not empty, when the endpoints are plain — the same distinction the contract\n // draws, so \"no placeholder\" stays separable from \"nobody has looked\".\n connectionParameters: oauth2?.connectionParameters,\n scopes: oauth2?.scopes,\n };\n })\n // Keep only what somebody could actually connect: a provider admitting at least one\n // NON-APPLICATION owner.\n //\n // The obvious test — \"admits nothing\" — is INERT here, and measuring is what showed it. A\n // provider with no recorded decision does not admit an empty set:\n // `getProviderAdmissibleConnections` defaults it to APPLICATION/SERVICE, so the length is\n // never zero and that filter removed exactly nothing. With 689 transposed providers and one\n // recorded decision, this route was returning all 689 to a screen that can show one.\n //\n // APPLICATION is the right thing to exclude rather than an approximation of it. That scope\n // means the DEPLOYMENT's own credential, authored in the environment — `storeGrantForTarget`\n // refuses an APPLICATION target outright and says so — leaving no flow to begin, so a\n // Connect button for one could only ever fail.\n .filter((entry) => entry.admissibleConnections.some(\n (shape) => shape.ownerScope !== ExternalProvider_Connection_OwnerScope.APPLICATION,\n ));\n\n res.status(200).json({ providers });\n } catch (error) {\n this.handleControllerError(error, res, 'list the connectable providers');\n }\n }\n\n /**\n * Leg one: decide whether this caller may connect this target, and hand back the URL.\n *\n * The two gates are the SAME pair every credential path goes through, in the same order.\n * ADMISSIBLE — does this provider admit this owner scope at all? AUTHORIZED — may this execution\n * act for that owner? Running them here rather than only at the callback means a person who cannot\n * connect is told so before being sent to a vendor, rather than after granting consent.\n */\n private async handleStart(req: Request, res: Response): Promise<void> {\n try {\n const { userId } = await this.extractCaller(req);\n const providerRef = String(req.params.providerRef ?? '');\n const parsed = StartConnectionRequestSchema.safeParse(req.body);\n if (!parsed.success) {\n res.status(400).json({ error: 'VALIDATION_FAILED', message: 'The connection request is not valid.' });\n return;\n }\n const { target, scopes, connectionParameters } = parsed.data;\n\n const contract = this.registry.getProviderRuntimeContract(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API);\n if (contract?.kind !== ProviderProtocolRuntimeKind.REST || contract.oauth2 === undefined) {\n res.status(400).json({\n error: 'PROVIDER_NOT_CONNECTABLE',\n message: `Provider '${providerRef}' does not declare an OAuth2 contract, so there is nothing to connect. `\n + 'A provider whose credential is pasted is authored on the credential screen instead.',\n });\n return;\n }\n\n const admitted = this.registry.getProviderAdmissibleConnections(providerRef)\n .some((shape) => shape.ownerScope === target.ownerScope && shape.delegation === target.delegation);\n if (!admitted) {\n res.status(409).json({\n error: 'CONNECTION_NOT_ADMISSIBLE',\n message: `Provider '${providerRef}' does not admit a ${target.ownerScope}-owned, ${target.delegation}-delegated connection.`,\n });\n return;\n }\n\n if (!await this.mayActFor(target, userId)) {\n // 403 rather than 404: the caller is authenticated and the provider exists; what they may not\n // do is act for THIS owner. Answering 404 would make an authorization decision look like a\n // missing provider and send an operator looking for a registration problem.\n res.status(403).json({\n error: 'FORBIDDEN',\n message: 'You may not connect an account on behalf of that owner.',\n });\n return;\n }\n\n const secretSlug = parsed.data.secretSlug ?? contract.apiKey.secretRef;\n\n // WHERE the grant will be stored, and it must be a slug that holds an ACCOUNT.\n //\n // `secretSlug` is caller-supplied and optional, so without this a request could name the\n // provider's OAuth2 client-secret slug and have a minted grant written to it. Nothing would\n // ever read that row — the exchange takes the client secret from the deployment environment,\n // never from a credential row — so the connect would report success and the connection would\n // resolve as absent forever. A refusal that says which slug is wrong is worth more than a\n // silent write to a slot nobody consults.\n const scope = this.registry.getProviderSecretScope(providerRef, secretSlug);\n if (scope !== ExternalProvider_SecretScope.CREDENTIAL) {\n res.status(400).json({\n error: 'SECRET_SLUG_NOT_A_CREDENTIAL',\n message: `'${secretSlug}' identifies provider '${providerRef}'\\u2019s own registration, not an account, `\n + 'so a minted grant cannot be stored there. Omit `secretSlug` to use the credential slot the '\n + 'provider declares, or name one that holds an account token.',\n });\n return;\n }\n\n const state = createProviderOAuth2State();\n const pkce = createProviderOAuth2Pkce();\n const redirectUri = this.callbackUrlFor(req);\n\n const authorizeUrl = buildProviderOAuth2AuthorizeUrl({\n oauth2: contract.oauth2,\n providerRef,\n clientId: this.requireClientId(providerRef, contract.oauth2.clientIdSecretRef),\n redirectUri,\n state,\n pkce,\n connectionParameters,\n scopes,\n });\n\n // Recorded BEFORE the URL is handed out. The other order has a window in which somebody\n // completes a flow whose record does not exist yet, and the callback would answer as though\n // their state were forged.\n await this.pending.remember(state, {\n providerRef,\n secretSlug,\n target,\n pkceVerifier: pkce.verifier,\n redirectUri,\n connectionParameters,\n initiatedByUserId: userId,\n // The header only exists on this leg. See the field's own JSDoc.\n frontendServiceName: typeof req.headers[WildoHeaderKeys.FRONTEND_SERVICE_NAME] === 'string'\n ? (req.headers[WildoHeaderKeys.FRONTEND_SERVICE_NAME] as string)\n : undefined,\n startedAt: new Date().toISOString(),\n });\n\n res.status(200).json({ authorizeUrl });\n } catch (error) {\n this.handleControllerError(error, res, 'start a provider connection');\n }\n }\n\n /**\n * Leg two: the person comes back with a code.\n *\n * Consuming the record is the first thing that happens, and it is atomic — so a replayed callback\n * finds nothing and there is no window in which two concurrent callbacks both proceed.\n */\n private async handleCallback(req: Request, res: Response): Promise<void> {\n try {\n const state = typeof req.query.state === 'string' ? req.query.state : '';\n const code = typeof req.query.code === 'string' ? req.query.code : '';\n\n // A vendor that reports a refusal reports it HERE, in the redirect, not at the token endpoint.\n // Treating a missing code as a forged state would tell somebody who simply pressed \"Deny\" that\n // their request was invalid.\n if (typeof req.query.error === 'string') {\n // The vendor reports a refusal HERE, in the redirect. Somebody who pressed \"Deny\" is not an\n // error case to explain — they are a person who changed their mind, and they go back to the\n // screen they started from.\n this.finishInBrowser(res, undefined, { connectionError: 'declined' });\n return;\n }\n\n const pending = state === '' ? null : await this.pending.consume(state);\n if (pending === null || code === '') {\n // ONE answer for expired, already-used, never-existed and missing-code. Distinguishing them\n // would confirm to somebody probing that a state they hold is real.\n //\n // No frontend to return to either: the record that would have named one is exactly what is\n // missing, so this is the one exit that cannot land anywhere but a bare page.\n this.finishInBrowser(res, undefined, { connectionError: 'invalid' });\n return;\n }\n\n // Re-check that the person finishing the flow is the person who began it. Without it, somebody\n // who obtained a valid state could complete the connection while signed in as themselves and\n // have the grant stored against the original initiator's target.\n const { userId } = await this.extractCaller(req);\n if (pending.initiatedByUserId !== undefined && pending.initiatedByUserId !== userId) {\n this.finishInBrowser(res, pending.frontendServiceName, { connectionError: 'not-yours' });\n return;\n }\n\n const contract = this.registry.getProviderRuntimeContract(pending.providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API);\n if (contract?.kind !== ProviderProtocolRuntimeKind.REST || contract.oauth2 === undefined) {\n this.finishInBrowser(res, pending.frontendServiceName, {\n connectionError: 'not-connectable',\n providerRef: pending.providerRef,\n });\n return;\n }\n\n const grant = await exchangeProviderOAuth2Code({\n oauth2: contract.oauth2,\n providerRef: pending.providerRef,\n clientId: this.requireClientId(pending.providerRef, contract.oauth2.clientIdSecretRef),\n clientSecret: this.requireClientSecret(pending.providerRef, contract.oauth2.clientSecretSecretRef),\n connectionParameters: pending.connectionParameters,\n code,\n // The SAME redirect URI that was authorized, from the record rather than rebuilt: vendors\n // verify it byte-for-byte, and a proxy or a host header could make a rebuilt one differ.\n redirectUri: pending.redirectUri,\n pkceVerifier: pending.pkceVerifier,\n });\n\n // assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — the grant is recorded against\n // the owner the ATTEMPT named, never one the callback's own URL could carry.\n const credentialId = await this.storeGrantForTarget(pending, grant);\n\n // Logged AFTER the write, so the line means the connection EXISTS rather than that an exchange\n // succeeded. `grantedScopes` is the fact worth having: a vendor may issue a token for fewer\n // scopes than were asked for, and the resulting failure arrives on an unrelated operation\n // weeks later with nothing to correlate against.\n this.logger.info?.('[oauth2-connect] account connected', {\n providerRef: pending.providerRef,\n ownerScope: pending.target.ownerScope,\n credentialId,\n grantedScopes: grant.grantedScopes,\n // Never the token, and never the grant.\n });\n\n this.finishInBrowser(res, pending.frontendServiceName, { connected: pending.providerRef });\n } catch (error) {\n this.handleControllerError(error, res, 'complete a provider connection');\n }\n }\n\n\n /**\n * End the callback the way a BROWSER expects: a redirect, never a payload.\n *\n * This leg is reached by the vendor redirecting the person's own browser. Whatever it writes is\n * rendered as a page, so answering `res.json(...)` — which this flow did until it was driven —\n * shows somebody who has just granted consent a raw JSON blob on a backend origin, with no way\n * back. Every exit therefore lands them on the settings screen they started from, with the outcome\n * in the query string for that screen to render.\n *\n * The frontend is resolved from the RECORD's `frontendServiceName`, never from a header: the\n * vendor's redirect carries none of Wildo's own headers. When it cannot be resolved — an attempt\n * whose record is exactly what is missing, or a caller that omitted the header at start — the\n * fallback is a minimal HTML page rather than JSON. It says the same thing in the same medium the\n * browser is already rendering.\n *\n * Status is 303, not 302: the callback arrives as a GET and the destination is a different\n * resource to fetch with GET, which is what 303 means.\n * spec-cite: RFC 9110 §15.4.4 (303 See Other).\n */\n private finishInBrowser(\n res: Response,\n frontendServiceName: string | undefined,\n outcome: Readonly<Record<string, string>>,\n ): void {\n const base = frontendServiceName === undefined\n ? null\n : AuthControllerUtils.lookupFrontendPublicUrl(this.appConfig.config, frontendServiceName);\n\n if (base === null) {\n // No origin to return to. Say so in HTML — a person on a vendor redirect is looking at a page,\n // and the one thing not to give them is a payload.\n const detail = outcome.connectionError === undefined\n ? 'The account was connected. You can close this tab and return to the application.'\n : 'This connection attempt could not be completed. Return to the application and start again.';\n res.status(outcome.connectionError === undefined ? 200 : 400)\n .type('html')\n .send(`<!doctype html><meta charset=\"utf-8\"><title>Connection</title><p>${detail}</p>`);\n return;\n }\n\n const destination = new URL(PROVIDER_CONNECTION_RETURN_PATH, base);\n for (const [key, value] of Object.entries(outcome)) destination.searchParams.set(key, value);\n res.redirect(303, destination.toString());\n }\n\n /**\n * Route the minted grant to the store that owns the owner's table.\n *\n * The target comes from the PENDING RECORD, so the row is written for whoever the authorized\n * attempt named. Reading it from the callback's request instead would let somebody choose whose\n * account a grant lands on — the failure the whole state mechanism exists to prevent.\n *\n * An APPLICATION target has no store: the deployment's own credential lives in the environment,\n * and a connect flow that produced one would be writing a row nobody reads.\n */\n private async storeGrantForTarget(\n pending: ProviderOAuth2PendingAuthorization,\n grant: ProviderOAuth2Grant,\n ): Promise<string> {\n const { providerRef, secretSlug, target, connectionParameters } = pending;\n\n if (target.ownerScope === ExternalProvider_Connection_OwnerScope.USER) {\n return this.userCredentials.storeGrant(\n { userId: target.ownerId!, providerRef, secretSlug },\n grant,\n connectionParameters,\n );\n }\n if (target.ownerScope === ExternalProvider_Connection_OwnerScope.ORGANIZATION) {\n return this.organizationCredentials.storeGrant(\n { organizationId: target.ownerId!, providerRef, secretSlug },\n grant,\n connectionParameters,\n );\n }\n throw new Error(\n `A connection for provider '${providerRef}' completed with an APPLICATION-owned target, which has `\n + 'no credential store: the deployment\\'s own credential is authored in the environment. The '\n + 'attempt should have been refused at the start leg.',\n );\n }\n\n /**\n * May this caller act for that owner?\n *\n * An APPLICATION target has exactly one instance and the application IS the caller, so there is no\n * second party whose account might be spent. Every other target goes through the same membership\n * port the resolution path uses — one answer to \"may this execution act for that owner\", not two\n * that can disagree.\n */\n private async mayActFor(target: ExternalProvider_ConnectionTarget, userId: string): Promise<boolean> {\n if (target.ownerScope === ExternalProvider_Connection_OwnerScope.APPLICATION) return true;\n if (target.ownerScope === ExternalProvider_Connection_OwnerScope.USER) {\n // A person connects their OWN account and nobody else's. There is no administrative variant of\n // this resource at any tier, so the only admissible user target is the caller themselves.\n return target.ownerId === userId;\n }\n const ec = await this.authEcFactory.createForAuthenticatedAuthOperation(\n userId, this.authEcFactory.getUsersReadOperationPath(),\n );\n return this.targetAuthorization.mayActFor(target, ec);\n }\n\n private requireClientId(providerRef: string, secretRef: string | undefined): string {\n const value = secretRef === undefined\n ? undefined\n : this.registry.getProviderSecret(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API, secretRef);\n if (!value) {\n throw new Error(\n `Provider '${providerRef}' cannot be connected: the application's OAuth2 client id is not configured `\n + `(${secretRef ?? 'no client id declared'}). This is a deployment configuration gap.`,\n );\n }\n return value;\n }\n\n private requireClientSecret(providerRef: string, secretRef: string | undefined): string {\n const value = secretRef === undefined\n ? undefined\n : this.registry.getProviderSecret(providerRef, ExternalProvider_ExchangeProtocol_Kind.REST_API, secretRef);\n if (!value) {\n throw new Error(\n `Provider '${providerRef}' cannot be connected: the application's OAuth2 client secret is not configured `\n + `(${secretRef ?? 'no client secret declared'}). This is a deployment configuration gap.`,\n );\n }\n return value;\n }\n\n /**\n * The redirect URI, built once and then carried in the pending record.\n *\n * Derived from the request's own origin so a deployment needs no extra configuration, and stored\n * rather than rebuilt at the callback: a vendor verifies it byte-for-byte, and a proxy that\n * rewrites the host would make the rebuilt one differ from the authorized one.\n */\n private callbackUrlFor(req: Request): string {\n const forwardedProto = req.get('x-forwarded-proto');\n const protocol = typeof forwardedProto === 'string' && forwardedProto.length > 0\n ? forwardedProto.split(',')[0]!.trim()\n : req.protocol;\n return `${protocol}://${req.get('host') ?? 'localhost'}${req.baseUrl}${CALLBACK_PATH}`;\n }\n\n private async extractCaller(req: Request): Promise<{ userId: string }> {\n const guardEc = await this.authEcFactory.createForPreAuthOperation(this.authEcFactory.getUsersReadOperationPath());\n return this.authJwtGuard.extractAuthenticatedUser(guardEc, req);\n }\n\n /**\n * One shape for every failure, and never the vendor's response body.\n *\n * A token endpoint's reply carries credentials even when it fails — several vendors echo the\n * submitted client secret back in a validation message — so the message is logged with its detail\n * and answered without it.\n */\n private handleControllerError(error: unknown, res: Response, action: string): void {\n this.logger.error?.(`[oauth2-connect] failed to ${action}`, { error: describeCaughtError(error) });\n if (isWildoBackendError(error) && error.type === ErrorType.AUTHENTICATION) {\n res.status(401).json({ error: 'UNAUTHENTICATED', message: 'Sign in and try again.' });\n return;\n }\n res.status(502).json({\n error: 'CONNECTION_FAILED',\n message: `Could not ${action}. The detail is in the application log.`,\n });\n }\n}\n"]}