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

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 (265) hide show
  1. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts +14 -3
  2. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
  3. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +115 -22
  4. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
  5. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts +3 -1
  6. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
  7. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js +8 -3
  8. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
  9. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts +11 -0
  10. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
  11. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js +11 -2
  12. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js.map +1 -1
  13. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +1 -0
  14. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
  15. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +6 -1
  16. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
  17. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
  18. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js +16 -0
  19. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js.map +1 -1
  20. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts +20 -6
  21. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
  22. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +88 -32
  23. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
  24. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts +3 -1
  25. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
  26. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js +32 -7
  27. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js.map +1 -1
  28. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts +8 -5
  29. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
  30. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.js.map +1 -1
  31. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +31 -0
  32. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
  33. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +127 -5
  34. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
  35. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts +71 -1
  36. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
  37. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +62 -2
  38. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
  39. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +21 -0
  40. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
  41. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +126 -4
  42. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
  43. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts +3 -26
  44. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
  45. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js +3 -68
  46. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js.map +1 -1
  47. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
  48. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +4 -2
  49. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
  50. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +6 -6
  51. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
  52. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +38 -0
  53. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
  54. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +40 -0
  55. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
  56. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +20 -0
  57. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
  58. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +28 -0
  59. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
  60. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +12 -0
  61. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -0
  62. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +118 -0
  63. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -0
  64. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
  65. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +8 -5
  66. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
  67. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
  68. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +14 -0
  69. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
  70. package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
  71. package/dist/esm/config/custom/application-config-controller.backend.service.js +7 -1
  72. package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -1
  73. package/dist/esm/config/models/app-config.backend.schemas.d.ts +4 -0
  74. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
  75. package/dist/esm/config/services/app-configuration.backend.utils.d.ts +10 -1
  76. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
  77. package/dist/esm/config/services/app-configuration.backend.utils.js +13 -2
  78. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
  79. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts +2 -2
  80. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js +2 -2
  81. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js.map +1 -1
  82. package/dist/esm/databases/models/filter.backend.schemas.js +2 -2
  83. package/dist/esm/databases/models/filter.backend.schemas.js.map +1 -1
  84. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
  85. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js +20 -1
  86. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js.map +1 -1
  87. package/dist/esm/databases/services/redis.service.d.ts +27 -0
  88. package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
  89. package/dist/esm/databases/services/redis.service.js +29 -0
  90. package/dist/esm/databases/services/redis.service.js.map +1 -1
  91. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
  92. package/dist/esm/errors/services/error-handler.backend.service.js +5 -0
  93. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
  94. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts +41 -0
  95. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -0
  96. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js +40 -0
  97. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js.map +1 -0
  98. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts +64 -0
  99. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -0
  100. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js +193 -0
  101. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js.map +1 -0
  102. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +13 -2
  103. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
  104. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +8 -2
  105. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
  106. package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
  107. package/dist/esm/external-data/external-data-transform.backend.js +7 -1
  108. package/dist/esm/external-data/external-data-transform.backend.js.map +1 -1
  109. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts +2 -0
  110. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
  111. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js +13 -0
  112. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js.map +1 -1
  113. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +14 -0
  114. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
  115. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +6 -0
  116. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
  117. package/dist/esm/files/controllers/file.controller.d.ts +24 -1
  118. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
  119. package/dist/esm/files/controllers/file.controller.js +66 -2
  120. package/dist/esm/files/controllers/file.controller.js.map +1 -1
  121. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts +17 -0
  122. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -0
  123. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js +1 -0
  124. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -0
  125. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +5 -1
  126. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
  127. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +42 -3
  128. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
  129. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +18 -0
  130. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
  131. package/dist/esm/files/services/file-operation-handler.backend.service.js +36 -28
  132. package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
  133. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +163 -0
  134. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -0
  135. package/dist/esm/files/services/file-upload-grant.backend.service.js +442 -0
  136. package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -0
  137. package/dist/esm/files/services/files.backend.service.d.ts +19 -0
  138. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
  139. package/dist/esm/files/services/files.backend.service.js +78 -15
  140. package/dist/esm/files/services/files.backend.service.js.map +1 -1
  141. package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
  142. package/dist/esm/files/utils/file-uploader.utils.js +12 -0
  143. package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
  144. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +5 -5
  145. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
  146. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +79 -0
  147. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
  148. package/dist/esm/flows-actors/services/agents.backend.service.js +319 -42
  149. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
  150. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts +151 -41
  151. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
  152. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +300 -139
  153. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
  154. package/dist/esm/index.d.ts +4 -1
  155. package/dist/esm/index.d.ts.map +1 -1
  156. package/dist/esm/index.js +14 -1
  157. package/dist/esm/index.js.map +1 -1
  158. package/dist/esm/inject/models/container.d.ts.map +1 -1
  159. package/dist/esm/inject/models/container.js +4 -0
  160. package/dist/esm/inject/models/container.js.map +1 -1
  161. package/dist/esm/inject/models/service-types.d.ts +3 -0
  162. package/dist/esm/inject/models/service-types.d.ts.map +1 -1
  163. package/dist/esm/inject/models/service-types.js +2 -0
  164. package/dist/esm/inject/models/service-types.js.map +1 -1
  165. package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
  166. package/dist/esm/mcp/controllers/mcp.controller.js +12 -4
  167. package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
  168. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts +34 -0
  169. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
  170. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js +42 -0
  171. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
  172. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +29 -1
  173. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
  174. package/dist/esm/mcp/services/mcp-server.backend.service.js +131 -3
  175. package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
  176. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts +64 -2
  177. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
  178. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +130 -6
  179. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
  180. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +9 -0
  181. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
  182. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +11 -36
  183. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
  184. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  185. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +9 -7
  186. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
  187. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts +5 -5
  188. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
  189. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js +14 -13
  190. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js.map +1 -1
  191. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts +2 -1
  192. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
  193. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +2 -2
  194. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
  195. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
  196. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +9 -7
  197. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
  198. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
  199. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js +4 -1
  200. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js.map +1 -1
  201. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
  202. package/dist/esm/requests/service/websocket.service.js +56 -7
  203. package/dist/esm/requests/service/websocket.service.js.map +1 -1
  204. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
  205. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +2 -0
  206. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
  207. package/dist/esm/resources/services/resource-id.backend.service.js +3 -3
  208. package/dist/esm/resources/services/resource-id.backend.service.js.map +1 -1
  209. package/dist/esm/resources/services/resources-registry.backend.service.js +1 -1
  210. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
  211. package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
  212. package/dist/esm/runtime/services/execution-context-creator.backend.service.js +13 -7
  213. package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
  214. package/dist/esm/runtime/services/start-application.backend.service.d.ts +28 -0
  215. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
  216. package/dist/esm/runtime/services/start-application.backend.service.js +82 -0
  217. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
  218. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts +3 -23
  219. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
  220. package/dist/esm/security/authentications/models/jwt.backend.schemas.js +20 -45
  221. package/dist/esm/security/authentications/models/jwt.backend.schemas.js.map +1 -1
  222. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts +9 -1
  223. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
  224. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +9 -1
  225. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
  226. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
  227. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js +5 -3
  228. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js.map +1 -1
  229. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +25 -1
  230. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
  231. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +55 -4
  232. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
  233. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
  234. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js +24 -1
  235. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js.map +1 -1
  236. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts +117 -0
  237. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -0
  238. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js +104 -0
  239. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js.map +1 -0
  240. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +101 -6
  241. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
  242. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +210 -30
  243. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
  244. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +18 -1
  245. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
  246. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +110 -74
  247. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -1
  248. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts +22 -0
  249. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -0
  250. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js +22 -0
  251. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js.map +1 -0
  252. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +17 -3
  253. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
  254. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js +12 -0
  255. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -1
  256. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +20 -0
  257. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
  258. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +58 -5
  259. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
  260. package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
  261. package/dist/esm/security/jwt/services/jwt.backend.service.js +1 -18
  262. package/dist/esm/security/jwt/services/jwt.backend.service.js.map +1 -1
  263. package/dist/tsconfig.build.tsbuildinfo +1 -1
  264. package/package.json +15 -9
  265. package/dist/esm/.builder.pid +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"external-data-pipeline-state.backend.schemas.js","sourceRoot":"","sources":["../../../../../src/external-data/models/external-data-pipeline-state.backend.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport {\n CORE_APP_ROLES,\n CoreResourceOperation,\n createResourceConfiguration_Initialization,\n ResourceOperationRiskLevel,\n ResourceOperationVariantType,\n type ResourceConfiguration,\n type ResourceRelationship,\n} from '@wildo-ai/saas-models';\n\n/*\n * entrypoint-closure-waiver: same crossing (and same measured result) as\n * `data-seed-run.shared.resources-config.schemas` — `resources-types.backend.schemas` is\n * published only by the `./backend-resource-registry` subpath, but no root-exported contract of\n * this module INFERS a type from it: the factory's return type is explicitly annotated and\n * `ExternalDataPipelineState` is a structural z.infer. Probed 2026-08-28 per the rule:\n * `tsc -p tsconfig.build.json --noEmit` with declaration emit — zero TS2742/TS2883/TS7056.\n */\nimport {\n BackendResourceFieldIdentifier,\n BackendResourceType,\n} from '../../resources/models/resources-types.backend.schemas';\n\n/**\n * ============================================================================\n * ExternalDataPipelineState — system resource (partial-resource coverage v3, PR-9)\n * ============================================================================\n *\n * ONE row per declared `externalDataPipeline` pipeline, keyed by the DESTINATION resource\n * type. It exists for exactly two facts that must outlive a process:\n *\n * 1. **The extraction cursor.** A pass over a remote population larger than\n * `maxRowsPerRun` spans several runs; the cursor (an `@odata.nextLink`\n * URL or an Odoo keyset id) is what lets the NEXT run continue instead of\n * re-reading the same first pages forever. `null` = no pass in flight —\n * the next run starts a fresh pass from the population's beginning.\n * 2. **Last-run bookkeeping** for operators: when the pipeline last ran and\n * what it did (extracted / transformed-rejected / seed outcome / duration).\n * The heavyweight per-entry outcome detail stays on the `DataSeedRun`\n * ledger row every run already writes — this summary carries the ETL-only\n * numbers (extraction/transform happen BEFORE the seed engine sees\n * anything) and points at that ledger row; it never duplicates it.\n *\n * Mirrors the `DataSeedRun` posture: internal infrastructure, REPOSITORY_ONLY\n * variants only — the sole writer is the ETL run service. An operator-facing\n * read surface is the PR-28 ops follow-up, not this slice.\n */\nexport const ExternalDataPipelineStateSchema = z.object({\n _id: z.string().isPrimaryKey(),\n\n /**\n * The DESTINATION resource type whose `externalDataPipeline` this row tracks — one pipeline, one row.\n * `.isUnique()` makes the one-row contract PHYSICAL: a create racing the run service's\n * read-then-create loses at the store instead of minting a second cursor holder.\n */\n pipelineResourceType: z.string().min(1).isBusinessKey().isUnique().isDBIndexed(),\n\n /**\n * Opaque continuation of an IN-FLIGHT extraction pass (ODATA: the server's own\n * `@odata.nextLink`; Odoo: the last row id of the previous page). `null` when no pass is in\n * flight. ⚠ PR-6 rides on this field: the orphan stage runs ONLY on a run that COMPLETES a\n * pass, and \"mid-pass\" is precisely `cursor !== null`.\n */\n cursor: z.string().nullable(),\n\n /** When the current multi-run pass started; `null` when no pass is in flight. */\n passStartedAt: z.date().nullable(),\n\n /** Start instant of the most recent run (any outcome). `null` until the first run. */\n lastRunAt: z.date().nullable(),\n\n /** ETL-side numbers of the most recent run — see the header for the split vs `DataSeedRun`. */\n lastRunSummary: z.object({\n /** True when the run finished a full pass over the remote population (orphan stage ran). */\n completedPass: z.boolean(),\n /** Raw remote rows extracted this run. */\n extractedRows: z.number().int().nonnegative(),\n /** Rows the transform rejected (per-row reasons are logged; previous versions survive). */\n rejectedRows: z.number().int().nonnegative(),\n /** `_id` of the `DataSeedRun` ledger row carrying the per-entry load outcome. */\n seedRunId: z.string().nullable(),\n durationMs: z.number().int().nonnegative(),\n }).nullable(),\n});\n\nexport type ExternalDataPipelineState = z.infer<typeof ExternalDataPipelineStateSchema>;\n\nexport enum ExternalDataPipelineStateVariantKey {\n INTERNAL = 'internal',\n}\n\ntype ExternalDataPipelineState_CoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.UPDATE;\n\nconst internalVariant = () => ({\n variantKey: ExternalDataPipelineStateVariantKey.INTERNAL,\n // The literal annotation keeps the variant inside the discriminated builder union.\n variantType: ResourceOperationVariantType.REPOSITORY_ONLY as ResourceOperationVariantType.REPOSITORY_ONLY,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n});\n\nexport const externalDataPipelineStateResourceConfiguration_InitializationFactory = (\n resourcesRelationships: ResourceRelationship[],\n): ResourceConfiguration<undefined, ExternalDataPipelineState_CoreOperations, typeof ExternalDataPipelineStateSchema> => {\n return createResourceConfiguration_Initialization<\n undefined,\n ExternalDataPipelineState_CoreOperations,\n typeof ExternalDataPipelineStateSchema\n >({\n mainSchema: ExternalDataPipelineStateSchema,\n resourceIdentifier: BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE,\n resourceFieldIdentifier: BackendResourceFieldIdentifier[BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true,\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.LIST,\n CoreResourceOperation.CREATE,\n CoreResourceOperation.UPDATE,\n ],\n\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [internalVariant()] },\n [CoreResourceOperation.LIST]: { variants: [internalVariant()] },\n [CoreResourceOperation.CREATE]: { variants: [internalVariant()] },\n [CoreResourceOperation.UPDATE]: { variants: [internalVariant()] },\n },\n });\n};\n"]}
