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

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 (1056) hide show
  1. package/dist/esm/__tests__/fixture-deep-partial.d.ts.map +1 -1
  2. package/dist/esm/__tests__/integration/redis-integration-gate.d.ts.map +1 -1
  3. package/dist/esm/__tests__/setup.d.ts.map +1 -1
  4. package/dist/esm/__tests__/test-container.d.ts.map +1 -1
  5. package/dist/esm/applications/models/applications.backend.schemas.d.ts.map +1 -1
  6. package/dist/esm/applications/seeds/application-metadata-defaults.seeds.d.ts.map +1 -1
  7. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
  8. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
  9. package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
  10. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
  11. package/dist/esm/base-classes/models/repositories.backend.schemas.d.ts.map +1 -1
  12. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts +1 -1
  13. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts.map +1 -1
  14. package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.d.ts.map +1 -1
  15. package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.d.ts.map +1 -1
  16. package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.d.ts.map +1 -1
  17. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -1
  18. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -1
  19. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -1
  20. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +12 -1
  21. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -1
  22. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
  23. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
  24. package/dist/esm/base-classes/services/batches/resource-retention-sweep.batch.backend.service.d.ts.map +1 -1
  25. package/dist/esm/base-classes/services/batches/suspension-reactivation-sweep.batch.backend.service.d.ts.map +1 -1
  26. package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.d.ts.map +1 -1
  27. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
  28. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
  29. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
  30. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
  31. package/dist/esm/base-classes/services/controllers/utils/audit-access-fields.backend.utils.d.ts.map +1 -1
  32. package/dist/esm/base-classes/services/controllers/utils/operation-response-serializer.backend.utils.d.ts.map +1 -1
  33. package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.d.ts.map +1 -1
  34. package/dist/esm/base-classes/services/repositories/__tests__/method-span-scan.guard-helpers.d.ts.map +1 -1
  35. package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.d.ts.map +1 -1
  36. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
  37. package/dist/esm/base-classes/services/repositories/http-api/http-api-filter-translation.backend.d.ts.map +1 -1
  38. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
  39. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +13 -4
  40. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
  41. package/dist/esm/base-classes/services/repositories/http-api/http-api-query.backend.d.ts.map +1 -1
  42. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
  43. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +17 -0
  44. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
  45. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
  46. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
  47. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -1
  48. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -1
  49. package/dist/esm/base-classes/services/repositories/http-api/http-api-row-projection.backend.d.ts.map +1 -1
  50. package/dist/esm/base-classes/services/repositories/http-api/http-api-subject-erasure-effect.backend.d.ts.map +1 -1
  51. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
  52. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
  53. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
  54. package/dist/esm/base-classes/services/repositories/http-api/odoo-jsonrpc-compiler.backend.d.ts.map +1 -1
  55. package/dist/esm/base-classes/services/repositories/http-api/rest-json-query-compiler.backend.d.ts.map +1 -1
  56. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
  57. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
  58. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
  59. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
  60. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +57 -0
  61. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
  62. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +95 -2
  63. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
  64. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
  65. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
  66. package/dist/esm/base-classes/services/repositories/repository-guarded-mutation.backend.types.d.ts.map +1 -1
  67. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +5 -2
  68. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
  69. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +14 -3
  70. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
  71. package/dist/esm/base-classes/services/repositories/repository-version-metadata.backend.utils.d.ts.map +1 -1
  72. package/dist/esm/base-classes/services/repositories/resource-write-integrity.backend.d.ts.map +1 -1
  73. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts +72 -0
  74. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts.map +1 -0
  75. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js +88 -0
  76. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js.map +1 -0
  77. package/dist/esm/base-classes/services/repositories/unique-constraint-conflict-reference.backend.d.ts.map +1 -1
  78. package/dist/esm/base-classes/services/resource-operations-helper.backend.service.d.ts.map +1 -1
  79. package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.d.ts.map +1 -1
  80. package/dist/esm/base-classes/services/services/__tests__/mock-system-access.service.d.ts.map +1 -1
  81. package/dist/esm/base-classes/services/services/read-only-field-change.backend.utils.d.ts.map +1 -1
  82. package/dist/esm/base-classes/services/services/resource-operation-audit-emission.backend.utils.d.ts.map +1 -1
  83. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
  84. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
  85. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts.map +1 -1
  86. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts.map +1 -1
  87. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
  88. package/dist/esm/base-classes/services/services/resource-operation-server-injected-fields.backend.utils.d.ts.map +1 -1
  89. package/dist/esm/base-classes/services/services/resource-operation-transaction-persistence.backend.utils.d.ts.map +1 -1
  90. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
  91. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
  92. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
  93. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
  94. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
  95. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +44 -6
  96. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
  97. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
  98. package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
  99. package/dist/esm/base-classes/utils/backend-type-utils.d.ts.map +1 -1
  100. package/dist/esm/base-classes/utils/single-subject-addressing.backend.utils.d.ts.map +1 -1
  101. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -1
  102. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -1
  103. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -1
  104. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -1
  105. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -1
  106. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -1
  107. package/dist/esm/billing/services/back-office/abstract-billing.backend.service.d.ts.map +1 -1
  108. package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.d.ts.map +1 -1
  109. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +1 -1
  110. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -1
  111. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +5 -4
  112. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -1
  113. package/dist/esm/billing/services/back-office/billing-state.backend.service.d.ts.map +1 -1
  114. package/dist/esm/billing/services/back-office/billing-state.backend.service.js +11 -1
  115. package/dist/esm/billing/services/back-office/billing-state.backend.service.js.map +1 -1
  116. package/dist/esm/billing/services/back-office/billing-subject-erasure-effect.backend.d.ts.map +1 -1
  117. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
  118. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
  119. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
  120. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
  121. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -1
  122. package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -1
  123. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
  124. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
  125. package/dist/esm/billing/services/billing.utils.d.ts.map +1 -1
  126. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
  127. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
  128. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +32 -0
  129. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
  130. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +32 -1
  131. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
  132. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
  133. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
  134. package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  135. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  136. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
  137. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
  138. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
  139. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +9 -6
  140. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
  141. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +9 -6
  142. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
  143. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -1
  144. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -1
  145. package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.d.ts.map +1 -1
  146. package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.d.ts.map +1 -1
  147. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
  148. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +50 -3
  149. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
  150. package/dist/esm/billing/testing/billing-test-fixtures.d.ts.map +1 -1
  151. package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
  152. package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
  153. package/dist/esm/charts/controllers/chart.backend.controller.d.ts.map +1 -1
  154. package/dist/esm/charts/services/chart-registry.backend.service.d.ts +80 -7
  155. package/dist/esm/charts/services/chart-registry.backend.service.d.ts.map +1 -1
  156. package/dist/esm/charts/services/chart-registry.backend.service.js +115 -8
  157. package/dist/esm/charts/services/chart-registry.backend.service.js.map +1 -1
  158. package/dist/esm/companion-exports.d.ts.map +1 -1
  159. package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.d.ts.map +1 -1
  160. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.d.ts.map +1 -1
  161. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
  162. package/dist/esm/compliance/audit-trails/batches/immudb-audit-reconcile.batch.backend.service.d.ts.map +1 -1
  163. package/dist/esm/compliance/audit-trails/batches/siem-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  164. package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.d.ts.map +1 -1
  165. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
  166. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
  167. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +107 -4
  168. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
  169. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +176 -5
  170. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
  171. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
  172. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
  173. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
  174. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
  175. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
  176. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
  177. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -1
  178. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -1
  179. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
  180. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +21 -0
  181. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
  182. package/dist/esm/compliance/audit-trails/services/utils/ocsf-class-mapping.backend.utils.d.ts.map +1 -1
  183. package/dist/esm/compliance/audit-trails/services/utils/siem-dictionary.backend.utils.d.ts.map +1 -1
  184. package/dist/esm/compliance/audit-trails/services/utils/siem-ocsf-projection.backend.utils.d.ts.map +1 -1
  185. package/dist/esm/compliance/audit-trails/services/utils/siem-projection-contract.backend.utils.d.ts.map +1 -1
  186. package/dist/esm/compliance/audit-trails/utils/audit-actor.backend.utils.d.ts.map +1 -1
  187. package/dist/esm/compliance/audit-trails/utils/layer2-audit-provider-boot-diagnostic.backend.utils.d.ts.map +1 -1
  188. package/dist/esm/compliance/index.d.ts.map +1 -1
  189. package/dist/esm/compliance/privacy/retention-hide-predicate.backend.d.ts.map +1 -1
  190. package/dist/esm/compliance/privacy/services/subject-erasure-external-effects.backend.service.d.ts.map +1 -1
  191. package/dist/esm/compliance/privacy/services/subject-session-revocation.backend.service.d.ts.map +1 -1
  192. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
  193. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
  194. package/dist/esm/config/bootstrap/minion-initialization-projection.backend.d.ts.map +1 -1
  195. package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.d.ts.map +1 -1
  196. package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js +3 -0
  197. package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js.map +1 -1
  198. package/dist/esm/config/bootstrap/runtime-principal.backend.service.d.ts.map +1 -1
  199. package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
  200. package/dist/esm/config/models/app-config-secrets.backend.schemas.d.ts.map +1 -1
  201. package/dist/esm/config/models/app-config.backend-authored.definitions.d.ts.map +1 -1
  202. package/dist/esm/config/models/app-config.backend.schemas.d.ts +4 -4
  203. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
  204. package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
  205. package/dist/esm/config/models/app-env-config.backend.schemas.d.ts.map +1 -1
  206. package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts +36 -0
  207. package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts.map +1 -0
  208. package/dist/esm/config/models/apps-manager-transport.backend.definitions.js +36 -0
  209. package/dist/esm/config/models/apps-manager-transport.backend.definitions.js.map +1 -0
  210. package/dist/esm/config/models/config-mutation-boundary.utils.d.ts.map +1 -1
  211. package/dist/esm/config/models/postgresql-env-config.backend.schemas.d.ts.map +1 -1
  212. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
  213. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
  214. package/dist/esm/config/models/runtime-topology.backend.contracts.d.ts.map +1 -1
  215. package/dist/esm/config/services/__tests__/mock-app-configuration.service.d.ts.map +1 -1
  216. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
  217. package/dist/esm/config/services/app-configuration-loader.backend.service.js +3 -0
  218. package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
  219. package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
  220. package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
  221. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
  222. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
  223. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +12 -0
  224. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
  225. package/dist/esm/config/services/application-startup-config-validator.backend.service.js +28 -0
  226. package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
  227. package/dist/esm/data-seeding/batches/data-seeding-run-cleanup.batch.backend.service.d.ts.map +1 -1
  228. package/dist/esm/data-seeding/batches/data-seeding-scheduled-rerun.batch.backend.service.d.ts.map +1 -1
  229. package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.contracts.d.ts.map +1 -1
  230. package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.controller.d.ts.map +1 -1
  231. package/dist/esm/data-seeding/data-seeding-models.d.ts.map +1 -1
  232. package/dist/esm/data-seeding/models/business-key-resolver.shared.utils.d.ts.map +1 -1
  233. package/dist/esm/data-seeding/models/data-seed-execution-context.shared.types.d.ts.map +1 -1
  234. package/dist/esm/data-seeding/models/data-seed-migrator-runner.shared.utils.d.ts.map +1 -1
  235. package/dist/esm/data-seeding/models/data-seed-reconciler.shared.utils.d.ts.map +1 -1
  236. package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.schemas.d.ts.map +1 -1
  237. package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.utils.d.ts.map +1 -1
  238. package/dist/esm/data-seeding/models/data-seed-run.shared.resources-config.schemas.d.ts.map +1 -1
  239. package/dist/esm/data-seeding/models/data-seed-run.shared.schemas.d.ts.map +1 -1
  240. package/dist/esm/data-seeding/models/data-seed-trigger-mode-matrix.shared.utils.d.ts.map +1 -1
  241. package/dist/esm/data-seeding/models/data-seed.shared.schemas.d.ts.map +1 -1
  242. package/dist/esm/data-seeding/services/data-seed-application-bootstrap.backend.d.ts.map +1 -1
  243. package/dist/esm/data-seeding/services/data-seed-dispatcher.backend.service.d.ts.map +1 -1
  244. package/dist/esm/data-seeding/services/data-seed-registry.backend.service.d.ts.map +1 -1
  245. package/dist/esm/data-seeding/services/data-seed-scope-resolver-registry.backend.service.d.ts.map +1 -1
  246. package/dist/esm/data-seeding/services/engines/additive-seed-engine.backend.service.d.ts.map +1 -1
  247. package/dist/esm/data-seeding/services/engines/lazy-seed-engine.backend.service.d.ts.map +1 -1
  248. package/dist/esm/data-seeding/services/engines/manual-seed-engine.backend.service.d.ts.map +1 -1
  249. package/dist/esm/data-seeding/services/engines/sync-seed-engine.backend.service.d.ts.map +1 -1
  250. package/dist/esm/data-seeding/services/engines/upgrade-seed-engine.backend.service.d.ts.map +1 -1
  251. package/dist/esm/data-seeding/services/shared/data-seed-business-key.shared.utils.d.ts.map +1 -1
  252. package/dist/esm/data-seeding/services/shared/data-seed-error.shared.utils.d.ts.map +1 -1
  253. package/dist/esm/data-seeding/services/shared/data-seed-run-counters.shared.types.d.ts.map +1 -1
  254. package/dist/esm/data-seeding/services/shared/data-seed-run-ledger.backend.d.ts.map +1 -1
  255. package/dist/esm/data-seeding/services/shared/data-seed-scope-anchor.shared.types.d.ts.map +1 -1
  256. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts.map +1 -1
  257. package/dist/esm/data-seeding/services/shared/data-seed-scope-resolution.backend.d.ts.map +1 -1
  258. package/dist/esm/databases/models/aggregation.backend.schemas.d.ts.map +1 -1
  259. package/dist/esm/databases/models/databases.backend.schemas.d.ts.map +1 -1
  260. package/dist/esm/databases/models/filter.backend.schemas.d.ts.map +1 -1
  261. package/dist/esm/databases/models/resolve-persistence-adapter.backend.utils.d.ts.map +1 -1
  262. package/dist/esm/databases/models/sql.backend.schemas.d.ts.map +1 -1
  263. package/dist/esm/databases/models/transaction.shared.schemas.d.ts.map +1 -1
  264. package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.d.ts.map +1 -1
  265. package/dist/esm/databases/services/__tests__/mock-mongodb.service.d.ts.map +1 -1
  266. package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.d.ts.map +1 -1
  267. package/dist/esm/databases/services/__tests__/mock-redis.service.d.ts.map +1 -1
  268. package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.d.ts.map +1 -1
  269. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
  270. package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.d.ts.map +1 -1
  271. package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.d.ts.map +1 -1
  272. package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.d.ts.map +1 -1
  273. package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.d.ts.map +1 -1
  274. package/dist/esm/databases/services/aggregation/topn-processor.backend.service.d.ts.map +1 -1
  275. package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.d.ts.map +1 -1
  276. package/dist/esm/databases/services/db-utils.d.ts.map +1 -1
  277. package/dist/esm/databases/services/mongo-aggregation.backend.service.d.ts.map +1 -1
  278. package/dist/esm/databases/services/mongodb.service.d.ts.map +1 -1
  279. package/dist/esm/databases/services/postgresql-aggregation.backend.service.d.ts.map +1 -1
  280. package/dist/esm/databases/services/postgresql-database.backend.service.d.ts.map +1 -1
  281. package/dist/esm/databases/services/postgresql-development-provisioning.backend.d.ts.map +1 -1
  282. package/dist/esm/databases/services/postgresql-filter.backend.service.d.ts.map +1 -1
  283. package/dist/esm/databases/services/postgresql-migration-runner.backend.d.ts.map +1 -1
  284. package/dist/esm/databases/services/postgresql-schema-ddl.backend.d.ts.map +1 -1
  285. package/dist/esm/databases/services/postgresql-schema-migration-sql.backend.d.ts.map +1 -1
  286. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
  287. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
  288. package/dist/esm/databases/services/postgresql-schema-plan-lockfile.backend.d.ts.map +1 -1
  289. package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
  290. package/dist/esm/databases/services/resource-persistence-unit-of-work.backend.service.d.ts.map +1 -1
  291. package/dist/esm/databases/services/schema-planning-standalone.backend.d.ts.map +1 -1
  292. package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.d.ts.map +1 -1
  293. package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.d.ts.map +1 -1
  294. package/dist/esm/databases/utils/postgresql-identifier.backend.utils.d.ts.map +1 -1
  295. package/dist/esm/errors/services/__tests__/mock-error-builder.service.d.ts.map +1 -1
  296. package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
  297. package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
  298. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
  299. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
  300. package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
  301. package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
  302. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
  303. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
  304. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
  305. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
  306. package/dist/esm/external-data/batches/external-data-pipeline-scheduled-run.batch.backend.service.d.ts.map +1 -1
  307. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -1
  308. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -1
  309. package/dist/esm/external-data/external-data-extraction-source.backend.d.ts.map +1 -1
  310. package/dist/esm/external-data/external-data-models.exports.d.ts.map +1 -1
  311. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
  312. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
  313. package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
  314. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
  315. package/dist/esm/external-providers/models/external-providers.backend.schemas.d.ts.map +1 -1
  316. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
  317. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
  318. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +102 -52
  319. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -1
  320. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +117 -71
  321. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -1
  322. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -1
  323. package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -1
  324. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -1
  325. package/dist/esm/external-providers/operations/provider-request-signing.backend.js +26 -7
  326. package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -1
  327. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -1
  328. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -1
  329. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
  330. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
  331. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -1
  332. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -1
  333. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
  334. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
  335. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts +81 -34
  336. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
  337. package/dist/esm/external-providers/services/document-extraction.backend.service.js +179 -98
  338. package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
  339. package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
  340. package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
  341. package/dist/esm/external-providers/services/external-api-handler.backend.service.d.ts.map +1 -1
  342. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +121 -0
  343. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
  344. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +151 -0
  345. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
  346. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts +15 -1
  347. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
  348. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +60 -4
  349. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
  350. package/dist/esm/features/controllers/features.backend.controller.d.ts.map +1 -1
  351. package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.d.ts.map +1 -1
  352. package/dist/esm/features/services/__tests__/mock-feature-resolution.service.d.ts.map +1 -1
  353. package/dist/esm/features/services/application-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
  354. package/dist/esm/features/services/feature-definition-registry.backend.service.d.ts.map +1 -1
  355. package/dist/esm/features/services/feature-gate.backend.service.d.ts.map +1 -1
  356. package/dist/esm/features/services/feature-resolution.backend.service.d.ts.map +1 -1
  357. package/dist/esm/features/services/organization-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
  358. package/dist/esm/features/services/scope-feature-ledger-relationship.backend.utils.d.ts.map +1 -1
  359. package/dist/esm/features/services/scope-features-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
  360. package/dist/esm/features/testing/feature-test-utils.d.ts.map +1 -1
  361. package/dist/esm/files/batches/files-cleanup.batch.backend.service.d.ts.map +1 -1
  362. package/dist/esm/files/constraints/file-analyzers.types.d.ts.map +1 -1
  363. package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.d.ts.map +1 -1
  364. package/dist/esm/files/constraints/file-constraint.types.d.ts.map +1 -1
  365. package/dist/esm/files/constraints/file-validation.backend.service.d.ts.map +1 -1
  366. package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.d.ts.map +1 -1
  367. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
  368. package/dist/esm/files/controllers/file.controller.js.map +1 -1
  369. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -1
  370. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -1
  371. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +37 -0
  372. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
  373. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +221 -21
  374. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
  375. package/dist/esm/files/scanning/clamav-scanner.backend.service.d.ts.map +1 -1
  376. package/dist/esm/files/scanning/file-scan.types.d.ts.map +1 -1
  377. package/dist/esm/files/scanning/yara-scanner.backend.service.d.ts.map +1 -1
  378. package/dist/esm/files/scanning/yara-scanner.backend.service.js +20 -2
  379. package/dist/esm/files/scanning/yara-scanner.backend.service.js.map +1 -1
  380. package/dist/esm/files/services/__tests__/mock-file-field-detection.service.d.ts.map +1 -1
  381. package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.d.ts.map +1 -1
  382. package/dist/esm/files/services/__tests__/mock-file-repository.service.d.ts.map +1 -1
  383. package/dist/esm/files/services/file-field-detection.backend.service.d.ts.map +1 -1
  384. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
  385. package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
  386. package/dist/esm/files/services/file-population.backend.service.d.ts.map +1 -1
  387. package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
  388. package/dist/esm/files/services/file-scanning.backend.service.js +5 -0
  389. package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
  390. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
  391. package/dist/esm/files/services/file-text-extraction.backend.service.js +8 -5
  392. package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
  393. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
  394. package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
  395. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
  396. package/dist/esm/files/services/files.backend.service.js +3 -1
  397. package/dist/esm/files/services/files.backend.service.js.map +1 -1
  398. package/dist/esm/files/services/rag-source-field-detection.backend.service.d.ts.map +1 -1
  399. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -1
  400. package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -1
  401. package/dist/esm/files/storage/file-storage-path-resolver.backend.service.d.ts.map +1 -1
  402. package/dist/esm/files/storage/file-storage-provider.types.d.ts +36 -1
  403. package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
  404. package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
  405. package/dist/esm/files/storage/file-storage-router.backend.service.d.ts +21 -3
  406. package/dist/esm/files/storage/file-storage-router.backend.service.d.ts.map +1 -1
  407. package/dist/esm/files/storage/file-storage-router.backend.service.js +38 -5
  408. package/dist/esm/files/storage/file-storage-router.backend.service.js.map +1 -1
  409. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts +87 -0
  410. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts.map +1 -0
  411. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js +340 -0
  412. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js.map +1 -0
  413. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
  414. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
  415. package/dist/esm/files/storage/storage-credential-provider.backend.utils.d.ts.map +1 -1
  416. package/dist/esm/files/storage/storage-platform-sts-credential-resolver.backend.utils.d.ts.map +1 -1
  417. package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.d.ts.map +1 -1
  418. package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js +10 -3
  419. package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js.map +1 -1
  420. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
  421. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
  422. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
  423. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
  424. package/dist/esm/files/utils/file-upload.utils.d.ts.map +1 -1
  425. package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
  426. package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
  427. package/dist/esm/files/utils/file-validation.utils.d.ts.map +1 -1
  428. package/dist/esm/files/utils/image-derivation.backend.utils.d.ts.map +1 -1
  429. package/dist/esm/files/utils/image-thumbnail.backend.utils.d.ts.map +1 -1
  430. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -1
  431. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -1
  432. package/dist/esm/files/utils/rag-source-field-schema-path.backend.utils.d.ts.map +1 -1
  433. package/dist/esm/files/utils/storage-application-identity.backend.utils.d.ts.map +1 -1
  434. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
  435. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
  436. package/dist/esm/flows-actors/a2a/batches/a2a-push-delivery.batch.backend.service.d.ts.map +1 -1
  437. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
  438. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
  439. package/dist/esm/flows-actors/a2a/models/a2a-dialect.backend.schemas.d.ts.map +1 -1
  440. package/dist/esm/flows-actors/a2a/models/a2a-push-notification-delivery.backend.utils.d.ts.map +1 -1
  441. package/dist/esm/flows-actors/a2a/models/a2a-push-notification.backend.schemas.d.ts.map +1 -1
  442. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
  443. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
  444. package/dist/esm/flows-actors/a2a/services/a2a-push-delivery-log.repository.d.ts.map +1 -1
  445. package/dist/esm/flows-actors/a2a/services/a2a-push-dispatcher.backend.service.d.ts.map +1 -1
  446. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
  447. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
  448. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
  449. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
  450. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
  451. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
  452. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
  453. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
  454. package/dist/esm/flows-actors/controllers/flows-actors.controller.d.ts.map +1 -1
  455. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
  456. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
  457. package/dist/esm/flows-actors/models/agent-facets.backend.definitions.d.ts.map +1 -1
  458. package/dist/esm/flows-actors/models/agents.backend.definitions.d.ts.map +1 -1
  459. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
  460. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
  461. package/dist/esm/flows-actors/models/flows-actors.backend.definitions.d.ts.map +1 -1
  462. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
  463. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
  464. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +107 -16
  465. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
  466. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +118 -18
  467. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
  468. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
  469. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
  470. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -1
  471. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -1
  472. package/dist/esm/flows-actors/services/__tests__/fixtures/meta-workflow-evaluation-treatment.test-fixture.d.ts.map +1 -1
  473. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
  474. package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
  475. package/dist/esm/flows-actors/services/agent-call-trace-sink.backend.d.ts.map +1 -1
  476. package/dist/esm/flows-actors/services/agent-facets.backend.service.d.ts.map +1 -1
  477. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +104 -5
  478. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
  479. package/dist/esm/flows-actors/services/agents.backend.service.js +263 -31
  480. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
  481. package/dist/esm/flows-actors/services/context-curation.backend.service.d.ts.map +1 -1
  482. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +46 -1
  483. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
  484. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +193 -6
  485. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
  486. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
  487. package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
  488. package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
  489. package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
  490. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
  491. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
  492. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -1
  493. package/dist/esm/flows-actors/services/mcp-client.backend.service.js +3 -0
  494. package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -1
  495. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts +99 -0
  496. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts.map +1 -0
  497. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js +155 -0
  498. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js.map +1 -0
  499. package/dist/esm/flows-actors/services/meta-workflow-evaluation-treatment-compiler.backend.service.d.ts.map +1 -1
  500. package/dist/esm/flows-actors/services/meta-workflow-standard-action-contracts.backend.service.d.ts.map +1 -1
  501. package/dist/esm/flows-actors/services/meta-workflow-standard-evaluation-contracts.backend.service.d.ts.map +1 -1
  502. package/dist/esm/flows-actors/services/meta-workflow-structured-artifact-action-compiler.backend.service.d.ts.map +1 -1
  503. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
  504. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
  505. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
  506. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +9 -0
  507. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
  508. package/dist/esm/flows-actors/utils/bounded-subprocess.backend.utils.d.ts.map +1 -1
  509. package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.d.ts.map +1 -1
  510. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
  511. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
  512. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
  513. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
  514. package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.d.ts.map +1 -1
  515. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts +77 -0
  516. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts.map +1 -0
  517. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js +164 -0
  518. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js.map +1 -0
  519. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts +48 -0
  520. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts.map +1 -0
  521. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js +101 -0
  522. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js.map +1 -0
  523. package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.d.ts.map +1 -1
  524. package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.d.ts.map +1 -1
  525. package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.d.ts.map +1 -1
  526. package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.d.ts.map +1 -1
  527. package/dist/esm/guidance/services/lifecycle-scope-id.backend.utils.d.ts.map +1 -1
  528. package/dist/esm/guidance/services/milestone-condition-registry.backend.service.d.ts.map +1 -1
  529. package/dist/esm/guidance/services/milestone-definition-registry.backend.service.d.ts.map +1 -1
  530. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
  531. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
  532. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -1
  533. package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -1
  534. package/dist/esm/guidance/services/scoped-state-read-custom-implementations.backend.d.ts.map +1 -1
  535. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
  536. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
  537. package/dist/esm/i18n/services/i18n.backend.service.d.ts.map +1 -1
  538. package/dist/esm/index.d.ts +0 -1
  539. package/dist/esm/index.d.ts.map +1 -1
  540. package/dist/esm/index.js +0 -1
  541. package/dist/esm/index.js.map +1 -1
  542. package/dist/esm/inject/models/container.d.ts +10 -0
  543. package/dist/esm/inject/models/container.d.ts.map +1 -1
  544. package/dist/esm/inject/models/container.js +49 -1
  545. package/dist/esm/inject/models/container.js.map +1 -1
  546. package/dist/esm/inject/models/service-types.d.ts +3 -0
  547. package/dist/esm/inject/models/service-types.d.ts.map +1 -1
  548. package/dist/esm/inject/models/service-types.js +3 -0
  549. package/dist/esm/inject/models/service-types.js.map +1 -1
  550. package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
  551. package/dist/esm/mcp/controllers/mcp.controller.js +50 -3
  552. package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
  553. package/dist/esm/mcp/models/mcp-protocol.backend.schemas.d.ts.map +1 -1
  554. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
  555. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
  556. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
  557. package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
  558. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
  559. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
  560. package/dist/esm/mcp/services/resource-server-instances-registry.backend.service.d.ts.map +1 -1
  561. package/dist/esm/mcp/utils/zod-to-mcp-json-schema.backend.utils.d.ts.map +1 -1
  562. package/dist/esm/meta-workflow-runtime.exports.d.ts.map +1 -1
  563. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
  564. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
  565. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -1
  566. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -1
  567. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
  568. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
  569. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
  570. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
  571. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
  572. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
  573. package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.d.ts.map +1 -1
  574. package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
  575. package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
  576. package/dist/esm/monitoring/logger/services/logger.service.js +3 -3
  577. package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
  578. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -1
  579. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -1
  580. package/dist/esm/monitoring/logger/utils/log-value-normalization.backend.utils.d.ts.map +1 -1
  581. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +10 -6
  582. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -1
  583. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +10 -6
  584. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -1
  585. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
  586. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
  587. package/dist/esm/monitoring/observability/otel-preload.d.ts.map +1 -1
  588. package/dist/esm/monitoring/observability/otel-sdk-global-handle.d.ts.map +1 -1
  589. package/dist/esm/monitoring/observability/services/__tests__/mock-metrics.service.d.ts.map +1 -1
  590. package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
  591. package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
  592. package/dist/esm/monitoring/observability/services/observability.backend.service.d.ts.map +1 -1
  593. package/dist/esm/notifications/email/components/email-components.d.ts.map +1 -1
  594. package/dist/esm/notifications/email/models/email-template-definition.d.ts.map +1 -1
  595. package/dist/esm/notifications/email/models/email-transport.backend.definitions.d.ts.map +1 -1
  596. package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.d.ts.map +1 -1
  597. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
  598. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
  599. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
  600. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
  601. package/dist/esm/notifications/email/services/email.backend.service.d.ts +47 -6
  602. package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
  603. package/dist/esm/notifications/email/services/email.backend.service.js +86 -36
  604. package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
  605. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
  606. package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
  607. package/dist/esm/notifications/email/utils/interpolate-email-label.utils.d.ts.map +1 -1
  608. package/dist/esm/notifications/email/utils/zod-to-typescript.utils.d.ts.map +1 -1
  609. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
  610. package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
  611. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
  612. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
  613. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts +32 -0
  614. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts.map +1 -0
  615. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js +32 -0
  616. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js.map +1 -0
  617. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +64 -10
  618. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
  619. package/dist/esm/notifications/sms/services/sms.backend.service.js +277 -82
  620. package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
  621. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
  622. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
  623. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  624. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
  625. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
  626. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
  627. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
  628. package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.custom-impl.backend.service.d.ts.map +1 -1
  629. package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.repository.d.ts.map +1 -1
  630. package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-dispatcher.backend.service.d.ts.map +1 -1
  631. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-public-key.custom-impl.backend.service.d.ts.map +1 -1
  632. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
  633. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
  634. package/dist/esm/notifications/webhooks/outbound/services/webhook-config.backend.service.d.ts.map +1 -1
  635. package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.d.ts.map +1 -1
  636. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
  637. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
  638. package/dist/esm/organizations/batches/organization-member-invitation-sweep.batch.backend.service.d.ts.map +1 -1
  639. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts.map +1 -1
  640. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
  641. package/dist/esm/organizations/services/authority-change-audit.backend.utils.d.ts.map +1 -1
  642. package/dist/esm/organizations/services/invitation-acceptance.backend.utils.d.ts.map +1 -1
  643. package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.d.ts.map +1 -1
  644. package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.d.ts.map +1 -1
  645. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
  646. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
  647. package/dist/esm/organizations/services/organization-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
  648. package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.d.ts.map +1 -1
  649. package/dist/esm/organizations/services/organization-onboarding-operation.backend.utils.d.ts.map +1 -1
  650. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
  651. package/dist/esm/organizations/services/organization-unit-member-custom-implementation.backend.service.d.ts.map +1 -1
  652. package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.d.ts.map +1 -1
  653. package/dist/esm/organizations/services/user-org-type-grant.backend.utils.d.ts.map +1 -1
  654. package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.d.ts.map +1 -1
  655. package/dist/esm/pdf-templates/__tests__/fixtures/tiny-pdf-template.fixture.d.ts.map +1 -1
  656. package/dist/esm/pdf-templates/models/pdf-template-binding.d.ts.map +1 -1
  657. package/dist/esm/pdf-templates/models/pdf-template-definition.d.ts.map +1 -1
  658. package/dist/esm/pdf-templates/services/pdf-generated-file-writer.backend.service.d.ts.map +1 -1
  659. package/dist/esm/pdf-templates/services/pdf-generation-orchestrator.backend.service.d.ts.map +1 -1
  660. package/dist/esm/pdf-templates/services/pdf-renderer.backend.service.d.ts.map +1 -1
  661. package/dist/esm/pdf-templates/services/pdf-template-binding.backend.service.d.ts.map +1 -1
  662. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -1
  663. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -1
  664. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -1
  665. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -1
  666. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -1
  667. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -1
  668. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -1
  669. package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -1
  670. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
  671. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
  672. package/dist/esm/queue/apps-crontabs-manager.backend.service.d.ts.map +1 -1
  673. package/dist/esm/queue/cron-job-sync.backend.service.d.ts.map +1 -1
  674. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
  675. package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
  676. package/dist/esm/queue/job-completion-registry.backend.service.d.ts.map +1 -1
  677. package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
  678. package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
  679. package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
  680. package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
  681. package/dist/esm/queue/job-payload-storage.backend.service.d.ts.map +1 -1
  682. package/dist/esm/queue/job-status-tracking.backend.service.d.ts.map +1 -1
  683. package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
  684. package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
  685. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
  686. package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
  687. package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
  688. package/dist/esm/queue/queue.backend.service.js.map +1 -1
  689. package/dist/esm/queue/scheduled-message-verifier.backend.service.d.ts.map +1 -1
  690. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
  691. package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
  692. package/dist/esm/rag/batches/rag-embedding-drain.batch.backend.service.d.ts.map +1 -1
  693. package/dist/esm/rag/batches/rag-reconciliation-sweep.batch.backend.service.d.ts.map +1 -1
  694. package/dist/esm/rag/models/rag-chunk-store.backend.types.d.ts.map +1 -1
  695. package/dist/esm/rag/models/rag-retrieval.backend.types.d.ts.map +1 -1
  696. package/dist/esm/rag/services/mongodb-rag-chunk-store.backend.service.d.ts.map +1 -1
  697. package/dist/esm/rag/services/postgresql-rag-chunk-store.backend.service.d.ts.map +1 -1
  698. package/dist/esm/rag/services/rag-chunk-collection.mongodb-ddl.backend.d.ts.map +1 -1
  699. package/dist/esm/rag/services/rag-chunk-retrieval.mongodb-query.backend.d.ts.map +1 -1
  700. package/dist/esm/rag/services/rag-chunk-retrieval.postgresql-query.backend.d.ts.map +1 -1
  701. package/dist/esm/rag/services/rag-chunk-store.backend.service.d.ts.map +1 -1
  702. package/dist/esm/rag/services/rag-chunk-table.postgresql-ddl.backend.d.ts.map +1 -1
  703. package/dist/esm/rag/services/rag-ingestion.backend.service.d.ts.map +1 -1
  704. package/dist/esm/rag/services/rag-retrieval.backend.service.d.ts.map +1 -1
  705. package/dist/esm/rag/utils/rag-chunk-fusion.backend.utils.d.ts.map +1 -1
  706. package/dist/esm/rag/utils/rag-chunk-removal.backend.utils.d.ts.map +1 -1
  707. package/dist/esm/rag/utils/rag-chunk-row-shaping.backend.utils.d.ts.map +1 -1
  708. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
  709. package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
  710. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
  711. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
  712. package/dist/esm/rag/utils/rag-ingestion-trigger.backend.utils.d.ts.map +1 -1
  713. package/dist/esm/rag/utils/rag-retrieval-scope.backend.utils.d.ts.map +1 -1
  714. package/dist/esm/rag/utils/rag-source-field-value.backend.utils.d.ts.map +1 -1
  715. package/dist/esm/requests/models/api-routes.backend.defintions.d.ts.map +1 -1
  716. package/dist/esm/requests/models/requests.backend.schemas.d.ts.map +1 -1
  717. package/dist/esm/requests/service/platform-mutualized-handler.backend.service.d.ts.map +1 -1
  718. package/dist/esm/requests/service/platform-requests.backend.utils.d.ts.map +1 -1
  719. package/dist/esm/requests/service/remote-client-base.backend.service.d.ts.map +1 -1
  720. package/dist/esm/requests/service/serverless-services-handler.backend.service.d.ts.map +1 -1
  721. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
  722. package/dist/esm/requests/service/websocket.service.js +49 -1
  723. package/dist/esm/requests/service/websocket.service.js.map +1 -1
  724. package/dist/esm/resources/backend-resource-registry.exports.d.ts.map +1 -1
  725. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
  726. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +2 -0
  727. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
  728. package/dist/esm/resources/models/index.d.ts.map +1 -1
  729. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
  730. package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
  731. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
  732. package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
  733. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
  734. package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
  735. package/dist/esm/resources/models/resources.backend.schemas.d.ts.map +1 -1
  736. package/dist/esm/resources/models/virtual-fields.backend.types.d.ts.map +1 -1
  737. package/dist/esm/resources/services/__tests__/mock-resources-registry.service.d.ts.map +1 -1
  738. package/dist/esm/resources/services/resource-context.backend.service.d.ts.map +1 -1
  739. package/dist/esm/resources/services/resource-id.backend.service.d.ts.map +1 -1
  740. package/dist/esm/resources/services/resource-population.backend.service.d.ts +17 -2
  741. package/dist/esm/resources/services/resource-population.backend.service.d.ts.map +1 -1
  742. package/dist/esm/resources/services/resource-population.backend.service.js +74 -18
  743. package/dist/esm/resources/services/resource-population.backend.service.js.map +1 -1
  744. package/dist/esm/resources/services/resources-registry.backend.service.d.ts +23 -0
  745. package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
  746. package/dist/esm/resources/services/resources-registry.backend.service.js +31 -0
  747. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
  748. package/dist/esm/resources/services/virtual-fields.backend.service.d.ts.map +1 -1
  749. package/dist/esm/resources/utils/resource-retention.backend.utils.d.ts.map +1 -1
  750. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
  751. package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
  752. package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
  753. package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
  754. package/dist/esm/runtime/models/execution-context.backend.schemas.d.ts.map +1 -1
  755. package/dist/esm/runtime/models/request-context.als.backend.d.ts.map +1 -1
  756. package/dist/esm/runtime/models/runtime.backend.schemas.d.ts.map +1 -1
  757. package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
  758. package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
  759. package/dist/esm/runtime/services/execution-context-handler.backend.service.d.ts.map +1 -1
  760. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
  761. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
  762. package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
  763. package/dist/esm/runtime/services/http-server.backend.service.js +10 -0
  764. package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
  765. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
  766. package/dist/esm/runtime/services/start-application.backend.service.js +26 -12
  767. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
  768. package/dist/esm/runtime/services/utils/oauth-body-cap.backend.utils.d.ts.map +1 -1
  769. package/dist/esm/runtime/testing/execution-context-test-fixtures.d.ts.map +1 -1
  770. package/dist/esm/runtime/testing/mock-execution-context-creator.service.d.ts.map +1 -1
  771. package/dist/esm/runtime/utils/application-startup-config-access.backend.utils.d.ts.map +1 -1
  772. package/dist/esm/runtime/utils/feature-gated-core-resource-exclusions.backend.utils.d.ts.map +1 -1
  773. package/dist/esm/runtime/utils/request-client-ip.utils.d.ts.map +1 -1
  774. package/dist/esm/runtime/utils/scan-default-exports.backend.utils.d.ts.map +1 -1
  775. package/dist/esm/security/api-keys/api-key-generation.backend.utils.d.ts.map +1 -1
  776. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
  777. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
  778. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
  779. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
  780. package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.d.ts.map +1 -1
  781. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts +22 -0
  782. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
  783. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +84 -0
  784. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
  785. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
  786. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
  787. package/dist/esm/security/authentications/models/auth-constants.backend.d.ts.map +1 -1
  788. package/dist/esm/security/authentications/models/authentications.backend.schemas.d.ts.map +1 -1
  789. package/dist/esm/security/authentications/models/authorization-client.backend.schemas.d.ts.map +1 -1
  790. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
  791. package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
  792. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts +37 -0
  793. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts.map +1 -0
  794. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js +37 -0
  795. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js.map +1 -0
  796. package/dist/esm/security/authentications/models/identity-persistence-boundaries.backend.d.ts.map +1 -1
  797. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
  798. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
  799. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
  800. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
  801. package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.d.ts.map +1 -1
  802. package/dist/esm/security/authentications/models/sso-connection.backend.schemas.d.ts.map +1 -1
  803. package/dist/esm/security/authentications/models/user-authorization-version.backend.utils.d.ts.map +1 -1
  804. package/dist/esm/security/authentications/seeds/enterprise-config-defaults.seeds.d.ts.map +1 -1
  805. package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.d.ts.map +1 -1
  806. package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.d.ts.map +1 -1
  807. package/dist/esm/security/authentications/services/__tests__/oauth-provider-audit-spies.mock.d.ts.map +1 -1
  808. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.d.ts.map +1 -1
  809. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.d.ts.map +1 -1
  810. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
  811. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
  812. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
  813. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
  814. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
  815. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
  816. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
  817. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
  818. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.d.ts.map +1 -1
  819. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js +2 -1
  820. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js.map +1 -1
  821. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +9 -2
  822. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
  823. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +9 -2
  824. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
  825. package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.d.ts.map +1 -1
  826. package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.d.ts.map +1 -1
  827. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
  828. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
  829. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
  830. package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts.map +1 -1
  831. package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.d.ts.map +1 -1
  832. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
  833. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
  834. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts +97 -0
  835. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
  836. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +218 -26
  837. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
  838. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts +14 -0
  839. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
  840. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +36 -0
  841. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
  842. package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.d.ts.map +1 -1
  843. package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.d.ts.map +1 -1
  844. package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.d.ts.map +1 -1
  845. package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.d.ts.map +1 -1
  846. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
  847. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
  848. package/dist/esm/security/authentications/services/auth-session-store.backend.service.d.ts.map +1 -1
  849. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
  850. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
  851. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
  852. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
  853. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
  854. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
  855. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
  856. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
  857. package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.d.ts.map +1 -1
  858. package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.d.ts.map +1 -1
  859. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -1
  860. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +57 -1
  861. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -1
  862. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
  863. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
  864. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.d.ts.map +1 -1
  865. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js +11 -1
  866. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js.map +1 -1
  867. package/dist/esm/security/authentications/services/email-verification-initiator.backend.service.d.ts.map +1 -1
  868. package/dist/esm/security/authentications/services/machine-token-issuer.backend.service.d.ts.map +1 -1
  869. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
  870. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
  871. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
  872. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
  873. package/dist/esm/security/authentications/services/oidc-user-claims.backend.service.d.ts.map +1 -1
  874. package/dist/esm/security/authentications/services/resolve-active-member-orgs.backend.utils.d.ts.map +1 -1
  875. package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.d.ts.map +1 -1
  876. package/dist/esm/security/authentications/services/utils/auth-controller.utils.d.ts.map +1 -1
  877. package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.d.ts.map +1 -1
  878. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
  879. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
  880. package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.d.ts.map +1 -1
  881. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
  882. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
  883. package/dist/esm/security/authentications/services/utils/concurrent-session-eviction.backend.utils.d.ts.map +1 -1
  884. package/dist/esm/security/authentications/services/utils/ensure-user-profile.backend.utils.d.ts.map +1 -1
  885. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
  886. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
  887. package/dist/esm/security/authentications/services/utils/machine-auth-rate-limit.backend.utils.d.ts.map +1 -1
  888. package/dist/esm/security/authentications/services/utils/pkce.backend.utils.d.ts.map +1 -1
  889. package/dist/esm/security/authentications/services/utils/saml-java-availability.d.ts.map +1 -1
  890. package/dist/esm/security/authentications/utils/application-auth-policy-audit.backend.utils.d.ts.map +1 -1
  891. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
  892. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
  893. package/dist/esm/security/authentications/utils/one-off-session-lifetime.backend.utils.d.ts.map +1 -1
  894. package/dist/esm/security/authentications/utils/social-oauth2-purpose.backend.utils.d.ts.map +1 -1
  895. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts +59 -0
  896. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts.map +1 -0
  897. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js +111 -0
  898. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js.map +1 -0
  899. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts +57 -0
  900. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts.map +1 -0
  901. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js +133 -0
  902. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js.map +1 -0
  903. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts +41 -0
  904. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts.map +1 -0
  905. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js +157 -0
  906. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js.map +1 -0
  907. package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts +84 -0
  908. package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts.map +1 -0
  909. package/dist/esm/security/authorizations/application-wide-read-admission.backend.js +99 -0
  910. package/dist/esm/security/authorizations/application-wide-read-admission.backend.js.map +1 -0
  911. package/dist/esm/security/authorizations/authorization-denial-audit.backend.utils.d.ts.map +1 -1
  912. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -1
  913. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -1
  914. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
  915. package/dist/esm/security/authorizations/junction-scope-resolution.backend.d.ts.map +1 -1
  916. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
  917. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
  918. package/dist/esm/security/authorizations/organization-unit-narrowing-enforcement.backend.d.ts.map +1 -1
  919. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
  920. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +20 -181
  921. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
  922. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -1
  923. package/dist/esm/security/authorizations/relationship-foreign-key-filter.backend.d.ts.map +1 -1
  924. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
  925. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
  926. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +40 -0
  927. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -1
  928. package/dist/esm/security/authorizations/role-conferral.backend.utils.js +43 -1
  929. package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -1
  930. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +27 -17
  931. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
  932. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +27 -17
  933. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
  934. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +72 -0
  935. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
  936. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +153 -10
  937. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
  938. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
  939. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
  940. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -1
  941. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -1
  942. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +139 -1
  943. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -1
  944. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +474 -33
  945. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -1
  946. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +40 -0
  947. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -1
  948. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -1
  949. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -1
  950. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -1
  951. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +19 -0
  952. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -1
  953. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +38 -0
  954. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -1
  955. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -1
  956. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -1
  957. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -1
  958. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +17 -1
  959. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -1
  960. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +14 -0
  961. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -1
  962. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +16 -0
  963. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -1
  964. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -1
  965. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +1 -1
  966. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -1
  967. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +19 -0
  968. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -1
  969. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +45 -2
  970. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -1
  971. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -1
  972. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -1
  973. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +37 -1
  974. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -1
  975. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -1
  976. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -1
  977. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -1
  978. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -1
  979. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -1
  980. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts +34 -0
  981. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts.map +1 -0
  982. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js +39 -0
  983. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js.map +1 -0
  984. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
  985. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -1
  986. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
  987. package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.d.ts.map +1 -1
  988. package/dist/esm/security/consumable-tokens/models/index.d.ts.map +1 -1
  989. package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.d.ts.map +1 -1
  990. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
  991. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
  992. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
  993. package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
  994. package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.d.ts.map +1 -1
  995. package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
  996. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts +13 -0
  997. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts.map +1 -1
  998. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js +14 -0
  999. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js.map +1 -1
  1000. package/dist/esm/security/jwt/utils/jwt-verification-error-classification.backend.utils.d.ts.map +1 -1
  1001. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
  1002. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
  1003. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
  1004. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
  1005. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts +39 -0
  1006. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts.map +1 -0
  1007. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js +60 -0
  1008. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js.map +1 -0
  1009. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts +66 -0
  1010. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts.map +1 -0
  1011. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js +75 -0
  1012. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js.map +1 -0
  1013. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
  1014. package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
  1015. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
  1016. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
  1017. package/dist/esm/security/scim/utils/scim-attribute-path-resolver.backend.utils.d.ts.map +1 -1
  1018. package/dist/esm/security/scim/utils/scim-filter-parser.d.ts.map +1 -1
  1019. package/dist/esm/security/scim/utils/scim-response-formatter.d.ts.map +1 -1
  1020. package/dist/esm/security/session-invalidation-fence.backend.utils.d.ts.map +1 -1
  1021. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
  1022. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
  1023. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -1
  1024. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -1
  1025. package/dist/esm/security/token-invalidation-fence.backend.utils.d.ts.map +1 -1
  1026. package/dist/esm/testing.d.ts.map +1 -1
  1027. package/dist/esm/users/services/inbound-contact-custom-implementation.backend.service.d.ts.map +1 -1
  1028. package/dist/esm/users/services/user-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
  1029. package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.d.ts.map +1 -1
  1030. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -1
  1031. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -1
  1032. package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.d.ts.map +1 -1
  1033. package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts.map +1 -1
  1034. package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.d.ts.map +1 -1
  1035. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1036. package/package.json +9 -9
  1037. package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts +0 -45
  1038. package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts.map +0 -1
  1039. package/dist/esm/external-providers/services/flow-actor-design.backend.service.js +0 -22
  1040. package/dist/esm/external-providers/services/flow-actor-design.backend.service.js.map +0 -1
  1041. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -0
  1042. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -0
  1043. package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -0
  1044. package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -0
  1045. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -0
  1046. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -0
  1047. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -0
  1048. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -0
  1049. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -0
  1050. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -0
  1051. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -0
  1052. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -0
  1053. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -0
  1054. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -0
  1055. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -0
  1056. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"provider-operation-executor.backend.service.js","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-operation-executor.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `ProviderOperationExecutorBackendService` — the ONE door through which an application executes a\n * provider-declared operation (S3a, #331; plan D4).\n *\n * A custom backend service names a provider and an operation; everything between that and the wire\n * lives here: resolving the provider's runtime contract, loading its catalogue on demand and\n * memoizing it, validating the caller's input against the operation's own schema, compiling the\n * request, resolving identity through the shared access port, executing under the provider's rate\n * budget and semantics, and parsing the answer.\n *\n * ## What it deliberately does NOT do\n *\n * - **It does not resolve secrets.** `HttpApiProviderAccessResolver` does, over the provider\n * registry — the same port the ETL lane uses. When #329 makes that registry the COMPOSED one, a\n * package-shipped provider's key arrives here with no edit. A second secret path would be a\n * second thing to get wrong.\n * - **It does not decide IDENTITY.** Whose account a call spends, and on whose behalf, is the\n * connection target the resolver is handed; a delegated target is served or refused THERE. This\n * read \"it does not implement `USER_DELEGATED` … the resolver refuses it by name today\" until\n * #333, which retired that mode for the two-axis `ExternalProvider_ConnectionShape` and lifted\n * the refusal — neither change reached this class, which is the point of asking the port.\n * - **It does not page.** `pagination` on an operation is a hint the caller reads.\n * - **It does not AUDIT — yet, and this is the one gap worth stating loudly.** The seam is built\n * and called on every outbound call (`ProviderOperationAuditResolver`, the lazily-resolved thunk\n * this repository uses for the same job in the HTTP-API repository), but the\n * `CoreAuditableEventType` member and the audit-logs method behind it belong to S3b, which the\n * plan's seam table requires to agree the event NAMES with S5a before either commits. So the\n * emission point exists and answers nothing until S3b writes the sink. That is a real hole, not\n * a design: an application calling a vendor on a user's behalf must leave a trail, and until\n * S3b lands it leaves none.\n *\n * ## Bound by FACTORY, not by decoration\n *\n * This class carried \"Not `@injectable`, on purpose\" and deferred registration to the slice that\n * needed it injected. That slice arrived: an application scopes a provider from the scraped\n * catalogue and a service of its own calls an operation, which it cannot do while the only door is a\n * class nothing binds.\n *\n * It is still a plain class. `SAAS_SERVICE_TYPES.ProviderOperationExecutorService` is bound with\n * `toDynamicValue`, so the lane's classes stay constructible with `new` — the repositories registry\n * builds its own resolver that way — and no injection token has to be invented for\n * `ConnectionTargetAuthorizationPort`, which nothing binds and whose absence is deliberately\n * fail-closed.\n *\n * Singleton, because this memoizes a catalogue per `(providerRef, domain)` and holds one rate-limit\n * window per provider. A transient would reload the catalogue per call and give every caller its own\n * window, which is not a rate limit.\n */\n\nimport { ExternalProvider_ExchangeProtocol_Kind, ProviderProtocolRuntimeKind } from '@wildo-ai/external-connectors-models';\nimport {\n ExternalProvider_Connection_DelegationMode,\n ExternalProvider_Connection_OwnerScope,\n} from '@wildo-ai/external-connectors-models';\nimport type { ExternalProvider_ConnectionTarget } from '@wildo-ai/external-connectors-models';\nimport type { ProviderOperationExecute, ProviderRestCallSemantics, ProviderRestOperation, ProviderRestOperationCatalogue } from '@wildo-ai/external-connectors-models';\n\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport type { HttpApiFetchLike } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\nimport type { HttpApiProviderAccessResolver } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-provider-access.backend';\nimport { resolveHttpApiResultPath } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-row-projection.backend';\nimport type { ExternalProvidersRegistryBackendService } from '~wildo-backend-lib/external-providers/services/external-providers-registry.backend.service';\n\nimport { compileProviderOperationRequest, ProviderOperationRequestError, ProviderOperationRequestFailureKind } from './provider-operation-request.backend';\nimport { DEFAULT_PROVIDER_REST_CALL_SEMANTICS, ProviderRestCallClient } from './provider-rest-call-client.backend';\n\n/** Why an operation could not be reached at all — each member names a different remedy. */\nexport enum ProviderOperationLookupFailureKind {\n /** The provider declares no `rest` runtime contract; it may not even be a REST provider. */\n PROVIDER_NOT_REST = 'PROVIDER_NOT_REST',\n /** The provider is REST but declares no operation catalogue — nothing to call. */\n PROVIDER_DECLARES_NO_OPERATIONS = 'PROVIDER_DECLARES_NO_OPERATIONS',\n /** The catalogue loaded and holds no operation by that id. */\n OPERATION_NOT_IN_CATALOGUE = 'OPERATION_NOT_IN_CATALOGUE',\n /** The provider's own loader threw. */\n CATALOGUE_LOAD_FAILED = 'CATALOGUE_LOAD_FAILED',\n}\n\nexport class ProviderOperationLookupError extends Error {\n constructor(\n message: string,\n public readonly detail: {\n readonly kind: ProviderOperationLookupFailureKind;\n readonly providerRef: string;\n readonly operationId?: string;\n readonly cause?: unknown;\n },\n ) {\n super(message);\n this.name = 'ProviderOperationLookupError';\n }\n}\n\n/**\n * The audit seam — structural and lazily resolved, the pattern this repository already uses for\n * the HTTP-API read-through trail. The executor never holds the audit service, only a thunk; an\n * absent binding means no emission, and an emission failure never fails the call it observes.\n *\n * TODO(assurance-control): WILDO.AUDIT.ATTRIBUTION — an outbound provider call made on a user's\n * behalf must be recorded with the real initiating user. The sink behind this thunk is S3b's, and\n * the `CoreAuditableEventType` member it writes must be agreed with S5a first (plan seam table).\n */\n/**\n * The credential store, reached the way the audit sink is — through a thunk, so this class takes no\n * dependency on `security/connected-accounts` and a unit harness needs neither.\n *\n * Optional in both directions: a host that binds no store records nothing, and an APPLICATION-owned\n * call has no row to stamp.\n */\nexport type ProviderCredentialUseRecorder = () => {\n recordCredentialUse?: (use: {\n organizationId: string;\n providerRef: string;\n secretSlug: string;\n source: string;\n credentialId?: string;\n outcome?: { accepted: boolean; providerMessage?: string };\n }) => Promise<void>;\n} | undefined;\n\nexport type ProviderOperationAuditResolver = () => {\n logProviderOperationCall?: (\n data: ProviderOperationAuditRecord,\n requestExecutionContext?: ExecutionContext<any>,\n ) => Promise<void>;\n} | undefined;\n\n/**\n * What one outbound provider call is worth recording. Ids and shape only, never a payload.\n *\n * assurance-control: WILDO.ACCESS.AUTHORIZATION_DECISION_AUDIT — records WHOSE third-party account an\n * outbound call spent, which the initiator's own ids cannot answer once one execution may spend\n * several.\n */\nexport interface ProviderOperationAuditRecord {\n providerRef: string;\n operationId: string;\n domain: string;\n method: string;\n /** READ or WRITE, as the operation declares it — the axis a reviewer filters on first. */\n classification: string;\n /**\n * WHOSE ACCOUNT the call spent — the first question of any provider incident, and one the\n * initiator's own ids cannot answer.\n *\n * Distinct from `organizationId` below, which records the tenant the REQUEST was scoped to. Those\n * are the same tenant in the ordinary case and different ones exactly where it matters: a user\n * action fanning out to every organization that user belongs to spends N accounts under one\n * initiating scope. A trail carrying only the initiator's organization would attribute every one\n * of those calls to the wrong tenant.\n */\n connectionOwnerScope: string;\n connectionOwnerId?: string;\n connectionDelegation: string;\n /** HTTP status of the answer; absent when the call never got one. */\n status?: number;\n /** Present when the call failed, naming the failure kind rather than the vendor's prose. */\n failureKind?: string;\n initiatorUserId?: string;\n organizationId?: string;\n executionType?: string;\n}\n\nexport interface ProviderOperationCallInput {\n providerRef: string;\n operationId: string;\n /**\n * The catalogue DOMAIN the operation belongs to, when the caller knows it. Passing it lets the\n * provider's loader answer one domain instead of every one — the whole point of the lazy loader\n * — and is what keeps a vendor with hundreds of operations from evaluating them all to run one.\n * Absent, the whole catalogue is loaded once and memoized.\n */\n domain?: string;\n input?: Readonly<Record<string, unknown>>;\n /**\n * WHOSE ACCOUNT this call spends. Defaults to the floor — the application's own, acting as itself.\n *\n * On the CALL rather than on the provider or the execution context, because one execution may\n * legitimately spend several tenants' accounts: a single user action pushing a message to every\n * organization that user belongs to issues N calls with N targets and one initiator. The context\n * still decides whether the execution MAY act for each named owner.\n */\n connection?: ExternalProvider_ConnectionTarget;\n}\n\nexport interface ProviderOperationCallResult<TOutput = unknown> {\n status: number;\n /** The payload at the operation's `resultPath`, parsed through `outputSchema` when declared. */\n output: TOutput;\n /** The whole parsed body, before `resultPath` and before validation. */\n rawBody: unknown;\n operation: ProviderRestOperation;\n}\n\nexport class ProviderOperationExecutorBackendService {\n /** Per `(providerRef, domain)`, exactly as the loader's contract promises. */\n private readonly catalogueCache = new Map<string, Promise<ProviderRestOperationCatalogue>>();\n /** Per provider, so the rate window survives between calls. */\n private readonly clientCache = new Map<string, ProviderRestCallClient>();\n /** Deprecation is logged once per operation, never per call — a log nobody can read is not a warning. */\n private readonly deprecationsWarned = new Set<string>();\n\n constructor(\n private readonly externalProvidersRegistry: ExternalProvidersRegistryBackendService,\n private readonly providerAccessResolver: HttpApiProviderAccessResolver,\n private readonly fetchImpl?: HttpApiFetchLike,\n private readonly auditResolver?: ProviderOperationAuditResolver,\n private readonly warn: (message: string) => void = () => undefined,\n // APPENDED rather than slotted beside its sibling thunk: every parameter here is positional, and\n // inserting one silently reassigns whatever a caller passed after it. Measured — putting it\n // before `warn` handed the deprecation test's spy to this slot, so the warning was recorded by\n // nobody and a pin about vendor deprecation failed for a reason that had nothing to do with it.\n private readonly credentialUseRecorder?: ProviderCredentialUseRecorder,\n ) {}\n\n /**\n * The provider's `rest` runtime contract, refusing by NAME when there is none: every branch here\n * is an authoring or configuration gap someone must fix, never a transient.\n */\n private restContractOf(providerRef: string) {\n const runtimeContract = this.externalProvidersRegistry.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.REST_API,\n );\n if (!runtimeContract || runtimeContract.kind !== ProviderProtocolRuntimeKind.REST) {\n throw new ProviderOperationLookupError(\n `Provider '${providerRef}' declares no REST runtime contract `\n + `(found: ${runtimeContract ? `kind '${String(runtimeContract.kind)}'` : 'none'}), so it has no operations to execute.`,\n { kind: ProviderOperationLookupFailureKind.PROVIDER_NOT_REST, providerRef },\n );\n }\n return runtimeContract;\n }\n\n /**\n * Load a catalogue once per `(providerRef, domain)`.\n *\n * The PROMISE is cached rather than its value, so two concurrent calls for the same pair share\n * one load instead of racing two — and a failed load is EVICTED, because caching a rejection\n * would make one bad moment permanent for the process's whole life.\n */\n public async loadCatalogue(providerRef: string, domain?: string): Promise<ProviderRestOperationCatalogue> {\n const cacheKey = `${providerRef}::${domain ?? '*'}`;\n const cached = this.catalogueCache.get(cacheKey);\n if (cached) return cached;\n\n const contract = this.restContractOf(providerRef);\n if (!contract.operations) {\n throw new ProviderOperationLookupError(\n `Provider '${providerRef}' declares a REST contract but no operation catalogue — `\n + 'add `operations` to its rest runtime contract, or call it through an ETL httpApiBinding instead.',\n { kind: ProviderOperationLookupFailureKind.PROVIDER_DECLARES_NO_OPERATIONS, providerRef },\n );\n }\n\n const loadFailure = (cause: unknown) => new ProviderOperationLookupError(\n `Provider '${providerRef}' failed to load its operation catalogue${domain ? ` for domain '${domain}'` : ''}: `\n + `${cause instanceof Error ? cause.message : String(cause)}`,\n { kind: ProviderOperationLookupFailureKind.CATALOGUE_LOAD_FAILED, providerRef, cause },\n );\n\n let invoked: Promise<ProviderRestOperationCatalogue>;\n try {\n // A loader is the provider PACKAGE's own code, and its whole job is to `import()` or\n // `require()` an operation module lazily. That throws SYNCHRONOUSLY when the module is\n // absent or fails to evaluate — a missing dependency, a bad barrel — and a synchronous\n // throw never reaches `.catch`. Without this the two ways one loader can fail refuse\n // differently: a rejection is named `CATALOGUE_LOAD_FAILED` and a throw escapes as the raw\n // `Error`, past the vocabulary that exists so an operator can act on the sentence.\n // Nothing is cached yet on this path, so there is nothing to evict.\n invoked = Promise.resolve(contract.operations(domain));\n } catch (cause) {\n throw loadFailure(cause);\n }\n\n const loading = invoked.catch((cause: unknown) => {\n this.catalogueCache.delete(cacheKey);\n throw loadFailure(cause);\n });\n this.catalogueCache.set(cacheKey, loading);\n return loading;\n }\n\n /** One operation, by id. */\n public async resolveOperation(providerRef: string, operationId: string, domain?: string): Promise<ProviderRestOperation> {\n const catalogue = await this.loadCatalogue(providerRef, domain);\n const operation = catalogue.operations[operationId];\n if (!operation) {\n const known = Object.keys(catalogue.operations);\n throw new ProviderOperationLookupError(\n `Provider '${providerRef}' declares no operation '${operationId}'`\n + `${domain ? ` in domain '${domain}'` : ''}. Declared${known.length > 20 ? ` (first 20 of ${known.length})` : ''}: `\n + `${known.slice(0, 20).join(', ') || '(none)'}.`,\n { kind: ProviderOperationLookupFailureKind.OPERATION_NOT_IN_CATALOGUE, providerRef, operationId },\n );\n }\n return operation;\n }\n\n private clientFor(providerRef: string): ProviderRestCallClient {\n const cached = this.clientCache.get(providerRef);\n if (cached) return cached;\n const contract = this.restContractOf(providerRef);\n const semantics: ProviderRestCallSemantics = contract.remoteCallSemantics ?? DEFAULT_PROVIDER_REST_CALL_SEMANTICS;\n const client = new ProviderRestCallClient(providerRef, semantics, this.providerAccessResolver, this.fetchImpl);\n this.clientCache.set(providerRef, client);\n return client;\n }\n\n /** Execute one declared operation end to end. */\n /**\n * Adapt this executor to what a GENERATED TYPED CLIENT takes.\n *\n * `createSlackClient(execute)` wants `(providerRef, operationId, input) => Promise<unknown>` — no\n * execution context and no connection target, because the generated package must carry no runtime\n * dependency on the engine and cannot name either type. Those two are exactly what a call needs and\n * what only the caller knows, so they are bound HERE, once, by the service that has them:\n *\n * ```ts\n * const slack = createSlackClient(this.providerOperations.forExecution(executionContext));\n * await slack.slackPostMessage({ channel: 'C123', text: 'Deal closed' });\n * ```\n *\n * The `connection` default is the floor — the application's own account, acting as itself —\n * matching {@link execute}. A caller spending a tenant's account passes the target explicitly, and\n * the context still decides whether the execution may act for that owner.\n *\n * Returns `output` rather than the whole envelope, because that is what the typed client's\n * `Promise<unknown>` promises. A caller who needs the status or the raw body calls {@link execute}\n * directly — the adapter is ergonomics, never a narrower door.\n */\n public forExecution(\n executionContext: ExecutionContext<any>,\n defaults?: { readonly connection?: ExternalProvider_ConnectionTarget; readonly domain?: string },\n ): ProviderOperationExecute {\n // The per-CALL connection wins over the client's default, and that precedence is the whole\n // reason the parameter exists. A default binds one client to one owner, which is right for the\n // ordinary case and cannot express the one that forced the design: a single user action pushing\n // to every organization that user belongs to issues N calls through ONE client and names a\n // different owner each time. Reading only the default would make that unreachable through the\n // generated surface while the engine underneath supports it.\n return async (providerRef, operationId, input, connection) => {\n const result = await this.execute(\n { providerRef, operationId, input, connection: connection ?? defaults?.connection, domain: defaults?.domain },\n executionContext,\n );\n return result.output;\n };\n }\n\n public async execute<TOutput = unknown>(\n call: ProviderOperationCallInput,\n executionContext: ExecutionContext<any>,\n ): Promise<ProviderOperationCallResult<TOutput>> {\n const target: ExternalProvider_ConnectionTarget = call.connection ?? {\n ownerScope: ExternalProvider_Connection_OwnerScope.APPLICATION,\n delegation: ExternalProvider_Connection_DelegationMode.SERVICE,\n };\n const operation = await this.resolveOperation(call.providerRef, call.operationId, call.domain);\n\n if (operation.deprecated && !this.deprecationsWarned.has(`${call.providerRef}::${operation.operationId}`)) {\n this.deprecationsWarned.add(`${call.providerRef}::${operation.operationId}`);\n // Warn, never refuse: the vendor decides when a deprecated operation stops answering, and a\n // framework that refused first would break a working application ahead of the vendor.\n this.warn(\n `Provider operation '${call.providerRef}.${operation.operationId}' is deprecated`\n + `${operation.deprecated.since ? ` since ${operation.deprecated.since}` : ''}: ${operation.deprecated.reason}`\n + `${operation.deprecated.replacedByOperationId ? ` — use '${operation.deprecated.replacedByOperationId}'.` : '.'}`,\n );\n }\n\n const rawInput = call.input ?? {};\n let input: Readonly<Record<string, unknown>> = rawInput;\n if (operation.inputSchema) {\n const parsed = operation.inputSchema.safeParse(rawInput);\n if (!parsed.success) {\n throw new ProviderOperationRequestError(\n `Input rejected for '${call.providerRef}.${operation.operationId}': `\n + parsed.error.issues.map((issue) => `${issue.path.join('.') || '(root)'} ${issue.message}`).join('; '),\n { kind: ProviderOperationRequestFailureKind.INPUT_REJECTED, operationId: operation.operationId, providerRef: call.providerRef },\n );\n }\n input = parsed.data as Record<string, unknown>;\n }\n\n const client = this.clientFor(call.providerRef);\n const access = await client.resolveAccess(target, executionContext);\n const request = compileProviderOperationRequest({ operation, providerRef: call.providerRef, input, access });\n\n try {\n // `access` is handed on so the client can SIGN, which only it can do last. Resolving it twice\n // would be a second read of the same secrets and, for a signed provider, a second timestamp.\n const response = await client.execute(request, operation.remoteCallSemantics, access);\n this.record(call.providerRef, operation, target, executionContext, { status: response.status });\n // A 2xx is the provider ACCEPTING the credential. Recording it is what moves a stored row off\n // UNVALIDATED — which is otherwise where every working credential stays forever, so an operator\n // reading the settings screen cannot tell a healthy integration from one that has never run.\n this.recordCredentialOutcome(call.providerRef, target, access, { accepted: response.status < 400 });\n\n const payload = operation.resultPath ? resolveHttpApiResultPath(response.json, operation.resultPath) : response.json;\n if (!operation.outputSchema) {\n return { status: response.status, output: payload as TOutput, rawBody: response.json, operation };\n }\n const parsed = operation.outputSchema.safeParse(payload);\n if (!parsed.success) {\n // A vendor answering a shape the declaration does not describe is a CONTRACT problem, and\n // the honest place to learn it is here rather than three frames into the caller.\n throw new ProviderOperationRequestError(\n `Provider '${call.providerRef}' answered '${operation.operationId}' with a body its declared outputSchema rejects: `\n + parsed.error.issues.map((issue) => `${issue.path.join('.') || '(root)'} ${issue.message}`).join('; '),\n { kind: ProviderOperationRequestFailureKind.DECLARATION_INCOHERENT, operationId: operation.operationId, providerRef: call.providerRef },\n );\n }\n return { status: response.status, output: parsed.data as TOutput, rawBody: response.json, operation };\n } catch (error) {\n const detail = (error as { detail?: { status?: number; kind?: string } }).detail;\n this.record(call.providerRef, operation, target, executionContext, {\n status: detail?.status,\n failureKind: detail?.kind ?? (error instanceof Error ? error.name : 'UNKNOWN'),\n });\n throw error;\n }\n }\n\n /**\n * Record one outbound call. Fire-and-forget and feature-detected, per the house pattern: a\n * partial audit binding or a store failure must never fail the call it observes.\n *\n * Called on BOTH the success and the failure path deliberately — a refused or failed outbound\n * call is exactly what a reviewer wants to see, and a trail that records only what worked is a\n * trail that hides the attempts.\n */\n /**\n * Stamp the stored credential with what the provider said. Best-effort, and after the call.\n *\n * Fire-and-forget for the same reason the audit emit is: the outbound call has already happened, so\n * failing the caller because a bookkeeping write did not land would turn a successful integration\n * into an error. Nothing downstream reads the result, and the store logs its own failures with the\n * row named.\n *\n * Only a tenant's OWN credential has a row. An APPLICATION-owned resolution carries no provenance\n * and is skipped here rather than filtered later, so the deployment environment can never acquire a\n * row describing a credential the tenant never set.\n */\n private recordCredentialOutcome(\n providerRef: string,\n target: ExternalProvider_ConnectionTarget,\n access: { credentialProvenance?: { source: string; credentialId?: string; secretSlug: string } },\n outcome: { accepted: boolean; providerMessage?: string },\n ): void {\n const provenance = access.credentialProvenance;\n if (!provenance || target.ownerId === undefined) return;\n try {\n const store = this.credentialUseRecorder?.();\n if (typeof store?.recordCredentialUse !== 'function') return;\n void store.recordCredentialUse({\n organizationId: target.ownerId,\n providerRef,\n secretSlug: provenance.secretSlug,\n source: provenance.source,\n credentialId: provenance.credentialId,\n outcome,\n }).catch(() => undefined);\n } catch {\n // A recorder that throws on resolution must not take the call down with it.\n }\n }\n\n private record(\n providerRef: string,\n operation: ProviderRestOperation,\n target: ExternalProvider_ConnectionTarget,\n executionContext: ExecutionContext<any>,\n outcome: { status?: number; failureKind?: string },\n ): void {\n try {\n const auditLogsService = this.auditResolver?.();\n if (typeof auditLogsService?.logProviderOperationCall !== 'function') return;\n const initiatorIds = (executionContext as { initiatorIds?: { userId?: string; organizationId?: string } }).initiatorIds;\n void auditLogsService.logProviderOperationCall({\n providerRef,\n operationId: operation.operationId,\n domain: operation.domain,\n method: operation.method,\n classification: operation.classification,\n connectionOwnerScope: target.ownerScope,\n ...(target.ownerId === undefined ? {} : { connectionOwnerId: target.ownerId }),\n connectionDelegation: target.delegation,\n initiatorUserId: initiatorIds?.userId,\n organizationId: initiatorIds?.organizationId,\n executionType: (executionContext as { executionType?: string }).executionType,\n ...outcome,\n }, executionContext)?.catch?.(() => undefined);\n } catch {\n // Observation only — never the reason a call fails.\n }\n }\n}\n"]}