1
+ {"version":3,"file":"external-data-pipeline-state.backend.schemas.js","sourceRoot":"","sources":["../../../../../src/external-data/models/external-data-pipeline-state.backend.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport {\n CORE_APP_ROLES,\n CoreResourceOperation,\n createResourceConfiguration_Initialization,\n ResourceOperationRiskLevel,\n ResourceOperationVariantType,\n type ResourceConfiguration,\n type ResourceRelationship,\n} from '@wildo-ai/saas-models';\n\n/*\n * entrypoint-closure-waiver: same crossing (and same measured result) as\n * `data-seed-run.shared.resources-config.schemas` — `resources-types.backend.schemas` is\n * published only by the `./backend-resource-registry` subpath, but no root-exported contract of\n * this module INFERS a type from it: the factory's return type is explicitly annotated and\n * `ExternalDataPipelineState` is a structural z.infer. Probed 2026-08-28 per the rule:\n * `tsc -p tsconfig.build.json --noEmit` with declaration emit — zero TS2742/TS2883/TS7056.\n */\nimport { DataSeedRunStatus } from '../../data-seeding/models/data-seed-run.shared.schemas';\nimport {\n BackendResourceFieldIdentifier,\n BackendResourceType,\n} from '../../resources/models/resources-types.backend.schemas';\n\n/**\n * ============================================================================\n * ExternalDataPipelineState — system resource (partial-resource coverage v3, PR-9)\n * ============================================================================\n *\n * ONE row per declared `externalDataPipeline` pipeline, keyed by the DESTINATION resource\n * type. It exists for exactly two facts that must outlive a process:\n *\n * 1. **The extraction cursor.** A pass over a remote population larger than\n * `maxRowsPerRun` spans several runs; the cursor (an `@odata.nextLink`\n * URL or an Odoo keyset id) is what lets the NEXT run continue instead of\n * re-reading the same first pages forever. `null` = no pass in flight —\n * the next run starts a fresh pass from the population's beginning.\n * 2. **Last-run bookkeeping** for operators: when the pipeline last ran and\n * what it did (extracted / transformed-rejected / seed outcome / duration).\n * The heavyweight per-entry outcome detail stays on the `DataSeedRun`\n * ledger row every run already writes — this summary carries the ETL-only\n * numbers (extraction/transform happen BEFORE the seed engine sees\n * anything) and points at that ledger row; it never duplicates it.\n *\n * Mirrors the `DataSeedRun` posture: internal infrastructure, REPOSITORY_ONLY\n * variants only — the sole writer is the ETL run service. An operator-facing\n * read surface is the PR-28 ops follow-up, not this slice.\n */\nexport const ExternalDataPipelineStateSchema = z.object({\n _id: z.string().isPrimaryKey(),\n\n /**\n * The DESTINATION resource type whose `externalDataPipeline` this row tracks — one pipeline, one row.\n * `.isUnique()` makes the one-row contract PHYSICAL: a create racing the run service's\n * read-then-create loses at the store instead of minting a second cursor holder.\n */\n pipelineResourceType: z.string().min(1).isBusinessKey().isUnique().isDBIndexed(),\n\n /**\n * Opaque continuation of an IN-FLIGHT extraction pass (ODATA: the server's own\n * `@odata.nextLink`; Odoo: the last row id of the previous page). `null` when no pass is in\n * flight. ⚠ PR-6 rides on this field: the orphan stage runs ONLY on a run that COMPLETES a\n * pass, and \"mid-pass\" is precisely `cursor !== null`.\n */\n cursor: z.string().nullable(),\n\n /** When the current multi-run pass started; `null` when no pass is in flight. */\n passStartedAt: z.date().nullable(),\n\n /** Start instant of the most recent run (any outcome). `null` until the first run. */\n lastRunAt: z.date().nullable(),\n\n /** ETL-side numbers of the most recent run — see the header for the split vs `DataSeedRun`. */\n lastRunSummary: z.object({\n /** True when the run finished a full pass over the remote population (orphan stage ran). */\n completedPass: z.boolean(),\n /** Raw remote rows extracted this run. */\n extractedRows: z.number().int().nonnegative(),\n /** Rows the transform rejected (per-row reasons are logged; previous versions survive). */\n rejectedRows: z.number().int().nonnegative(),\n /**\n * The seed engine's own verdict on the LOAD — a different axis from `completedPass`, which is\n * about the EXTRACTION pass, and the two must never be merged: a run can complete a full pass\n * over the remote population and still fail to write some of it.\n *\n * Recorded because omitting it made the admin run response answer `completed-pass` while the\n * ledger said `partial` with a failed entry — a caller reading only the response would have\n * believed the sync succeeded. One scalar is enough here: `PARTIAL` or `FAILED` is the signal\n * to go read `seedRunId`, which owns the per-entry detail this summary deliberately does not\n * duplicate.\n */\n loadStatus: z.enum(DataSeedRunStatus).nullable(),\n /** `_id` of the `DataSeedRun` ledger row carrying the per-entry load outcome. */\n seedRunId: z.string().nullable(),\n durationMs: z.number().int().nonnegative(),\n }).nullable(),\n});\n\nexport type ExternalDataPipelineState = z.infer<typeof ExternalDataPipelineStateSchema>;\n\nexport enum ExternalDataPipelineStateVariantKey {\n INTERNAL = 'internal',\n}\n\ntype ExternalDataPipelineState_CoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.UPDATE;\n\nconst internalVariant = () => ({\n variantKey: ExternalDataPipelineStateVariantKey.INTERNAL,\n // The literal annotation keeps the variant inside the discriminated builder union.\n variantType: ResourceOperationVariantType.REPOSITORY_ONLY as ResourceOperationVariantType.REPOSITORY_ONLY,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n});\n\nexport const externalDataPipelineStateResourceConfiguration_InitializationFactory = (\n resourcesRelationships: ResourceRelationship[],\n): ResourceConfiguration<undefined, ExternalDataPipelineState_CoreOperations, typeof ExternalDataPipelineStateSchema> => {\n return createResourceConfiguration_Initialization<\n undefined,\n ExternalDataPipelineState_CoreOperations,\n typeof ExternalDataPipelineStateSchema\n >({\n mainSchema: ExternalDataPipelineStateSchema,\n resourceIdentifier: BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE,\n resourceFieldIdentifier: BackendResourceFieldIdentifier[BackendResourceType.EXTERNAL_DATA_PIPELINE_STATE],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true,\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.LIST,\n CoreResourceOperation.CREATE,\n CoreResourceOperation.UPDATE,\n ],\n\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [internalVariant()] },\n [CoreResourceOperation.LIST]: { variants: [internalVariant()] },\n [CoreResourceOperation.CREATE]: { variants: [internalVariant()] },\n [CoreResourceOperation.UPDATE]: { variants: [internalVariant()] },\n },\n });\n};\n"]}
@@ -33,6 +33,20 @@ export type RuntimeAgentClientProtocolProfile = {
33
33
  sessionMetaExtensions?: Record<string, unknown>;
34
34
  /** How this agent expresses each isolation posture; an absent posture is refused, never substituted. */
35
35
  sessionMetaExtensionsByHostConfigurationInheritance?: Partial<Record<string, Record<string, unknown>>>;
36
+ /**
37
+ * How the selected model reaches this agent. Absent means the provider
38
+ * declared none, and a run that selected a model is refused rather than
39
+ * started with the choice silently dropped.
40
+ */
41
+ modelDelivery?: {
42
+ channel: 'environment-variable';
43
+ environmentVariableName: string;
44
+ } | {
45
+ channel: 'session-config-option';
46
+ configId: string;
47
+ };
48
+ /** Agent-vocabulary session-mode ids to prefer per ceiling; an optimisation, never the guarantee. */
49
+ sessionModeIdsByPermissionCeiling?: Partial<Record<string, string[]>>;
36
50
  };
37
51
  import { type ExternalProviderSelectionResolutionEvidence } from '../../external-providers/models/provider-selection-resolution-evidence.backend.definitions';
38
52
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"external-providers-registry.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/services/external-providers-registry.backend.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"external-providers-registry.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/services/external-providers-registry.backend.service.ts"],"names":[],"mappings":"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"}
@@ -585,6 +585,12 @@ let ExternalProvidersRegistryBackendService = class ExternalProvidersRegistryBac
585
585
  ...(runtimeContract.sessionMetaExtensionsByHostConfigurationInheritance
586
586
  ? { sessionMetaExtensionsByHostConfigurationInheritance: runtimeContract.sessionMetaExtensionsByHostConfigurationInheritance }
587
587
  : {}),
588
+ ...(runtimeContract.modelDelivery ? { modelDelivery: runtimeContract.modelDelivery } : {}),
589
+ ...(runtimeContract.sessionModeIdsByPermissionCeiling
590
+ ? {
591
+ sessionModeIdsByPermissionCeiling: Object.fromEntries(Object.entries(runtimeContract.sessionModeIdsByPermissionCeiling).map(([ceiling, modeIds]) => [ceiling, [...(modeIds ?? [])]])),
592
+ }
593
+ : {}),
588
594
  };
589
595
  }
590
596
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"external-providers-registry.backend.service.js","sourceRoot":"","sources":["../../../../../src/external-providers/services/external-providers-registry.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * External Providers Registry Backend Service\n *\n * Provides runtime access to the backend provider registry and\n * their protocol configurations, secrets, and operations.\n */\n\nimport { injectable, inject } from 'inversify';\nimport {\n External_Providers_Registry,\n External_Providers_RegistryItem,\n EngineCapability,\n EngineCapabilityResolutionMode,\n getEngineCapabilityResolutionMode,\n PROVIDER_CAPABILITY_TO_ENGINE_CAPABILITY,\n} from '@wildo-ai/saas-models';\nimport {\n ExternalProvider_ExchangeProtocol_Kind,\n ExternalProvider_ExchangeProtocol_Configuration_Base,\n LLMProvider_OperationKey,\n DocumentExtractionProvider_OperationKey,\n EmbeddingsProvider_OperationKey,\n APPLICATION_ENVIRONMENT,\n} from '@wildo-ai/external-connectors-models';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport type { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { ErrorType, ErrorCustomMessageReference, isWildoBackendError } from '@wildo-ai/saas-models';\nimport type { BackendProviderRegistryBackendService } from './backend-provider-registry.backend.service';\nimport type { ProviderProtocolRuntimeContract } from '@wildo-ai/external-connectors-private/backend';\nimport type { Hook_Endpoint } from '@wildo-ai/external-connectors-models';\nimport {\n AgentClientProtocol_AuthMode,\n AgentClientProtocol_ExecutionProfileSchema,\n AgentClientProtocol_HostConfigurationInheritance,\n AgentClientProtocol_PermissionCeiling,\n AgentClientProtocol_RunnerHost,\n AgentClientProtocol_WorkingDirectoryPolicy,\n CodingAgent_OperationKey,\n type AgentClientProtocol_Configuration,\n type AgentClientProtocol_ExecutionProfile,\n} from '@wildo-ai/external-connectors-models';\n\n/**\n * Provider-contract operation literal → the semantic coding operation key. The\n * contract package uses short literals so it need not depend on the operation\n * family that consumes it; this map is the single translation.\n */\nconst RUNTIME_CODING_OPERATION_TO_SEMANTIC_OPERATION: Record<string, CodingAgent_OperationKey> = {\n runCodingTask: CodingAgent_OperationKey.RUN_CODING_TASK,\n};\n\n/**\n * The runtime projection of an ACP provider's transport capability.\n *\n * Far smaller than a request/response protocol's, because ACP agents advertise\n * their own capabilities, modes and commands during `initialize` /\n * `session/new`. Re-declaring any of that in authored configuration would\n * create a second source of truth that drifts the first time the agent is\n * upgraded — so what remains is only what the HOST must know before it opens a\n * connection.\n */\nexport type RuntimeAgentClientProtocolProfile = {\n /** How the provider says to START its agent — the authority an application inherits. */\n agentCommand: string;\n agentArgs: string[];\n supportedOperationKeys: CodingAgent_OperationKey[];\n supportedModels: string[];\n supportedProtocolVersions: number[];\n sessionMetaExtensions?: Record<string, unknown>;\n /** How this agent expresses each isolation posture; an absent posture is refused, never substituted. */\n sessionMetaExtensionsByHostConfigurationInheritance?: Partial<Record<string, Record<string, unknown>>>;\n};\nimport { ExternalProvider_Auth_Kind } from '@wildo-ai/external-connectors-models';\nimport {\n ExternalProviderSelectionAuthorityKind,\n ExternalProviderSelectionOverrideStatus,\n type ExternalProviderSelectionResolutionEvidence,\n} from '~wildo-backend-lib/external-providers/models/provider-selection-resolution-evidence.backend.definitions';\n\n/**\n * F-6 (2026-05-06) — runtime-side projection of a resolved provider\n * configuration. The base schema (`ExternalProvider_ExchangeProtocol_Configuration_Base`)\n * lives in `external-connectors-models` (which can't import the\n * backend-only discriminated union); we extend it here at the consumer\n * boundary so callers narrow on `runtimeContract.kind` instead of\n * casting through `as any`.\n *\n * Optional fields beyond the base also appear on this projection:\n *\n * - `defaultExecutionProfileRef` / `executionProfiles` — set by\n * `getDefaultProviderConfiguration` for `kind: 'agent-client-protocol'`\n * contracts, consumed by `getAgentClientProtocolProfile` and the ACP runner.\n * - `endpoints` — set for `kind: 'webhook-originator'`.\n *\n * They stay typed as `unknown` here because their canonical schemas\n * live in `external-connectors-models`'s `AgentClientProtocol_Configuration` /\n * webhook surfaces and are narrowed at consumer sites already.\n */\nexport type ResolvedProviderConfiguration =\n & ExternalProvider_ExchangeProtocol_Configuration_Base\n & {\n runtimeContract?: ProviderProtocolRuntimeContract;\n defaultExecutionProfileRef?: string;\n executionProfiles?: Record<string, unknown>;\n /**\n * Webhook-originator endpoint descriptors emitted by\n * `buildWebhookEndpoints` 2026-05-06: now matches the canonical\n * `Hook_Endpoint` shape (with the optional `displayName` field).\n * The dead extras (`providerRef`, `path`, `secretBinding`) that\n * previously polluted the emit have been removed; their values\n * were redundant with information already carried by other\n * fields (controller loop key, route convention, `authConfig.secretRef`).\n */\n endpoints?: ReadonlyArray<Hook_Endpoint>;\n };\n\n\nconst DEFAULT_IDENTITY_ENVIRONMENTS = [\n APPLICATION_ENVIRONMENT.DEVELOPMENT,\n APPLICATION_ENVIRONMENT.STAGING,\n APPLICATION_ENVIRONMENT.PRODUCTION,\n];\n\nfunction isCompanionRuntimeServiceName(serviceName: string): boolean {\n const normalized = serviceName.trim().toLowerCase();\n return normalized === 'companion'\n || normalized === 'wildo-dev-companion'\n || normalized.endsWith('-companion');\n}\n\nconst RUNTIME_LLM_OPERATION_TO_SEMANTIC_OPERATION: Record<string, LLMProvider_OperationKey> = {\n generateText: LLMProvider_OperationKey.GENERATE_TEXT,\n streamText: LLMProvider_OperationKey.STREAM_TEXT,\n chatCompletion: LLMProvider_OperationKey.CHAT_COMPLETION,\n chatMultimodal: LLMProvider_OperationKey.CHAT_MULTIMODAL,\n generateStructured: LLMProvider_OperationKey.GENERATE_STRUCTURED,\n streamStructured: LLMProvider_OperationKey.STREAM_STRUCTURED,\n // The `*Thinking` runtime operation names were RETIRED 2026-07-17 — reasoning\n // depth is the `reasoningEffort` PARAMETER, not a separate operation.\n};\n\n/**\n * The embeddings protocol's OWN runtime-op → semantic-key map (RAG plan DL2/H4 surface 1):\n * embeddings operations never enter {@link RUNTIME_LLM_OPERATION_TO_SEMANTIC_OPERATION}, whose\n * `toSemanticOperationKeys` filter would silently DROP any key outside `LLMProvider_OperationKey`\n * — the exact fall-through a sixth LLM operation key would have died in. Disjoint kind, disjoint map.\n */\nconst RUNTIME_EMBEDDINGS_OPERATION_TO_SEMANTIC_OPERATION: Record<string, EmbeddingsProvider_OperationKey> = {\n embedTexts: EmbeddingsProvider_OperationKey.EMBED_TEXTS,\n};\n\n/**\n * The document-extraction protocol's OWN runtime-op → semantic-key map, for the same reason its\n * embeddings sibling above has one: each protocol kind owns a disjoint operation vocabulary, so a\n * key never falls through a foreign filter and silently disappears.\n */\nconst RUNTIME_DOCUMENT_EXTRACTION_OPERATION_TO_SEMANTIC_OPERATION: Record<string, DocumentExtractionProvider_OperationKey> = {\n extractDocumentText: DocumentExtractionProvider_OperationKey.EXTRACT_DOCUMENT_TEXT,\n};\n\ninterface RuntimeProviderScopeSelection {\n engineCapabilities?: EngineCapability[];\n}\n\ninterface RuntimeProviderScope {\n providers?: Record<string, RuntimeProviderScopeSelection | undefined>;\n selection?: Partial<Record<EngineCapability, {\n primary: string;\n fallbacks?: string[];\n }>>;\n}\n\n@injectable()\nexport class ExternalProvidersRegistryBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n protected registry: External_Providers_Registry | null = null;\n\n protected isInitialized = false;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) protected readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService) protected readonly configService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) protected readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.BackendProviderRegistryService) protected readonly backendProviderRegistry: BackendProviderRegistryBackendService,\n ) {\n this.logDebug = this.logger.debugByType('ExternalProvidersRegistryBackendService');\n this.logger.setDebugTypeLogging('ExternalProvidersRegistryBackendService', false);\n\n this.logDebug('External providers registry service created (not yet initialized)');\n }\n\n // ================================\n // Initialization Method\n // ================================\n\n /**\n * Initialize by projecting first-class backend provider modules into the\n * runtime registry facade used by existing callers.\n */\n public async initialize(): Promise<void> {\n if (this.isInitialized) {\n this.logDebug('Service already initialized, skipping');\n return;\n }\n\n if (!this.configService.isInitialized()) {\n await this.configService.initialize();\n }\n\n const registry = this.buildRuntimeRegistryFromProviderModules();\n\n this.registry = registry;\n\n this.isInitialized = true;\n this.logDebug('External providers registry initialized from backend provider modules', {\n totalProviders: Object.keys(registry).length,\n });\n }\n\n private buildRuntimeRegistryFromProviderModules(): External_Providers_Registry {\n const registry: External_Providers_Registry = {};\n for (const provider of this.backendProviderRegistry.getRegistry().modules.values()) {\n const providerRef = provider.metadata.ref;\n const protocols = this.backendProviderRegistry.getProtocolKinds(providerRef);\n const engineCapabilities = provider.providerCapabilities\n .map((capability) => PROVIDER_CAPABILITY_TO_ENGINE_CAPABILITY[capability])\n .filter((capability): capability is EngineCapability => Boolean(capability));\n\n registry[providerRef] = {\n providerRef,\n protocols,\n engineCapabilities: [...new Set(engineCapabilities)],\n supportsOAuth2: protocols.includes(ExternalProvider_ExchangeProtocol_Kind.SSO_OAUTH2) || undefined,\n };\n }\n return registry;\n }\n\n // ================================\n // Access Methods\n // ================================\n\n public getExternalProvidersRegistry(): External_Providers_Registry {\n this.ensureInitialized();\n return this.registry!;\n }\n\n public getProviderTypes(): string[] {\n this.ensureInitialized();\n return Object.keys(this.registry!);\n }\n\n public getProvider(providerRef: string): External_Providers_RegistryItem | undefined {\n this.ensureInitialized();\n return this.registry![providerRef];\n }\n\n public hasProvider(providerRef: string): boolean {\n this.ensureInitialized();\n return providerRef in (this.registry || {});\n }\n\n /**\n * Public, NON-throwing readiness probe — whether `initialize()` has run.\n * Lets lazy consumers (e.g. `CompositeAuditLogSink`) distinguish the expected\n * pre-startup window (skip silently, retry later) from a genuine post-init\n * resolution fault (which must be surfaced, not swallowed) — without tripping\n * the `ensureInitialized()` throw just to probe.\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public getProvidersForEngineCapability(capability: EngineCapability): string[] {\n this.ensureInitialized();\n if (this.configService.isInitialized()) {\n const activation = this.configService.config.engineCapabilities?.[capability];\n if (activation?.enabled !== true) {\n return [];\n }\n }\n\n const runtimeScope = this.getActiveRuntimeProviderScope();\n if (this.configService.isInitialized() && !runtimeScope) {\n return [];\n }\n\n const scopeProviderRefs = runtimeScope?.providers\n ? new Set(Object.keys(runtimeScope.providers))\n : undefined;\n const configuredProviders = this.configService.isInitialized()\n ? (this.configService.config.providerConfigurations ?? {})\n : {};\n\n const availableProviders = Object.values(this.registry!)\n .filter((provider) => provider.engineCapabilities.includes(capability))\n .map((provider) => provider.providerRef)\n .filter((providerRef) => {\n if (!scopeProviderRefs) {\n return true;\n }\n\n const selection = runtimeScope?.providers?.[providerRef];\n return scopeProviderRefs.has(providerRef)\n && (selection?.engineCapabilities ?? []).includes(capability);\n });\n\n // A FAN_OUT capability ignores any `selection` policy: every declared\n // provider is active, so primary/fallback ordering is meaningless (and the\n // config validator rejects authoring one). Guarding here is defense-in-\n // depth — a stray selection on a fan-out cap from a legacy/hand-authored\n // artifact never reorders or truncates the fan-out set.\n // Per-environment selection override (WILDO_PROVIDER_SELECTION_OVERRIDES,\n // authored in `wildo.infra.<env>.config.ts > providerSelection`) wins over\n // the app-wide `wildo.saas.config.ts` selection for a SELECT_ONE capability.\n // It only REORDERS — the availability/enabled filtering above is unchanged,\n // so an override naming an undeclared or capability-disabled provider\n // resolves to nothing (fail-closed), exactly like an equivalent SaaS-side\n // selection. FAN_OUT ignores it (same rule as the SaaS-side selection).\n const selectionForCapability = this.getProviderSelectionOverride(capability)\n ?? runtimeScope?.selection?.[capability];\n const policy = getEngineCapabilityResolutionMode(capability) === EngineCapabilityResolutionMode.FAN_OUT\n ? undefined\n : selectionForCapability;\n if (policy) {\n const orderedPolicyRefs = [policy.primary, ...(policy.fallbacks ?? [])]\n .filter((providerRef) => availableProviders.includes(providerRef));\n const remainingRefs = availableProviders.filter((providerRef) => !orderedPolicyRefs.includes(providerRef));\n return [...orderedPolicyRefs, ...remainingRefs];\n }\n\n return availableProviders.sort((left, right) => {\n const leftConfigured = configuredProviders[left] ? 0 : 1;\n const rightConfigured = configuredProviders[right] ? 0 : 1;\n return leftConfigured - rightConfigured || left.localeCompare(right);\n });\n }\n\n public getPrimaryProviderForEngineCapability(capability: EngineCapability): string | undefined {\n return this.getProvidersForEngineCapability(capability)[0];\n }\n\n /**\n * Resolve the provider ref(s) that should be ACTIVE for a capability,\n * honouring its declared `EngineCapabilityResolutionMode`:\n * - `SELECT_ONE` (the default — billing, email, observability, …): the\n * single primary (fallbacks tried on failure), as a 0- or 1-element list.\n * - `FAN_OUT` (e.g. `COMPLIANCE_AUDIT_TRAIL`): EVERY declared + available\n * provider — all active simultaneously (no primary, no failover).\n *\n * The single entry point a fan-out consumer (the `CompositeAuditLogSink`)\n * uses, so the resolution mode is honoured centrally rather than each\n * consumer choosing `getPrimary…` vs `getProviders…` by convention.\n */\n public getResolvedProviderRefsForCapability(capability: EngineCapability): string[] {\n if (getEngineCapabilityResolutionMode(capability) === EngineCapabilityResolutionMode.FAN_OUT) {\n return this.getProvidersForEngineCapability(capability);\n }\n const primary = this.getPrimaryProviderForEngineCapability(capability);\n return primary ? [primary] : [];\n }\n\n public isEngineCapabilityAvailable(capability: EngineCapability): boolean {\n return this.getProvidersForEngineCapability(capability).length > 0;\n }\n\n /**\n * G4 (audit Phase 5) — fail-open reconcile support. Whether a capability is\n * switched ON in `engineCapabilities` config (`activation.enabled === true`),\n * INDEPENDENT of whether any provider resolves to serve it. Distinct from:\n * - `isEngineCapabilityAvailable` — a provider is DECLARED (says nothing about\n * the operator's config intent), and\n * - `getRequiredCapabilitiesWithoutProvider` — a HARD requirement is unmet\n * (throws at boot; F5).\n * The G4 warn pairs this (\"the operator turned audit on\") with a zero-resolved-\n * provider check (\"but nothing is delivering it\") to flag a SILENT Layer-2\n * fan-out — a warn, never a throw.\n */\n public isEngineCapabilityEnabled(capability: EngineCapability): boolean {\n this.ensureInitialized();\n if (!this.configService.isInitialized()) {\n return false;\n }\n return this.configService.config.engineCapabilities?.[capability]?.enabled === true;\n }\n\n /**\n * F5 (audit Phase 5) — boot-guard support. Returns every capability the app\n * marked `activation.required === true` that resolves to ZERO active providers\n * (respecting the capability's resolution mode — SELECT_ONE needs a primary,\n * FAN_OUT needs ≥1 declared; a `required` capability left `enabled: false`\n * resolves to none and is therefore also caught). A non-empty result means a\n * misconfigured deployment — a HARD requirement with nothing to serve it — and\n * `StartApplicationBackendService.initialize()` throws CONFIGURATION on any.\n * Audit (`COMPLIANCE_AUDIT_TRAIL`, when marked required) is the FIRST user, not\n * a special case: this generalizes the coherence to EVERY capability.\n */\n public getRequiredCapabilitiesWithoutProvider(): EngineCapability[] {\n this.ensureInitialized();\n if (!this.configService.isInitialized()) {\n return [];\n }\n const activations = this.configService.config.engineCapabilities ?? {};\n const missing: EngineCapability[] = [];\n for (const capability of Object.keys(activations) as EngineCapability[]) {\n if (\n activations[capability]?.required === true\n && this.getResolvedProviderRefsForCapability(capability).length === 0\n ) {\n missing.push(capability);\n }\n }\n return missing;\n }\n\n /**\n * Per-environment external-provider selection override, read once from\n * `process.env.WILDO_PROVIDER_SELECTION_OVERRIDES` (a JSON map of\n * `EngineCapability -> { primary, fallbacks? }`). Projected by the Wildo\n * CLI's `env-vars-builder` from `wildo.infra.<env>.config.ts > providerSelection`.\n * Read as a string literal (not via a `platform-config-lib` import) to\n * preserve the engine → platform dependency direction — mirrors how\n * `LoggerService` reads `LOG_LEVEL` and `otel-preload` reads `OTEL_ENABLED`.\n *\n * Memoized on first read: env vars are fixed for a process lifetime, and\n * `getProvidersForEngineCapability` is a hot path. A malformed value is\n * tolerated (logged + ignored) so a bad override degrades to the SaaS-config\n * selection rather than breaking provider resolution.\n */\n private providerSelectionOverridesCache?: Partial<Record<EngineCapability, { primary: string; fallbacks?: string[] }>>;\n private providerSelectionOverridePayloadMalformed = false;\n private readonly malformedProviderSelectionOverrides = new Set<EngineCapability>();\n\n private getProviderSelectionOverride(\n capability: EngineCapability,\n ): { primary: string; fallbacks?: string[] } | undefined {\n if (this.providerSelectionOverridesCache === undefined) {\n const raw = process.env.WILDO_PROVIDER_SELECTION_OVERRIDES;\n if (!raw) {\n this.providerSelectionOverridesCache = {};\n } else {\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n this.providerSelectionOverridesCache = parsed as Partial<Record<EngineCapability, { primary: string; fallbacks?: string[] }>>;\n } else {\n this.providerSelectionOverridesCache = {};\n this.providerSelectionOverridePayloadMalformed = true;\n }\n } catch (error) {\n this.logDebug('Failed to parse WILDO_PROVIDER_SELECTION_OVERRIDES; ignoring per-env override', {\n error: describeCaughtError(error),\n });\n this.providerSelectionOverridesCache = {};\n this.providerSelectionOverridePayloadMalformed = true;\n }\n }\n }\n const override = this.providerSelectionOverridesCache[capability];\n // Guard the shape defensively — a hand-crafted env var could carry a\n // non-conforming entry that upstream Zod validation never saw.\n if (override === undefined) return undefined;\n if (\n typeof override.primary !== 'string'\n || override.primary.length === 0\n || (override.fallbacks !== undefined && (\n !Array.isArray(override.fallbacks)\n || !override.fallbacks.every((fallback) => typeof fallback === 'string' && fallback.length > 0)\n ))\n ) {\n this.malformedProviderSelectionOverrides.add(capability);\n return undefined;\n }\n return override;\n }\n\n /**\n * Sanitized provenance for the effective provider selection. This exposes\n * neither environment bytes nor provider configuration; it only preserves\n * which authority won and the generated artifact identities behind it.\n */\n public getProviderSelectionResolutionEvidence(capability: EngineCapability): ExternalProviderSelectionResolutionEvidence {\n this.ensureInitialized();\n const runtimeSelection = this.getActiveRuntimeProviderScope()?.selection?.[capability];\n const environmentSelection = this.getProviderSelectionOverride(capability);\n const overrideMalformed = this.providerSelectionOverridePayloadMalformed || this.malformedProviderSelectionOverrides.has(capability);\n return Object.freeze({\n authorityKind: environmentSelection\n ? ExternalProviderSelectionAuthorityKind.ENVIRONMENT_OVERRIDE\n : runtimeSelection\n ? ExternalProviderSelectionAuthorityKind.APPLICATION_RUNTIME_ARTIFACT\n : ExternalProviderSelectionAuthorityKind.DEFAULT_RESOLUTION,\n overrideStatus: overrideMalformed\n ? ExternalProviderSelectionOverrideStatus.MALFORMED\n : environmentSelection\n ? ExternalProviderSelectionOverrideStatus.APPLIED\n : ExternalProviderSelectionOverrideStatus.ABSENT,\n applicationPrimaryProviderRef: runtimeSelection?.primary ?? null,\n applicationFallbackProviderRefs: Object.freeze([...(runtimeSelection?.fallbacks ?? [])]),\n environmentPrimaryProviderRef: environmentSelection?.primary ?? null,\n environmentFallbackProviderRefs: Object.freeze([...(environmentSelection?.fallbacks ?? [])]),\n providerRuntimeArtifact: this.configService.getProviderRuntimeArtifactEvidenceMetadata(),\n });\n }\n\n private getActiveRuntimeProviderScope(): RuntimeProviderScope | undefined {\n if (!this.configService.isInitialized()) {\n return undefined;\n }\n\n const scopes = this.configService.config.providers?.scopes;\n if (!scopes) {\n return undefined;\n }\n\n const serviceName = typeof (this.configService as { serviceName?: string }).serviceName === 'string'\n ? (this.configService as { serviceName?: string }).serviceName!\n : '';\n if (scopes.companion && isCompanionRuntimeServiceName(serviceName)) {\n return scopes.companion as RuntimeProviderScope;\n }\n\n return scopes.backend as RuntimeProviderScope | undefined;\n }\n\n /**\n * Get provider configuration for a specific protocol.\n * Falls back to default configuration from cached provider definitions if not overridden.\n */\n public getProviderConfiguration(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): ResolvedProviderConfiguration | undefined {\n this.ensureInitialized();\n try {\n if (!this.configService.isInitialized()) {\n return this.getDefaultProviderConfiguration(providerRef, protocolKind);\n }\n const appConfig = this.configService.config;\n const providerConfigs = appConfig.providerConfigurations || {};\n\n const defaultConfig = this.getDefaultProviderConfiguration(providerRef, protocolKind);\n const customConfig = providerConfigs[providerRef]?.[protocolKind];\n if (customConfig) {\n this.logDebug(`Using merged custom configuration for ${providerRef}.${protocolKind}`);\n return this.mergeProviderConfiguration(\n defaultConfig,\n customConfig as ResolvedProviderConfiguration,\n );\n }\n\n if (defaultConfig) {\n this.logDebug(`Using default configuration for ${providerRef}.${protocolKind}`);\n }\n return defaultConfig;\n } catch (error) {\n // Programmer-error / contract-violation paths (cross-`kind`\n // merge guard, authKind misuse on `agent-client-protocol`) throw via\n // `errorBuilder.buildError`, producing `WildoError_Backend`.\n // Those MUST surface — they signal projection drift that the\n // silent fallback would mask. Only network/runtime hiccups\n // (the original intent of this catch) fall back to default.\n if (isWildoBackendError(error)) {\n throw error;\n }\n this.logDebug('Error getting provider configuration, falling back to default', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return this.getDefaultProviderConfiguration(providerRef, protocolKind);\n }\n }\n\n private mergeProviderConfiguration(\n defaultConfig: ResolvedProviderConfiguration | undefined,\n customConfig: ResolvedProviderConfiguration\n ): ResolvedProviderConfiguration {\n if (!defaultConfig) {\n return customConfig;\n }\n\n // Fail-closed cross-`kind` guard. Both inputs are looked up by\n // the same `(providerRef, protocolKind)` pair upstream, so the\n // discriminated-union `kind` MUST match if both contracts are\n // present. A mismatch here would silently corrupt the merged\n // result into a type-broken union member; we throw via\n // `errorBuilder.buildError` so the WildoError_Backend instance\n // is detected by `getProviderConfiguration`'s catch and\n // re-thrown past the default-fallback path (the catch only\n // swallows generic runtime errors, not contract violations).\n //\n // Note on scope: this guard fires against cross-`kind` drift\n // between `getDefaultProviderConfiguration`'s emit (carries\n // `runtimeContract`) and any caller-provided override that\n // ALSO carries `runtimeContract`. App-developer authoring of\n // `providerConfigurations.<providerRef>.<protocolKind>` does\n // not include `runtimeContract` (the backend module owns\n // that), so today the guard primarily defends against future\n // refactors of the merge call site rather than user-authored\n // input.\n const defaultKind = defaultConfig.runtimeContract?.kind;\n const customKind = customConfig.runtimeContract?.kind;\n if (defaultKind && customKind && defaultKind !== customKind) {\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED,\n context: {\n message: `[external-providers-registry] mergeProviderConfiguration received contracts with mismatched kind`,\n defaultKind,\n customKind,\n },\n },\n );\n }\n\n const mergedRuntimeContract = this.deepMergeRecord(\n defaultConfig.runtimeContract as Record<string, unknown> | undefined,\n customConfig.runtimeContract as Record<string, unknown> | undefined,\n );\n\n return {\n ...defaultConfig,\n ...customConfig,\n // `executionProfiles` is a MAP OF NAMED PROFILES, so the top-level\n // spread above would drop every profile the provider synthesized\n // (including `default`, which existing consumers still resolve) as\n // soon as an application authors one profile of its own. Merge by\n // ref instead — and replace a same-named profile WHOLE rather than\n // deep-merging it: a deep merge would let an override inherit\n // `secretRef`/`secretEnvVarName` from the synthesized default and\n // silently turn a host-managed profile into a secret-injecting one.\n ...(defaultConfig.executionProfiles || customConfig.executionProfiles\n ? {\n executionProfiles: {\n ...(defaultConfig.executionProfiles ?? {}),\n ...(customConfig.executionProfiles ?? {}),\n },\n }\n : {}),\n authConfig: this.deepMergeRecord(\n defaultConfig.authConfig,\n customConfig.authConfig,\n ) as ResolvedProviderConfiguration['authConfig'],\n // The deep-merge result is loosely typed (`Record<string, unknown> | undefined`).\n // Cast back through `ProviderProtocolRuntimeContract`: the cross-`kind` guard\n // above ensures both inputs share the same `kind`, so the merged result is a\n // valid discriminated-union member.\n runtimeContract: mergedRuntimeContract as ProviderProtocolRuntimeContract | undefined,\n };\n }\n\n private deepMergeRecord(\n defaultValue: unknown,\n customValue: unknown\n ): Record<string, unknown> | undefined {\n if (!defaultValue && !customValue) return undefined;\n if (!defaultValue || typeof defaultValue !== 'object' || Array.isArray(defaultValue)) {\n return customValue as Record<string, unknown> | undefined;\n }\n if (!customValue || typeof customValue !== 'object' || Array.isArray(customValue)) {\n return defaultValue as Record<string, unknown>;\n }\n\n const merged: Record<string, unknown> = {\n ...(defaultValue as Record<string, unknown>),\n };\n for (const [key, value] of Object.entries(customValue as Record<string, unknown>)) {\n const previous = merged[key];\n if (Array.isArray(previous) && Array.isArray(value)) {\n merged[key] = [...new Set([...previous, ...value])];\n continue;\n }\n merged[key] = previous\n && typeof previous === 'object'\n && !Array.isArray(previous)\n && value\n && typeof value === 'object'\n && !Array.isArray(value)\n ? this.deepMergeRecord(previous, value)\n : value;\n }\n return merged;\n }\n\n\n public getProviderRuntimeContract(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind,\n ): ProviderProtocolRuntimeContract | undefined {\n return this.getProviderConfiguration(providerRef, protocolKind)?.runtimeContract;\n }\n\n public getLLMSemanticOperationKeys(providerRef: string): LLMProvider_OperationKey[] {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.LLM_PROVIDER,\n );\n\n if (runtimeContract?.kind !== 'llm') {\n return [];\n }\n\n return this.toSemanticOperationKeys(runtimeContract.operations);\n }\n\n /**\n * The semantic embeddings operations a provider's `EMBEDDINGS_PROVIDER` contract declares.\n * Consumer: `EmbeddingsBackendService`, which refuses to invoke a provider whose contract\n * does not declare {@link EmbeddingsProvider_OperationKey.EMBED_TEXTS} (fail-closed, named —\n * never an undefined-method throw inside an SDK call).\n */\n public getEmbeddingsSemanticOperationKeys(providerRef: string): EmbeddingsProvider_OperationKey[] {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.EMBEDDINGS_PROVIDER,\n );\n\n if (runtimeContract?.kind !== 'embeddings') {\n return [];\n }\n\n return runtimeContract.operations\n .map((operation) => RUNTIME_EMBEDDINGS_OPERATION_TO_SEMANTIC_OPERATION[operation])\n .filter((operation): operation is EmbeddingsProvider_OperationKey => operation !== undefined);\n }\n\n\n /**\n * The semantic extraction operations a provider's `DOCUMENT_EXTRACTION_PROVIDER` contract\n * declares. Consumer: `DocumentExtractionBackendService`, which refuses to invoke a provider\n * whose contract does not declare\n * {@link DocumentExtractionProvider_OperationKey.EXTRACT_DOCUMENT_TEXT} — fail-closed and\n * named, rather than a 404 from a route the provider never claimed to serve.\n */\n public getDocumentExtractionSemanticOperationKeys(providerRef: string): DocumentExtractionProvider_OperationKey[] {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.DOCUMENT_EXTRACTION_PROVIDER,\n );\n\n if (runtimeContract?.kind !== 'document-extraction') {\n return [];\n }\n\n return runtimeContract.operations\n .map((operation) => RUNTIME_DOCUMENT_EXTRACTION_OPERATION_TO_SEMANTIC_OPERATION[operation])\n .filter((operation): operation is DocumentExtractionProvider_OperationKey => operation !== undefined);\n }\n\n\n public getAgentClientProtocolConfiguration(providerRef: string): AgentClientProtocol_Configuration | undefined {\n const config = this.getProviderConfiguration(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL,\n );\n return config as AgentClientProtocol_Configuration | undefined;\n }\n\n public getAgentClientProtocolProfile(providerRef: string): RuntimeAgentClientProtocolProfile | undefined {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL,\n );\n\n if (runtimeContract?.kind !== 'agent-client-protocol') {\n return undefined;\n }\n\n const supportedModels = [\n ...(runtimeContract.models ?? []),\n ...(runtimeContract.defaultModel ? [runtimeContract.defaultModel] : []),\n ];\n return {\n agentCommand: runtimeContract.agentCommand,\n agentArgs: [...(runtimeContract.agentArgs ?? [])],\n supportedOperationKeys: runtimeContract.operations\n .map((operation) => RUNTIME_CODING_OPERATION_TO_SEMANTIC_OPERATION[operation])\n .filter((operation): operation is CodingAgent_OperationKey => operation !== undefined),\n supportedModels: [...new Set(supportedModels)],\n supportedProtocolVersions: [...(runtimeContract.supportedProtocolVersions ?? [1])],\n ...(runtimeContract.sessionMetaExtensions ? { sessionMetaExtensions: runtimeContract.sessionMetaExtensions } : {}),\n ...(runtimeContract.sessionMetaExtensionsByHostConfigurationInheritance\n ? { sessionMetaExtensionsByHostConfigurationInheritance: runtimeContract.sessionMetaExtensionsByHostConfigurationInheritance }\n : {}),\n };\n }\n\n /**\n * Resolve one named ACP execution profile, PARSED rather than trusted.\n *\n * Application-authored `providerConfigurations` are typed `unknown` all the\n * way to here, so an authored profile would otherwise reach the runner\n * unvalidated — and for this transport the unvalidated fields include the\n * environment gate and the permission ceiling. Parsing here makes the\n * profile fail closed BEFORE any agent is spawned, and applies the schema\n * defaults the authoring contract promises.\n */\n public getAgentClientProtocolExecutionProfile(\n providerRef: string,\n executionProfileRef: string,\n ): AgentClientProtocol_ExecutionProfile | undefined {\n this.ensureInitialized();\n\n const configuration = this.getAgentClientProtocolConfiguration(providerRef);\n const executionProfile = configuration?.executionProfiles?.[executionProfileRef];\n\n if (!executionProfile) {\n this.logDebug(`ACP execution profile ${executionProfileRef} not found for ${providerRef}`);\n return undefined;\n }\n\n try {\n return AgentClientProtocol_ExecutionProfileSchema.parse(executionProfile);\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n providerRef,\n executionProfileRef,\n message: '[external-providers-registry] ACP execution profile is not a valid authored profile',\n validationError: describeCaughtError(error),\n },\n },\n );\n }\n }\n\n public getAgentClientProtocolExecutionProfileSecret(\n providerRef: string,\n executionProfileRef: string,\n ): string | undefined {\n this.ensureInitialized();\n\n const executionProfile = this.getAgentClientProtocolExecutionProfile(providerRef, executionProfileRef);\n if (\n !executionProfile\n || executionProfile.authMode !== AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n || !executionProfile.secretRef\n ) {\n return undefined;\n }\n\n const runtimeSecret = executionProfile.secretEnvVarName\n ? process.env[executionProfile.secretEnvVarName]\n : undefined;\n if (runtimeSecret && runtimeSecret.length > 0) {\n this.logDebug('Resolved ACP secret from process env', { providerRef, executionProfileRef });\n return runtimeSecret;\n }\n\n return undefined;\n }\n\n private toSemanticOperationKeys(operations: readonly string[]): LLMProvider_OperationKey[] {\n return operations\n .map((operation) => RUNTIME_LLM_OPERATION_TO_SEMANTIC_OPERATION[operation] ?? operation)\n .filter((operation): operation is LLMProvider_OperationKey => (\n Object.values(LLMProvider_OperationKey).includes(operation as LLMProvider_OperationKey)\n ));\n }\n\n private getDefaultProviderConfiguration(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): ResolvedProviderConfiguration | undefined {\n try {\n const runtimeContract = this.backendProviderRegistry.getRuntimeContract(providerRef, protocolKind);\n\n if (!runtimeContract) {\n this.logDebug(`Runtime contract not found: ${providerRef}:${protocolKind}`);\n return undefined;\n }\n\n\n if (runtimeContract.kind === 'agent-client-protocol') {\n const defaultExecutionProfileRef = 'default';\n const hasExplicitSecretBinding = Boolean(\n runtimeContract.secretRef\n && runtimeContract.secretEnvVarName\n && runtimeContract.authModes.includes('secret-ref-env-injection'),\n );\n return {\n enabled: true,\n defaultExecutionProfileRef,\n executionProfiles: {\n [defaultExecutionProfileRef]: {\n runnerHost: AgentClientProtocol_RunnerHost.BACKEND_SUBPROCESS,\n command: runtimeContract.agentCommand,\n args: [...(runtimeContract.agentArgs ?? [])],\n inheritedEnvironmentVariables: [...(runtimeContract.inheritedEnvironmentVariables ?? [])],\n authMode: hasExplicitSecretBinding\n ? AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n : runtimeContract.authModes.includes('host-managed')\n ? AgentClientProtocol_AuthMode.HOST_MANAGED\n : AgentClientProtocol_AuthMode.NONE,\n ...(hasExplicitSecretBinding\n ? { secretRef: runtimeContract.secretRef, secretEnvVarName: runtimeContract.secretEnvVarName }\n : {}),\n // DEVELOPMENT only, and deliberately NARROWER than any other\n // synthesized default. Nobody authored this profile and\n // nobody reviewed it, and what it authorises is an agent\n // that edits a workspace. An application that wants a coding\n // agent anywhere else must say so in its own profile, where\n // the decision is visible.\n allowedApplicationEnvironments: [APPLICATION_ENVIRONMENT.DEVELOPMENT],\n workingDirectoryPolicy: AgentClientProtocol_WorkingDirectoryPolicy.WORKSPACE_ROOT,\n // Both safety postures stated rather than left to a schema\n // default, so reading this profile tells you what it permits\n // without resolving anything.\n permissionCeiling: AgentClientProtocol_PermissionCeiling.PROMPT_ALWAYS,\n hostConfigurationInheritance: AgentClientProtocol_HostConfigurationInheritance.APPLICATION_SCOPED,\n ...(runtimeContract.sessionMetaExtensions\n ? { sessionMetaExtensions: runtimeContract.sessionMetaExtensions }\n : {}),\n },\n },\n runtimeContract,\n };\n }\n\n const secretRef = this.secretRefForRuntimeContract(runtimeContract);\n return {\n enabled: true,\n ...(secretRef\n ? {\n authConfig: {\n authKind: this.authKindForRuntimeContract(runtimeContract),\n secretRef,\n },\n }\n : {}),\n ...(runtimeContract.kind === 'webhook-originator'\n ? { endpoints: this.buildWebhookEndpoints(runtimeContract) }\n : {}),\n runtimeContract,\n };\n } catch (error) {\n // Same pattern as `getProviderConfiguration` — contract\n // violations (`authKindForRuntimeContract` misuse) throw a\n // `WildoError_Backend` instance that MUST surface.\n if (isWildoBackendError(error)) {\n throw error;\n }\n this.logDebug('Error getting default provider configuration', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return undefined;\n }\n }\n\n private secretRefForRuntimeContract(runtimeContract: ProviderProtocolRuntimeContract): string | undefined {\n switch (runtimeContract.kind) {\n case 'email':\n // A `delivery: 'log'` email contract (the dev `preview`\n // provider) has NO endpoint and NO apiKey — it renders +\n // logs instead of sending. No secretRef to resolve; the\n // caller emits no `authConfig` and the email service skips\n // the API-key requirement. Contract-driven, not ref-keyed.\n return runtimeContract.delivery === 'log' ? undefined : runtimeContract.apiKey.secretRef;\n case 'llm':\n return runtimeContract.apiKey.secretRef;\n case 'image':\n return runtimeContract.apiKey.secretRef;\n case 'embeddings':\n return runtimeContract.apiKey.secretRef;\n case 'document-extraction':\n return runtimeContract.apiKey.secretRef;\n case 'oauth2-sso':\n return runtimeContract.clientSecretRef;\n case 'billing':\n case 'webhook-originator':\n return runtimeContract.secretRef;\n case 'sms':\n return runtimeContract.auth.secretRef;\n case 'rest':\n return runtimeContract.apiKey.secretRef;\n case 'agent-client-protocol':\n // An ACP agent that needs a credential carries it on the\n // contract; a host-managed one (the default for a coding agent\n // running under an operator's own login) carries none.\n return runtimeContract.secretRef;\n default: {\n const exhaustiveCheck: never = runtimeContract;\n return exhaustiveCheck;\n }\n }\n }\n\n /**\n * Map a runtime contract's `kind` to the canonical\n * `ExternalProvider_Auth_Kind` for the `authConfig` projection.\n * Used by `getDefaultProviderConfiguration` so the emitted\n * `authConfig: { authKind, secretRef }` satisfies the schema's\n * required-`authKind` invariant (was previously `{ secretRef }`\n * with no `authKind`, masked by `as unknown as` casts).\n *\n * Mapping rationale:\n *\n * - `llm` / `email` / `sms` / `billing` — providers authenticate\n * with an opaque API key supplied via env var.\n * - `webhook-originator` — provider signs payloads with HMAC; the\n * `secretRef` is the HMAC signing key.\n * - `oauth2-sso` — kind `OAUTH2`; the `secretRef` is the OAuth2\n * client secret.\n * - `agent-client-protocol` — auth is encoded on the executionProfile,\n * not `authConfig`; this method is not called for that kind\n * because that arm returns from the dedicated branch in\n * `getDefaultProviderConfiguration` BEFORE reaching this\n * mapping. A misuse throws via `errorBuilder` so the\n * `WildoError_Backend` instance bypasses the\n * `getProviderConfiguration` fallback catch.\n */\n private authKindForRuntimeContract(\n runtimeContract: ProviderProtocolRuntimeContract,\n ): ExternalProvider_Auth_Kind {\n switch (runtimeContract.kind) {\n case 'llm':\n case 'image':\n case 'embeddings':\n // Document extraction authenticates with an opaque API key in a request header, like\n // its siblings above; the header SHAPE (name/prefix) stays on the contract because\n // this family builds its own HTTPS request rather than handing a key to an SDK.\n case 'document-extraction':\n case 'email':\n case 'sms':\n case 'billing':\n // `rest` authenticates with an opaque API key supplied via env var, like its siblings\n // above; the header SHAPE (name/prefix) stays on the contract for its consumer.\n case 'rest':\n return ExternalProvider_Auth_Kind.API_KEY;\n case 'webhook-originator':\n return ExternalProvider_Auth_Kind.HMAC_SIGNATURE;\n case 'oauth2-sso':\n return ExternalProvider_Auth_Kind.OAUTH2;\n case 'agent-client-protocol':\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED,\n context: {\n message: '[external-providers-registry] authKindForRuntimeContract called with kind=agent-client-protocol; '\n + 'ACP auth lives on executionProfiles[].authMode, not on authConfig.',\n },\n },\n );\n default: {\n const exhaustiveCheck: never = runtimeContract;\n return exhaustiveCheck;\n }\n }\n }\n\n /**\n * Project the provider-authored `runtimeContract.endpoints` into\n * the canonical `Hook_Endpoint` shape consumed by the framework\n * webhook controller. Provider-agnostic: each endpoint descriptor\n * is owned by the provider module (see Stripe's `endpoints` array\n * on `stripe.backend.module.ts`); the only field this projection\n * adds is `signatureConfig.headerName`, sourced from the contract's\n * top-level `signatureHeaderName` so providers don't repeat it on\n * every endpoint.\n *\n * Previously branched on a Stripe-only provider literal\n * with the entire endpoint shape (event types, polymorphic\n * variants, `lookupField`) hardcoded inside this consumer site —\n * the same anti-pattern Step 7 was supposed to eliminate. Moved\n * to the provider module 2026-05-06 to close the gap; the CI\n * guard regex (`no-provider-ref-branches.guard.test.ts`) now\n * also catches the `runtimeContract.provider` literal pattern.\n *\n * Per-endpoint secret overrides (if a future provider needs them)\n * still flow through `HookInitiatorProvider_Configuration.endpointSecrets`,\n * not through this projection.\n */\n private buildWebhookEndpoints(\n runtimeContract: Extract<ProviderProtocolRuntimeContract, { kind: 'webhook-originator' }>,\n ): ReadonlyArray<Hook_Endpoint> {\n return runtimeContract.endpoints.map((endpoint) => ({\n ...endpoint,\n signatureConfig: {\n ...endpoint.signatureConfig,\n headerName: runtimeContract.signatureHeaderName,\n },\n eventTypes: [...endpoint.eventTypes],\n }));\n }\n\n /**\n * Get provider secrets for a specific protocol and secret reference.\n * Provider secrets are runtime-delivered via env/K8s materialization.\n * The secret binding contract is still declared by the provider protocol\n * configuration, but the secret value source is `process.env`.\n *\n * The `envVarName ?? secretRef` fallback covers the case where the\n * resolver doesn't find an explicit env-var-name mapping for the\n * requested secretRef. Today every engine provider authors\n * `secretsContract.<slug>.envVarName === <secretRef value>` (verified\n * across 17 modules), so this fallback is exactly equivalent to a\n * direct `process.env[secretRef]` lookup. If a future provider's\n * `secretsContract.envVarName` diverges from its `secretRef`, the\n * load-bearing path becomes `protocolConfig.authConfig.secretRef`\n * (returned by `getProviderSecretEnvVarName`), and the fallback\n * stays a defensive last-chance match.\n */\n public getProviderSecret(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind,\n secretRef: string\n ): string | undefined {\n this.ensureInitialized();\n try {\n const envVarName = this.getProviderSecretEnvVarName(providerRef, protocolKind, secretRef);\n const resolvedEnvVarName = envVarName ?? secretRef;\n\n const secretValue = process.env[resolvedEnvVarName];\n return secretValue && secretValue.length > 0 ? secretValue : undefined;\n } catch {\n return undefined;\n }\n }\n\n private getProviderSecretEnvVarName(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind,\n secretRef: string,\n ): string | undefined {\n if (protocolKind === ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL) {\n const acpConfiguration = this.getAgentClientProtocolConfiguration(providerRef);\n for (const executionProfile of Object.values(acpConfiguration?.executionProfiles ?? {})) {\n if (\n executionProfile.authMode === AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n && executionProfile.secretRef === secretRef\n ) {\n return executionProfile.secretEnvVarName;\n }\n }\n }\n\n const protocolConfig = this.getProviderConfiguration(providerRef, protocolKind);\n if (protocolConfig?.authConfig?.secretRef === secretRef) {\n return protocolConfig.authConfig.secretRef;\n }\n\n return undefined;\n }\n\n public getConfiguredProviderSecretRef(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): string | undefined {\n const config = this.getProviderConfiguration(providerRef, protocolKind);\n return config?.authConfig?.secretRef;\n }\n\n\n\n public getProviderApiKey(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): string | undefined {\n this.ensureInitialized();\n try {\n const secretRef = this.getConfiguredProviderSecretRef(providerRef, protocolKind);\n if (!secretRef) {\n this.logDebug(`No authConfig.secretRef found for ${providerRef}.${protocolKind}`);\n return undefined;\n }\n\n const apiKey = this.getProviderSecret(providerRef, protocolKind, secretRef);\n if (!apiKey) {\n this.logDebug(`Secret ${secretRef} not found for ${providerRef}.${protocolKind}`);\n }\n return apiKey;\n } catch (error) {\n this.logDebug('Error getting provider API key', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return undefined;\n }\n }\n\n public isProviderEnabled(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): boolean {\n this.ensureInitialized();\n try {\n if (!this.hasProvider(providerRef)) {\n return false;\n }\n\n const provider = this.getProvider(providerRef);\n if (!provider || !provider.protocols.includes(protocolKind)) {\n return false;\n }\n\n const config = this.getProviderConfiguration(providerRef, protocolKind);\n if (!config) {\n return true;\n }\n\n return config.enabled !== false;\n } catch (error) {\n this.logDebug('Error checking if provider is enabled', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return false;\n }\n }\n\n public getProviderProtocolSecrets(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): Record<string, string> | undefined {\n this.ensureInitialized();\n try {\n const resolvedSecrets: Record<string, string> = {};\n const protocolConfig = this.getProviderConfiguration(providerRef, protocolKind);\n const protocolSecretRef = protocolConfig?.authConfig?.secretRef;\n if (protocolSecretRef) {\n const secretValue = this.getProviderSecret(providerRef, protocolKind, protocolSecretRef);\n if (secretValue) {\n resolvedSecrets[protocolSecretRef] = secretValue;\n }\n }\n\n if (protocolKind === ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL) {\n const acpConfiguration = this.getAgentClientProtocolConfiguration(providerRef);\n for (const executionProfile of Object.values(acpConfiguration?.executionProfiles ?? {})) {\n if (\n executionProfile.authMode !== AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n || !executionProfile.secretRef\n ) {\n continue;\n }\n\n const secretValue = this.getProviderSecret(providerRef, protocolKind, executionProfile.secretRef);\n if (secretValue) {\n resolvedSecrets[executionProfile.secretRef] = secretValue;\n }\n }\n }\n\n return Object.keys(resolvedSecrets).length > 0 ? resolvedSecrets : undefined;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Refresh the runtime registry facade from first-class backend provider modules.\n *\n * This mirrors `initialize()` and intentionally no longer depends on the\n * deleted capability-bindings service.\n */\n public async refreshFromConfig(): Promise<void> {\n try {\n if (!this.configService.isInitialized()) {\n await this.configService.initialize();\n }\n\n const registry = this.buildRuntimeRegistryFromProviderModules();\n\n this.registry = registry;\n this.isInitialized = true;\n\n this.logDebug('External providers registry refreshed from backend provider modules', {\n totalProviders: Object.keys(registry).length,\n });\n } catch (error) {\n this.logDebug('Failed to refresh registry from config', {\n error: describeCaughtError(error)\n });\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED,\n context: {\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n // ================================\n // Initialization Utils\n // ================================\n\n protected ensureInitialized(): void {\n if (!this.isInitialized || !this.registry) {\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED\n }\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"external-providers-registry.backend.service.js","sourceRoot":"","sources":["../../../../../src/external-providers/services/external-providers-registry.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * External Providers Registry Backend Service\n *\n * Provides runtime access to the backend provider registry and\n * their protocol configurations, secrets, and operations.\n */\n\nimport { injectable, inject } from 'inversify';\nimport {\n External_Providers_Registry,\n External_Providers_RegistryItem,\n EngineCapability,\n EngineCapabilityResolutionMode,\n getEngineCapabilityResolutionMode,\n PROVIDER_CAPABILITY_TO_ENGINE_CAPABILITY,\n} from '@wildo-ai/saas-models';\nimport {\n ExternalProvider_ExchangeProtocol_Kind,\n ExternalProvider_ExchangeProtocol_Configuration_Base,\n LLMProvider_OperationKey,\n DocumentExtractionProvider_OperationKey,\n EmbeddingsProvider_OperationKey,\n APPLICATION_ENVIRONMENT,\n} from '@wildo-ai/external-connectors-models';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport type { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { ErrorType, ErrorCustomMessageReference, isWildoBackendError } from '@wildo-ai/saas-models';\nimport type { BackendProviderRegistryBackendService } from './backend-provider-registry.backend.service';\nimport type { ProviderProtocolRuntimeContract } from '@wildo-ai/external-connectors-private/backend';\nimport type { Hook_Endpoint } from '@wildo-ai/external-connectors-models';\nimport {\n AgentClientProtocol_AuthMode,\n AgentClientProtocol_ExecutionProfileSchema,\n AgentClientProtocol_HostConfigurationInheritance,\n AgentClientProtocol_PermissionCeiling,\n AgentClientProtocol_RunnerHost,\n AgentClientProtocol_WorkingDirectoryPolicy,\n CodingAgent_OperationKey,\n type AgentClientProtocol_Configuration,\n type AgentClientProtocol_ExecutionProfile,\n} from '@wildo-ai/external-connectors-models';\n\n/**\n * Provider-contract operation literal → the semantic coding operation key. The\n * contract package uses short literals so it need not depend on the operation\n * family that consumes it; this map is the single translation.\n */\nconst RUNTIME_CODING_OPERATION_TO_SEMANTIC_OPERATION: Record<string, CodingAgent_OperationKey> = {\n runCodingTask: CodingAgent_OperationKey.RUN_CODING_TASK,\n};\n\n/**\n * The runtime projection of an ACP provider's transport capability.\n *\n * Far smaller than a request/response protocol's, because ACP agents advertise\n * their own capabilities, modes and commands during `initialize` /\n * `session/new`. Re-declaring any of that in authored configuration would\n * create a second source of truth that drifts the first time the agent is\n * upgraded — so what remains is only what the HOST must know before it opens a\n * connection.\n */\nexport type RuntimeAgentClientProtocolProfile = {\n /** How the provider says to START its agent — the authority an application inherits. */\n agentCommand: string;\n agentArgs: string[];\n supportedOperationKeys: CodingAgent_OperationKey[];\n supportedModels: string[];\n supportedProtocolVersions: number[];\n sessionMetaExtensions?: Record<string, unknown>;\n /** How this agent expresses each isolation posture; an absent posture is refused, never substituted. */\n sessionMetaExtensionsByHostConfigurationInheritance?: Partial<Record<string, Record<string, unknown>>>;\n /**\n * How the selected model reaches this agent. Absent means the provider\n * declared none, and a run that selected a model is refused rather than\n * started with the choice silently dropped.\n */\n modelDelivery?:\n | { channel: 'environment-variable'; environmentVariableName: string }\n | { channel: 'session-config-option'; configId: string };\n /** Agent-vocabulary session-mode ids to prefer per ceiling; an optimisation, never the guarantee. */\n sessionModeIdsByPermissionCeiling?: Partial<Record<string, string[]>>;\n};\nimport { ExternalProvider_Auth_Kind } from '@wildo-ai/external-connectors-models';\nimport {\n ExternalProviderSelectionAuthorityKind,\n ExternalProviderSelectionOverrideStatus,\n type ExternalProviderSelectionResolutionEvidence,\n} from '~wildo-backend-lib/external-providers/models/provider-selection-resolution-evidence.backend.definitions';\n\n/**\n * F-6 (2026-05-06) — runtime-side projection of a resolved provider\n * configuration. The base schema (`ExternalProvider_ExchangeProtocol_Configuration_Base`)\n * lives in `external-connectors-models` (which can't import the\n * backend-only discriminated union); we extend it here at the consumer\n * boundary so callers narrow on `runtimeContract.kind` instead of\n * casting through `as any`.\n *\n * Optional fields beyond the base also appear on this projection:\n *\n * - `defaultExecutionProfileRef` / `executionProfiles` — set by\n * `getDefaultProviderConfiguration` for `kind: 'agent-client-protocol'`\n * contracts, consumed by `getAgentClientProtocolProfile` and the ACP runner.\n * - `endpoints` — set for `kind: 'webhook-originator'`.\n *\n * They stay typed as `unknown` here because their canonical schemas\n * live in `external-connectors-models`'s `AgentClientProtocol_Configuration` /\n * webhook surfaces and are narrowed at consumer sites already.\n */\nexport type ResolvedProviderConfiguration =\n & ExternalProvider_ExchangeProtocol_Configuration_Base\n & {\n runtimeContract?: ProviderProtocolRuntimeContract;\n defaultExecutionProfileRef?: string;\n executionProfiles?: Record<string, unknown>;\n /**\n * Webhook-originator endpoint descriptors emitted by\n * `buildWebhookEndpoints` 2026-05-06: now matches the canonical\n * `Hook_Endpoint` shape (with the optional `displayName` field).\n * The dead extras (`providerRef`, `path`, `secretBinding`) that\n * previously polluted the emit have been removed; their values\n * were redundant with information already carried by other\n * fields (controller loop key, route convention, `authConfig.secretRef`).\n */\n endpoints?: ReadonlyArray<Hook_Endpoint>;\n };\n\n\nconst DEFAULT_IDENTITY_ENVIRONMENTS = [\n APPLICATION_ENVIRONMENT.DEVELOPMENT,\n APPLICATION_ENVIRONMENT.STAGING,\n APPLICATION_ENVIRONMENT.PRODUCTION,\n];\n\nfunction isCompanionRuntimeServiceName(serviceName: string): boolean {\n const normalized = serviceName.trim().toLowerCase();\n return normalized === 'companion'\n || normalized === 'wildo-dev-companion'\n || normalized.endsWith('-companion');\n}\n\nconst RUNTIME_LLM_OPERATION_TO_SEMANTIC_OPERATION: Record<string, LLMProvider_OperationKey> = {\n generateText: LLMProvider_OperationKey.GENERATE_TEXT,\n streamText: LLMProvider_OperationKey.STREAM_TEXT,\n chatCompletion: LLMProvider_OperationKey.CHAT_COMPLETION,\n chatMultimodal: LLMProvider_OperationKey.CHAT_MULTIMODAL,\n generateStructured: LLMProvider_OperationKey.GENERATE_STRUCTURED,\n streamStructured: LLMProvider_OperationKey.STREAM_STRUCTURED,\n // The `*Thinking` runtime operation names were RETIRED 2026-07-17 — reasoning\n // depth is the `reasoningEffort` PARAMETER, not a separate operation.\n};\n\n/**\n * The embeddings protocol's OWN runtime-op → semantic-key map (RAG plan DL2/H4 surface 1):\n * embeddings operations never enter {@link RUNTIME_LLM_OPERATION_TO_SEMANTIC_OPERATION}, whose\n * `toSemanticOperationKeys` filter would silently DROP any key outside `LLMProvider_OperationKey`\n * — the exact fall-through a sixth LLM operation key would have died in. Disjoint kind, disjoint map.\n */\nconst RUNTIME_EMBEDDINGS_OPERATION_TO_SEMANTIC_OPERATION: Record<string, EmbeddingsProvider_OperationKey> = {\n embedTexts: EmbeddingsProvider_OperationKey.EMBED_TEXTS,\n};\n\n/**\n * The document-extraction protocol's OWN runtime-op → semantic-key map, for the same reason its\n * embeddings sibling above has one: each protocol kind owns a disjoint operation vocabulary, so a\n * key never falls through a foreign filter and silently disappears.\n */\nconst RUNTIME_DOCUMENT_EXTRACTION_OPERATION_TO_SEMANTIC_OPERATION: Record<string, DocumentExtractionProvider_OperationKey> = {\n extractDocumentText: DocumentExtractionProvider_OperationKey.EXTRACT_DOCUMENT_TEXT,\n};\n\ninterface RuntimeProviderScopeSelection {\n engineCapabilities?: EngineCapability[];\n}\n\ninterface RuntimeProviderScope {\n providers?: Record<string, RuntimeProviderScopeSelection | undefined>;\n selection?: Partial<Record<EngineCapability, {\n primary: string;\n fallbacks?: string[];\n }>>;\n}\n\n@injectable()\nexport class ExternalProvidersRegistryBackendService {\n protected logDebug: (message: string, context?: Record<string, unknown>) => void;\n protected registry: External_Providers_Registry | null = null;\n\n protected isInitialized = false;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) protected readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService) protected readonly configService: AppConfigurationService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) protected readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.BackendProviderRegistryService) protected readonly backendProviderRegistry: BackendProviderRegistryBackendService,\n ) {\n this.logDebug = this.logger.debugByType('ExternalProvidersRegistryBackendService');\n this.logger.setDebugTypeLogging('ExternalProvidersRegistryBackendService', false);\n\n this.logDebug('External providers registry service created (not yet initialized)');\n }\n\n // ================================\n // Initialization Method\n // ================================\n\n /**\n * Initialize by projecting first-class backend provider modules into the\n * runtime registry facade used by existing callers.\n */\n public async initialize(): Promise<void> {\n if (this.isInitialized) {\n this.logDebug('Service already initialized, skipping');\n return;\n }\n\n if (!this.configService.isInitialized()) {\n await this.configService.initialize();\n }\n\n const registry = this.buildRuntimeRegistryFromProviderModules();\n\n this.registry = registry;\n\n this.isInitialized = true;\n this.logDebug('External providers registry initialized from backend provider modules', {\n totalProviders: Object.keys(registry).length,\n });\n }\n\n private buildRuntimeRegistryFromProviderModules(): External_Providers_Registry {\n const registry: External_Providers_Registry = {};\n for (const provider of this.backendProviderRegistry.getRegistry().modules.values()) {\n const providerRef = provider.metadata.ref;\n const protocols = this.backendProviderRegistry.getProtocolKinds(providerRef);\n const engineCapabilities = provider.providerCapabilities\n .map((capability) => PROVIDER_CAPABILITY_TO_ENGINE_CAPABILITY[capability])\n .filter((capability): capability is EngineCapability => Boolean(capability));\n\n registry[providerRef] = {\n providerRef,\n protocols,\n engineCapabilities: [...new Set(engineCapabilities)],\n supportsOAuth2: protocols.includes(ExternalProvider_ExchangeProtocol_Kind.SSO_OAUTH2) || undefined,\n };\n }\n return registry;\n }\n\n // ================================\n // Access Methods\n // ================================\n\n public getExternalProvidersRegistry(): External_Providers_Registry {\n this.ensureInitialized();\n return this.registry!;\n }\n\n public getProviderTypes(): string[] {\n this.ensureInitialized();\n return Object.keys(this.registry!);\n }\n\n public getProvider(providerRef: string): External_Providers_RegistryItem | undefined {\n this.ensureInitialized();\n return this.registry![providerRef];\n }\n\n public hasProvider(providerRef: string): boolean {\n this.ensureInitialized();\n return providerRef in (this.registry || {});\n }\n\n /**\n * Public, NON-throwing readiness probe — whether `initialize()` has run.\n * Lets lazy consumers (e.g. `CompositeAuditLogSink`) distinguish the expected\n * pre-startup window (skip silently, retry later) from a genuine post-init\n * resolution fault (which must be surfaced, not swallowed) — without tripping\n * the `ensureInitialized()` throw just to probe.\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public getProvidersForEngineCapability(capability: EngineCapability): string[] {\n this.ensureInitialized();\n if (this.configService.isInitialized()) {\n const activation = this.configService.config.engineCapabilities?.[capability];\n if (activation?.enabled !== true) {\n return [];\n }\n }\n\n const runtimeScope = this.getActiveRuntimeProviderScope();\n if (this.configService.isInitialized() && !runtimeScope) {\n return [];\n }\n\n const scopeProviderRefs = runtimeScope?.providers\n ? new Set(Object.keys(runtimeScope.providers))\n : undefined;\n const configuredProviders = this.configService.isInitialized()\n ? (this.configService.config.providerConfigurations ?? {})\n : {};\n\n const availableProviders = Object.values(this.registry!)\n .filter((provider) => provider.engineCapabilities.includes(capability))\n .map((provider) => provider.providerRef)\n .filter((providerRef) => {\n if (!scopeProviderRefs) {\n return true;\n }\n\n const selection = runtimeScope?.providers?.[providerRef];\n return scopeProviderRefs.has(providerRef)\n && (selection?.engineCapabilities ?? []).includes(capability);\n });\n\n // A FAN_OUT capability ignores any `selection` policy: every declared\n // provider is active, so primary/fallback ordering is meaningless (and the\n // config validator rejects authoring one). Guarding here is defense-in-\n // depth — a stray selection on a fan-out cap from a legacy/hand-authored\n // artifact never reorders or truncates the fan-out set.\n // Per-environment selection override (WILDO_PROVIDER_SELECTION_OVERRIDES,\n // authored in `wildo.infra.<env>.config.ts > providerSelection`) wins over\n // the app-wide `wildo.saas.config.ts` selection for a SELECT_ONE capability.\n // It only REORDERS — the availability/enabled filtering above is unchanged,\n // so an override naming an undeclared or capability-disabled provider\n // resolves to nothing (fail-closed), exactly like an equivalent SaaS-side\n // selection. FAN_OUT ignores it (same rule as the SaaS-side selection).\n const selectionForCapability = this.getProviderSelectionOverride(capability)\n ?? runtimeScope?.selection?.[capability];\n const policy = getEngineCapabilityResolutionMode(capability) === EngineCapabilityResolutionMode.FAN_OUT\n ? undefined\n : selectionForCapability;\n if (policy) {\n const orderedPolicyRefs = [policy.primary, ...(policy.fallbacks ?? [])]\n .filter((providerRef) => availableProviders.includes(providerRef));\n const remainingRefs = availableProviders.filter((providerRef) => !orderedPolicyRefs.includes(providerRef));\n return [...orderedPolicyRefs, ...remainingRefs];\n }\n\n return availableProviders.sort((left, right) => {\n const leftConfigured = configuredProviders[left] ? 0 : 1;\n const rightConfigured = configuredProviders[right] ? 0 : 1;\n return leftConfigured - rightConfigured || left.localeCompare(right);\n });\n }\n\n public getPrimaryProviderForEngineCapability(capability: EngineCapability): string | undefined {\n return this.getProvidersForEngineCapability(capability)[0];\n }\n\n /**\n * Resolve the provider ref(s) that should be ACTIVE for a capability,\n * honouring its declared `EngineCapabilityResolutionMode`:\n * - `SELECT_ONE` (the default — billing, email, observability, …): the\n * single primary (fallbacks tried on failure), as a 0- or 1-element list.\n * - `FAN_OUT` (e.g. `COMPLIANCE_AUDIT_TRAIL`): EVERY declared + available\n * provider — all active simultaneously (no primary, no failover).\n *\n * The single entry point a fan-out consumer (the `CompositeAuditLogSink`)\n * uses, so the resolution mode is honoured centrally rather than each\n * consumer choosing `getPrimary…` vs `getProviders…` by convention.\n */\n public getResolvedProviderRefsForCapability(capability: EngineCapability): string[] {\n if (getEngineCapabilityResolutionMode(capability) === EngineCapabilityResolutionMode.FAN_OUT) {\n return this.getProvidersForEngineCapability(capability);\n }\n const primary = this.getPrimaryProviderForEngineCapability(capability);\n return primary ? [primary] : [];\n }\n\n public isEngineCapabilityAvailable(capability: EngineCapability): boolean {\n return this.getProvidersForEngineCapability(capability).length > 0;\n }\n\n /**\n * G4 (audit Phase 5) — fail-open reconcile support. Whether a capability is\n * switched ON in `engineCapabilities` config (`activation.enabled === true`),\n * INDEPENDENT of whether any provider resolves to serve it. Distinct from:\n * - `isEngineCapabilityAvailable` — a provider is DECLARED (says nothing about\n * the operator's config intent), and\n * - `getRequiredCapabilitiesWithoutProvider` — a HARD requirement is unmet\n * (throws at boot; F5).\n * The G4 warn pairs this (\"the operator turned audit on\") with a zero-resolved-\n * provider check (\"but nothing is delivering it\") to flag a SILENT Layer-2\n * fan-out — a warn, never a throw.\n */\n public isEngineCapabilityEnabled(capability: EngineCapability): boolean {\n this.ensureInitialized();\n if (!this.configService.isInitialized()) {\n return false;\n }\n return this.configService.config.engineCapabilities?.[capability]?.enabled === true;\n }\n\n /**\n * F5 (audit Phase 5) — boot-guard support. Returns every capability the app\n * marked `activation.required === true` that resolves to ZERO active providers\n * (respecting the capability's resolution mode — SELECT_ONE needs a primary,\n * FAN_OUT needs ≥1 declared; a `required` capability left `enabled: false`\n * resolves to none and is therefore also caught). A non-empty result means a\n * misconfigured deployment — a HARD requirement with nothing to serve it — and\n * `StartApplicationBackendService.initialize()` throws CONFIGURATION on any.\n * Audit (`COMPLIANCE_AUDIT_TRAIL`, when marked required) is the FIRST user, not\n * a special case: this generalizes the coherence to EVERY capability.\n */\n public getRequiredCapabilitiesWithoutProvider(): EngineCapability[] {\n this.ensureInitialized();\n if (!this.configService.isInitialized()) {\n return [];\n }\n const activations = this.configService.config.engineCapabilities ?? {};\n const missing: EngineCapability[] = [];\n for (const capability of Object.keys(activations) as EngineCapability[]) {\n if (\n activations[capability]?.required === true\n && this.getResolvedProviderRefsForCapability(capability).length === 0\n ) {\n missing.push(capability);\n }\n }\n return missing;\n }\n\n /**\n * Per-environment external-provider selection override, read once from\n * `process.env.WILDO_PROVIDER_SELECTION_OVERRIDES` (a JSON map of\n * `EngineCapability -> { primary, fallbacks? }`). Projected by the Wildo\n * CLI's `env-vars-builder` from `wildo.infra.<env>.config.ts > providerSelection`.\n * Read as a string literal (not via a `platform-config-lib` import) to\n * preserve the engine → platform dependency direction — mirrors how\n * `LoggerService` reads `LOG_LEVEL` and `otel-preload` reads `OTEL_ENABLED`.\n *\n * Memoized on first read: env vars are fixed for a process lifetime, and\n * `getProvidersForEngineCapability` is a hot path. A malformed value is\n * tolerated (logged + ignored) so a bad override degrades to the SaaS-config\n * selection rather than breaking provider resolution.\n */\n private providerSelectionOverridesCache?: Partial<Record<EngineCapability, { primary: string; fallbacks?: string[] }>>;\n private providerSelectionOverridePayloadMalformed = false;\n private readonly malformedProviderSelectionOverrides = new Set<EngineCapability>();\n\n private getProviderSelectionOverride(\n capability: EngineCapability,\n ): { primary: string; fallbacks?: string[] } | undefined {\n if (this.providerSelectionOverridesCache === undefined) {\n const raw = process.env.WILDO_PROVIDER_SELECTION_OVERRIDES;\n if (!raw) {\n this.providerSelectionOverridesCache = {};\n } else {\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n this.providerSelectionOverridesCache = parsed as Partial<Record<EngineCapability, { primary: string; fallbacks?: string[] }>>;\n } else {\n this.providerSelectionOverridesCache = {};\n this.providerSelectionOverridePayloadMalformed = true;\n }\n } catch (error) {\n this.logDebug('Failed to parse WILDO_PROVIDER_SELECTION_OVERRIDES; ignoring per-env override', {\n error: describeCaughtError(error),\n });\n this.providerSelectionOverridesCache = {};\n this.providerSelectionOverridePayloadMalformed = true;\n }\n }\n }\n const override = this.providerSelectionOverridesCache[capability];\n // Guard the shape defensively — a hand-crafted env var could carry a\n // non-conforming entry that upstream Zod validation never saw.\n if (override === undefined) return undefined;\n if (\n typeof override.primary !== 'string'\n || override.primary.length === 0\n || (override.fallbacks !== undefined && (\n !Array.isArray(override.fallbacks)\n || !override.fallbacks.every((fallback) => typeof fallback === 'string' && fallback.length > 0)\n ))\n ) {\n this.malformedProviderSelectionOverrides.add(capability);\n return undefined;\n }\n return override;\n }\n\n /**\n * Sanitized provenance for the effective provider selection. This exposes\n * neither environment bytes nor provider configuration; it only preserves\n * which authority won and the generated artifact identities behind it.\n */\n public getProviderSelectionResolutionEvidence(capability: EngineCapability): ExternalProviderSelectionResolutionEvidence {\n this.ensureInitialized();\n const runtimeSelection = this.getActiveRuntimeProviderScope()?.selection?.[capability];\n const environmentSelection = this.getProviderSelectionOverride(capability);\n const overrideMalformed = this.providerSelectionOverridePayloadMalformed || this.malformedProviderSelectionOverrides.has(capability);\n return Object.freeze({\n authorityKind: environmentSelection\n ? ExternalProviderSelectionAuthorityKind.ENVIRONMENT_OVERRIDE\n : runtimeSelection\n ? ExternalProviderSelectionAuthorityKind.APPLICATION_RUNTIME_ARTIFACT\n : ExternalProviderSelectionAuthorityKind.DEFAULT_RESOLUTION,\n overrideStatus: overrideMalformed\n ? ExternalProviderSelectionOverrideStatus.MALFORMED\n : environmentSelection\n ? ExternalProviderSelectionOverrideStatus.APPLIED\n : ExternalProviderSelectionOverrideStatus.ABSENT,\n applicationPrimaryProviderRef: runtimeSelection?.primary ?? null,\n applicationFallbackProviderRefs: Object.freeze([...(runtimeSelection?.fallbacks ?? [])]),\n environmentPrimaryProviderRef: environmentSelection?.primary ?? null,\n environmentFallbackProviderRefs: Object.freeze([...(environmentSelection?.fallbacks ?? [])]),\n providerRuntimeArtifact: this.configService.getProviderRuntimeArtifactEvidenceMetadata(),\n });\n }\n\n private getActiveRuntimeProviderScope(): RuntimeProviderScope | undefined {\n if (!this.configService.isInitialized()) {\n return undefined;\n }\n\n const scopes = this.configService.config.providers?.scopes;\n if (!scopes) {\n return undefined;\n }\n\n const serviceName = typeof (this.configService as { serviceName?: string }).serviceName === 'string'\n ? (this.configService as { serviceName?: string }).serviceName!\n : '';\n if (scopes.companion && isCompanionRuntimeServiceName(serviceName)) {\n return scopes.companion as RuntimeProviderScope;\n }\n\n return scopes.backend as RuntimeProviderScope | undefined;\n }\n\n /**\n * Get provider configuration for a specific protocol.\n * Falls back to default configuration from cached provider definitions if not overridden.\n */\n public getProviderConfiguration(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): ResolvedProviderConfiguration | undefined {\n this.ensureInitialized();\n try {\n if (!this.configService.isInitialized()) {\n return this.getDefaultProviderConfiguration(providerRef, protocolKind);\n }\n const appConfig = this.configService.config;\n const providerConfigs = appConfig.providerConfigurations || {};\n\n const defaultConfig = this.getDefaultProviderConfiguration(providerRef, protocolKind);\n const customConfig = providerConfigs[providerRef]?.[protocolKind];\n if (customConfig) {\n this.logDebug(`Using merged custom configuration for ${providerRef}.${protocolKind}`);\n return this.mergeProviderConfiguration(\n defaultConfig,\n customConfig as ResolvedProviderConfiguration,\n );\n }\n\n if (defaultConfig) {\n this.logDebug(`Using default configuration for ${providerRef}.${protocolKind}`);\n }\n return defaultConfig;\n } catch (error) {\n // Programmer-error / contract-violation paths (cross-`kind`\n // merge guard, authKind misuse on `agent-client-protocol`) throw via\n // `errorBuilder.buildError`, producing `WildoError_Backend`.\n // Those MUST surface — they signal projection drift that the\n // silent fallback would mask. Only network/runtime hiccups\n // (the original intent of this catch) fall back to default.\n if (isWildoBackendError(error)) {\n throw error;\n }\n this.logDebug('Error getting provider configuration, falling back to default', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return this.getDefaultProviderConfiguration(providerRef, protocolKind);\n }\n }\n\n private mergeProviderConfiguration(\n defaultConfig: ResolvedProviderConfiguration | undefined,\n customConfig: ResolvedProviderConfiguration\n ): ResolvedProviderConfiguration {\n if (!defaultConfig) {\n return customConfig;\n }\n\n // Fail-closed cross-`kind` guard. Both inputs are looked up by\n // the same `(providerRef, protocolKind)` pair upstream, so the\n // discriminated-union `kind` MUST match if both contracts are\n // present. A mismatch here would silently corrupt the merged\n // result into a type-broken union member; we throw via\n // `errorBuilder.buildError` so the WildoError_Backend instance\n // is detected by `getProviderConfiguration`'s catch and\n // re-thrown past the default-fallback path (the catch only\n // swallows generic runtime errors, not contract violations).\n //\n // Note on scope: this guard fires against cross-`kind` drift\n // between `getDefaultProviderConfiguration`'s emit (carries\n // `runtimeContract`) and any caller-provided override that\n // ALSO carries `runtimeContract`. App-developer authoring of\n // `providerConfigurations.<providerRef>.<protocolKind>` does\n // not include `runtimeContract` (the backend module owns\n // that), so today the guard primarily defends against future\n // refactors of the merge call site rather than user-authored\n // input.\n const defaultKind = defaultConfig.runtimeContract?.kind;\n const customKind = customConfig.runtimeContract?.kind;\n if (defaultKind && customKind && defaultKind !== customKind) {\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED,\n context: {\n message: `[external-providers-registry] mergeProviderConfiguration received contracts with mismatched kind`,\n defaultKind,\n customKind,\n },\n },\n );\n }\n\n const mergedRuntimeContract = this.deepMergeRecord(\n defaultConfig.runtimeContract as Record<string, unknown> | undefined,\n customConfig.runtimeContract as Record<string, unknown> | undefined,\n );\n\n return {\n ...defaultConfig,\n ...customConfig,\n // `executionProfiles` is a MAP OF NAMED PROFILES, so the top-level\n // spread above would drop every profile the provider synthesized\n // (including `default`, which existing consumers still resolve) as\n // soon as an application authors one profile of its own. Merge by\n // ref instead — and replace a same-named profile WHOLE rather than\n // deep-merging it: a deep merge would let an override inherit\n // `secretRef`/`secretEnvVarName` from the synthesized default and\n // silently turn a host-managed profile into a secret-injecting one.\n ...(defaultConfig.executionProfiles || customConfig.executionProfiles\n ? {\n executionProfiles: {\n ...(defaultConfig.executionProfiles ?? {}),\n ...(customConfig.executionProfiles ?? {}),\n },\n }\n : {}),\n authConfig: this.deepMergeRecord(\n defaultConfig.authConfig,\n customConfig.authConfig,\n ) as ResolvedProviderConfiguration['authConfig'],\n // The deep-merge result is loosely typed (`Record<string, unknown> | undefined`).\n // Cast back through `ProviderProtocolRuntimeContract`: the cross-`kind` guard\n // above ensures both inputs share the same `kind`, so the merged result is a\n // valid discriminated-union member.\n runtimeContract: mergedRuntimeContract as ProviderProtocolRuntimeContract | undefined,\n };\n }\n\n private deepMergeRecord(\n defaultValue: unknown,\n customValue: unknown\n ): Record<string, unknown> | undefined {\n if (!defaultValue && !customValue) return undefined;\n if (!defaultValue || typeof defaultValue !== 'object' || Array.isArray(defaultValue)) {\n return customValue as Record<string, unknown> | undefined;\n }\n if (!customValue || typeof customValue !== 'object' || Array.isArray(customValue)) {\n return defaultValue as Record<string, unknown>;\n }\n\n const merged: Record<string, unknown> = {\n ...(defaultValue as Record<string, unknown>),\n };\n for (const [key, value] of Object.entries(customValue as Record<string, unknown>)) {\n const previous = merged[key];\n if (Array.isArray(previous) && Array.isArray(value)) {\n merged[key] = [...new Set([...previous, ...value])];\n continue;\n }\n merged[key] = previous\n && typeof previous === 'object'\n && !Array.isArray(previous)\n && value\n && typeof value === 'object'\n && !Array.isArray(value)\n ? this.deepMergeRecord(previous, value)\n : value;\n }\n return merged;\n }\n\n\n public getProviderRuntimeContract(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind,\n ): ProviderProtocolRuntimeContract | undefined {\n return this.getProviderConfiguration(providerRef, protocolKind)?.runtimeContract;\n }\n\n public getLLMSemanticOperationKeys(providerRef: string): LLMProvider_OperationKey[] {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.LLM_PROVIDER,\n );\n\n if (runtimeContract?.kind !== 'llm') {\n return [];\n }\n\n return this.toSemanticOperationKeys(runtimeContract.operations);\n }\n\n /**\n * The semantic embeddings operations a provider's `EMBEDDINGS_PROVIDER` contract declares.\n * Consumer: `EmbeddingsBackendService`, which refuses to invoke a provider whose contract\n * does not declare {@link EmbeddingsProvider_OperationKey.EMBED_TEXTS} (fail-closed, named —\n * never an undefined-method throw inside an SDK call).\n */\n public getEmbeddingsSemanticOperationKeys(providerRef: string): EmbeddingsProvider_OperationKey[] {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.EMBEDDINGS_PROVIDER,\n );\n\n if (runtimeContract?.kind !== 'embeddings') {\n return [];\n }\n\n return runtimeContract.operations\n .map((operation) => RUNTIME_EMBEDDINGS_OPERATION_TO_SEMANTIC_OPERATION[operation])\n .filter((operation): operation is EmbeddingsProvider_OperationKey => operation !== undefined);\n }\n\n\n /**\n * The semantic extraction operations a provider's `DOCUMENT_EXTRACTION_PROVIDER` contract\n * declares. Consumer: `DocumentExtractionBackendService`, which refuses to invoke a provider\n * whose contract does not declare\n * {@link DocumentExtractionProvider_OperationKey.EXTRACT_DOCUMENT_TEXT} — fail-closed and\n * named, rather than a 404 from a route the provider never claimed to serve.\n */\n public getDocumentExtractionSemanticOperationKeys(providerRef: string): DocumentExtractionProvider_OperationKey[] {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.DOCUMENT_EXTRACTION_PROVIDER,\n );\n\n if (runtimeContract?.kind !== 'document-extraction') {\n return [];\n }\n\n return runtimeContract.operations\n .map((operation) => RUNTIME_DOCUMENT_EXTRACTION_OPERATION_TO_SEMANTIC_OPERATION[operation])\n .filter((operation): operation is DocumentExtractionProvider_OperationKey => operation !== undefined);\n }\n\n\n public getAgentClientProtocolConfiguration(providerRef: string): AgentClientProtocol_Configuration | undefined {\n const config = this.getProviderConfiguration(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL,\n );\n return config as AgentClientProtocol_Configuration | undefined;\n }\n\n public getAgentClientProtocolProfile(providerRef: string): RuntimeAgentClientProtocolProfile | undefined {\n const runtimeContract = this.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL,\n );\n\n if (runtimeContract?.kind !== 'agent-client-protocol') {\n return undefined;\n }\n\n const supportedModels = [\n ...(runtimeContract.models ?? []),\n ...(runtimeContract.defaultModel ? [runtimeContract.defaultModel] : []),\n ];\n return {\n agentCommand: runtimeContract.agentCommand,\n agentArgs: [...(runtimeContract.agentArgs ?? [])],\n supportedOperationKeys: runtimeContract.operations\n .map((operation) => RUNTIME_CODING_OPERATION_TO_SEMANTIC_OPERATION[operation])\n .filter((operation): operation is CodingAgent_OperationKey => operation !== undefined),\n supportedModels: [...new Set(supportedModels)],\n supportedProtocolVersions: [...(runtimeContract.supportedProtocolVersions ?? [1])],\n ...(runtimeContract.sessionMetaExtensions ? { sessionMetaExtensions: runtimeContract.sessionMetaExtensions } : {}),\n ...(runtimeContract.sessionMetaExtensionsByHostConfigurationInheritance\n ? { sessionMetaExtensionsByHostConfigurationInheritance: runtimeContract.sessionMetaExtensionsByHostConfigurationInheritance }\n : {}),\n ...(runtimeContract.modelDelivery ? { modelDelivery: runtimeContract.modelDelivery } : {}),\n ...(runtimeContract.sessionModeIdsByPermissionCeiling\n ? {\n sessionModeIdsByPermissionCeiling: Object.fromEntries(\n Object.entries(runtimeContract.sessionModeIdsByPermissionCeiling).map(\n ([ceiling, modeIds]) => [ceiling, [...(modeIds ?? [])]],\n ),\n ),\n }\n : {}),\n };\n }\n\n /**\n * Resolve one named ACP execution profile, PARSED rather than trusted.\n *\n * Application-authored `providerConfigurations` are typed `unknown` all the\n * way to here, so an authored profile would otherwise reach the runner\n * unvalidated — and for this transport the unvalidated fields include the\n * environment gate and the permission ceiling. Parsing here makes the\n * profile fail closed BEFORE any agent is spawned, and applies the schema\n * defaults the authoring contract promises.\n */\n public getAgentClientProtocolExecutionProfile(\n providerRef: string,\n executionProfileRef: string,\n ): AgentClientProtocol_ExecutionProfile | undefined {\n this.ensureInitialized();\n\n const configuration = this.getAgentClientProtocolConfiguration(providerRef);\n const executionProfile = configuration?.executionProfiles?.[executionProfileRef];\n\n if (!executionProfile) {\n this.logDebug(`ACP execution profile ${executionProfileRef} not found for ${providerRef}`);\n return undefined;\n }\n\n try {\n return AgentClientProtocol_ExecutionProfileSchema.parse(executionProfile);\n } catch (error) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n providerRef,\n executionProfileRef,\n message: '[external-providers-registry] ACP execution profile is not a valid authored profile',\n validationError: describeCaughtError(error),\n },\n },\n );\n }\n }\n\n public getAgentClientProtocolExecutionProfileSecret(\n providerRef: string,\n executionProfileRef: string,\n ): string | undefined {\n this.ensureInitialized();\n\n const executionProfile = this.getAgentClientProtocolExecutionProfile(providerRef, executionProfileRef);\n if (\n !executionProfile\n || executionProfile.authMode !== AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n || !executionProfile.secretRef\n ) {\n return undefined;\n }\n\n const runtimeSecret = executionProfile.secretEnvVarName\n ? process.env[executionProfile.secretEnvVarName]\n : undefined;\n if (runtimeSecret && runtimeSecret.length > 0) {\n this.logDebug('Resolved ACP secret from process env', { providerRef, executionProfileRef });\n return runtimeSecret;\n }\n\n return undefined;\n }\n\n private toSemanticOperationKeys(operations: readonly string[]): LLMProvider_OperationKey[] {\n return operations\n .map((operation) => RUNTIME_LLM_OPERATION_TO_SEMANTIC_OPERATION[operation] ?? operation)\n .filter((operation): operation is LLMProvider_OperationKey => (\n Object.values(LLMProvider_OperationKey).includes(operation as LLMProvider_OperationKey)\n ));\n }\n\n private getDefaultProviderConfiguration(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): ResolvedProviderConfiguration | undefined {\n try {\n const runtimeContract = this.backendProviderRegistry.getRuntimeContract(providerRef, protocolKind);\n\n if (!runtimeContract) {\n this.logDebug(`Runtime contract not found: ${providerRef}:${protocolKind}`);\n return undefined;\n }\n\n\n if (runtimeContract.kind === 'agent-client-protocol') {\n const defaultExecutionProfileRef = 'default';\n const hasExplicitSecretBinding = Boolean(\n runtimeContract.secretRef\n && runtimeContract.secretEnvVarName\n && runtimeContract.authModes.includes('secret-ref-env-injection'),\n );\n return {\n enabled: true,\n defaultExecutionProfileRef,\n executionProfiles: {\n [defaultExecutionProfileRef]: {\n runnerHost: AgentClientProtocol_RunnerHost.BACKEND_SUBPROCESS,\n command: runtimeContract.agentCommand,\n args: [...(runtimeContract.agentArgs ?? [])],\n inheritedEnvironmentVariables: [...(runtimeContract.inheritedEnvironmentVariables ?? [])],\n authMode: hasExplicitSecretBinding\n ? AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n : runtimeContract.authModes.includes('host-managed')\n ? AgentClientProtocol_AuthMode.HOST_MANAGED\n : AgentClientProtocol_AuthMode.NONE,\n ...(hasExplicitSecretBinding\n ? { secretRef: runtimeContract.secretRef, secretEnvVarName: runtimeContract.secretEnvVarName }\n : {}),\n // DEVELOPMENT only, and deliberately NARROWER than any other\n // synthesized default. Nobody authored this profile and\n // nobody reviewed it, and what it authorises is an agent\n // that edits a workspace. An application that wants a coding\n // agent anywhere else must say so in its own profile, where\n // the decision is visible.\n allowedApplicationEnvironments: [APPLICATION_ENVIRONMENT.DEVELOPMENT],\n workingDirectoryPolicy: AgentClientProtocol_WorkingDirectoryPolicy.WORKSPACE_ROOT,\n // Both safety postures stated rather than left to a schema\n // default, so reading this profile tells you what it permits\n // without resolving anything.\n permissionCeiling: AgentClientProtocol_PermissionCeiling.PROMPT_ALWAYS,\n hostConfigurationInheritance: AgentClientProtocol_HostConfigurationInheritance.APPLICATION_SCOPED,\n ...(runtimeContract.sessionMetaExtensions\n ? { sessionMetaExtensions: runtimeContract.sessionMetaExtensions }\n : {}),\n },\n },\n runtimeContract,\n };\n }\n\n const secretRef = this.secretRefForRuntimeContract(runtimeContract);\n return {\n enabled: true,\n ...(secretRef\n ? {\n authConfig: {\n authKind: this.authKindForRuntimeContract(runtimeContract),\n secretRef,\n },\n }\n : {}),\n ...(runtimeContract.kind === 'webhook-originator'\n ? { endpoints: this.buildWebhookEndpoints(runtimeContract) }\n : {}),\n runtimeContract,\n };\n } catch (error) {\n // Same pattern as `getProviderConfiguration` — contract\n // violations (`authKindForRuntimeContract` misuse) throw a\n // `WildoError_Backend` instance that MUST surface.\n if (isWildoBackendError(error)) {\n throw error;\n }\n this.logDebug('Error getting default provider configuration', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return undefined;\n }\n }\n\n private secretRefForRuntimeContract(runtimeContract: ProviderProtocolRuntimeContract): string | undefined {\n switch (runtimeContract.kind) {\n case 'email':\n // A `delivery: 'log'` email contract (the dev `preview`\n // provider) has NO endpoint and NO apiKey — it renders +\n // logs instead of sending. No secretRef to resolve; the\n // caller emits no `authConfig` and the email service skips\n // the API-key requirement. Contract-driven, not ref-keyed.\n return runtimeContract.delivery === 'log' ? undefined : runtimeContract.apiKey.secretRef;\n case 'llm':\n return runtimeContract.apiKey.secretRef;\n case 'image':\n return runtimeContract.apiKey.secretRef;\n case 'embeddings':\n return runtimeContract.apiKey.secretRef;\n case 'document-extraction':\n return runtimeContract.apiKey.secretRef;\n case 'oauth2-sso':\n return runtimeContract.clientSecretRef;\n case 'billing':\n case 'webhook-originator':\n return runtimeContract.secretRef;\n case 'sms':\n return runtimeContract.auth.secretRef;\n case 'rest':\n return runtimeContract.apiKey.secretRef;\n case 'agent-client-protocol':\n // An ACP agent that needs a credential carries it on the\n // contract; a host-managed one (the default for a coding agent\n // running under an operator's own login) carries none.\n return runtimeContract.secretRef;\n default: {\n const exhaustiveCheck: never = runtimeContract;\n return exhaustiveCheck;\n }\n }\n }\n\n /**\n * Map a runtime contract's `kind` to the canonical\n * `ExternalProvider_Auth_Kind` for the `authConfig` projection.\n * Used by `getDefaultProviderConfiguration` so the emitted\n * `authConfig: { authKind, secretRef }` satisfies the schema's\n * required-`authKind` invariant (was previously `{ secretRef }`\n * with no `authKind`, masked by `as unknown as` casts).\n *\n * Mapping rationale:\n *\n * - `llm` / `email` / `sms` / `billing` — providers authenticate\n * with an opaque API key supplied via env var.\n * - `webhook-originator` — provider signs payloads with HMAC; the\n * `secretRef` is the HMAC signing key.\n * - `oauth2-sso` — kind `OAUTH2`; the `secretRef` is the OAuth2\n * client secret.\n * - `agent-client-protocol` — auth is encoded on the executionProfile,\n * not `authConfig`; this method is not called for that kind\n * because that arm returns from the dedicated branch in\n * `getDefaultProviderConfiguration` BEFORE reaching this\n * mapping. A misuse throws via `errorBuilder` so the\n * `WildoError_Backend` instance bypasses the\n * `getProviderConfiguration` fallback catch.\n */\n private authKindForRuntimeContract(\n runtimeContract: ProviderProtocolRuntimeContract,\n ): ExternalProvider_Auth_Kind {\n switch (runtimeContract.kind) {\n case 'llm':\n case 'image':\n case 'embeddings':\n // Document extraction authenticates with an opaque API key in a request header, like\n // its siblings above; the header SHAPE (name/prefix) stays on the contract because\n // this family builds its own HTTPS request rather than handing a key to an SDK.\n case 'document-extraction':\n case 'email':\n case 'sms':\n case 'billing':\n // `rest` authenticates with an opaque API key supplied via env var, like its siblings\n // above; the header SHAPE (name/prefix) stays on the contract for its consumer.\n case 'rest':\n return ExternalProvider_Auth_Kind.API_KEY;\n case 'webhook-originator':\n return ExternalProvider_Auth_Kind.HMAC_SIGNATURE;\n case 'oauth2-sso':\n return ExternalProvider_Auth_Kind.OAUTH2;\n case 'agent-client-protocol':\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED,\n context: {\n message: '[external-providers-registry] authKindForRuntimeContract called with kind=agent-client-protocol; '\n + 'ACP auth lives on executionProfiles[].authMode, not on authConfig.',\n },\n },\n );\n default: {\n const exhaustiveCheck: never = runtimeContract;\n return exhaustiveCheck;\n }\n }\n }\n\n /**\n * Project the provider-authored `runtimeContract.endpoints` into\n * the canonical `Hook_Endpoint` shape consumed by the framework\n * webhook controller. Provider-agnostic: each endpoint descriptor\n * is owned by the provider module (see Stripe's `endpoints` array\n * on `stripe.backend.module.ts`); the only field this projection\n * adds is `signatureConfig.headerName`, sourced from the contract's\n * top-level `signatureHeaderName` so providers don't repeat it on\n * every endpoint.\n *\n * Previously branched on a Stripe-only provider literal\n * with the entire endpoint shape (event types, polymorphic\n * variants, `lookupField`) hardcoded inside this consumer site —\n * the same anti-pattern Step 7 was supposed to eliminate. Moved\n * to the provider module 2026-05-06 to close the gap; the CI\n * guard regex (`no-provider-ref-branches.guard.test.ts`) now\n * also catches the `runtimeContract.provider` literal pattern.\n *\n * Per-endpoint secret overrides (if a future provider needs them)\n * still flow through `HookInitiatorProvider_Configuration.endpointSecrets`,\n * not through this projection.\n */\n private buildWebhookEndpoints(\n runtimeContract: Extract<ProviderProtocolRuntimeContract, { kind: 'webhook-originator' }>,\n ): ReadonlyArray<Hook_Endpoint> {\n return runtimeContract.endpoints.map((endpoint) => ({\n ...endpoint,\n signatureConfig: {\n ...endpoint.signatureConfig,\n headerName: runtimeContract.signatureHeaderName,\n },\n eventTypes: [...endpoint.eventTypes],\n }));\n }\n\n /**\n * Get provider secrets for a specific protocol and secret reference.\n * Provider secrets are runtime-delivered via env/K8s materialization.\n * The secret binding contract is still declared by the provider protocol\n * configuration, but the secret value source is `process.env`.\n *\n * The `envVarName ?? secretRef` fallback covers the case where the\n * resolver doesn't find an explicit env-var-name mapping for the\n * requested secretRef. Today every engine provider authors\n * `secretsContract.<slug>.envVarName === <secretRef value>` (verified\n * across 17 modules), so this fallback is exactly equivalent to a\n * direct `process.env[secretRef]` lookup. If a future provider's\n * `secretsContract.envVarName` diverges from its `secretRef`, the\n * load-bearing path becomes `protocolConfig.authConfig.secretRef`\n * (returned by `getProviderSecretEnvVarName`), and the fallback\n * stays a defensive last-chance match.\n */\n public getProviderSecret(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind,\n secretRef: string\n ): string | undefined {\n this.ensureInitialized();\n try {\n const envVarName = this.getProviderSecretEnvVarName(providerRef, protocolKind, secretRef);\n const resolvedEnvVarName = envVarName ?? secretRef;\n\n const secretValue = process.env[resolvedEnvVarName];\n return secretValue && secretValue.length > 0 ? secretValue : undefined;\n } catch {\n return undefined;\n }\n }\n\n private getProviderSecretEnvVarName(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind,\n secretRef: string,\n ): string | undefined {\n if (protocolKind === ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL) {\n const acpConfiguration = this.getAgentClientProtocolConfiguration(providerRef);\n for (const executionProfile of Object.values(acpConfiguration?.executionProfiles ?? {})) {\n if (\n executionProfile.authMode === AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n && executionProfile.secretRef === secretRef\n ) {\n return executionProfile.secretEnvVarName;\n }\n }\n }\n\n const protocolConfig = this.getProviderConfiguration(providerRef, protocolKind);\n if (protocolConfig?.authConfig?.secretRef === secretRef) {\n return protocolConfig.authConfig.secretRef;\n }\n\n return undefined;\n }\n\n public getConfiguredProviderSecretRef(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): string | undefined {\n const config = this.getProviderConfiguration(providerRef, protocolKind);\n return config?.authConfig?.secretRef;\n }\n\n\n\n public getProviderApiKey(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): string | undefined {\n this.ensureInitialized();\n try {\n const secretRef = this.getConfiguredProviderSecretRef(providerRef, protocolKind);\n if (!secretRef) {\n this.logDebug(`No authConfig.secretRef found for ${providerRef}.${protocolKind}`);\n return undefined;\n }\n\n const apiKey = this.getProviderSecret(providerRef, protocolKind, secretRef);\n if (!apiKey) {\n this.logDebug(`Secret ${secretRef} not found for ${providerRef}.${protocolKind}`);\n }\n return apiKey;\n } catch (error) {\n this.logDebug('Error getting provider API key', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return undefined;\n }\n }\n\n public isProviderEnabled(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): boolean {\n this.ensureInitialized();\n try {\n if (!this.hasProvider(providerRef)) {\n return false;\n }\n\n const provider = this.getProvider(providerRef);\n if (!provider || !provider.protocols.includes(protocolKind)) {\n return false;\n }\n\n const config = this.getProviderConfiguration(providerRef, protocolKind);\n if (!config) {\n return true;\n }\n\n return config.enabled !== false;\n } catch (error) {\n this.logDebug('Error checking if provider is enabled', {\n providerRef,\n protocolKind,\n error: describeCaughtError(error)\n });\n return false;\n }\n }\n\n public getProviderProtocolSecrets(\n providerRef: string,\n protocolKind: ExternalProvider_ExchangeProtocol_Kind\n ): Record<string, string> | undefined {\n this.ensureInitialized();\n try {\n const resolvedSecrets: Record<string, string> = {};\n const protocolConfig = this.getProviderConfiguration(providerRef, protocolKind);\n const protocolSecretRef = protocolConfig?.authConfig?.secretRef;\n if (protocolSecretRef) {\n const secretValue = this.getProviderSecret(providerRef, protocolKind, protocolSecretRef);\n if (secretValue) {\n resolvedSecrets[protocolSecretRef] = secretValue;\n }\n }\n\n if (protocolKind === ExternalProvider_ExchangeProtocol_Kind.AGENT_CLIENT_PROTOCOL) {\n const acpConfiguration = this.getAgentClientProtocolConfiguration(providerRef);\n for (const executionProfile of Object.values(acpConfiguration?.executionProfiles ?? {})) {\n if (\n executionProfile.authMode !== AgentClientProtocol_AuthMode.SECRET_REF_ENV_INJECTION\n || !executionProfile.secretRef\n ) {\n continue;\n }\n\n const secretValue = this.getProviderSecret(providerRef, protocolKind, executionProfile.secretRef);\n if (secretValue) {\n resolvedSecrets[executionProfile.secretRef] = secretValue;\n }\n }\n }\n\n return Object.keys(resolvedSecrets).length > 0 ? resolvedSecrets : undefined;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Refresh the runtime registry facade from first-class backend provider modules.\n *\n * This mirrors `initialize()` and intentionally no longer depends on the\n * deleted capability-bindings service.\n */\n public async refreshFromConfig(): Promise<void> {\n try {\n if (!this.configService.isInitialized()) {\n await this.configService.initialize();\n }\n\n const registry = this.buildRuntimeRegistryFromProviderModules();\n\n this.registry = registry;\n this.isInitialized = true;\n\n this.logDebug('External providers registry refreshed from backend provider modules', {\n totalProviders: Object.keys(registry).length,\n });\n } catch (error) {\n this.logDebug('Failed to refresh registry from config', {\n error: describeCaughtError(error)\n });\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED,\n context: {\n error: describeCaughtError(error),\n },\n }\n );\n }\n }\n\n // ================================\n // Initialization Utils\n // ================================\n\n protected ensureInitialized(): void {\n if (!this.isInitialized || !this.registry) {\n throw this.errorBuilder.buildError(\n ErrorType.INTERNAL,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_PROVIDER_REGISTRY_INITIALIZATION_FAILED\n }\n );\n }\n }\n}\n"]}
@@ -17,6 +17,8 @@ import { FilesBackendService } from '../../files/services/files.backend.service'
17
17
  import { FileFieldDetectionBackendService } from '../../files/services/file-field-detection.backend.service';
18
18
  import { ConsumableTokenBackendService } from '../../security/consumable-tokens/services/consumable-token.backend.service';
19
19
  import { RepositoriesRegistryHandlerBackendService } from '../../base-classes/services/repositories/repositories-registry-handler.backend.service';
20
+ import { FileUploadGrantBackendService } from '../../files/services/file-upload-grant.backend.service';
21
+ import { RateLimitBackendService } from '../../errors/services/rate-limit.backend.service';
20
22
  export declare class FileController extends AbstractControllerBackendService {
21
23
  private readonly resourcesRegistry;
22
24
  private readonly executionContextCreator;
@@ -24,7 +26,9 @@ export declare class FileController extends AbstractControllerBackendService {
24
26
  private readonly consumableTokenService;
25
27
  private readonly repositoriesRegistry;
26
28
  private readonly fileFieldDetection;
27
- constructor(logger: any, errorBuilder: any, errorHandler: any, resourcesRegistry: ResourcesRegistryBackendService, executionContextCreator: ExecutionContextCreatorBackendService, filesService: FilesBackendService, consumableTokenService: ConsumableTokenBackendService, repositoriesRegistry: RepositoriesRegistryHandlerBackendService, fileFieldDetection: FileFieldDetectionBackendService);
29
+ private readonly fileUploadGrantService;
30
+ private readonly rateLimitService;
31
+ constructor(logger: any, errorBuilder: any, errorHandler: any, resourcesRegistry: ResourcesRegistryBackendService, executionContextCreator: ExecutionContextCreatorBackendService, filesService: FilesBackendService, consumableTokenService: ConsumableTokenBackendService, repositoriesRegistry: RepositoriesRegistryHandlerBackendService, fileFieldDetection: FileFieldDetectionBackendService, fileUploadGrantService: FileUploadGrantBackendService, rateLimitService: RateLimitBackendService);
28
32
  /**
29
33
  * Setup file controller routes
30
34
  */
@@ -41,6 +45,25 @@ export declare class FileController extends AbstractControllerBackendService {
41
45
  * `ResourcesRegistryBackendService.getRepositoryOperationPathDefault` for
42
46
  * why this is a distinct method from `getOperationPathDefault`.
43
47
  */
48
+ /**
49
+ * GET /files/upload-grants/:token — public status read (issue #312, D10).
50
+ *
51
+ * Rate-limited like the other public token endpoints: a token is 64 hex chars of entropy, so this
52
+ * is not an enumeration surface, but a public route with a database read behind it still needs a
53
+ * ceiling. Returns state, target, constraints, the upload URL and header name (what the drop page
54
+ * renders), and after redemption the produced `fileId` + status (what an agent reads back). Never
55
+ * the file's name.
56
+ */
57
+ private readUploadGrantStatus;
58
+ /**
59
+ * DELETE /files/upload-grants/:grantId — revoke, authenticated, by ID never by value.
60
+ *
61
+ * The context is created against the FILES DELETE operation exactly as `deleteFile` does (the
62
+ * repository-only sibling lookup — see {@link getFileReadOperation}); who may revoke — the minter,
63
+ * or a platform super-administrator — is decided inside the grant service. Idempotent: an already
64
+ * revoked or redeemed grant answers `{ revoked: false }` rather than an error.
65
+ */
66
+ private revokeUploadGrant;
44
67
  private getFileReadOperation;
45
68
  /**
46
69
  * Get the DELETE operation path for FILES resource.
@@ -1 +1 @@
1
- {"version":3,"file":"file.controller.d.ts","sourceRoot":"","sources":["../../../../../src/files/controllers/file.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH,OAAO,EAAE,gCAAgC,EAAE,MAAM,0FAA0F,CAAC;AAC5I,OAAO,EAAE,+BAA+B,EAAE,MAAM,0EAA0E,CAAC;AAC3H,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAC;AACtI,OAAO,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AAC9F,OAAO,EAAE,gCAAgC,EAAE,MAAM,wEAAwE,CAAC;AAE1H,OAAO,EAAE,6BAA6B,EAAE,MAAM,yFAAyF,CAAC;AAGxI,OAAO,EAAE,yCAAyC,EAAE,MAAM,qGAAqG,CAAC;AAYhK,qBACa,cAAe,SAAQ,gCAAgC;IAMhE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAExC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAErC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAdA,MAAM,EAAE,GAAG,EACE,YAAY,EAAE,GAAG,EACjB,YAAY,EAAE,GAAG,EAEhD,iBAAiB,EAAE,+BAA+B,EAElD,uBAAuB,EAAE,qCAAqC,EAE9D,YAAY,EAAE,mBAAmB,EAEjC,sBAAsB,EAAE,6BAA6B,EAErD,oBAAoB,EAAE,yCAAyC,EAE/D,kBAAkB,EAAE,gCAAgC;IAKvE;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAkB7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,sBAAsB;IAa9B;;;;OAIG;YACW,yBAAyB;IAuBvC;;;;;OAKG;IACH,OAAO,CAAC,yCAAyC;IA0BjD;;;;;;;;OAQG;YACW,iBAAiB;IAoC/B;;;OAGG;YACW,gBAAgB;IAI9B;;;;OAIG;YACW,yBAAyB;IA4BvC;;;;;OAKG;YACW,YAAY;IAiH1B;;;;;;;;OAQG;YACW,qBAAqB;IAYnC;;;;;OAKG;YACW,eAAe;IAyF7B;;;;;;OAMG;YACW,UAAU;IAsJxB;;;;;;;;;;;;;OAaG;YACW,SAAS;IA8HvB;;;;OAIG;IACH,OAAO,CAAC,2CAA2C;IAoDnD;;;;;;OAMG;YACW,eAAe;IAa7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,4BAA4B;CAqCrC"}
1
+ {"version":3,"file":"file.controller.d.ts","sourceRoot":"","sources":["../../../../../src/files/controllers/file.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH,OAAO,EAAE,gCAAgC,EAAE,MAAM,0FAA0F,CAAC;AAC5I,OAAO,EAAE,+BAA+B,EAAE,MAAM,0EAA0E,CAAC;AAC3H,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAC;AACtI,OAAO,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AAC9F,OAAO,EAAE,gCAAgC,EAAE,MAAM,wEAAwE,CAAC;AAE1H,OAAO,EAAE,6BAA6B,EAAE,MAAM,yFAAyF,CAAC;AAGxI,OAAO,EAAE,yCAAyC,EAAE,MAAM,qGAAqG,CAAC;AAGhK,OAAO,EAAE,6BAA6B,EAAE,MAAM,qEAAqE,CAAC;AACpH,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AAUxG,qBACa,cAAe,SAAQ,gCAAgC;IAMhE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAExC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAErC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAlBE,MAAM,EAAE,GAAG,EACE,YAAY,EAAE,GAAG,EACjB,YAAY,EAAE,GAAG,EAEhD,iBAAiB,EAAE,+BAA+B,EAElD,uBAAuB,EAAE,qCAAqC,EAE9D,YAAY,EAAE,mBAAmB,EAEjC,sBAAsB,EAAE,6BAA6B,EAErD,oBAAoB,EAAE,yCAAyC,EAE/D,kBAAkB,EAAE,gCAAgC,EAEpD,sBAAsB,EAAE,6BAA6B,EAErD,gBAAgB,EAAE,uBAAuB;IAK5D;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IA0B7B;;;;;;;;;;;OAWG;IACH;;;;;;;;OAQG;YACW,qBAAqB;IAWnC;;;;;;;OAOG;YACW,iBAAiB;IAuB/B,OAAO,CAAC,oBAAoB;IAO5B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,sBAAsB;IAa9B;;;;OAIG;YACW,yBAAyB;IAuBvC;;;;;OAKG;IACH,OAAO,CAAC,yCAAyC;IA0BjD;;;;;;;;OAQG;YACW,iBAAiB;IAoC/B;;;OAGG;YACW,gBAAgB;IAI9B;;;;OAIG;YACW,yBAAyB;IA4BvC;;;;;OAKG;YACW,YAAY;IAiH1B;;;;;;;;OAQG;YACW,qBAAqB;IAYnC;;;;;OAKG;YACW,eAAe;IAyF7B;;;;;;OAMG;YACW,UAAU;IAsJxB;;;;;;;;;;;;;OAaG;YACW,SAAS;IA8HvB;;;;OAIG;IACH,OAAO,CAAC,2CAA2C;IAoDnD;;;;;;OAMG;YACW,eAAe;IAa7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,4BAA4B;CAqCrC"}