1
+ {"version":3,"file":"provider-operation-executor.backend.service.js","sourceRoot":"","sources":["../../../../src/external-providers/operations/provider-operation-executor.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `ProviderOperationExecutorBackendService` — the ONE door through which an application executes a\n * provider-declared operation (S3a, #331; plan D4).\n *\n * A custom backend service names a provider and an operation; everything between that and the wire\n * lives here: resolving the provider's runtime contract, loading its catalogue on demand and\n * memoizing it, validating the caller's input against the operation's own schema, compiling the\n * request, resolving identity through the shared access port, executing under the provider's rate\n * budget and semantics, and parsing the answer.\n *\n * ## What it deliberately does NOT do\n *\n * - **It does not resolve secrets.** `HttpApiProviderAccessResolver` does, over the provider\n * registry — the same port the ETL lane uses. When #329 makes that registry the COMPOSED one, a\n * package-shipped provider's key arrives here with no edit. A second secret path would be a\n * second thing to get wrong.\n * - **It does not decide IDENTITY.** Whose account a call spends, and on whose behalf, is the\n * connection target the resolver is handed; a delegated target is served or refused THERE. This\n * read \"it does not implement `USER_DELEGATED` … the resolver refuses it by name today\" until\n * #333, which retired that mode for the two-axis `ExternalProvider_ConnectionShape` and lifted\n * the refusal — neither change reached this class, which is the point of asking the port.\n * - **It does not page.** `pagination` on an operation is a hint the caller reads.\n * - **It does not OWN the trail, but it does emit one.** Two observations leave here on every call —\n * the outbound-call row (`CoreAuditableEventType.PROVIDER_OPERATION_CALL`, through the lazily\n * resolved `ProviderOperationAuditResolver`) and the credential-use stamp (through the registry,\n * which knows which store the credential came from). Both are fire-and-forget and neither can fail\n * the call it observes; both are counted when they are lost, which is the half that was missing.\n *\n * Stated loudly because it was false for months and nothing said so: the two seams existed, were\n * called on every outbound call, and had NOTHING behind them — the container constructed this class\n * with two of its six parameters, so both resolvers were `undefined` for the process's whole life,\n * and one of the two sinks had never been written at all. An application calling a vendor on a\n * user's behalf left no trail whatsoever, and the code read as though it did.\n *\n * ## Bound by FACTORY, not by decoration\n *\n * This class carried \"Not `@injectable`, on purpose\" and deferred registration to the slice that\n * needed it injected. That slice arrived: an application scopes a provider from the scraped\n * catalogue and a service of its own calls an operation, which it cannot do while the only door is a\n * class nothing binds.\n *\n * It is still a plain class. `SAAS_SERVICE_TYPES.ProviderOperationExecutorService` is bound with\n * `toDynamicValue`, so the lane's classes stay constructible with `new` — the repositories registry\n * builds its own resolver that way — and no injection token has to be invented for\n * `ConnectionTargetAuthorizationPort`, which nothing binds and whose absence is deliberately\n * fail-closed.\n *\n * Singleton, because this memoizes a catalogue per `(providerRef, domain)` and holds one rate-limit\n * window per provider. A transient would reload the catalogue per call and give every caller its own\n * window, which is not a rate limit.\n */\n\nimport { ExternalProvider_ExchangeProtocol_Kind, ProviderProtocolRuntimeKind } from '@wildo-ai/external-connectors-models';\nimport {\n ExternalProvider_Connection_DelegationMode,\n ExternalProvider_Connection_OwnerScope,\n} from '@wildo-ai/external-connectors-models';\nimport type { ExternalProvider_ConnectionTarget } from '@wildo-ai/external-connectors-models';\nimport type { ProviderOperationExecute, ProviderRestCallSemantics, ProviderRestOperation, ProviderRestOperationCatalogue } from '@wildo-ai/external-connectors-models';\n\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport type { HttpApiFetchLike } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\nimport type { HttpApiProviderAccess, HttpApiProviderAccessResolver } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-provider-access.backend';\nimport {\n AuditObservationKind,\n emitAuditObservation,\n type AuditObservationLossLogger,\n type AuditObservationLossMetricsResolver,\n} from '~wildo-backend-lib/monitoring/observability/audit-observation-emission.backend';\nimport { resolveHttpApiResultPath } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-row-projection.backend';\nimport type { ExternalProvidersRegistryBackendService } from '~wildo-backend-lib/external-providers/services/external-providers-registry.backend.service';\n\nimport { compileProviderOperationRequest, ProviderOperationRequestError, ProviderOperationRequestFailureKind } from './provider-operation-request.backend';\nimport { DEFAULT_PROVIDER_REST_CALL_SEMANTICS, ProviderRestCallClient } from './provider-rest-call-client.backend';\n\n/** Why an operation could not be reached at all — each member names a different remedy. */\nexport enum ProviderOperationLookupFailureKind {\n /** The provider declares no `rest` runtime contract; it may not even be a REST provider. */\n PROVIDER_NOT_REST = 'PROVIDER_NOT_REST',\n /** The provider is REST but declares no operation catalogue — nothing to call. */\n PROVIDER_DECLARES_NO_OPERATIONS = 'PROVIDER_DECLARES_NO_OPERATIONS',\n /** The catalogue loaded and holds no operation by that id. */\n OPERATION_NOT_IN_CATALOGUE = 'OPERATION_NOT_IN_CATALOGUE',\n /** The provider's own loader threw. */\n CATALOGUE_LOAD_FAILED = 'CATALOGUE_LOAD_FAILED',\n}\n\nexport class ProviderOperationLookupError extends Error {\n constructor(\n message: string,\n public readonly detail: {\n readonly kind: ProviderOperationLookupFailureKind;\n readonly providerRef: string;\n readonly operationId?: string;\n readonly cause?: unknown;\n },\n ) {\n super(message);\n this.name = 'ProviderOperationLookupError';\n }\n}\n\n/**\n * The audit seam — structural and lazily resolved, the pattern this repository already uses for the\n * HTTP-API read-through trail. The executor never holds the audit service, only a thunk; an absent\n * binding means no emission, and an emission failure never fails the call it observes.\n *\n * assurance-control: WILDO.AUDIT.ATTRIBUTION — an outbound provider call made on a user's behalf is\n * recorded with the real initiating user. The sink is\n * `AuditLogsBackendService.logProviderOperationCall`, writing\n * `CoreAuditableEventType.PROVIDER_OPERATION_CALL`.\n *\n * The thunk's method stays OPTIONAL, and that is not laziness: a host may bind an older audit\n * service, and a partially-mocked double routinely has fewer methods than the real one. What is no\n * longer tolerated is the absence going unnoticed — the emission runs through\n * {@link emitAuditObservation}, so a missing sink is counted as\n * {@link AuditObservationLossReason.SERVICE_UNAVAILABLE} rather than silently doing nothing.\n */\nexport type ProviderOperationAuditResolver = () => {\n logProviderOperationCall?: (\n data: ProviderOperationAuditRecord,\n requestExecutionContext?: ExecutionContext<any>,\n ) => Promise<void>;\n} | undefined;\n\n/**\n * What one outbound provider call is worth recording. Ids and shape only, never a payload.\n *\n * assurance-control: WILDO.ACCESS.AUTHORIZATION_DECISION_AUDIT — records WHOSE third-party account an\n * outbound call spent, which the initiator's own ids cannot answer once one execution may spend\n * several.\n */\nexport interface ProviderOperationAuditRecord {\n providerRef: string;\n operationId: string;\n domain: string;\n method: string;\n /** READ or WRITE, as the operation declares it — the axis a reviewer filters on first. */\n classification: string;\n /**\n * WHOSE ACCOUNT the call spent — the first question of any provider incident, and one the\n * initiator's own ids cannot answer.\n *\n * Distinct from `organizationId` below, which records the tenant the REQUEST was scoped to. Those\n * are the same tenant in the ordinary case and different ones exactly where it matters: a user\n * action fanning out to every organization that user belongs to spends N accounts under one\n * initiating scope. A trail carrying only the initiator's organization would attribute every one\n * of those calls to the wrong tenant.\n */\n connectionOwnerScope: string;\n connectionOwnerId?: string;\n connectionDelegation: string;\n /** HTTP status of the answer; absent when the call never got one. */\n status?: number;\n /** Present when the call failed, naming the failure kind rather than the vendor's prose. */\n failureKind?: string;\n initiatorUserId?: string;\n organizationId?: string;\n executionType?: string;\n}\n\nexport interface ProviderOperationCallInput {\n providerRef: string;\n operationId: string;\n /**\n * The catalogue DOMAIN the operation belongs to, when the caller knows it. Passing it lets the\n * provider's loader answer one domain instead of every one — the whole point of the lazy loader\n * — and is what keeps a vendor with hundreds of operations from evaluating them all to run one.\n * Absent, the whole catalogue is loaded once and memoized.\n */\n domain?: string;\n input?: Readonly<Record<string, unknown>>;\n /**\n * WHOSE ACCOUNT this call spends. Defaults to the floor — the application's own, acting as itself.\n *\n * On the CALL rather than on the provider or the execution context, because one execution may\n * legitimately spend several tenants' accounts: a single user action pushing a message to every\n * organization that user belongs to issues N calls with N targets and one initiator. The context\n * still decides whether the execution MAY act for each named owner.\n */\n connection?: ExternalProvider_ConnectionTarget;\n}\n\nexport interface ProviderOperationCallResult<TOutput = unknown> {\n status: number;\n /** The payload at the operation's `resultPath`, parsed through `outputSchema` when declared. */\n output: TOutput;\n /** The whole parsed body, before `resultPath` and before validation. */\n rawBody: unknown;\n operation: ProviderRestOperation;\n}\n\n/**\n * Everything the executor can be given beyond the two collaborators it cannot work without.\n *\n * Every field is optional and every one degrades to a documented behaviour rather than a failure:\n * no `fetchImpl` uses the platform's, no `auditResolver` counts the drop, no `warn` swallows the\n * deprecation notice, no `metricsResolver`/`logger` leaves the loss on the process-local total only.\n */\nexport interface ProviderOperationExecutorCollaborators {\n /** The transport. Absent, the platform `fetch` is used — a test substitutes here. */\n fetchImpl?: HttpApiFetchLike;\n /** The outbound-call trail's sink, lazily resolved. See {@link ProviderOperationAuditResolver}. */\n auditResolver?: ProviderOperationAuditResolver;\n /** Where a vendor deprecation notice goes. Once per operation, never per call. */\n warn?: (message: string) => void;\n /** The loss counter behind both observations. Consulted ONLY when there is a drop to record. */\n metricsResolver?: AuditObservationLossMetricsResolver;\n /** The always-available loss channel — one throttled `error` line per `(observation, reason)`. */\n logger?: AuditObservationLossLogger;\n}\n\nexport class ProviderOperationExecutorBackendService {\n /** Per `(providerRef, domain)`, exactly as the loader's contract promises. */\n private readonly catalogueCache = new Map<string, Promise<ProviderRestOperationCatalogue>>();\n /** Per provider, so the rate window survives between calls. */\n private readonly clientCache = new Map<string, ProviderRestCallClient>();\n /** Deprecation is logged once per operation, never per call — a log nobody can read is not a warning. */\n private readonly deprecationsWarned = new Set<string>();\n\n private readonly fetchImpl?: HttpApiFetchLike;\n private readonly auditResolver?: ProviderOperationAuditResolver;\n private readonly warn: (message: string) => void;\n private readonly metricsResolver?: AuditObservationLossMetricsResolver;\n private readonly logger?: AuditObservationLossLogger;\n\n /**\n * Two required collaborators, then a BAG — and the bag is a correction rather than a style choice.\n *\n * The optional tail used to be five positional parameters, and inserting one silently reassigned\n * whatever a caller had passed after it. That is measured, not hypothetical: adding the credential\n * recorder before `warn` handed the deprecation test's spy to the recorder slot, so the warning was\n * recorded by nobody and a pin about vendor deprecation failed for a reason that had nothing to do\n * with it. The comment left behind told the next author to APPEND — which works exactly until two\n * people append in parallel, and does nothing for a caller who miscounts `undefined`s.\n *\n * A bag removes the failure mode instead of documenting it: every collaborator is named at the call\n * site, and adding one cannot move another.\n */\n constructor(\n private readonly externalProvidersRegistry: ExternalProvidersRegistryBackendService,\n private readonly providerAccessResolver: HttpApiProviderAccessResolver,\n collaborators: ProviderOperationExecutorCollaborators = {},\n ) {\n this.fetchImpl = collaborators.fetchImpl;\n this.auditResolver = collaborators.auditResolver;\n this.warn = collaborators.warn ?? (() => undefined);\n this.metricsResolver = collaborators.metricsResolver;\n this.logger = collaborators.logger;\n }\n\n /**\n * The provider's `rest` runtime contract, refusing by NAME when there is none: every branch here\n * is an authoring or configuration gap someone must fix, never a transient.\n */\n private restContractOf(providerRef: string) {\n const runtimeContract = this.externalProvidersRegistry.getProviderRuntimeContract(\n providerRef,\n ExternalProvider_ExchangeProtocol_Kind.REST_API,\n );\n if (!runtimeContract || runtimeContract.kind !== ProviderProtocolRuntimeKind.REST) {\n throw new ProviderOperationLookupError(\n `Provider '${providerRef}' declares no REST runtime contract `\n + `(found: ${runtimeContract ? `kind '${String(runtimeContract.kind)}'` : 'none'}), so it has no operations to execute.`,\n { kind: ProviderOperationLookupFailureKind.PROVIDER_NOT_REST, providerRef },\n );\n }\n return runtimeContract;\n }\n\n /**\n * Load a catalogue once per `(providerRef, domain)`.\n *\n * The PROMISE is cached rather than its value, so two concurrent calls for the same pair share\n * one load instead of racing two — and a failed load is EVICTED, because caching a rejection\n * would make one bad moment permanent for the process's whole life.\n */\n public async loadCatalogue(providerRef: string, domain?: string): Promise<ProviderRestOperationCatalogue> {\n const cacheKey = `${providerRef}::${domain ?? '*'}`;\n const cached = this.catalogueCache.get(cacheKey);\n if (cached) return cached;\n\n const contract = this.restContractOf(providerRef);\n if (!contract.operations) {\n throw new ProviderOperationLookupError(\n `Provider '${providerRef}' declares a REST contract but no operation catalogue — `\n + 'add `operations` to its rest runtime contract, or call it through an ETL httpApiBinding instead.',\n { kind: ProviderOperationLookupFailureKind.PROVIDER_DECLARES_NO_OPERATIONS, providerRef },\n );\n }\n\n const loadFailure = (cause: unknown) => new ProviderOperationLookupError(\n `Provider '${providerRef}' failed to load its operation catalogue${domain ? ` for domain '${domain}'` : ''}: `\n + `${cause instanceof Error ? cause.message : String(cause)}`,\n { kind: ProviderOperationLookupFailureKind.CATALOGUE_LOAD_FAILED, providerRef, cause },\n );\n\n let invoked: Promise<ProviderRestOperationCatalogue>;\n try {\n // A loader is the provider PACKAGE's own code, and its whole job is to `import()` or\n // `require()` an operation module lazily. That throws SYNCHRONOUSLY when the module is\n // absent or fails to evaluate — a missing dependency, a bad barrel — and a synchronous\n // throw never reaches `.catch`. Without this the two ways one loader can fail refuse\n // differently: a rejection is named `CATALOGUE_LOAD_FAILED` and a throw escapes as the raw\n // `Error`, past the vocabulary that exists so an operator can act on the sentence.\n // Nothing is cached yet on this path, so there is nothing to evict.\n invoked = Promise.resolve(contract.operations(domain));\n } catch (cause) {\n throw loadFailure(cause);\n }\n\n const loading = invoked.catch((cause: unknown) => {\n this.catalogueCache.delete(cacheKey);\n throw loadFailure(cause);\n });\n this.catalogueCache.set(cacheKey, loading);\n return loading;\n }\n\n /** One operation, by id. */\n public async resolveOperation(providerRef: string, operationId: string, domain?: string): Promise<ProviderRestOperation> {\n const catalogue = await this.loadCatalogue(providerRef, domain);\n const operation = catalogue.operations[operationId];\n if (!operation) {\n const known = Object.keys(catalogue.operations);\n throw new ProviderOperationLookupError(\n `Provider '${providerRef}' declares no operation '${operationId}'`\n + `${domain ? ` in domain '${domain}'` : ''}. Declared${known.length > 20 ? ` (first 20 of ${known.length})` : ''}: `\n + `${known.slice(0, 20).join(', ') || '(none)'}.`,\n { kind: ProviderOperationLookupFailureKind.OPERATION_NOT_IN_CATALOGUE, providerRef, operationId },\n );\n }\n return operation;\n }\n\n private clientFor(providerRef: string): ProviderRestCallClient {\n const cached = this.clientCache.get(providerRef);\n if (cached) return cached;\n const contract = this.restContractOf(providerRef);\n const semantics: ProviderRestCallSemantics = contract.remoteCallSemantics ?? DEFAULT_PROVIDER_REST_CALL_SEMANTICS;\n const client = new ProviderRestCallClient(providerRef, semantics, this.providerAccessResolver, this.fetchImpl);\n this.clientCache.set(providerRef, client);\n return client;\n }\n\n /** Execute one declared operation end to end. */\n /**\n * Adapt this executor to what a GENERATED TYPED CLIENT takes.\n *\n * `createSlackClient(execute)` wants `(providerRef, operationId, input) => Promise<unknown>` — no\n * execution context and no connection target, because the generated package must carry no runtime\n * dependency on the engine and cannot name either type. Those two are exactly what a call needs and\n * what only the caller knows, so they are bound HERE, once, by the service that has them:\n *\n * ```ts\n * const slack = createSlackClient(this.providerOperations.forExecution(executionContext));\n * await slack.slackPostMessage({ channel: 'C123', text: 'Deal closed' });\n * ```\n *\n * The `connection` default is the floor — the application's own account, acting as itself —\n * matching {@link execute}. A caller spending a tenant's account passes the target explicitly, and\n * the context still decides whether the execution may act for that owner.\n *\n * Returns `output` rather than the whole envelope, because that is what the typed client's\n * `Promise<unknown>` promises. A caller who needs the status or the raw body calls {@link execute}\n * directly — the adapter is ergonomics, never a narrower door.\n */\n public forExecution(\n executionContext: ExecutionContext<any>,\n defaults?: { readonly connection?: ExternalProvider_ConnectionTarget; readonly domain?: string },\n ): ProviderOperationExecute {\n // The per-CALL connection wins over the client's default, and that precedence is the whole\n // reason the parameter exists. A default binds one client to one owner, which is right for the\n // ordinary case and cannot express the one that forced the design: a single user action pushing\n // to every organization that user belongs to issues N calls through ONE client and names a\n // different owner each time. Reading only the default would make that unreachable through the\n // generated surface while the engine underneath supports it.\n return async (providerRef, operationId, input, connection) => {\n const result = await this.execute(\n { providerRef, operationId, input, connection: connection ?? defaults?.connection, domain: defaults?.domain },\n executionContext,\n );\n return result.output;\n };\n }\n\n public async execute<TOutput = unknown>(\n call: ProviderOperationCallInput,\n executionContext: ExecutionContext<any>,\n ): Promise<ProviderOperationCallResult<TOutput>> {\n const target: ExternalProvider_ConnectionTarget = call.connection ?? {\n ownerScope: ExternalProvider_Connection_OwnerScope.APPLICATION,\n delegation: ExternalProvider_Connection_DelegationMode.SERVICE,\n };\n const operation = await this.resolveOperation(call.providerRef, call.operationId, call.domain);\n\n if (operation.deprecated && !this.deprecationsWarned.has(`${call.providerRef}::${operation.operationId}`)) {\n this.deprecationsWarned.add(`${call.providerRef}::${operation.operationId}`);\n // Warn, never refuse: the vendor decides when a deprecated operation stops answering, and a\n // framework that refused first would break a working application ahead of the vendor.\n this.warn(\n `Provider operation '${call.providerRef}.${operation.operationId}' is deprecated`\n + `${operation.deprecated.since ? ` since ${operation.deprecated.since}` : ''}: ${operation.deprecated.reason}`\n + `${operation.deprecated.replacedByOperationId ? ` — use '${operation.deprecated.replacedByOperationId}'.` : '.'}`,\n );\n }\n\n const rawInput = call.input ?? {};\n let input: Readonly<Record<string, unknown>> = rawInput;\n if (operation.inputSchema) {\n const parsed = operation.inputSchema.safeParse(rawInput);\n if (!parsed.success) {\n throw new ProviderOperationRequestError(\n `Input rejected for '${call.providerRef}.${operation.operationId}': `\n + parsed.error.issues.map((issue) => `${issue.path.join('.') || '(root)'} ${issue.message}`).join('; '),\n { kind: ProviderOperationRequestFailureKind.INPUT_REJECTED, operationId: operation.operationId, providerRef: call.providerRef },\n );\n }\n input = parsed.data as Record<string, unknown>;\n }\n\n const client = this.clientFor(call.providerRef);\n const access = await client.resolveAccess(target, executionContext);\n const request = compileProviderOperationRequest({ operation, providerRef: call.providerRef, input, access });\n\n try {\n // `access` is handed on so the client can SIGN, which only it can do last. Resolving it twice\n // would be a second read of the same secrets and, for a signed provider, a second timestamp.\n const response = await client.execute(request, operation.remoteCallSemantics, access);\n this.record(call.providerRef, operation, target, executionContext, { status: response.status });\n // A 2xx is the provider ACCEPTING the credential. Recording it is what moves a stored row off\n // UNVALIDATED — which is otherwise where every working credential stays forever, so an operator\n // reading the settings screen cannot tell a healthy integration from one that has never run.\n this.recordCredentialOutcome(call.providerRef, target, access, { accepted: response.status < 400 });\n\n const payload = operation.resultPath ? resolveHttpApiResultPath(response.json, operation.resultPath) : response.json;\n if (!operation.outputSchema) {\n return { status: response.status, output: payload as TOutput, rawBody: response.json, operation };\n }\n const parsed = operation.outputSchema.safeParse(payload);\n if (!parsed.success) {\n // A vendor answering a shape the declaration does not describe is a CONTRACT problem, and\n // the honest place to learn it is here rather than three frames into the caller.\n throw new ProviderOperationRequestError(\n `Provider '${call.providerRef}' answered '${operation.operationId}' with a body its declared outputSchema rejects: `\n + parsed.error.issues.map((issue) => `${issue.path.join('.') || '(root)'} ${issue.message}`).join('; '),\n { kind: ProviderOperationRequestFailureKind.DECLARATION_INCOHERENT, operationId: operation.operationId, providerRef: call.providerRef },\n );\n }\n return { status: response.status, output: parsed.data as TOutput, rawBody: response.json, operation };\n } catch (error) {\n const detail = (error as { detail?: { status?: number; kind?: string } }).detail;\n this.record(call.providerRef, operation, target, executionContext, {\n status: detail?.status,\n failureKind: detail?.kind ?? (error instanceof Error ? error.name : 'UNKNOWN'),\n });\n throw error;\n }\n }\n\n /**\n * Stamp the stored credential with what the provider said. Best-effort, and after the call.\n *\n * Fire-and-forget for the reason the audit emit is: the outbound call has already happened, so\n * failing the caller because a bookkeeping write did not land would turn a successful integration\n * into an error. What is NEW is that a drop is now COUNTED — this seam spent its whole life behind\n * a constructor parameter the container never passed, so every outbound call found no recorder and\n * wrote nothing, and every credential that had in fact just worked still read as never tried. A\n * silence nobody counts is how that survives; {@link AuditObservationKind.PROVIDER_CREDENTIAL_USE}\n * is what ends it.\n *\n * ## Why the REGISTRY and not a store\n *\n * Because the executor cannot route this correctly and must not try. `target.ownerId` is a USER id\n * whenever `ownerScope` is `USER` (#333's two-axis connection shape), so a recorder typed with an\n * `organizationId` — which is exactly what the dead parameter was — would have stamped a tenant row\n * that does not exist and emitted an organization audit event naming a user id as the organization.\n * `recordProviderSecretUseForTarget` dispatches by the same rule, in the same order, as the\n * resolution that produced this credential, so *the store that was read is the store that is\n * stamped* is a property of one function rather than an agreement between two.\n *\n * Only a call whose credential came from a STORE has a row: an APPLICATION-owned resolution carries\n * no provenance and is skipped here rather than filtered later, so the deployment environment can\n * never acquire a row describing a credential the tenant never set.\n */\n private recordCredentialOutcome(\n providerRef: string,\n target: ExternalProvider_ConnectionTarget,\n access: { credentialProvenance?: HttpApiProviderAccess['credentialProvenance'] },\n outcome: { accepted: boolean; providerMessage?: string },\n ): void {\n const provenance = access.credentialProvenance;\n if (!provenance || target.ownerId === undefined) return;\n // Feature-detected on the METHOD, not the object: a registry double built with `as never`\n // (several proof harnesses are) is truthy and may model only what the call path needed. Detecting\n // here reports the honest SERVICE_UNAVAILABLE instead of an EMISSION_THREW TypeError.\n const registry = this.externalProvidersRegistry as Partial<ExternalProvidersRegistryBackendService>;\n emitAuditObservation({\n observation: AuditObservationKind.PROVIDER_CREDENTIAL_USE,\n emit: typeof registry.recordProviderSecretUseForTarget === 'function'\n ? () => registry.recordProviderSecretUseForTarget!(target, providerRef, provenance, outcome)\n : undefined,\n metricsResolver: this.metricsResolver,\n logger: this.logger,\n context: { providerRef, ownerScope: target.ownerScope, secretSlug: provenance.secretSlug },\n });\n }\n\n /**\n * Record one outbound call. Fire-and-forget and feature-detected, per the house pattern: a partial\n * audit binding or a store failure must never fail the call it observes.\n *\n * Called on BOTH the success and the failure path deliberately — a refused or failed outbound call\n * is exactly what a reviewer wants to see, and a trail that records only what worked is a trail\n * that hides the attempts.\n *\n * Routed through {@link emitAuditObservation} so that an absent sink is COUNTED. That matters more\n * here than almost anywhere: an empty outbound trail reads as \"this deployment integrates with\n * nothing\", which is a sentence somebody will believe.\n *\n * assurance-control: WILDO.AUDIT.ATTRIBUTION\n */\n private record(\n providerRef: string,\n operation: ProviderRestOperation,\n target: ExternalProvider_ConnectionTarget,\n executionContext: ExecutionContext<any>,\n outcome: { status?: number; failureKind?: string },\n ): void {\n const auditLogsService = this.resolveAuditLogsService();\n const initiatorIds = (executionContext as { initiatorIds?: { userId?: string; organizationId?: string } }).initiatorIds;\n const emit = auditLogsService?.logProviderOperationCall;\n emitAuditObservation({\n observation: AuditObservationKind.PROVIDER_OPERATION_CALL,\n emit: typeof emit === 'function'\n ? () => emit.call(auditLogsService, {\n providerRef,\n operationId: operation.operationId,\n domain: operation.domain,\n method: operation.method,\n classification: operation.classification,\n connectionOwnerScope: target.ownerScope,\n ...(target.ownerId === undefined ? {} : { connectionOwnerId: target.ownerId }),\n connectionDelegation: target.delegation,\n initiatorUserId: initiatorIds?.userId,\n organizationId: initiatorIds?.organizationId,\n executionType: (executionContext as { executionType?: string }).executionType,\n ...outcome,\n }, executionContext)\n : undefined,\n metricsResolver: this.metricsResolver,\n logger: this.logger,\n context: { providerRef, operationId: operation.operationId },\n });\n }\n\n /**\n * The audit service, or `undefined` when nothing is bound.\n *\n * Its own `try`: resolving a container binding may throw, and that throw must be a\n * SERVICE_UNAVAILABLE loss rather than an exception on the outbound call's own path.\n */\n private resolveAuditLogsService(): ReturnType<ProviderOperationAuditResolver> {\n try {\n return this.auditResolver?.();\n } catch {\n return undefined;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-operation-request.backend.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-operation-request.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAAkE,KAAK,qBAAqB,EAAuC,MAAM,sCAAsC,CAAC;AAEvL,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,2FAA2F,CAAC;AAEnG,6EAA6E;AAC7E,oBAAY,mCAAmC;IAC7C,iFAAiF;IACjF,cAAc,mBAAmB;IACjC,+FAA+F;IAC/F,gBAAgB,qBAAqB;IACrC,mGAAmG;IACnG,sBAAsB,2BAA2B;CAClD;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAGpC,MAAM,EAAE;QACtB,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;QACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B;gBALD,OAAO,EAAE,MAAM,EACC,MAAM,EAAE;QACtB,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;QACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B;CAKJ;AAmBD,qGAAqG;AACrG,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAEtF;AAaD,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,qBAAqB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,8FAA8F;IAC9F,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,4EAA4E;IAC5E,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAC9D;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,6BAA6B,GAAG,uBAAuB,CAiK7G"}
1
+ {"version":3,"file":"provider-operation-request.backend.d.ts","sourceRoot":"","sources":["../../../../src/external-providers/operations/provider-operation-request.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAAkE,KAAK,qBAAqB,EAAuC,MAAM,sCAAsC,CAAC;AAEvL,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,2FAA2F,CAAC;AAEnG,6EAA6E;AAC7E,oBAAY,mCAAmC;IAC7C,iFAAiF;IACjF,cAAc,mBAAmB;IACjC,+FAA+F;IAC/F,gBAAgB,qBAAqB;IACrC,mGAAmG;IACnG,sBAAsB,2BAA2B;CAClD;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAGpC,MAAM,EAAE;QACtB,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;QACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B;gBALD,OAAO,EAAE,MAAM,EACC,MAAM,EAAE;QACtB,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;QACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B;CAKJ;AAmBD,qGAAqG;AACrG,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAEtF;AAaD,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,qBAAqB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,8FAA8F;IAC9F,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,4EAA4E;IAC5E,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAC9D;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,6BAA6B,GAAG,uBAAuB,CAiK7G"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-operation-request.backend.js","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-operation-request.backend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Compiling a declared provider operation + a caller's input into ONE transport request (S3a,\n * #331).\n *\n * Deliberately a pure function over data, with no registry, no secrets and no I/O: an operation\n * declaration and an input go in, an {@link HttpApiTransportRequest} comes out. That is what makes\n * the interesting half — which input field lands in the path, which in the query, which in the\n * body, and whether the call may be retried — testable without a network, a provider or a\n * container.\n *\n * What this does NOT do, on purpose: it never PAGES. `pagination` on an operation is a hint the\n * caller reads; an executor that paged on its own would decide a caller's memory budget for it.\n */\n\nimport { API_HttpMethod } from '@wildo-ai/external-connectors-models';\n/*\n * `./backend` is the door that exists on `test`. #330 is splitting the private package by\n * AUDIENCE — `./backend-runtime` for what executes, `./backend` for tooling that enumerates every\n * engine-shipped provider — and has already moved backend-lib's runtime imports across in its own\n * work. This file was new and not in that sweep; #330 landed the split and moved this specifier with\n * the others, so the operations lane no longer pulls the eager registry into a running host. A\n * guard in `backend-provider-loader.module-graph.test.ts` now refuses any value import of the eager\n * barrel from this package's source, which is what stops the next new file re-introducing it.\n */\nimport { ProviderRestParameterLocation, ProviderRestRequestBodyEncoding, type ProviderRestOperation, type ProviderRestOperationParameter } from '@wildo-ai/external-connectors-models';\n\nimport {\n HttpApiTransportBodyEncoding,\n HttpApiTransportResponseDecoding,\n type HttpApiTransportBody,\n type HttpApiTransportRequest,\n} from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\n\n/** What went wrong while turning a declaration + an input into a request. */\nexport enum ProviderOperationRequestFailureKind {\n /** The caller's input does not satisfy the operation's declared input schema. */\n INPUT_REJECTED = 'INPUT_REJECTED',\n /** A required value is absent — a path token with nothing to fill it, a required parameter. */\n INPUT_INCOMPLETE = 'INPUT_INCOMPLETE',\n /** The DECLARATION is inconsistent — a path token no parameter declares, a body with no source. */\n DECLARATION_INCOHERENT = 'DECLARATION_INCOHERENT',\n}\n\nexport class ProviderOperationRequestError extends Error {\n constructor(\n message: string,\n public readonly detail: {\n readonly kind: ProviderOperationRequestFailureKind;\n readonly operationId: string;\n readonly providerRef: string;\n },\n ) {\n super(message);\n this.name = 'ProviderOperationRequestError';\n }\n}\n\n/**\n * Methods whose repetition is safe.\n * spec-cite: RFC 9110 §9.2.2 — \"PUT, DELETE, and the safe request methods are idempotent\";\n * §9.2.1 names GET, HEAD, OPTIONS and TRACE as the safe ones.\n *\n * This is only the DEFAULT: an operation may declare `idempotent` and override it in either\n * direction — `true` on a POST the vendor documents behind an idempotency key, `false` on a PUT\n * whose target is not really a resource replacement.\n */\nconst IDEMPOTENT_METHODS: ReadonlySet<`${API_HttpMethod}`> = new Set([\n API_HttpMethod.GET,\n API_HttpMethod.HEAD,\n API_HttpMethod.OPTIONS,\n API_HttpMethod.PUT,\n API_HttpMethod.DELETE,\n]);\n\n/** Whether re-sending this operation is safe — the value that reaches the transport's retry gate. */\nexport function providerOperationIsRetrySafe(operation: ProviderRestOperation): boolean {\n return operation.idempotent ?? IDEMPOTENT_METHODS.has(operation.method);\n}\n\nconst PATH_TOKEN = /\\{([^}]+)\\}/g;\n\n/** The input field feeding a parameter: its own `from`, or the wire name when the two agree. */\nfunction inputFieldOf(parameter: ProviderRestOperationParameter): string {\n return parameter.from ?? parameter.name;\n}\n\nfunction asWireValue(value: unknown): string {\n return typeof value === 'string' ? value : String(value);\n}\n\nexport interface CompileProviderOperationInput {\n operation: ProviderRestOperation;\n providerRef: string;\n /** Already validated against `operation.inputSchema` by the executor when one is declared. */\n input: Readonly<Record<string, unknown>>;\n /** Base URL and auth/default headers, from the provider access resolver. */\n access: { baseUrl: string; headers: Record<string, string> };\n}\n\n/**\n * Build the request. Reads in one direction — path, then query, then headers, then body — and\n * records which input fields were consumed on the way, because the body's default source is\n * \"everything not consumed\" and that set can only be known after the parameters are placed.\n */\nexport function compileProviderOperationRequest(input: CompileProviderOperationInput): HttpApiTransportRequest {\n const { operation, providerRef, access } = input;\n const refuse = (kind: ProviderOperationRequestFailureKind, message: string): never => {\n throw new ProviderOperationRequestError(message, { kind, operationId: operation.operationId, providerRef });\n };\n\n const parameters = operation.parameters ?? [];\n const consumedInputFields = new Set<string>();\n\n const valueFor = (parameter: ProviderRestOperationParameter): unknown => {\n if (parameter.constantValue !== undefined) return parameter.constantValue;\n const field = inputFieldOf(parameter);\n consumedInputFields.add(field);\n return input.input[field];\n };\n\n // ── path ───────────────────────────────────────────────────────────────────\n const pathParameters = new Map(\n parameters.filter((parameter) => parameter.in === ProviderRestParameterLocation.PATH).map((parameter) => [parameter.name, parameter]),\n );\n const path = operation.pathTemplate.replace(PATH_TOKEN, (_match, token: string) => {\n const parameter = pathParameters.get(token);\n if (!parameter) {\n // The declaration is wrong, not the call: a path template cannot have a hole nothing fills.\n return refuse(\n ProviderOperationRequestFailureKind.DECLARATION_INCOHERENT,\n `Operation '${operation.operationId}' has the path token '{${token}}' and declares no PATH parameter named '${token}'.`,\n );\n }\n const value = valueFor(parameter);\n if (value === undefined || value === null || value === '') {\n return refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' needs '${inputFieldOf(parameter)}' for the path token '{${token}}', and the input carries no value for it.`,\n );\n }\n return encodeURIComponent(asWireValue(value));\n });\n\n // ── query ──────────────────────────────────────────────────────────────────\n const search = new URLSearchParams();\n for (const parameter of parameters) {\n if (parameter.in !== ProviderRestParameterLocation.QUERY) continue;\n const value = valueFor(parameter);\n if (value === undefined || value === null) {\n if (parameter.required) {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' declares '${parameter.name}' as a required query parameter, and the input carries no value for it.`,\n );\n }\n continue;\n }\n // An array becomes REPEATED parameters (`?tag=a&tag=b`), the only encoding every target\n // accepts. A vendor wanting a joined list declares one field and the caller joins it — a\n // guess here would silently send the wrong thing to half of them.\n if (Array.isArray(value)) {\n for (const entry of value) search.append(parameter.name, asWireValue(entry));\n continue;\n }\n search.append(parameter.name, asWireValue(value));\n }\n\n // ── headers ────────────────────────────────────────────────────────────────\n const headers: Record<string, string> = { Accept: 'application/json', ...access.headers };\n for (const parameter of parameters) {\n if (parameter.in !== ProviderRestParameterLocation.HEADER) continue;\n const value = valueFor(parameter);\n if (value === undefined || value === null) {\n if (parameter.required) {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' declares '${parameter.name}' as a required header, and the input carries no value for it.`,\n );\n }\n continue;\n }\n headers[parameter.name] = asWireValue(value);\n }\n\n // ── body ───────────────────────────────────────────────────────────────────\n let body: HttpApiTransportBody | undefined;\n if (operation.requestBody) {\n const declaration = operation.requestBody;\n const payload = declaration.from !== undefined\n ? input.input[declaration.from]\n : Object.fromEntries(Object.entries(input.input).filter(([field]) => !consumedInputFields.has(field)));\n switch (declaration.encoding) {\n case ProviderRestRequestBodyEncoding.JSON:\n body = { encoding: HttpApiTransportBodyEncoding.JSON, value: payload };\n break;\n case ProviderRestRequestBodyEncoding.FORM_URLENCODED: {\n if (payload === null || typeof payload !== 'object') {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' sends a form body and the input resolves to ${payload === null ? 'null' : typeof payload} instead of an object.`,\n );\n }\n const fields: Record<string, string> = {};\n for (const [field, value] of Object.entries(payload as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n fields[field] = asWireValue(value);\n }\n body = { encoding: HttpApiTransportBodyEncoding.FORM_URLENCODED, value: fields };\n break;\n }\n case ProviderRestRequestBodyEncoding.MULTIPART: {\n if (!(payload instanceof FormData)) {\n // Deliberately NOT built from a plain object here: a multipart part carries a filename\n // and a media type the caller knows and this layer does not, and inventing them is how\n // an upload arrives as `blob` with the wrong content type.\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' sends a multipart body, so its input must supply a FormData`\n + `${declaration.from ? ` in '${declaration.from}'` : ''}; the caller supplied ${payload === null ? 'null' : typeof payload}.`,\n );\n }\n body = { encoding: HttpApiTransportBodyEncoding.MULTIPART, value: payload as FormData };\n break;\n }\n case ProviderRestRequestBodyEncoding.TEXT: {\n if (typeof payload !== 'string') {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' sends a text body, so its input must supply a string`\n + `${declaration.from ? ` in '${declaration.from}'` : ''}; the caller supplied ${payload === null ? 'null' : typeof payload}.`,\n );\n }\n if (declaration.contentType === undefined) {\n refuse(\n ProviderOperationRequestFailureKind.DECLARATION_INCOHERENT,\n `Operation '${operation.operationId}' sends a text body and declares no contentType — a text body without its media type is not addressable.`,\n );\n }\n body = { encoding: HttpApiTransportBodyEncoding.TEXT, value: payload as string, contentType: declaration.contentType as string };\n break;\n }\n default: {\n const exhaustiveCheck: never = declaration.encoding;\n return exhaustiveCheck;\n }\n }\n }\n\n const query = search.toString();\n return {\n method: operation.method,\n url: `${access.baseUrl}${path}${query.length > 0 ? `?${query}` : ''}`,\n headers,\n body,\n // ALWAYS JSON, and stated rather than left to the transport's default so the limitation is\n // visible at the site that imposes it: the operation declaration has no way to say the vendor\n // answers `text/csv` or answers nothing at all. The transport carries both\n // (`HttpApiTransportResponseDecoding.TEXT` / `.NONE`) and the request body already speaks TEXT,\n // so this is an asymmetry rather than a design — filed, not deferred silently.\n //\n // An earlier revision wrote `outputSchema || resultPath ? JSON : undefined`, which implied a\n // distinction that does not exist: absent means JSON too, so both arms were the same value.\n responseDecoding: HttpApiTransportResponseDecoding.JSON,\n retrySafe: providerOperationIsRetrySafe(operation),\n };\n}\n"]}
1
+ {"version":3,"file":"provider-operation-request.backend.js","sourceRoot":"","sources":["../../../../src/external-providers/operations/provider-operation-request.backend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Compiling a declared provider operation + a caller's input into ONE transport request (S3a,\n * #331).\n *\n * Deliberately a pure function over data, with no registry, no secrets and no I/O: an operation\n * declaration and an input go in, an {@link HttpApiTransportRequest} comes out. That is what makes\n * the interesting half — which input field lands in the path, which in the query, which in the\n * body, and whether the call may be retried — testable without a network, a provider or a\n * container.\n *\n * What this does NOT do, on purpose: it never PAGES. `pagination` on an operation is a hint the\n * caller reads; an executor that paged on its own would decide a caller's memory budget for it.\n */\n\nimport { API_HttpMethod } from '@wildo-ai/external-connectors-models';\n/*\n * `./backend` is the door that exists on `test`. #330 is splitting the private package by\n * AUDIENCE — `./backend-runtime` for what executes, `./backend` for tooling that enumerates every\n * engine-shipped provider — and has already moved backend-lib's runtime imports across in its own\n * work. This file was new and not in that sweep; #330 landed the split and moved this specifier with\n * the others, so the operations lane no longer pulls the eager registry into a running host. A\n * guard in `backend-provider-loader.module-graph.test.ts` now refuses any value import of the eager\n * barrel from this package's source, which is what stops the next new file re-introducing it.\n */\nimport { ProviderRestParameterLocation, ProviderRestRequestBodyEncoding, type ProviderRestOperation, type ProviderRestOperationParameter } from '@wildo-ai/external-connectors-models';\n\nimport {\n HttpApiTransportBodyEncoding,\n HttpApiTransportResponseDecoding,\n type HttpApiTransportBody,\n type HttpApiTransportRequest,\n} from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\n\n/** What went wrong while turning a declaration + an input into a request. */\nexport enum ProviderOperationRequestFailureKind {\n /** The caller's input does not satisfy the operation's declared input schema. */\n INPUT_REJECTED = 'INPUT_REJECTED',\n /** A required value is absent — a path token with nothing to fill it, a required parameter. */\n INPUT_INCOMPLETE = 'INPUT_INCOMPLETE',\n /** The DECLARATION is inconsistent — a path token no parameter declares, a body with no source. */\n DECLARATION_INCOHERENT = 'DECLARATION_INCOHERENT',\n}\n\nexport class ProviderOperationRequestError extends Error {\n constructor(\n message: string,\n public readonly detail: {\n readonly kind: ProviderOperationRequestFailureKind;\n readonly operationId: string;\n readonly providerRef: string;\n },\n ) {\n super(message);\n this.name = 'ProviderOperationRequestError';\n }\n}\n\n/**\n * Methods whose repetition is safe.\n * spec-cite: RFC 9110 §9.2.2 — \"PUT, DELETE, and the safe request methods are idempotent\";\n * §9.2.1 names GET, HEAD, OPTIONS and TRACE as the safe ones.\n *\n * This is only the DEFAULT: an operation may declare `idempotent` and override it in either\n * direction — `true` on a POST the vendor documents behind an idempotency key, `false` on a PUT\n * whose target is not really a resource replacement.\n */\nconst IDEMPOTENT_METHODS: ReadonlySet<`${API_HttpMethod}`> = new Set([\n API_HttpMethod.GET,\n API_HttpMethod.HEAD,\n API_HttpMethod.OPTIONS,\n API_HttpMethod.PUT,\n API_HttpMethod.DELETE,\n]);\n\n/** Whether re-sending this operation is safe — the value that reaches the transport's retry gate. */\nexport function providerOperationIsRetrySafe(operation: ProviderRestOperation): boolean {\n return operation.idempotent ?? IDEMPOTENT_METHODS.has(operation.method);\n}\n\nconst PATH_TOKEN = /\\{([^}]+)\\}/g;\n\n/** The input field feeding a parameter: its own `from`, or the wire name when the two agree. */\nfunction inputFieldOf(parameter: ProviderRestOperationParameter): string {\n return parameter.from ?? parameter.name;\n}\n\nfunction asWireValue(value: unknown): string {\n return typeof value === 'string' ? value : String(value);\n}\n\nexport interface CompileProviderOperationInput {\n operation: ProviderRestOperation;\n providerRef: string;\n /** Already validated against `operation.inputSchema` by the executor when one is declared. */\n input: Readonly<Record<string, unknown>>;\n /** Base URL and auth/default headers, from the provider access resolver. */\n access: { baseUrl: string; headers: Record<string, string> };\n}\n\n/**\n * Build the request. Reads in one direction — path, then query, then headers, then body — and\n * records which input fields were consumed on the way, because the body's default source is\n * \"everything not consumed\" and that set can only be known after the parameters are placed.\n */\nexport function compileProviderOperationRequest(input: CompileProviderOperationInput): HttpApiTransportRequest {\n const { operation, providerRef, access } = input;\n const refuse = (kind: ProviderOperationRequestFailureKind, message: string): never => {\n throw new ProviderOperationRequestError(message, { kind, operationId: operation.operationId, providerRef });\n };\n\n const parameters = operation.parameters ?? [];\n const consumedInputFields = new Set<string>();\n\n const valueFor = (parameter: ProviderRestOperationParameter): unknown => {\n if (parameter.constantValue !== undefined) return parameter.constantValue;\n const field = inputFieldOf(parameter);\n consumedInputFields.add(field);\n return input.input[field];\n };\n\n // ── path ───────────────────────────────────────────────────────────────────\n const pathParameters = new Map(\n parameters.filter((parameter) => parameter.in === ProviderRestParameterLocation.PATH).map((parameter) => [parameter.name, parameter]),\n );\n const path = operation.pathTemplate.replace(PATH_TOKEN, (_match, token: string) => {\n const parameter = pathParameters.get(token);\n if (!parameter) {\n // The declaration is wrong, not the call: a path template cannot have a hole nothing fills.\n return refuse(\n ProviderOperationRequestFailureKind.DECLARATION_INCOHERENT,\n `Operation '${operation.operationId}' has the path token '{${token}}' and declares no PATH parameter named '${token}'.`,\n );\n }\n const value = valueFor(parameter);\n if (value === undefined || value === null || value === '') {\n return refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' needs '${inputFieldOf(parameter)}' for the path token '{${token}}', and the input carries no value for it.`,\n );\n }\n return encodeURIComponent(asWireValue(value));\n });\n\n // ── query ──────────────────────────────────────────────────────────────────\n const search = new URLSearchParams();\n for (const parameter of parameters) {\n if (parameter.in !== ProviderRestParameterLocation.QUERY) continue;\n const value = valueFor(parameter);\n if (value === undefined || value === null) {\n if (parameter.required) {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' declares '${parameter.name}' as a required query parameter, and the input carries no value for it.`,\n );\n }\n continue;\n }\n // An array becomes REPEATED parameters (`?tag=a&tag=b`), the only encoding every target\n // accepts. A vendor wanting a joined list declares one field and the caller joins it — a\n // guess here would silently send the wrong thing to half of them.\n if (Array.isArray(value)) {\n for (const entry of value) search.append(parameter.name, asWireValue(entry));\n continue;\n }\n search.append(parameter.name, asWireValue(value));\n }\n\n // ── headers ────────────────────────────────────────────────────────────────\n const headers: Record<string, string> = { Accept: 'application/json', ...access.headers };\n for (const parameter of parameters) {\n if (parameter.in !== ProviderRestParameterLocation.HEADER) continue;\n const value = valueFor(parameter);\n if (value === undefined || value === null) {\n if (parameter.required) {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' declares '${parameter.name}' as a required header, and the input carries no value for it.`,\n );\n }\n continue;\n }\n headers[parameter.name] = asWireValue(value);\n }\n\n // ── body ───────────────────────────────────────────────────────────────────\n let body: HttpApiTransportBody | undefined;\n if (operation.requestBody) {\n const declaration = operation.requestBody;\n const payload = declaration.from !== undefined\n ? input.input[declaration.from]\n : Object.fromEntries(Object.entries(input.input).filter(([field]) => !consumedInputFields.has(field)));\n switch (declaration.encoding) {\n case ProviderRestRequestBodyEncoding.JSON:\n body = { encoding: HttpApiTransportBodyEncoding.JSON, value: payload };\n break;\n case ProviderRestRequestBodyEncoding.FORM_URLENCODED: {\n if (payload === null || typeof payload !== 'object') {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' sends a form body and the input resolves to ${payload === null ? 'null' : typeof payload} instead of an object.`,\n );\n }\n const fields: Record<string, string> = {};\n for (const [field, value] of Object.entries(payload as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n fields[field] = asWireValue(value);\n }\n body = { encoding: HttpApiTransportBodyEncoding.FORM_URLENCODED, value: fields };\n break;\n }\n case ProviderRestRequestBodyEncoding.MULTIPART: {\n if (!(payload instanceof FormData)) {\n // Deliberately NOT built from a plain object here: a multipart part carries a filename\n // and a media type the caller knows and this layer does not, and inventing them is how\n // an upload arrives as `blob` with the wrong content type.\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' sends a multipart body, so its input must supply a FormData`\n + `${declaration.from ? ` in '${declaration.from}'` : ''}; the caller supplied ${payload === null ? 'null' : typeof payload}.`,\n );\n }\n body = { encoding: HttpApiTransportBodyEncoding.MULTIPART, value: payload as FormData };\n break;\n }\n case ProviderRestRequestBodyEncoding.TEXT: {\n if (typeof payload !== 'string') {\n refuse(\n ProviderOperationRequestFailureKind.INPUT_INCOMPLETE,\n `Operation '${operation.operationId}' sends a text body, so its input must supply a string`\n + `${declaration.from ? ` in '${declaration.from}'` : ''}; the caller supplied ${payload === null ? 'null' : typeof payload}.`,\n );\n }\n if (declaration.contentType === undefined) {\n refuse(\n ProviderOperationRequestFailureKind.DECLARATION_INCOHERENT,\n `Operation '${operation.operationId}' sends a text body and declares no contentType — a text body without its media type is not addressable.`,\n );\n }\n body = { encoding: HttpApiTransportBodyEncoding.TEXT, value: payload as string, contentType: declaration.contentType as string };\n break;\n }\n default: {\n const exhaustiveCheck: never = declaration.encoding;\n return exhaustiveCheck;\n }\n }\n }\n\n const query = search.toString();\n return {\n method: operation.method,\n url: `${access.baseUrl}${path}${query.length > 0 ? `?${query}` : ''}`,\n headers,\n body,\n // ALWAYS JSON, and stated rather than left to the transport's default so the limitation is\n // visible at the site that imposes it: the operation declaration has no way to say the vendor\n // answers `text/csv` or answers nothing at all. The transport carries both\n // (`HttpApiTransportResponseDecoding.TEXT` / `.NONE`) and the request body already speaks TEXT,\n // so this is an asymmetry rather than a design — filed, not deferred silently.\n //\n // An earlier revision wrote `outputSchema || resultPath ? JSON : undefined`, which implied a\n // distinction that does not exist: absent means JSON too, so both arms were the same value.\n responseDecoding: HttpApiTransportResponseDecoding.JSON,\n retrySafe: providerOperationIsRetrySafe(operation),\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-request-signing.backend.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-request-signing.backend.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2FAA2F,CAAC;AAEzI;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,mGAAmG;AACnG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAcD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,yEAAyE;IACzE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,uBAAuB,CAY5F;AAuLD,oGAAoG;AACpG,eAAO,MAAM,0CAA0C,IAAoC,CAAC"}
1
+ {"version":3,"file":"provider-request-signing.backend.d.ts","sourceRoot":"","sources":["../../../../src/external-providers/operations/provider-request-signing.backend.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2FAA2F,CAAC;AAGzI;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,mGAAmG;AACnG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAcD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,yEAAyE;IACzE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,uBAAuB,CAY5F;AAyMD,oGAAoG;AACpG,eAAO,MAAM,0CAA0C,IAAoC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { createHash, createHmac } from 'node:crypto';
2
2
  import { ProviderRestSigningScheme } from '@wildo-ai/external-connectors-models';
3
+ import { withEngineOwnedHeaders } from '../../security/outbound/outbound-request-headers.backend.utils.js';
3
4
  /**
4
5
  * Per-request request signing — the credential a vendor COMPUTES rather than reads (#373).
5
6
  *
@@ -106,15 +107,31 @@ function signAwsSigV4(input) {
106
107
  ].join('\n');
107
108
  const signingKey = ['aws4_request'].reduce((key, step) => hmac(key, step), [region, service].reduce((key, step) => hmac(key, step), hmac(`AWS4${credentials.secretKey}`, dateStamp)));
108
109
  const signature = hmac(signingKey, stringToSign).toString('hex');
110
+ /*
111
+ * The signature headers are the engine's, and a catalogue-declared spelling cannot dilute them.
112
+ *
113
+ * `request.headers` carries the provider catalogue's `defaultHeaders`, so a catalogue naming
114
+ * `authorization` or `x-amz-date` against the canonical spellings written here would produce two
115
+ * object keys per header — combined by `fetch` into one comma-joined value, which AWS rejects as
116
+ * a malformed signature rather than as the header collision it is.
117
+ *
118
+ * Filtering is safe against the signature specifically because `signedHeaders` is computed from
119
+ * the CLOSED `headersToSign` set above (host, x-amz-date, x-amz-security-token, content-type) and
120
+ * never from `request.headers` at large — so no header being dropped here was ever signed.
121
+ * `content-type` is not engine-owned at this merge and is therefore left exactly as the caller
122
+ * set it, which is what keeps it agreeing with the value that WAS signed.
123
+ *
124
+ * The session token is reserved even when the engine has none: absent credentials must not be
125
+ * satisfiable by a value a provider catalogue supplied.
126
+ */
109
127
  return {
110
128
  ...request,
111
- headers: {
112
- ...request.headers,
129
+ headers: withEngineOwnedHeaders(request.headers, {
113
130
  'X-Amz-Date': amzDate,
114
- ...(credentials.sessionToken === undefined ? {} : { 'X-Amz-Security-Token': credentials.sessionToken }),
131
+ 'X-Amz-Security-Token': credentials.sessionToken,
115
132
  'X-Amz-Content-Sha256': payloadHash,
116
133
  Authorization: `AWS4-HMAC-SHA256 Credential=${credentials.keyId}/${scope}, SignedHeaders=${signedHeaders}, Signature=${signature}`,
117
- },
134
+ }),
118
135
  };
119
136
  }
120
137
  /**
@@ -159,14 +176,16 @@ function signAzureSharedKey(input) {
159
176
  canonicalizedHeaders + canonicalizedResource,
160
177
  ].join('\n');
161
178
  const signature = createHmac('sha256', Buffer.from(credentials.secretKey, 'base64')).update(stringToSign, 'utf8').digest('base64');
179
+ // Same reasoning as the SigV4 twin: `canonicalizedHeaders` above is a fixed literal, so nothing
180
+ // dropped here was signed, and reserving the names stops a catalogue-declared spelling being
181
+ // combined with the engine's on the wire.
162
182
  return {
163
183
  ...request,
164
- headers: {
165
- ...request.headers,
184
+ headers: withEngineOwnedHeaders(request.headers, {
166
185
  'x-ms-date': date,
167
186
  'x-ms-version': '2021-12-02',
168
187
  Authorization: `SharedKey ${credentials.keyId}:${signature}`,
169
- },
188
+ }),
170
189
  };
171
190
  }
172
191
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"provider-request-signing.backend.js","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-request-signing.backend.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createHmac } from 'node:crypto';\n\nimport { ProviderRestSigningScheme, type ProviderRestRequestSigning } from '@wildo-ai/external-connectors-models';\n\nimport type { HttpApiTransportRequest } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\n\n/**\n * Per-request request signing — the credential a vendor COMPUTES rather than reads (#373).\n *\n * Signing is the LAST thing that happens to a request, and that ordering is not a preference: a\n * signature covers the bytes. The method, the canonical path, the sorted query, the payload hash and\n * a subset of the headers are all inputs, so anything that edits the request after signing — adding\n * a header, re-encoding a body, appending a query parameter — invalidates it, and the vendor answers\n * a 403 that names nothing.\n *\n * There is NO vendor branch here. The scheme is a contract field and this dispatches on it\n * exhaustively, the same discipline the rest of the provider lane keeps.\n *\n * ## Why the failures are named\n *\n * A signature that is wrong is rejected identically however it was wrong: AWS answers\n * `SignatureDoesNotMatch` whether the region was wrong, the service was wrong, the clock was skewed\n * or the secret was stale. Those are four different remedies and one message, so the conditions this\n * code CAN see — a missing credential, a clock far from the vendor's, an unsupported request shape —\n * are reported here with their own words rather than left to become an opaque vendor rejection.\n */\n\nexport class ProviderRequestSigningError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ProviderRequestSigningError';\n }\n}\n\n/** The two-or-three values a signing scheme needs, resolved from the environment by the caller. */\nexport interface ProviderSigningCredentials {\n readonly keyId: string;\n readonly secretKey: string;\n readonly sessionToken?: string;\n /** Overrides the declaration's region when a deployment names its own. */\n readonly region?: string;\n}\n\n/**\n * The clock tolerance every one of these schemes shares.\n *\n * AWS rejects a request whose `X-Amz-Date` is more than five minutes from its own clock, and Azure\n * uses fifteen. This is not enforced here — only the vendor knows its clock — but the number is what\n * makes a skew diagnosable: a host drifting past it fails EVERY signed request while every unsigned\n * one succeeds, which is a confusing symptom until someone names it.\n * spec-cite: AWS General Reference, \"Elements of an AWS API request signature\" — the five-minute\n * window is stated there; the Azure figure is from \"Authorize with Shared Key\".\n */\nconst SIGNATURE_CLOCK_TOLERANCE_MINUTES = 5;\n\nexport interface SignProviderRequestInput {\n readonly request: HttpApiTransportRequest;\n readonly signing: ProviderRestRequestSigning;\n readonly credentials: ProviderSigningCredentials;\n /** Injected so a test can pin a signature against a published vector. */\n readonly now?: Date;\n}\n\n/** Returns the request with its signature headers added. Never mutates the input. */\nexport function signProviderRequest(input: SignProviderRequestInput): HttpApiTransportRequest {\n const { signing } = input;\n switch (signing.scheme) {\n case ProviderRestSigningScheme.AWS_SIGV4:\n return signAwsSigV4(input);\n case ProviderRestSigningScheme.AZURE_SHARED_KEY:\n return signAzureSharedKey(input);\n default: {\n const exhaustive: never = signing.scheme;\n return exhaustive;\n }\n }\n}\n\n/**\n * AWS Signature Version 4.\n *\n * spec-cite: AWS General Reference, \"Create a signed AWS API request\" — the canonical request, the\n * string to sign, the derived key chain and the Authorization header are all defined there.\n *\n * The payload hash is computed over the body EXACTLY as it will be sent, and an empty body hashes to\n * the SHA-256 of the empty string rather than being omitted — a distinction that costs one line and,\n * got wrong, makes every GET fail with a message about a signature mismatch.\n */\nfunction signAwsSigV4(input: SignProviderRequestInput): HttpApiTransportRequest {\n const { request, signing, credentials } = input;\n const region = credentials.region ?? signing.region;\n const service = signing.service;\n if (region === undefined || service === undefined) {\n throw new ProviderRequestSigningError(\n 'AWS SigV4 needs both a region and a service: they scope the DERIVED KEY, so a wrong or absent value fails '\n + `authentication rather than routing. Declare them on the provider's requestSigning block (region: ${region ?? 'unset'}, service: ${service ?? 'unset'}).`,\n );\n }\n\n const url = new URL(request.url);\n const now = input.now ?? new Date();\n const amzDate = `${now.toISOString().replace(/[-:]/g, '').slice(0, 15)}Z`;\n const dateStamp = amzDate.slice(0, 8);\n\n const payload = bodyToPayload(request.body);\n const payloadHash = createHash('sha256').update(payload).digest('hex');\n\n // `host` is required in the signature and is not in the request's own headers — the transport adds\n // it. Signing what will actually be sent means adding it here, in the same order the canonical\n // form demands.\n const headersToSign: Record<string, string> = {\n host: url.host,\n 'x-amz-date': amzDate,\n ...(credentials.sessionToken === undefined ? {} : { 'x-amz-security-token': credentials.sessionToken }),\n ...(request.body === undefined ? {} : { 'content-type': request.headers['Content-Type'] ?? request.headers['content-type'] ?? 'application/json' }),\n };\n const signedHeaderNames = Object.keys(headersToSign).map((name) => name.toLowerCase()).sort();\n const canonicalHeaders = signedHeaderNames\n .map((name) => `${name}:${collapseWhitespace(headersToSign[name] ?? headersToSign[Object.keys(headersToSign).find((key) => key.toLowerCase() === name)!]!)}\\n`)\n .join('');\n const signedHeaders = signedHeaderNames.join(';');\n\n const canonicalRequest = [\n request.method,\n canonicalUri(url.pathname),\n canonicalQuery(url.searchParams),\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join('\\n');\n\n const scope = `${dateStamp}/${region}/${service}/aws4_request`;\n const stringToSign = [\n 'AWS4-HMAC-SHA256',\n amzDate,\n scope,\n createHash('sha256').update(canonicalRequest).digest('hex'),\n ].join('\\n');\n\n const signingKey = ['aws4_request'].reduce(\n (key, step) => hmac(key, step),\n [region, service].reduce((key, step) => hmac(key, step), hmac(`AWS4${credentials.secretKey}`, dateStamp)),\n );\n const signature = hmac(signingKey, stringToSign).toString('hex');\n\n return {\n ...request,\n headers: {\n ...request.headers,\n 'X-Amz-Date': amzDate,\n ...(credentials.sessionToken === undefined ? {} : { 'X-Amz-Security-Token': credentials.sessionToken }),\n 'X-Amz-Content-Sha256': payloadHash,\n Authorization: `AWS4-HMAC-SHA256 Credential=${credentials.keyId}/${scope}, SignedHeaders=${signedHeaders}, Signature=${signature}`,\n },\n };\n}\n\n/**\n * Azure Storage shared key.\n *\n * spec-cite: Azure Storage REST, \"Authorize with Shared Key\" — the canonicalized headers and\n * canonicalized resource, and the `SharedKey <account>:<signature>` header, are defined there.\n *\n * Deliberately the FULL scheme rather than SharedKeyLite: the two differ in which fields the string\n * to sign carries, and a service that expects one rejects the other with the same opaque message a\n * wrong key produces.\n */\nfunction signAzureSharedKey(input: SignProviderRequestInput): HttpApiTransportRequest {\n const { request, credentials } = input;\n const url = new URL(request.url);\n const now = input.now ?? new Date();\n const date = now.toUTCString();\n const payload = bodyToPayload(request.body);\n const contentLength = payload.length === 0 ? '' : String(payload.length);\n const contentType = request.headers['Content-Type'] ?? request.headers['content-type'] ?? '';\n\n const canonicalizedHeaders = `x-ms-date:${date}\\nx-ms-version:2021-12-02\\n`;\n const canonicalizedResource = [\n `/${credentials.keyId}${canonicalUri(url.pathname)}`,\n ...[...url.searchParams.keys()]\n .map((key) => key.toLowerCase())\n .sort()\n .map((key) => `${key}:${url.searchParams.getAll(key).sort().join(',')}`),\n ].join('\\n');\n\n const stringToSign = [\n request.method,\n '', // Content-Encoding\n '', // Content-Language\n contentLength,\n '', // Content-MD5\n contentType,\n '', // Date — empty because x-ms-date is used instead\n '', // If-Modified-Since\n '', // If-Match\n '', // If-None-Match\n '', // If-Unmodified-Since\n '', // Range\n canonicalizedHeaders + canonicalizedResource,\n ].join('\\n');\n\n const signature = createHmac('sha256', Buffer.from(credentials.secretKey, 'base64')).update(stringToSign, 'utf8').digest('base64');\n\n return {\n ...request,\n headers: {\n ...request.headers,\n 'x-ms-date': date,\n 'x-ms-version': '2021-12-02',\n Authorization: `SharedKey ${credentials.keyId}:${signature}`,\n },\n };\n}\n\n/**\n * The canonical URI: each path segment URI-encoded, and the encoding applied ONCE for most services.\n * S3 is the documented exception (it does not double-encode), and since every service this contract\n * reaches declares its own `service`, the single-encoding form is what is implemented — the double\n * encoding other services expect is a documented difference, not a bug, and belongs with the first\n * provider that needs it rather than guessed at now.\n */\nfunction canonicalUri(pathname: string): string {\n if (pathname === '') return '/';\n return pathname\n .split('/')\n .map((segment) => encodeURIComponent(decodeURIComponent(segment)).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`))\n .join('/');\n}\n\n/** Sorted by name then value, each component encoded, joined — the canonical query string. */\nfunction canonicalQuery(params: URLSearchParams): string {\n const pairs: Array<[string, string]> = [];\n params.forEach((value, key) => pairs.push([key, value]));\n return pairs\n .map(([key, value]) => [encodeRfc3986(key), encodeRfc3986(value)] as const)\n .sort((left, right) => (left[0] === right[0] ? left[1].localeCompare(right[1]) : left[0].localeCompare(right[0])))\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n}\n\nfunction encodeRfc3986(value: string): string {\n return encodeURIComponent(value).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);\n}\n\nfunction collapseWhitespace(value: string): string {\n return value.trim().replace(/\\s+/g, ' ');\n}\n\nfunction hmac(key: string | Buffer, data: string): Buffer {\n return createHmac('sha256', key).update(data, 'utf8').digest();\n}\n\n/** The bytes that will actually be sent, as a string — what the payload hash must cover. */\nfunction bodyToPayload(body: HttpApiTransportRequest['body']): string {\n if (body === undefined) return '';\n if (typeof body === 'string') return body;\n return JSON.stringify(body);\n}\n\n/** Exported for the diagnostic that names a clock skew rather than letting it read as a bad key. */\nexport const PROVIDER_SIGNATURE_CLOCK_TOLERANCE_MINUTES = SIGNATURE_CLOCK_TOLERANCE_MINUTES;\n"]}
1
+ {"version":3,"file":"provider-request-signing.backend.js","sourceRoot":"","sources":["../../../../src/external-providers/operations/provider-request-signing.backend.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createHmac } from 'node:crypto';\n\nimport { ProviderRestSigningScheme, type ProviderRestRequestSigning } from '@wildo-ai/external-connectors-models';\n\nimport type { HttpApiTransportRequest } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\nimport { withEngineOwnedHeaders } from '~wildo-backend-lib/security/outbound/outbound-request-headers.backend.utils';\n\n/**\n * Per-request request signing — the credential a vendor COMPUTES rather than reads (#373).\n *\n * Signing is the LAST thing that happens to a request, and that ordering is not a preference: a\n * signature covers the bytes. The method, the canonical path, the sorted query, the payload hash and\n * a subset of the headers are all inputs, so anything that edits the request after signing — adding\n * a header, re-encoding a body, appending a query parameter — invalidates it, and the vendor answers\n * a 403 that names nothing.\n *\n * There is NO vendor branch here. The scheme is a contract field and this dispatches on it\n * exhaustively, the same discipline the rest of the provider lane keeps.\n *\n * ## Why the failures are named\n *\n * A signature that is wrong is rejected identically however it was wrong: AWS answers\n * `SignatureDoesNotMatch` whether the region was wrong, the service was wrong, the clock was skewed\n * or the secret was stale. Those are four different remedies and one message, so the conditions this\n * code CAN see — a missing credential, a clock far from the vendor's, an unsupported request shape —\n * are reported here with their own words rather than left to become an opaque vendor rejection.\n */\n\nexport class ProviderRequestSigningError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ProviderRequestSigningError';\n }\n}\n\n/** The two-or-three values a signing scheme needs, resolved from the environment by the caller. */\nexport interface ProviderSigningCredentials {\n readonly keyId: string;\n readonly secretKey: string;\n readonly sessionToken?: string;\n /** Overrides the declaration's region when a deployment names its own. */\n readonly region?: string;\n}\n\n/**\n * The clock tolerance every one of these schemes shares.\n *\n * AWS rejects a request whose `X-Amz-Date` is more than five minutes from its own clock, and Azure\n * uses fifteen. This is not enforced here — only the vendor knows its clock — but the number is what\n * makes a skew diagnosable: a host drifting past it fails EVERY signed request while every unsigned\n * one succeeds, which is a confusing symptom until someone names it.\n * spec-cite: AWS General Reference, \"Elements of an AWS API request signature\" — the five-minute\n * window is stated there; the Azure figure is from \"Authorize with Shared Key\".\n */\nconst SIGNATURE_CLOCK_TOLERANCE_MINUTES = 5;\n\nexport interface SignProviderRequestInput {\n readonly request: HttpApiTransportRequest;\n readonly signing: ProviderRestRequestSigning;\n readonly credentials: ProviderSigningCredentials;\n /** Injected so a test can pin a signature against a published vector. */\n readonly now?: Date;\n}\n\n/** Returns the request with its signature headers added. Never mutates the input. */\nexport function signProviderRequest(input: SignProviderRequestInput): HttpApiTransportRequest {\n const { signing } = input;\n switch (signing.scheme) {\n case ProviderRestSigningScheme.AWS_SIGV4:\n return signAwsSigV4(input);\n case ProviderRestSigningScheme.AZURE_SHARED_KEY:\n return signAzureSharedKey(input);\n default: {\n const exhaustive: never = signing.scheme;\n return exhaustive;\n }\n }\n}\n\n/**\n * AWS Signature Version 4.\n *\n * spec-cite: AWS General Reference, \"Create a signed AWS API request\" — the canonical request, the\n * string to sign, the derived key chain and the Authorization header are all defined there.\n *\n * The payload hash is computed over the body EXACTLY as it will be sent, and an empty body hashes to\n * the SHA-256 of the empty string rather than being omitted — a distinction that costs one line and,\n * got wrong, makes every GET fail with a message about a signature mismatch.\n */\nfunction signAwsSigV4(input: SignProviderRequestInput): HttpApiTransportRequest {\n const { request, signing, credentials } = input;\n const region = credentials.region ?? signing.region;\n const service = signing.service;\n if (region === undefined || service === undefined) {\n throw new ProviderRequestSigningError(\n 'AWS SigV4 needs both a region and a service: they scope the DERIVED KEY, so a wrong or absent value fails '\n + `authentication rather than routing. Declare them on the provider's requestSigning block (region: ${region ?? 'unset'}, service: ${service ?? 'unset'}).`,\n );\n }\n\n const url = new URL(request.url);\n const now = input.now ?? new Date();\n const amzDate = `${now.toISOString().replace(/[-:]/g, '').slice(0, 15)}Z`;\n const dateStamp = amzDate.slice(0, 8);\n\n const payload = bodyToPayload(request.body);\n const payloadHash = createHash('sha256').update(payload).digest('hex');\n\n // `host` is required in the signature and is not in the request's own headers — the transport adds\n // it. Signing what will actually be sent means adding it here, in the same order the canonical\n // form demands.\n const headersToSign: Record<string, string> = {\n host: url.host,\n 'x-amz-date': amzDate,\n ...(credentials.sessionToken === undefined ? {} : { 'x-amz-security-token': credentials.sessionToken }),\n ...(request.body === undefined ? {} : { 'content-type': request.headers['Content-Type'] ?? request.headers['content-type'] ?? 'application/json' }),\n };\n const signedHeaderNames = Object.keys(headersToSign).map((name) => name.toLowerCase()).sort();\n const canonicalHeaders = signedHeaderNames\n .map((name) => `${name}:${collapseWhitespace(headersToSign[name] ?? headersToSign[Object.keys(headersToSign).find((key) => key.toLowerCase() === name)!]!)}\\n`)\n .join('');\n const signedHeaders = signedHeaderNames.join(';');\n\n const canonicalRequest = [\n request.method,\n canonicalUri(url.pathname),\n canonicalQuery(url.searchParams),\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join('\\n');\n\n const scope = `${dateStamp}/${region}/${service}/aws4_request`;\n const stringToSign = [\n 'AWS4-HMAC-SHA256',\n amzDate,\n scope,\n createHash('sha256').update(canonicalRequest).digest('hex'),\n ].join('\\n');\n\n const signingKey = ['aws4_request'].reduce(\n (key, step) => hmac(key, step),\n [region, service].reduce((key, step) => hmac(key, step), hmac(`AWS4${credentials.secretKey}`, dateStamp)),\n );\n const signature = hmac(signingKey, stringToSign).toString('hex');\n\n /*\n * The signature headers are the engine's, and a catalogue-declared spelling cannot dilute them.\n *\n * `request.headers` carries the provider catalogue's `defaultHeaders`, so a catalogue naming\n * `authorization` or `x-amz-date` against the canonical spellings written here would produce two\n * object keys per header — combined by `fetch` into one comma-joined value, which AWS rejects as\n * a malformed signature rather than as the header collision it is.\n *\n * Filtering is safe against the signature specifically because `signedHeaders` is computed from\n * the CLOSED `headersToSign` set above (host, x-amz-date, x-amz-security-token, content-type) and\n * never from `request.headers` at large — so no header being dropped here was ever signed.\n * `content-type` is not engine-owned at this merge and is therefore left exactly as the caller\n * set it, which is what keeps it agreeing with the value that WAS signed.\n *\n * The session token is reserved even when the engine has none: absent credentials must not be\n * satisfiable by a value a provider catalogue supplied.\n */\n return {\n ...request,\n headers: withEngineOwnedHeaders(request.headers, {\n 'X-Amz-Date': amzDate,\n 'X-Amz-Security-Token': credentials.sessionToken,\n 'X-Amz-Content-Sha256': payloadHash,\n Authorization: `AWS4-HMAC-SHA256 Credential=${credentials.keyId}/${scope}, SignedHeaders=${signedHeaders}, Signature=${signature}`,\n }),\n };\n}\n\n/**\n * Azure Storage shared key.\n *\n * spec-cite: Azure Storage REST, \"Authorize with Shared Key\" — the canonicalized headers and\n * canonicalized resource, and the `SharedKey <account>:<signature>` header, are defined there.\n *\n * Deliberately the FULL scheme rather than SharedKeyLite: the two differ in which fields the string\n * to sign carries, and a service that expects one rejects the other with the same opaque message a\n * wrong key produces.\n */\nfunction signAzureSharedKey(input: SignProviderRequestInput): HttpApiTransportRequest {\n const { request, credentials } = input;\n const url = new URL(request.url);\n const now = input.now ?? new Date();\n const date = now.toUTCString();\n const payload = bodyToPayload(request.body);\n const contentLength = payload.length === 0 ? '' : String(payload.length);\n const contentType = request.headers['Content-Type'] ?? request.headers['content-type'] ?? '';\n\n const canonicalizedHeaders = `x-ms-date:${date}\\nx-ms-version:2021-12-02\\n`;\n const canonicalizedResource = [\n `/${credentials.keyId}${canonicalUri(url.pathname)}`,\n ...[...url.searchParams.keys()]\n .map((key) => key.toLowerCase())\n .sort()\n .map((key) => `${key}:${url.searchParams.getAll(key).sort().join(',')}`),\n ].join('\\n');\n\n const stringToSign = [\n request.method,\n '', // Content-Encoding\n '', // Content-Language\n contentLength,\n '', // Content-MD5\n contentType,\n '', // Date — empty because x-ms-date is used instead\n '', // If-Modified-Since\n '', // If-Match\n '', // If-None-Match\n '', // If-Unmodified-Since\n '', // Range\n canonicalizedHeaders + canonicalizedResource,\n ].join('\\n');\n\n const signature = createHmac('sha256', Buffer.from(credentials.secretKey, 'base64')).update(stringToSign, 'utf8').digest('base64');\n\n // Same reasoning as the SigV4 twin: `canonicalizedHeaders` above is a fixed literal, so nothing\n // dropped here was signed, and reserving the names stops a catalogue-declared spelling being\n // combined with the engine's on the wire.\n return {\n ...request,\n headers: withEngineOwnedHeaders(request.headers, {\n 'x-ms-date': date,\n 'x-ms-version': '2021-12-02',\n Authorization: `SharedKey ${credentials.keyId}:${signature}`,\n }),\n };\n}\n\n/**\n * The canonical URI: each path segment URI-encoded, and the encoding applied ONCE for most services.\n * S3 is the documented exception (it does not double-encode), and since every service this contract\n * reaches declares its own `service`, the single-encoding form is what is implemented — the double\n * encoding other services expect is a documented difference, not a bug, and belongs with the first\n * provider that needs it rather than guessed at now.\n */\nfunction canonicalUri(pathname: string): string {\n if (pathname === '') return '/';\n return pathname\n .split('/')\n .map((segment) => encodeURIComponent(decodeURIComponent(segment)).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`))\n .join('/');\n}\n\n/** Sorted by name then value, each component encoded, joined — the canonical query string. */\nfunction canonicalQuery(params: URLSearchParams): string {\n const pairs: Array<[string, string]> = [];\n params.forEach((value, key) => pairs.push([key, value]));\n return pairs\n .map(([key, value]) => [encodeRfc3986(key), encodeRfc3986(value)] as const)\n .sort((left, right) => (left[0] === right[0] ? left[1].localeCompare(right[1]) : left[0].localeCompare(right[0])))\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n}\n\nfunction encodeRfc3986(value: string): string {\n return encodeURIComponent(value).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);\n}\n\nfunction collapseWhitespace(value: string): string {\n return value.trim().replace(/\\s+/g, ' ');\n}\n\nfunction hmac(key: string | Buffer, data: string): Buffer {\n return createHmac('sha256', key).update(data, 'utf8').digest();\n}\n\n/** The bytes that will actually be sent, as a string — what the payload hash must cover. */\nfunction bodyToPayload(body: HttpApiTransportRequest['body']): string {\n if (body === undefined) return '';\n if (typeof body === 'string') return body;\n return JSON.stringify(body);\n}\n\n/** Exported for the diagnostic that names a clock skew rather than letting it read as a bad key. */\nexport const PROVIDER_SIGNATURE_CLOCK_TOLERANCE_MINUTES = SIGNATURE_CLOCK_TOLERANCE_MINUTES;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-rest-call-client.backend.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-rest-call-client.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAC;AAC9F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AAC5G,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,2FAA2F,CAAC;AAGnG,OAAO,KAAK,EACV,qBAAqB,EACrB,6BAA6B,EAC9B,MAAM,iGAAiG,CAAC;AAEzG;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,EAAE,yBAGlD,CAAC;AAEF,qBAAa,sBAAsB;IAI/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAG5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,yBAAyB,EACpC,sBAAsB,EAAE,6BAA6B,EACrD,SAAS,GAAE,gBAAsC;IAOpE;;;;;;;OAOG;IACI,aAAa,CAClB,MAAM,EAAE,iCAAiC,EACzC,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GACtC,OAAO,CAAC,qBAAqB,CAAC;IAIjC;;;;;;;OAOG;IACU,OAAO,CAClB,OAAO,EAAE,uBAAuB,EAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,EACtD,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,wBAAwB,CAAC;CAYrC"}
1
+ {"version":3,"file":"provider-rest-call-client.backend.d.ts","sourceRoot":"","sources":["../../../../src/external-providers/operations/provider-rest-call-client.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAC;AAC9F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AAC5G,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,2FAA2F,CAAC;AAGnG,OAAO,KAAK,EACV,qBAAqB,EACrB,6BAA6B,EAC9B,MAAM,iGAAiG,CAAC;AAEzG;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,EAAE,yBAGlD,CAAC;AAEF,qBAAa,sBAAsB;IAI/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAG5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,yBAAyB,EACpC,sBAAsB,EAAE,6BAA6B,EACrD,SAAS,GAAE,gBAAsC;IAOpE;;;;;;;OAOG;IACI,aAAa,CAClB,MAAM,EAAE,iCAAiC,EACzC,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GACtC,OAAO,CAAC,qBAAqB,CAAC;IAIjC;;;;;;;OAOG;IACU,OAAO,CAClB,OAAO,EAAE,uBAAuB,EAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,EACtD,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,wBAAwB,CAAC;CAYrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-rest-call-client.backend.js","sourceRoot":"","sources":["../../../../../src/external-providers/operations/provider-rest-call-client.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAI5B,MAAM,2FAA2F,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6FAA6F,CAAC;AAClI,OAAO,EAAE,mBAAmB,EAAE,MAAM,mFAAmF,CAAC;AAMxH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAA8B;IAC7E,SAAS,EAAE,MAAM;IACjB,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;CAC1C,CAAC;AAEF,MAAM,OAAO,sBAAsB;IAId;IACA;IACA;IACA;IANF,UAAU,CAAoB;IAE/C,YACmB,WAAmB,EACnB,SAAoC,EACpC,sBAAqD,EACrD,YAA8B,mBAAmB;QAHjD,gBAAW,GAAX,WAAW,CAAQ;QACnB,cAAS,GAAT,SAAS,CAA2B;QACpC,2BAAsB,GAAtB,sBAAsB,CAA+B;QACrD,cAAS,GAAT,SAAS,CAAwC;QAElE,8FAA8F;QAC9F,2FAA2F;QAC3F,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;;;OAOG;IACI,aAAa,CAClB,MAAyC,EACzC,gBAAuC;QAEvC,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,OAAO,CAClB,OAAgC,EAChC,iBAAsD,EACtD,MAA8B;QAE9B,MAAM,SAAS,GAAG,iBAAiB;YACjC,CAAC,CAAC;gBACA,SAAS,EAAE,iBAAiB,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS;gBAClE,KAAK,EAAE,iBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;aACvD;YACD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,EAAE,cAAc;YACrC,CAAC,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YAC9H,CAAC,CAAC,OAAO,CAAC;QACZ,OAAO,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3F,CAAC;CACF","sourcesContent":["/**\n * `ProviderRestCallClient` — the BINDING-FREE wire client for provider operations (S3a, #331).\n *\n * `HttpApiReadClient` is constructed per resource BINDING and reads `binding.remoteCallSemantics`,\n * `binding.providerRef` and `binding.entityRef`. A provider operation has none of those: it is\n * addressed by `(providerRef, operationId)` and belongs to no resource. So this is a sibling, not\n * a subclass and not a widening of that class — widening it would have meant giving every ETL\n * consumer a binding-shaped hole to work around.\n *\n * What is NOT duplicated is everything that matters: the transport, the rate budget and the\n * provider-access resolver are the SAME modules the read client uses. This class owns only the\n * three facts that differ — whose semantics apply, which rate window is drawn from, and that\n * there is no dialect framing to do because the operation declared its own request.\n *\n * The single-authority drift pin (`http-api-read-client.single-authority.test.ts`) knows about\n * this second invoker BY NAME; adding a third reddens it.\n */\n\nimport type { ExternalProvider_ConnectionTarget } from '@wildo-ai/external-connectors-models';\nimport type { ProviderRestCallSemantics } from '@wildo-ai/external-connectors-models';\n\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport {\n HttpApiRateBudget,\n executeHttpApiTransportCall,\n type HttpApiFetchLike,\n type HttpApiTransportRequest,\n type HttpApiTransportResponse,\n} from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\nimport { defaultHttpApiFetch } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-read-client.backend';\nimport { signProviderRequest } from '~wildo-backend-lib/external-providers/operations/provider-request-signing.backend';\nimport type {\n HttpApiProviderAccess,\n HttpApiProviderAccessResolver,\n} from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-provider-access.backend';\n\n/**\n * The semantics a provider gets when it declares none. Chosen to be unremarkable rather than\n * clever: a 30s ceiling is longer than any interactive request should take and short enough that\n * a hung vendor does not hold a connection for a request lifetime, and two attempts on a\n * retry-safe call absorb a single transient without turning one user action into a burst.\n */\nexport const DEFAULT_PROVIDER_REST_CALL_SEMANTICS: ProviderRestCallSemantics = {\n timeoutMs: 30_000,\n retry: { maxAttempts: 2, backoffMs: 250 },\n};\n\nexport class ProviderRestCallClient {\n private readonly rateBudget: HttpApiRateBudget;\n\n constructor(\n private readonly providerRef: string,\n private readonly semantics: ProviderRestCallSemantics,\n private readonly providerAccessResolver: HttpApiProviderAccessResolver,\n private readonly fetchImpl: HttpApiFetchLike = defaultHttpApiFetch,\n ) {\n // One window per client instance, so the executor's per-provider cache is also what makes the\n // rate ceiling mean anything: a client rebuilt per call would reset the window every time.\n this.rateBudget = new HttpApiRateBudget(semantics.maxRequestsPerMinute);\n }\n\n /**\n * WHOSE ACCOUNT this call spends, through the same port the ETL lane uses.\n *\n * The target is an argument rather than something read from the execution context, and that is\n * the whole point: one execution may legitimately spend several tenants' accounts — a single user\n * action pushing to every organization that user belongs to — so an ambient answer could not vary\n * where it has to. The context still decides whether the execution MAY act for the named owner.\n */\n public resolveAccess(\n target: ExternalProvider_ConnectionTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<HttpApiProviderAccess> {\n return this.providerAccessResolver.resolveAccess(this.providerRef, target, executionContext);\n }\n\n /**\n * One call, under this provider's semantics unless the operation narrowed them.\n *\n * SIGNING HAPPENS HERE, and it is the last thing done to the request before it leaves. A signature\n * covers the bytes — method, canonical path, sorted query, payload hash, a subset of headers — so\n * anything that edits the request afterwards invalidates it and the vendor answers a 403 that\n * names nothing. Signing at the send site is the only placement where nothing can follow.\n */\n public async execute(\n request: HttpApiTransportRequest,\n semanticsOverride?: Partial<ProviderRestCallSemantics>,\n access?: HttpApiProviderAccess,\n ): Promise<HttpApiTransportResponse> {\n const semantics = semanticsOverride\n ? {\n timeoutMs: semanticsOverride.timeoutMs ?? this.semantics.timeoutMs,\n retry: semanticsOverride.retry ?? this.semantics.retry,\n }\n : this.semantics;\n const outbound = access?.requestSigning\n ? signProviderRequest({ request, signing: access.requestSigning.declaration, credentials: access.requestSigning.credentials })\n : request;\n return executeHttpApiTransportCall(outbound, semantics, this.fetchImpl, this.rateBudget);\n }\n}\n"]}
1
+ {"version":3,"file":"provider-rest-call-client.backend.js","sourceRoot":"","sources":["../../../../src/external-providers/operations/provider-rest-call-client.backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAI5B,MAAM,2FAA2F,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6FAA6F,CAAC;AAClI,OAAO,EAAE,mBAAmB,EAAE,MAAM,mFAAmF,CAAC;AAMxH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAA8B;IAC7E,SAAS,EAAE,MAAM;IACjB,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;CAC1C,CAAC;AAEF,MAAM,OAAO,sBAAsB;IAId;IACA;IACA;IACA;IANF,UAAU,CAAoB;IAE/C,YACmB,WAAmB,EACnB,SAAoC,EACpC,sBAAqD,EACrD,YAA8B,mBAAmB;QAHjD,gBAAW,GAAX,WAAW,CAAQ;QACnB,cAAS,GAAT,SAAS,CAA2B;QACpC,2BAAsB,GAAtB,sBAAsB,CAA+B;QACrD,cAAS,GAAT,SAAS,CAAwC;QAElE,8FAA8F;QAC9F,2FAA2F;QAC3F,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;;;OAOG;IACI,aAAa,CAClB,MAAyC,EACzC,gBAAuC;QAEvC,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,OAAO,CAClB,OAAgC,EAChC,iBAAsD,EACtD,MAA8B;QAE9B,MAAM,SAAS,GAAG,iBAAiB;YACjC,CAAC,CAAC;gBACA,SAAS,EAAE,iBAAiB,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS;gBAClE,KAAK,EAAE,iBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;aACvD;YACD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,EAAE,cAAc;YACrC,CAAC,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YAC9H,CAAC,CAAC,OAAO,CAAC;QACZ,OAAO,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3F,CAAC;CACF","sourcesContent":["/**\n * `ProviderRestCallClient` — the BINDING-FREE wire client for provider operations (S3a, #331).\n *\n * `HttpApiReadClient` is constructed per resource BINDING and reads `binding.remoteCallSemantics`,\n * `binding.providerRef` and `binding.entityRef`. A provider operation has none of those: it is\n * addressed by `(providerRef, operationId)` and belongs to no resource. So this is a sibling, not\n * a subclass and not a widening of that class — widening it would have meant giving every ETL\n * consumer a binding-shaped hole to work around.\n *\n * What is NOT duplicated is everything that matters: the transport, the rate budget and the\n * provider-access resolver are the SAME modules the read client uses. This class owns only the\n * three facts that differ — whose semantics apply, which rate window is drawn from, and that\n * there is no dialect framing to do because the operation declared its own request.\n *\n * The single-authority drift pin (`http-api-read-client.single-authority.test.ts`) knows about\n * this second invoker BY NAME; adding a third reddens it.\n */\n\nimport type { ExternalProvider_ConnectionTarget } from '@wildo-ai/external-connectors-models';\nimport type { ProviderRestCallSemantics } from '@wildo-ai/external-connectors-models';\n\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport {\n HttpApiRateBudget,\n executeHttpApiTransportCall,\n type HttpApiFetchLike,\n type HttpApiTransportRequest,\n type HttpApiTransportResponse,\n} from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-transport.backend';\nimport { defaultHttpApiFetch } from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-read-client.backend';\nimport { signProviderRequest } from '~wildo-backend-lib/external-providers/operations/provider-request-signing.backend';\nimport type {\n HttpApiProviderAccess,\n HttpApiProviderAccessResolver,\n} from '~wildo-backend-lib/base-classes/services/repositories/http-api/http-api-provider-access.backend';\n\n/**\n * The semantics a provider gets when it declares none. Chosen to be unremarkable rather than\n * clever: a 30s ceiling is longer than any interactive request should take and short enough that\n * a hung vendor does not hold a connection for a request lifetime, and two attempts on a\n * retry-safe call absorb a single transient without turning one user action into a burst.\n */\nexport const DEFAULT_PROVIDER_REST_CALL_SEMANTICS: ProviderRestCallSemantics = {\n timeoutMs: 30_000,\n retry: { maxAttempts: 2, backoffMs: 250 },\n};\n\nexport class ProviderRestCallClient {\n private readonly rateBudget: HttpApiRateBudget;\n\n constructor(\n private readonly providerRef: string,\n private readonly semantics: ProviderRestCallSemantics,\n private readonly providerAccessResolver: HttpApiProviderAccessResolver,\n private readonly fetchImpl: HttpApiFetchLike = defaultHttpApiFetch,\n ) {\n // One window per client instance, so the executor's per-provider cache is also what makes the\n // rate ceiling mean anything: a client rebuilt per call would reset the window every time.\n this.rateBudget = new HttpApiRateBudget(semantics.maxRequestsPerMinute);\n }\n\n /**\n * WHOSE ACCOUNT this call spends, through the same port the ETL lane uses.\n *\n * The target is an argument rather than something read from the execution context, and that is\n * the whole point: one execution may legitimately spend several tenants' accounts — a single user\n * action pushing to every organization that user belongs to — so an ambient answer could not vary\n * where it has to. The context still decides whether the execution MAY act for the named owner.\n */\n public resolveAccess(\n target: ExternalProvider_ConnectionTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<HttpApiProviderAccess> {\n return this.providerAccessResolver.resolveAccess(this.providerRef, target, executionContext);\n }\n\n /**\n * One call, under this provider's semantics unless the operation narrowed them.\n *\n * SIGNING HAPPENS HERE, and it is the last thing done to the request before it leaves. A signature\n * covers the bytes — method, canonical path, sorted query, payload hash, a subset of headers — so\n * anything that edits the request afterwards invalidates it and the vendor answers a 403 that\n * names nothing. Signing at the send site is the only placement where nothing can follow.\n */\n public async execute(\n request: HttpApiTransportRequest,\n semanticsOverride?: Partial<ProviderRestCallSemantics>,\n access?: HttpApiProviderAccess,\n ): Promise<HttpApiTransportResponse> {\n const semantics = semanticsOverride\n ? {\n timeoutMs: semanticsOverride.timeoutMs ?? this.semantics.timeoutMs,\n retry: semanticsOverride.retry ?? this.semantics.retry,\n }\n : this.semantics;\n const outbound = access?.requestSigning\n ? signProviderRequest({ request, signing: access.requestSigning.declaration, credentials: access.requestSigning.credentials })\n : request;\n return executeHttpApiTransportCall(outbound, semantics, this.fetchImpl, this.rateBudget);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-external-providers-registry.service.d.ts","sourceRoot":"","sources":["../../../../../../src/external-providers/services/__tests__/mock-external-providers-registry.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACL,sCAAsC,EACtC,wBAAwB,EACxB,mBAAmB,EAEpB,MAAM,sCAAsC,CAAC;AAG9C,qBACa,2CAA2C;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAEnE,0BAA0B;;;;OAUvB;IAEH,2BAA2B,2EAExB;IAEH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAIvE,KAAK,IAAI,IAAI;CAKd"}
1
+ {"version":3,"file":"mock-external-providers-registry.service.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/services/__tests__/mock-external-providers-registry.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACL,sCAAsC,EACtC,wBAAwB,EACxB,mBAAmB,EAEpB,MAAM,sCAAsC,CAAC;AAG9C,qBACa,2CAA2C;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAEnE,0BAA0B;;;;OAUvB;IAEH,2BAA2B,2EAExB;IAEH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAIvE,KAAK,IAAI,IAAI;CAKd"}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-external-providers-registry.service.js","sourceRoot":"","sources":["../../../../../../src/external-providers/services/__tests__/mock-external-providers-registry.service.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;GAMG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,sCAAsC,EACtC,wBAAwB,EAExB,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGrB,IAAM,2CAA2C,GAAjD,MAAM,2CAA2C;IACrC,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEnE,0BAA0B,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,WAAmB,EAAE,IAA4C,EAAE,EAAE;QACvG,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,IAAI,KAAK,sCAAsC,CAAC,YAAY,EAAE,CAAC;YAC5E,OAAO;gBACL,IAAI,EAAE,2BAA2B,CAAC,GAAG;gBACrC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;gBACtD,UAAU,EAAE,CAAC,wBAAwB,CAAC,aAAa,CAAC;aACrD,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,2BAA2B,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,WAAmB,EAAE,EAAE,CAAC,CAC3D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAC/E,CAAC,CAAC;IAEH,cAAc,CAAC,WAAmB,EAAE,OAA4B;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,CAAC;IAC/C,CAAC;CACF,CAAA;AA5BY,2CAA2C;IADvD,UAAU,EAAE;GACA,2CAA2C,CA4BvD","sourcesContent":["/**\n * Vitest-oriented mock external providers registry for backend tests.\n *\n * **Naming**: `mock-*.service.ts` — canonical mock module, not a test suite.\n * Plain `.ts` keeps it barrel-compilable, and Vitest also excludes these files\n * explicitly as a defensive guard.\n */\nimport 'reflect-metadata';\nimport { injectable } from 'inversify';\nimport {\n ExternalProvider_ExchangeProtocol_Kind,\n LLMProvider_OperationKey,\n LLMProvider_Profile,\n ProviderProtocolRuntimeKind,\n} from '@wildo-ai/external-connectors-models';\nimport { vi } from 'vitest';\n\n@injectable()\nexport class MockExternalProvidersRegistryBackendService {\n private readonly profiles = new Map<string, LLMProvider_Profile>();\n\n getProviderRuntimeContract = vi.fn((providerRef: string, kind: ExternalProvider_ExchangeProtocol_Kind) => {\n const profile = this.profiles.get(providerRef);\n if (profile && kind === ExternalProvider_ExchangeProtocol_Kind.LLM_PROVIDER) {\n return {\n kind: ProviderProtocolRuntimeKind.LLM,\n promptFormatPreference: profile.promptFormatPreference,\n operations: [LLMProvider_OperationKey.GENERATE_TEXT],\n };\n }\n return undefined;\n });\n\n getLLMSemanticOperationKeys = vi.fn((providerRef: string) => (\n this.profiles.has(providerRef) ? [LLMProvider_OperationKey.GENERATE_TEXT] : []\n ));\n\n setMockProfile(providerRef: string, profile: LLMProvider_Profile): void {\n this.profiles.set(providerRef, profile);\n }\n\n reset(): void {\n this.profiles.clear();\n this.getProviderRuntimeContract.mockClear();\n this.getLLMSemanticOperationKeys.mockClear();\n }\n}\n"]}
1
+ {"version":3,"file":"mock-external-providers-registry.service.js","sourceRoot":"","sources":["../../../../../src/external-providers/services/__tests__/mock-external-providers-registry.service.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;GAMG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,sCAAsC,EACtC,wBAAwB,EAExB,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGrB,IAAM,2CAA2C,GAAjD,MAAM,2CAA2C;IACrC,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEnE,0BAA0B,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,WAAmB,EAAE,IAA4C,EAAE,EAAE;QACvG,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,IAAI,KAAK,sCAAsC,CAAC,YAAY,EAAE,CAAC;YAC5E,OAAO;gBACL,IAAI,EAAE,2BAA2B,CAAC,GAAG;gBACrC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;gBACtD,UAAU,EAAE,CAAC,wBAAwB,CAAC,aAAa,CAAC;aACrD,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,2BAA2B,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,WAAmB,EAAE,EAAE,CAAC,CAC3D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAC/E,CAAC,CAAC;IAEH,cAAc,CAAC,WAAmB,EAAE,OAA4B;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,CAAC;IAC/C,CAAC;CACF,CAAA;AA5BY,2CAA2C;IADvD,UAAU,EAAE;GACA,2CAA2C,CA4BvD","sourcesContent":["/**\n * Vitest-oriented mock external providers registry for backend tests.\n *\n * **Naming**: `mock-*.service.ts` — canonical mock module, not a test suite.\n * Plain `.ts` keeps it barrel-compilable, and Vitest also excludes these files\n * explicitly as a defensive guard.\n */\nimport 'reflect-metadata';\nimport { injectable } from 'inversify';\nimport {\n ExternalProvider_ExchangeProtocol_Kind,\n LLMProvider_OperationKey,\n LLMProvider_Profile,\n ProviderProtocolRuntimeKind,\n} from '@wildo-ai/external-connectors-models';\nimport { vi } from 'vitest';\n\n@injectable()\nexport class MockExternalProvidersRegistryBackendService {\n private readonly profiles = new Map<string, LLMProvider_Profile>();\n\n getProviderRuntimeContract = vi.fn((providerRef: string, kind: ExternalProvider_ExchangeProtocol_Kind) => {\n const profile = this.profiles.get(providerRef);\n if (profile && kind === ExternalProvider_ExchangeProtocol_Kind.LLM_PROVIDER) {\n return {\n kind: ProviderProtocolRuntimeKind.LLM,\n promptFormatPreference: profile.promptFormatPreference,\n operations: [LLMProvider_OperationKey.GENERATE_TEXT],\n };\n }\n return undefined;\n });\n\n getLLMSemanticOperationKeys = vi.fn((providerRef: string) => (\n this.profiles.has(providerRef) ? [LLMProvider_OperationKey.GENERATE_TEXT] : []\n ));\n\n setMockProfile(providerRef: string, profile: LLMProvider_Profile): void {\n this.profiles.set(providerRef, profile);\n }\n\n reset(): void {\n this.profiles.clear();\n this.getProviderRuntimeContract.mockClear();\n this.getLLMSemanticOperationKeys.mockClear();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"backend-provider-loader.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/external-providers/services/backend-provider-loader.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAKL,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EAErC,MAAM,uDAAuD,CAAC;AAE/D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;CAC7E;AAED,+JAA+J;AAC/J,qDAAqD;AACrD,MAAM,WAAW,gCAAgC;IAC/C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,wBAAwB,CAAC;IACpD;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,+BAA+B,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,yBAAyB;IACxC,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAmFD;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CA4DpC"}
1
+ {"version":3,"file":"backend-provider-loader.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/external-providers/services/backend-provider-loader.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAKL,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EAErC,MAAM,uDAAuD,CAAC;AAE/D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;CAC7E;AAED,+JAA+J;AAC/J,qDAAqD;AACrD,MAAM,WAAW,gCAAgC;IAC/C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,wBAAwB,CAAC;IACpD;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,+BAA+B,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,yBAAyB;IACxC,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAmFD;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CA4DpC"}