@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
@@ -170,6 +170,15 @@ export function createStsStorageCredentialResolver(resolveApplicationId) {
170
170
  return parseStsCredentialPayload(payload);
171
171
  };
172
172
  }
173
+ /**
174
+ * Hard deadline for one STS credential fetch from apps-manager.
175
+ *
176
+ * This sits in front of every FIRST storage operation after a renewal, so the cost of an unbounded
177
+ * wait is not a slow credential — it is an upload that stalls instead of failing, on a fail-closed
178
+ * path with no fallback. 15s: the payload is a small JSON credential from a service on our own
179
+ * network, and the operation behind it is a user waiting for a file to move.
180
+ */
181
+ const STS_CREDENTIAL_REQUEST_TIMEOUT_MS = 15_000;
173
182
  /**
174
183
  * Perform the credential fetch and unwrap the response envelope.
175
184
  *
@@ -197,9 +206,7 @@ export async function requestStsCredentialPayload(input) {
197
206
  const response = await fetch(input.url, {
198
207
  method: 'GET',
199
208
  headers: input.headers,
200
- // Bounded: this sits in front of every first storage operation after a
201
- // renewal, so an unbounded wait would stall uploads rather than fail them.
202
- signal: AbortSignal.timeout(15_000),
209
+ signal: AbortSignal.timeout(STS_CREDENTIAL_REQUEST_TIMEOUT_MS),
203
210
  });
204
211
  if (!response.ok) {
205
212
  // `fetch` resolves on non-2xx rather than rejecting, so this has to be an
@@ -1 +1 @@
1
- {"version":3,"file":"storage-sts-credential-resolver.backend.utils.js","sourceRoot":"","sources":["../../../../../src/files/storage/storage-sts-credential-resolver.backend.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { WildoHeaderKeys } from '@wildo-ai/saas-models';\nimport { PlatformApplicationType } from '@wildo-ai/platform-core-shared';\nimport { API_ROUTES_BACKEND_DEFINITIONS } from '~wildo-backend-lib/requests/models/api-routes.backend.defintions';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport type { ResolvedStorageCredentials, StorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\n\n/**\n * Resolver that obtains SHORT-LIVED, prefix-confined object-storage credentials\n * from apps-manager instead of reading a long-lived key out of process env.\n *\n * ## Why this replaces the env read outright\n *\n * `STORAGE_ACCESS_KEY` / `STORAGE_SECRET_KEY` are the object store's ROOT\n * credential, handed to every application, minion and worker through\n * `{appSlug}-secret`. See\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n *\n * There is deliberately **no fallback** to those env vars. A fallback beside this\n * path is precisely how the root credential would quietly remain in use: the\n * fallback would fire on any transient apps-manager hiccup, succeed, and leave no\n * signal that the confinement had been bypassed. Failing closed is the whole\n * point — an application with no storage credential cannot leak one.\n *\n * ## Identity\n *\n * The request carries the caller's own bootstrap identity — the platform secret\n * plus its `APPLICATION_ID` — and apps-manager confines the returned credential to\n * the application that identity authenticates as. There is no parameter by which a\n * caller could ask for ANOTHER application's credential, and none should ever be\n * added.\n *\n * (Corrected 2026-08-12: this previously said the request \"names no application\",\n * which is not what the code does — `X-Application-Id` is sent below. The\n * guarantee is real but it comes from the header being the caller's OWN id and\n * being verified against the presented secret, not from the id being absent. A\n * description that does not match the request is the kind of premise a later\n * reader reasons from without re-checking.)\n *\n * ## This route is on the APPLICATION plane only\n *\n * It resolves a `wildoApplicationId` through the `apps-to-manager` controller,\n * which authenticates against `WildoApplication` records. Platform services carry\n * their own identity on a SEPARATE plane (`platform-services-to-manager`,\n * `Platform_Application_Config` / `_Secrets`, keyed by `platformApplicationId`) and\n * therefore cannot obtain a session here — which is why every platform service\n * currently reports storage UNCONFIGURED. See F-G in\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n */\n/**\n * Render an STS-fetch failure into something a reader can act on.\n *\n * Deliberately assembles from several fields rather than trusting any single\n * one. An HTTP client failure can arrive as a transport error (`code`\n * `ECONNREFUSED`/`ETIMEDOUT`, no response), a non-2xx (`response.status` plus a\n * body explaining why), or a plain programming error — and each of those leaves\n * a DIFFERENT field populated, with the others absent. Reading only `message`\n * is what produced an empty diagnostic here once already.\n *\n * Falls back to the error's constructor name when everything else is empty, so\n * the output is never a bare string: \"something threw, and here is its type\" is\n * a far better starting point than silence.\n *\n * Never includes request headers — they carry the platform secret.\n */\nfunction describeStsFetchFailure(error: unknown): string {\n const parts: string[] = [];\n\n const message = describeCaughtError(error);\n // `\"[object Object]\"` is what `String(x)` yields for a plain object, and it is\n // NON-EMPTY while carrying exactly as much information as empty. Accepting it\n // would satisfy a \"message is present\" check and still tell the reader nothing,\n // so it is treated as absent and the type-name fallback below takes over.\n if (message && message !== '[object Object]') parts.push(message);\n\n const transportCode = (error as { code?: unknown })?.code;\n if (typeof transportCode === 'string' && transportCode) parts.push(`code=${transportCode}`);\n\n // `fetch` reports transport faults through `cause` (e.g. `ECONNREFUSED` on a\n // refused connection) while `message` stays a generic \"fetch failed\" — so\n // without this, the single most common real failure renders as no information\n // at all. `AbortError` from the timeout arrives as `name` instead.\n const causeMessage = (error as { cause?: { message?: unknown; code?: unknown } })?.cause;\n if (causeMessage) {\n const code = typeof causeMessage.code === 'string' ? causeMessage.code : undefined;\n const msg = typeof causeMessage.message === 'string' ? causeMessage.message : undefined;\n if (code) parts.push(`cause=${code}`);\n else if (msg) parts.push(`cause=${msg}`);\n }\n\n const name = (error as { name?: unknown })?.name;\n if (typeof name === 'string' && (name === 'AbortError' || name === 'TimeoutError')) {\n parts.push(`aborted=${name}`);\n }\n\n // Status/body arrive already formatted from the `!response.ok` branch above,\n // which reads them off the Response rather than off the error — `fetch` puts\n // nothing HTTP-shaped on the thrown value.\n\n if (parts.length === 0) {\n const typeName = (error as { constructor?: { name?: string } })?.constructor?.name;\n return typeName ? `unrenderable ${typeName}` : 'unrenderable error with no message, code, status or body';\n }\n\n return parts.join(' | ');\n}\n\n/**\n * @param resolveApplicationId - the caller's own application identity, taken from\n * RESOLVED CONFIGURATION rather than read from `process.env` here.\n *\n * The two are the same value for an application — the loader seeds\n * `config.applicationId` from `APPLICATION_ID` — but they are NOT the same for a\n * platform service, which resolves its identity locally and has no\n * `APPLICATION_ID` in env at all. Reading env here while the object-key builder\n * read configuration was a genuine dual-source split: the predicate that decides\n * whether storage is usable and the value the operation addresses could disagree,\n * and for every platform service they did. Passing it in makes the identity\n * single-sourced and defers \"which identity\" to the one place that knows.\n */\nexport function createStsStorageCredentialResolver(\n resolveApplicationId: () => string,\n): StorageCredentialResolver {\n return async (): Promise<ResolvedStorageCredentials> => {\n // ── The ISSUER may never be a CLIENT of itself ───────────────────────────\n //\n // apps-manager mints these credentials. If it ever takes this path it calls\n // its own HTTP endpoint during `initializeConfig()` — before its own listener\n // exists — which is a guaranteed `ECONNREFUSED` on every boot, not a race that\n // occasionally loses. That happened on 2026-08-12 and held `/health/ready` at\n // 503 for the process lifetime.\n //\n // It was PREVENTED before that only by accident: platform env files carry no\n // `APPLICATION_ID`, so the provider's `isConfigured()` happened to be false.\n // An accident is not a guard — it silently stops guarding the moment someone\n // supplies the variable, which is exactly what a future platform-plane STS\n // door will do. This is the explicit form, and it fails with a message naming\n // the real reason instead of a transport error that reads as a network fault.\n //\n // apps-manager does its own storage work with ADMIN rights through\n // `PlatformInfrastructureManagerService`; it does not need, and must not take,\n // the app-tier session path.\n if (process.env.SERVICE_NAME === PlatformApplicationType.PLATFORM_APPS_MANAGER) {\n throw new Error(\n 'Refusing to fetch object storage session credentials: this runtime IS the issuer '\n + `(${PlatformApplicationType.PLATFORM_APPS_MANAGER}). apps-manager brokers these `\n + 'credentials and must never request them from itself — it would call its own HTTP '\n + 'endpoint before that listener exists. Use the administrative object-storage '\n + 'configuration instead.',\n );\n }\n\n const appsManagerUrl = process.env.PLATFORM_APPS_MANAGER_URL;\n const primarySecret = process.env.PLATFORM_APPLICATION_PRIMARY_SECRET;\n // Never `process.env.APPLICATION_ID` — see the parameter's JSDoc.\n let applicationId: string | undefined;\n try {\n applicationId = resolveApplicationId();\n } catch {\n // The configuration getter throws when configuration is not initialized.\n // Treated as \"no identity yet\" so the message below names the whole\n // incomplete contract rather than escaping as an unrelated config error.\n applicationId = undefined;\n }\n\n if (!appsManagerUrl || !primarySecret || !applicationId) {\n throw new Error(\n 'Cannot obtain object storage credentials: the bootstrap contract is incomplete '\n + `(PLATFORM_APPS_MANAGER_URL: ${Boolean(appsManagerUrl)}, `\n + `PLATFORM_APPLICATION_PRIMARY_SECRET: ${Boolean(primarySecret)}, `\n + `applicationId: ${Boolean(applicationId)}).`,\n );\n }\n\n const payload = await requestStsCredentialPayload({\n url: `${appsManagerUrl.replace(/\\/+$/, '')}`\n + API_ROUTES_BACKEND_DEFINITIONS.APPS_MANAGER.GET_APPLICATION_STORAGE_SESSION_CREDENTIALS(),\n headers: {\n [WildoHeaderKeys.CONTENT_TYPE]: 'application/json',\n [WildoHeaderKeys.PLATFORM_SECRET]: primarySecret,\n [WildoHeaderKeys.APPLICATION_ID]: applicationId,\n ...(process.env.SERVICE_NAME ? { [WildoHeaderKeys.SERVICE_ID]: process.env.SERVICE_NAME } : {}),\n },\n });\n\n return parseStsCredentialPayload(payload);\n };\n}\n\n/**\n * Perform the credential fetch and unwrap the response envelope.\n *\n * Shared by the APPLICATION-plane and PLATFORM-plane resolvers, deliberately: the\n * transport, the timeout, the non-2xx branch and the diagnostic are properties of\n * \"fetching a credential from apps-manager\", not of which door was used. This repo\n * has twice paid for a duplicated path where a guard added to one copy was a silent\n * gap in the other (`buildContextualFilter`, the Mongo/PostgreSQL repositories), and\n * a fail-closed credential path is the worst place to repeat that.\n */\nexport async function requestStsCredentialPayload(input: {\n url: string;\n headers: Record<string, string>;\n}): Promise<unknown> {\n try {\n // Global `fetch`, NOT an HTTP client library — deliberately.\n //\n // `axios` is a `peerDependency: \"*\"` of this package, not a dependency, so\n // reaching for it here would have added a runtime dependency to the storage\n // path that previously had none: it resolves today only because pnpm happens\n // to place axios in a reachable tree, and `backend-api` does not declare it at\n // all. A consumer that did not provide axios would fail at storage\n // initialisation — on a fail-closed path with no fallback, for a reason having\n // nothing to do with storage.\n //\n // `fetch` is a Node built-in on every runtime this framework supports, so the\n // storage path depends on nothing it is not guaranteed to have.\n const response = await fetch(input.url, {\n method: 'GET',\n headers: input.headers,\n // Bounded: this sits in front of every first storage operation after a\n // renewal, so an unbounded wait would stall uploads rather than fail them.\n signal: AbortSignal.timeout(15_000),\n });\n\n if (!response.ok) {\n // `fetch` resolves on non-2xx rather than rejecting, so this has to be an\n // explicit branch — the classic footgun when porting from a client that\n // throws. Read the body BEFORE giving up on it: apps-manager explains the\n // refusal there, and that explanation is the whole diagnostic.\n const body = await response.text().catch(() => '');\n throw new Error(`status=${response.status}${body ? ` | body=${body.slice(0, 300)}` : ''}`);\n }\n\n const parsed = await response.json() as { data?: unknown } | null;\n return parsed?.data ?? parsed;\n } catch (error) {\n // Describe the failure from the HTTP error's OWN fields, not from\n // `describeCaughtError` alone.\n //\n // This wrapper previously read `describeCaughtError(error)` and nothing else,\n // and on 2026-08-10 it produced a message ending in a bare colon — the cause\n // was empty, so the one thing the wrapper exists to surface was the one thing\n // it discarded. Storage is a fail-closed path with no fallback by design, which\n // makes this the ONLY diagnostic a reader gets; an empty one sends them looking\n // at credentials when the fault may be transport, routing, or a non-2xx body.\n throw new Error(\n `Failed to obtain object storage session credentials from apps-manager: ${describeStsFetchFailure(error)}`,\n );\n }\n}\n\n/**\n * Validate the credential payload rather than trusting it.\n *\n * A malformed payload that reached the minio client would surface as an opaque\n * signature error on the first upload, a long way from the response that caused it;\n * a credential with no usable expiry would be cached forever by the provider and\n * then start failing mid-request once the server expired it.\n */\nexport function parseStsCredentialPayload(payload: unknown): ResolvedStorageCredentials {\n const credentials = payload as {\n accessKey?: unknown;\n secretKey?: unknown;\n sessionToken?: unknown;\n expiresAt?: unknown;\n applicationId?: unknown;\n } | null;\n\n if (\n typeof credentials?.accessKey !== 'string'\n || typeof credentials?.secretKey !== 'string'\n || typeof credentials?.sessionToken !== 'string'\n ) {\n throw new Error('apps-manager returned a malformed object storage session credential.');\n }\n\n const expiresAt = typeof credentials.expiresAt === 'string' ? new Date(credentials.expiresAt) : undefined;\n if (!expiresAt || Number.isNaN(expiresAt.getTime())) {\n throw new Error('apps-manager returned an object storage session credential without a usable expiry.');\n }\n\n return {\n accessKey: credentials.accessKey,\n secretKey: credentials.secretKey,\n sessionToken: credentials.sessionToken,\n expiresAt,\n // Carried through verbatim — the identity the ISSUER confined this credential\n // to. Passed on only when the issuer supplied a usable string; a consumer that\n // needs it must fail closed on absence rather than substitute its own.\n ...(typeof credentials.applicationId === 'string' && credentials.applicationId\n ? { applicationId: credentials.applicationId }\n : {}),\n };\n}\n"]}
1
+ {"version":3,"file":"storage-sts-credential-resolver.backend.utils.js","sourceRoot":"","sources":["../../../../src/files/storage/storage-sts-credential-resolver.backend.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { WildoHeaderKeys } from '@wildo-ai/saas-models';\nimport { PlatformApplicationType } from '@wildo-ai/platform-core-shared';\nimport { API_ROUTES_BACKEND_DEFINITIONS } from '~wildo-backend-lib/requests/models/api-routes.backend.defintions';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport type { ResolvedStorageCredentials, StorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\n\n/**\n * Resolver that obtains SHORT-LIVED, prefix-confined object-storage credentials\n * from apps-manager instead of reading a long-lived key out of process env.\n *\n * ## Why this replaces the env read outright\n *\n * `STORAGE_ACCESS_KEY` / `STORAGE_SECRET_KEY` are the object store's ROOT\n * credential, handed to every application, minion and worker through\n * `{appSlug}-secret`. See\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n *\n * There is deliberately **no fallback** to those env vars. A fallback beside this\n * path is precisely how the root credential would quietly remain in use: the\n * fallback would fire on any transient apps-manager hiccup, succeed, and leave no\n * signal that the confinement had been bypassed. Failing closed is the whole\n * point — an application with no storage credential cannot leak one.\n *\n * ## Identity\n *\n * The request carries the caller's own bootstrap identity — the platform secret\n * plus its `APPLICATION_ID` — and apps-manager confines the returned credential to\n * the application that identity authenticates as. There is no parameter by which a\n * caller could ask for ANOTHER application's credential, and none should ever be\n * added.\n *\n * (Corrected 2026-08-12: this previously said the request \"names no application\",\n * which is not what the code does — `X-Application-Id` is sent below. The\n * guarantee is real but it comes from the header being the caller's OWN id and\n * being verified against the presented secret, not from the id being absent. A\n * description that does not match the request is the kind of premise a later\n * reader reasons from without re-checking.)\n *\n * ## This route is on the APPLICATION plane only\n *\n * It resolves a `wildoApplicationId` through the `apps-to-manager` controller,\n * which authenticates against `WildoApplication` records. Platform services carry\n * their own identity on a SEPARATE plane (`platform-services-to-manager`,\n * `Platform_Application_Config` / `_Secrets`, keyed by `platformApplicationId`) and\n * therefore cannot obtain a session here — which is why every platform service\n * currently reports storage UNCONFIGURED. See F-G in\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n */\n/**\n * Render an STS-fetch failure into something a reader can act on.\n *\n * Deliberately assembles from several fields rather than trusting any single\n * one. An HTTP client failure can arrive as a transport error (`code`\n * `ECONNREFUSED`/`ETIMEDOUT`, no response), a non-2xx (`response.status` plus a\n * body explaining why), or a plain programming error — and each of those leaves\n * a DIFFERENT field populated, with the others absent. Reading only `message`\n * is what produced an empty diagnostic here once already.\n *\n * Falls back to the error's constructor name when everything else is empty, so\n * the output is never a bare string: \"something threw, and here is its type\" is\n * a far better starting point than silence.\n *\n * Never includes request headers — they carry the platform secret.\n */\nfunction describeStsFetchFailure(error: unknown): string {\n const parts: string[] = [];\n\n const message = describeCaughtError(error);\n // `\"[object Object]\"` is what `String(x)` yields for a plain object, and it is\n // NON-EMPTY while carrying exactly as much information as empty. Accepting it\n // would satisfy a \"message is present\" check and still tell the reader nothing,\n // so it is treated as absent and the type-name fallback below takes over.\n if (message && message !== '[object Object]') parts.push(message);\n\n const transportCode = (error as { code?: unknown })?.code;\n if (typeof transportCode === 'string' && transportCode) parts.push(`code=${transportCode}`);\n\n // `fetch` reports transport faults through `cause` (e.g. `ECONNREFUSED` on a\n // refused connection) while `message` stays a generic \"fetch failed\" — so\n // without this, the single most common real failure renders as no information\n // at all. `AbortError` from the timeout arrives as `name` instead.\n const causeMessage = (error as { cause?: { message?: unknown; code?: unknown } })?.cause;\n if (causeMessage) {\n const code = typeof causeMessage.code === 'string' ? causeMessage.code : undefined;\n const msg = typeof causeMessage.message === 'string' ? causeMessage.message : undefined;\n if (code) parts.push(`cause=${code}`);\n else if (msg) parts.push(`cause=${msg}`);\n }\n\n const name = (error as { name?: unknown })?.name;\n if (typeof name === 'string' && (name === 'AbortError' || name === 'TimeoutError')) {\n parts.push(`aborted=${name}`);\n }\n\n // Status/body arrive already formatted from the `!response.ok` branch above,\n // which reads them off the Response rather than off the error — `fetch` puts\n // nothing HTTP-shaped on the thrown value.\n\n if (parts.length === 0) {\n const typeName = (error as { constructor?: { name?: string } })?.constructor?.name;\n return typeName ? `unrenderable ${typeName}` : 'unrenderable error with no message, code, status or body';\n }\n\n return parts.join(' | ');\n}\n\n/**\n * @param resolveApplicationId - the caller's own application identity, taken from\n * RESOLVED CONFIGURATION rather than read from `process.env` here.\n *\n * The two are the same value for an application — the loader seeds\n * `config.applicationId` from `APPLICATION_ID` — but they are NOT the same for a\n * platform service, which resolves its identity locally and has no\n * `APPLICATION_ID` in env at all. Reading env here while the object-key builder\n * read configuration was a genuine dual-source split: the predicate that decides\n * whether storage is usable and the value the operation addresses could disagree,\n * and for every platform service they did. Passing it in makes the identity\n * single-sourced and defers \"which identity\" to the one place that knows.\n */\nexport function createStsStorageCredentialResolver(\n resolveApplicationId: () => string,\n): StorageCredentialResolver {\n return async (): Promise<ResolvedStorageCredentials> => {\n // ── The ISSUER may never be a CLIENT of itself ───────────────────────────\n //\n // apps-manager mints these credentials. If it ever takes this path it calls\n // its own HTTP endpoint during `initializeConfig()` — before its own listener\n // exists — which is a guaranteed `ECONNREFUSED` on every boot, not a race that\n // occasionally loses. That happened on 2026-08-12 and held `/health/ready` at\n // 503 for the process lifetime.\n //\n // It was PREVENTED before that only by accident: platform env files carry no\n // `APPLICATION_ID`, so the provider's `isConfigured()` happened to be false.\n // An accident is not a guard — it silently stops guarding the moment someone\n // supplies the variable, which is exactly what a future platform-plane STS\n // door will do. This is the explicit form, and it fails with a message naming\n // the real reason instead of a transport error that reads as a network fault.\n //\n // apps-manager does its own storage work with ADMIN rights through\n // `PlatformInfrastructureManagerService`; it does not need, and must not take,\n // the app-tier session path.\n if (process.env.SERVICE_NAME === PlatformApplicationType.PLATFORM_APPS_MANAGER) {\n throw new Error(\n 'Refusing to fetch object storage session credentials: this runtime IS the issuer '\n + `(${PlatformApplicationType.PLATFORM_APPS_MANAGER}). apps-manager brokers these `\n + 'credentials and must never request them from itself — it would call its own HTTP '\n + 'endpoint before that listener exists. Use the administrative object-storage '\n + 'configuration instead.',\n );\n }\n\n const appsManagerUrl = process.env.PLATFORM_APPS_MANAGER_URL;\n const primarySecret = process.env.PLATFORM_APPLICATION_PRIMARY_SECRET;\n // Never `process.env.APPLICATION_ID` — see the parameter's JSDoc.\n let applicationId: string | undefined;\n try {\n applicationId = resolveApplicationId();\n } catch {\n // The configuration getter throws when configuration is not initialized.\n // Treated as \"no identity yet\" so the message below names the whole\n // incomplete contract rather than escaping as an unrelated config error.\n applicationId = undefined;\n }\n\n if (!appsManagerUrl || !primarySecret || !applicationId) {\n throw new Error(\n 'Cannot obtain object storage credentials: the bootstrap contract is incomplete '\n + `(PLATFORM_APPS_MANAGER_URL: ${Boolean(appsManagerUrl)}, `\n + `PLATFORM_APPLICATION_PRIMARY_SECRET: ${Boolean(primarySecret)}, `\n + `applicationId: ${Boolean(applicationId)}).`,\n );\n }\n\n const payload = await requestStsCredentialPayload({\n url: `${appsManagerUrl.replace(/\\/+$/, '')}`\n + API_ROUTES_BACKEND_DEFINITIONS.APPS_MANAGER.GET_APPLICATION_STORAGE_SESSION_CREDENTIALS(),\n headers: {\n [WildoHeaderKeys.CONTENT_TYPE]: 'application/json',\n [WildoHeaderKeys.PLATFORM_SECRET]: primarySecret,\n [WildoHeaderKeys.APPLICATION_ID]: applicationId,\n ...(process.env.SERVICE_NAME ? { [WildoHeaderKeys.SERVICE_ID]: process.env.SERVICE_NAME } : {}),\n },\n });\n\n return parseStsCredentialPayload(payload);\n };\n}\n/**\n * Hard deadline for one STS credential fetch from apps-manager.\n *\n * This sits in front of every FIRST storage operation after a renewal, so the cost of an unbounded\n * wait is not a slow credential — it is an upload that stalls instead of failing, on a fail-closed\n * path with no fallback. 15s: the payload is a small JSON credential from a service on our own\n * network, and the operation behind it is a user waiting for a file to move.\n */\nconst STS_CREDENTIAL_REQUEST_TIMEOUT_MS = 15_000;\n\n\n/**\n * Perform the credential fetch and unwrap the response envelope.\n *\n * Shared by the APPLICATION-plane and PLATFORM-plane resolvers, deliberately: the\n * transport, the timeout, the non-2xx branch and the diagnostic are properties of\n * \"fetching a credential from apps-manager\", not of which door was used. This repo\n * has twice paid for a duplicated path where a guard added to one copy was a silent\n * gap in the other (`buildContextualFilter`, the Mongo/PostgreSQL repositories), and\n * a fail-closed credential path is the worst place to repeat that.\n */\nexport async function requestStsCredentialPayload(input: {\n url: string;\n headers: Record<string, string>;\n}): Promise<unknown> {\n try {\n // Global `fetch`, NOT an HTTP client library — deliberately.\n //\n // `axios` is a `peerDependency: \"*\"` of this package, not a dependency, so\n // reaching for it here would have added a runtime dependency to the storage\n // path that previously had none: it resolves today only because pnpm happens\n // to place axios in a reachable tree, and `backend-api` does not declare it at\n // all. A consumer that did not provide axios would fail at storage\n // initialisation — on a fail-closed path with no fallback, for a reason having\n // nothing to do with storage.\n //\n // `fetch` is a Node built-in on every runtime this framework supports, so the\n // storage path depends on nothing it is not guaranteed to have.\n const response = await fetch(input.url, {\n method: 'GET',\n headers: input.headers,\n signal: AbortSignal.timeout(STS_CREDENTIAL_REQUEST_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n // `fetch` resolves on non-2xx rather than rejecting, so this has to be an\n // explicit branch — the classic footgun when porting from a client that\n // throws. Read the body BEFORE giving up on it: apps-manager explains the\n // refusal there, and that explanation is the whole diagnostic.\n const body = await response.text().catch(() => '');\n throw new Error(`status=${response.status}${body ? ` | body=${body.slice(0, 300)}` : ''}`);\n }\n\n const parsed = await response.json() as { data?: unknown } | null;\n return parsed?.data ?? parsed;\n } catch (error) {\n // Describe the failure from the HTTP error's OWN fields, not from\n // `describeCaughtError` alone.\n //\n // This wrapper previously read `describeCaughtError(error)` and nothing else,\n // and on 2026-08-10 it produced a message ending in a bare colon — the cause\n // was empty, so the one thing the wrapper exists to surface was the one thing\n // it discarded. Storage is a fail-closed path with no fallback by design, which\n // makes this the ONLY diagnostic a reader gets; an empty one sends them looking\n // at credentials when the fault may be transport, routing, or a non-2xx body.\n throw new Error(\n `Failed to obtain object storage session credentials from apps-manager: ${describeStsFetchFailure(error)}`,\n );\n }\n}\n\n/**\n * Validate the credential payload rather than trusting it.\n *\n * A malformed payload that reached the minio client would surface as an opaque\n * signature error on the first upload, a long way from the response that caused it;\n * a credential with no usable expiry would be cached forever by the provider and\n * then start failing mid-request once the server expired it.\n */\nexport function parseStsCredentialPayload(payload: unknown): ResolvedStorageCredentials {\n const credentials = payload as {\n accessKey?: unknown;\n secretKey?: unknown;\n sessionToken?: unknown;\n expiresAt?: unknown;\n applicationId?: unknown;\n } | null;\n\n if (\n typeof credentials?.accessKey !== 'string'\n || typeof credentials?.secretKey !== 'string'\n || typeof credentials?.sessionToken !== 'string'\n ) {\n throw new Error('apps-manager returned a malformed object storage session credential.');\n }\n\n const expiresAt = typeof credentials.expiresAt === 'string' ? new Date(credentials.expiresAt) : undefined;\n if (!expiresAt || Number.isNaN(expiresAt.getTime())) {\n throw new Error('apps-manager returned an object storage session credential without a usable expiry.');\n }\n\n return {\n accessKey: credentials.accessKey,\n secretKey: credentials.secretKey,\n sessionToken: credentials.sessionToken,\n expiresAt,\n // Carried through verbatim — the identity the ISSUER confined this credential\n // to. Passed on only when the issuer supplied a usable string; a consumer that\n // needs it must fail closed on absence rather than substitute its own.\n ...(typeof credentials.applicationId === 'string' && credentials.applicationId\n ? { applicationId: credentials.applicationId }\n : {}),\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wildo-managed-storage-provider.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/files/storage/wildo-managed-storage-provider.backend.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wildo-managed-storage-provider.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/files/storage/wildo-managed-storage-provider.backend.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wildo-managed-storage-provider.backend.service.js","sourceRoot":"","sources":["../../../../../src/files/storage/wildo-managed-storage-provider.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Wildo-Managed Storage Provider\n *\n * Default IFileStorageProvider implementation backed by MinIO/S3.\n * All file operations go through z_file() declarations and the unified\n * IFileStorageProvider interface.\n *\n * Two inputs, from two different places, and the split is deliberate:\n * - TOPOLOGY (endpoint, port, ssl, bucket, key prefix) comes from resolved\n * application configuration (`storage.managed`), which the configuration\n * loader seeds from the environment.\n * - CREDENTIALS are short-lived, prefix-confined STS sessions fetched from\n * apps-manager per use. They never appear in configuration or in the\n * environment.\n */\n\nimport { injectable, inject, optional } from 'inversify';\nimport { Readable } from 'stream';\nimport { Client, ClientOptions } from 'minio';\nimport { ErrorType, ErrorCustomMessageReference, WildoHeaderKeys, isWildoBackendError } from '@wildo-ai/saas-models';\nimport { FileStorageAccepted } from '@wildo-ai/zod-decorators';\nimport { INFRA_DEFAULT_PORTS, STORAGE_DEFAULTS } from '@wildo-ai/platform-config-lib';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { AppConfiguration_Storage_ManagedConnection } from '~wildo-backend-lib/config/models/app-config.backend.schemas';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport { validateAppId, validateContentType, validateFileId, validateSize, validateStream, resolveConfiguredMaxFileSize } from '~wildo-backend-lib/files/utils/file-validation.utils';\nimport { API_ROUTES_BACKEND_DEFINITIONS } from '~wildo-backend-lib/requests/models/api-routes.backend.defintions';\nimport { ResourcePrimaryScope } from '@wildo-ai/saas-models';\nimport type { FileScopeIdentifiers, ResourceType } from '@wildo-ai/saas-models';\n\nimport { StorageCredentialProvider } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\nimport type { ResolvedStorageCredentials, StorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\nimport { createStsStorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-sts-credential-resolver.backend.utils';\nimport { resolveStorageApplicationIdentity } from '~wildo-backend-lib/files/utils/storage-application-identity.backend.utils';\nimport {\n UNLINKED_STORAGE_SEGMENT,\n composeApplicationStorageKey,\n composeStorageLeafPath,\n storageKeyHasTraversalSegment,\n} from './application-storage-key.backend.utils';\nimport type {\n IFileStorageProvider,\n StorageUploadResult,\n StorageUploadOptions,\n StorageDownloadResult,\n StorageFileMetadata,\n StorageProviderHealthResult,\n StoredFileStorageTarget,\n} from './file-storage-provider.types';\n\nconst DEFAULT_STORAGE_REGION = 'us-east-1';\n\n/**\n * S3's maximum object size for a SINGLE `PutObject` request, and therefore the\n * largest object this provider can store under a prefix-confined credential.\n *\n * ## Why a prefix-confined credential cannot use multipart at all\n *\n * The minio client's multipart path opens with `findUploadId()`, which issues\n * **ListMultipartUploads** — a BUCKET-level operation authorised by\n * `s3:ListBucketMultipartUploads`. That action is not in the session policy, so\n * every upload large enough to take the multipart branch is refused\n * `AccessDenied` before a single byte is sent. Measured against live MinIO:\n * `CreateMultipartUpload` is allowed (it maps to `s3:PutObject`), while\n * `findUploadId` and `AbortMultipartUpload` are both refused.\n *\n * Granting the missing action is NOT an option, and not merely on preference —\n * MinIO rejects the policy outright: `s3:ListBucketMultipartUploads` does not\n * accept the `s3:prefix` condition key\n * (`InvalidParameterValue: unsupported condition keys '[s3:prefix]'`). The only\n * way to grant it is an UNCONDITIONED bucket-wide statement, which would expose\n * every other application's in-flight upload keys — the same tenant-structure\n * leak the conditioned `s3:ListBucket` exists to prevent.\n *\n * So the multipart branch is avoided rather than authorised: {@link PART_SIZE_BYTES}\n * is set high enough that no object this provider accepts can reach it, and\n * anything above this ceiling is refused here with a precise error rather than\n * an opaque `AccessDenied` from the store.\n *\n * See `.claude/plans/object-storage-root-credential-distribution.md` (F-D).\n */\nconst MAX_SINGLE_PUT_OBJECT_SIZE_BYTES = 5 * 1024 * 1024 * 1024;\n\n/**\n * Forces every upload onto the single-`PutObject` path — see\n * {@link MAX_SINGLE_PUT_OBJECT_SIZE_BYTES} for why multipart is unreachable.\n *\n * The client branches on `size <= partSize`, so pinning this to the single-PUT\n * ceiling makes the branch unreachable for any object the provider accepts.\n *\n * It costs no additional memory: the single-PUT path buffers `size` bytes, which\n * is bounded by the application's own configured `storage.maxFileSize`, not by\n * this value. What it does mean is that an upload is fully buffered rather than\n * streamed in chunks — acceptable at the 100 MB default ceiling, and the reason\n * `storage.maxFileSize` is the knob that governs storage memory pressure.\n */\nconst PART_SIZE_BYTES = MAX_SINGLE_PUT_OBJECT_SIZE_BYTES;\n\n/**\n * The S3/MinIO error CODE, when the thrown value carries one.\n *\n * Preferred over message matching everywhere in this file. The minio client sets\n * `code` (e.g. `AccessDenied`, `NoSuchKey`, `ExpiredToken`) on its errors, and a\n * code is a stable contract where a message is prose the SDK may reword between\n * releases. F-D is the concrete cost of getting this wrong: a real `AccessDenied`\n * whose message did not contain the expected substring was classified as a\n * generic connectivity failure, so the log blamed credentials and the actual\n * cause — an unauthorised HeadBucket probe — stayed invisible.\n *\n * Returns `undefined` for a plain `Error`, which is the signal for callers to\n * fall back to substring matching rather than mis-classify.\n */\nfunction resolveStorageErrorCode(error: unknown): string | undefined {\n const code = (error as { code?: unknown })?.code;\n return typeof code === 'string' && code.length > 0 ? code : undefined;\n}\n\n@injectable()\nexport class WildoManagedStorageProvider implements IFileStorageProvider {\n readonly providerId = FileStorageAccepted.WILDO_MANAGED;\n private client: Client | null = null;\n /**\n * Access key the cached {@link client} was built with. A storage client binds\n * its credentials at construction, so once those credentials can EXPIRE the\n * client must be rebuilt when they change — caching it unconditionally (as this\n * did while the credential was the never-changing root key) would keep using a\n * dead session until the process restarted.\n */\n private clientAccessKey: string | undefined;\n /**\n * Renews credentials before they expire. Today it is fed the long-lived env\n * credential, so behaviour is unchanged; the point of the seam is that\n * `getClient()` no longer assumes the credential is immutable, which is what\n * short-lived prefix-confined STS credentials require.\n * See `.claude/plans/object-storage-root-credential-distribution.md`.\n */\n private credentialProvider: StorageCredentialProvider | null = null;\n /**\n * The object store's topology (endpoint, port, ssl, bucket, key prefix), read\n * from resolved application configuration on every use.\n *\n * ## Why configuration and not `process.env`\n *\n * Topology is platform-injected material, exactly like `database.mongodb.host`,\n * and configuration is where platform-injected material belongs: it is the one\n * seam that can later be served over the wire instead of baked into a `.env`\n * file. The environment is still the SOURCE — `buildStorageTopologyFromEnvironment`\n * reads it — but it is read once, at configuration construction, rather than by\n * each consumer.\n *\n * Resolved lazily on every use rather than captured at construction. The bucket\n * used to be a class field initializer, evaluated during DI wiring — before\n * application configuration exists — which is precisely why a construction-time\n * capture cannot be the source here.\n * See `.claude/plans/application-runtime-topology-delivery.md`.\n *\n * Returns `undefined` when no managed store is configured; callers fail with a\n * precise CONFIGURATION error rather than inventing a default, because a\n * plausible default would make an unconfigured runtime look configured and fail\n * later at an object operation.\n */\n private get managedConnection(): AppConfiguration_Storage_ManagedConnection | undefined {\n return this.appConfigService.config.storage?.managed;\n }\n\n /**\n * The bucket. Not optional in practice: reached only from paths that have\n * already resolved a client, and therefore already proved a managed\n * connection exists. The fallback exists so an error-formatting path\n * (`convertStorageError`) can name the bucket without being able to throw a\n * second error while reporting the first.\n */\n private get bucketName(): string {\n return this.managedConnection?.bucket ?? STORAGE_DEFAULTS.BUCKET;\n }\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n /**\n * OPTIONAL override for how credentials are obtained — appended LAST so no\n * existing construction site shifts.\n *\n * Unbound (the common case) the provider fetches sessions from apps-manager\n * over HTTP. A runtime CO-LOCATED with the issuer binds an in-process resolver\n * instead: same broker, same prefix-confined session policy, same short-lived\n * credential — no network hop, and therefore no dependency on a listener that\n * may not exist yet.\n *\n * Optional deliberately, and the default is the SAFE case: omitting it yields\n * the ordinary remote fetch. Only the co-located runtime opts out, and it must\n * do so explicitly.\n */\n @inject(SAAS_SERVICE_TYPES.StorageCredentialResolver) @optional()\n private readonly credentialResolverOverride?: StorageCredentialResolver,\n ) {}\n\n /**\n * ⚠️ Deliberately does NOT test `STORAGE_ACCESS_KEY` / `STORAGE_SECRET_KEY`.\n *\n * Those are the root credential this provider stopped consuming, and Step 2 of\n * the storage plan removes them from generated env entirely. Leaving them in\n * this predicate would mean storage silently reports itself UNCONFIGURED the\n * moment they are removed — the file feature would disable itself with no\n * error, which is far worse than failing loudly.\n *\n * What storage now needs is the endpoint plus the bootstrap contract by which\n * credentials are fetched.\n *\n * The endpoint and the caller's own identity come from CONFIGURATION; the two\n * apps-manager REACHABILITY values stay in the ENVIRONMENT, deliberately — a URL\n * and a secret are what a process needs before it can fetch anything at all,\n * configuration included, so they cannot themselves be delivered as\n * configuration.\n *\n * ## Why identity is NOT `process.env.APPLICATION_ID`\n *\n * It used to be, while the object-key builder read\n * `appConfigService.applicationId` — two sources for one concept. They agree for\n * an application (the loader seeds config from that env var) and they do NOT\n * agree for a platform service, which resolves its identity locally and has no\n * `APPLICATION_ID` in env at all. That split is F-G: every platform service\n * reported storage UNCONFIGURED on the env conjunct, the router skipped it in\n * silence, and module-registry publish has been dead since. Reading the same\n * source the operation addresses removes the disagreement by construction —\n * and it needs no new environment variable, so nothing changes at env-generation\n * time. See `.claude/plans/object-storage-root-credential-distribution.md`.\n *\n * Reading configuration here can throw `app_configuration_not_initialized`, and\n * that is left unsoftened on purpose: answering `false` for \"configuration is\n * not loaded yet\" is indistinguishable from \"this application has no file\n * feature\", and the router would SKIP the provider in silence. Every caller was\n * enumerated and runs after configuration init.\n */\n isConfigured(): boolean {\n return !!this.managedConnection?.endpoint && this.hasUsableCredentialSource();\n }\n\n /**\n * Whether SOME credential source can serve this runtime.\n *\n * The split matters: the four-var bootstrap contract is a property of the HTTP\n * resolver, not of storage. Testing it unconditionally made the predicate ask\n * \"can I reach apps-manager?\" of a runtime that does not need to — which is how\n * a co-located runtime with a perfectly good in-process source would still\n * report UNCONFIGURED and be skipped by the router.\n */\n private hasUsableCredentialSource(): boolean {\n // An injected resolver IS the source; it needs nothing from the environment.\n if (this.credentialResolverOverride) return true;\n\n return !!process.env.PLATFORM_APPS_MANAGER_URL\n && !!process.env.PLATFORM_APPLICATION_PRIMARY_SECRET\n // ⚠️ REVERTED 2026-08-12, and the env read is LOAD-BEARING here — do not\n // \"clean it up\" to the configuration identity without reading this first.\n //\n // Identity was briefly taken from configuration, to close the dual-source\n // split described on the resolver. That is the right end state and it caused\n // an OUTAGE, because it made this predicate true for PLATFORM services — and\n // apps-manager is the STS ISSUER. It then fetched its own storage credentials\n // from itself, over HTTP, BEFORE its own listener existed: a guaranteed\n // `ECONNREFUSED`, not a race. `healthCheck()` never retried, so storage stayed\n // unhealthy for the process lifetime and `/health/ready` answered 503 forever\n // — the exact state the comment there warns about.\n //\n // Absence of `APPLICATION_ID` in a platform env is therefore doing real work\n // today: it is what keeps a platform service out of a client relationship with\n // itself. Single-sourcing the identity is safe only once (a) the platform-plane\n // STS door exists and (b) the issuer is excluded from being its own client.\n // Until then this stays an env read. See F-G in\n // `.claude/plans/object-storage-root-credential-distribution.md`.\n && !!process.env.APPLICATION_ID;\n }\n\n /**\n * The credential source, built lazily so env is read at first use rather than\n * at construction — preserving the pre-existing behaviour that tests and\n * dynamic relayers rely on to re-use one instance under different env contexts.\n *\n * Credentials come from apps-manager as short-lived, prefix-confined STS\n * sessions. The env resolver that preceded this was DELETED rather than kept as\n * a fallback: a fallback would fire on any transient apps-manager hiccup,\n * succeed with the ROOT credential, and leave no signal that the confinement\n * had been bypassed.\n */\n private getCredentialProvider(): StorageCredentialProvider {\n if (this.credentialProvider) return this.credentialProvider;\n\n this.credentialProvider = new StorageCredentialProvider(\n this.credentialResolverOverride\n // Identity from CONFIGURATION, single-sourced with the object-key builder\n // (`resolveStorageApplicationIdentity`) rather than re-read from env.\n ?? createStsStorageCredentialResolver(() => resolveStorageApplicationIdentity(this.appConfigService)),\n );\n return this.credentialProvider;\n }\n\n /**\n * Eagerly initialize the MinIO client and verify bucket access.\n * Call this at startup to fail fast on misconfiguration.\n * If not called, the client is created lazily on first operation.\n */\n async initialize(): Promise<void> {\n await this.getClient();\n }\n\n /**\n * Obtain (and renew) the session credential WITHOUT building a client.\n *\n * Split out of `getClient()` so the object-key authorization guard can run\n * before any minio client exists. The guard needs the CONFINED applicationId,\n * which only arrives with the credential — so the order has to be\n * credentials → guard → client, not guard → credentials → client.\n *\n * The pinned property survives: no client is constructed for a rejected\n * `storageRef`. What changes is that a rejected ref now costs a credential\n * LOOKUP — which `StorageCredentialProvider` caches for the session lifetime,\n * so in practice it is a cache read rather than a round trip.\n *\n * Config is validated FIRST so an unconfigured runtime fails with a precise\n * CONFIGURATION error rather than an opaque credential one, and does not make a\n * pointless apps-manager round-trip on its way to failing.\n */\n private async ensureCredentials(): Promise<ResolvedStorageCredentials> {\n const connection = this.managedConnection;\n const endpoint = connection?.endpoint;\n const port = connection?.port ?? INFRA_DEFAULT_PORTS.MINIO;\n const useSSL = connection?.useSsl ?? false;\n\n // Configuration is validated BEFORE credentials are fetched — both so an\n // unconfigured runtime fails with a precise CONFIGURATION error rather than\n // an opaque credential error, and so it does not make a pointless\n // apps-manager round-trip on its way to failing.\n //\n // The required set changed with the credential source: the storage keys are\n // gone (they were the ROOT credential) and what is needed now is the\n // endpoint plus the bootstrap contract used to fetch session credentials.\n if (!endpoint || !this.isConfigured()) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n message:\n 'Incomplete managed storage configuration. Required: storage.managed.endpoint (from STORAGE_ENDPOINT), '\n + 'PLATFORM_APPS_MANAGER_URL, PLATFORM_APPLICATION_PRIMARY_SECRET, APPLICATION_ID',\n hasEndpoint: !!endpoint,\n hasAppsManagerUrl: !!process.env.PLATFORM_APPS_MANAGER_URL,\n hasPrimarySecret: !!process.env.PLATFORM_APPLICATION_PRIMARY_SECRET,\n // Env, matching `isConfigured()` — the flag must name the SAME source\n // the predicate gates on, or the diagnostic sends the reader to a\n // value that was never the cause.\n hasApplicationId: !!process.env.APPLICATION_ID,\n },\n }\n );\n }\n\n // Renew, THEN decide whether the cached client is still usable. Checking the\n // cache first would return a client bound to an expired session and the\n // failure would surface as an opaque auth error mid-upload.\n let credentials;\n try {\n credentials = await this.getCredentialProvider().getCredentials();\n } catch (error) {\n // Fail closed, but as a typed CONFIGURATION error so callers and the\n // readiness probe can classify it — not as a bare Error escaping from the\n // resolver.\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n operation: 'acquire_storage_credentials',\n message: 'Could not obtain object storage session credentials from apps-manager.',\n error: describeCaughtError(error),\n },\n }\n );\n }\n\n return credentials;\n }\n\n /**\n * The minio client for the CURRENT credential, rebuilt when that credential\n * changes. Renew first, THEN decide whether the cached client is still usable:\n * checking the cache first would return a client bound to an expired session and\n * the failure would surface as an opaque auth error mid-upload.\n */\n private async getClient(): Promise<Client> {\n const credentials = await this.ensureCredentials();\n const connection = this.managedConnection;\n const endpoint = connection?.endpoint ?? '';\n const port = connection?.port ?? INFRA_DEFAULT_PORTS.MINIO;\n const useSSL = connection?.useSsl ?? false;\n\n if (this.client && this.clientAccessKey === credentials.accessKey) {\n return this.client;\n }\n\n const endpointUrl = endpoint.includes('://')\n ? new URL(endpoint)\n : new URL(`http${useSSL ? 's' : ''}://${endpoint}`);\n\n const options: ClientOptions = {\n endPoint: endpointUrl.hostname,\n port: endpointUrl.port ? parseInt(endpointUrl.port, 10) : port,\n useSSL: useSSL || endpointUrl.protocol === 'https:',\n accessKey: credentials.accessKey,\n secretKey: credentials.secretKey,\n // Present only for an STS session credential; a long-lived credential\n // carries none and the field stays undefined.\n ...(credentials.sessionToken ? { sessionToken: credentials.sessionToken } : {}),\n region: DEFAULT_STORAGE_REGION,\n // Keeps every upload on the single-PutObject path. The multipart branch\n // opens with a BUCKET-level ListMultipartUploads that a prefix-confined\n // session cannot be granted — see MAX_SINGLE_PUT_OBJECT_SIZE_BYTES.\n partSize: PART_SIZE_BYTES,\n };\n\n const client = new Client(options);\n\n // ⚠️ NO `bucketExists()` PROBE HERE — deliberately. This is F-D.\n //\n // The probe used to live here (and before that, `makeBucket()`). Under a\n // prefix-confined session credential it can NEVER succeed: `bucketExists()`\n // issues HeadBucket, which S3 authorises via `s3:ListBucket`, and the session\n // policy grants `ListBucket` only under `Condition StringLike s3:prefix`.\n // HeadBucket carries no prefix, so the condition cannot match and the call is\n // refused `AccessDenied` — on a credential whose object operations work\n // perfectly. Keeping it broke EVERY file operation in dev, in the backend and\n // in every minion, with a message pointing at credentials rather than at the\n // probe.\n //\n // Do NOT \"fix\" this by adding an unconditioned `ListBucket` to the policy.\n // That is the tempting repair and it re-grants bucket-wide enumeration —\n // every other application's object keys — to close a check that buys nothing:\n // bucket existence is already guaranteed platform-side by\n // `ObjectStorageStsBrokerService.ensureBucketExists()`, which runs with admin\n // rights on the credential-issuance path immediately before this client is\n // built. A missing bucket now surfaces at the first real operation, which is\n // where a genuine storage fault belongs.\n //\n // See `.claude/plans/object-storage-root-credential-distribution.md` (F-D).\n\n this.client = client;\n // Stamped together with the client so the cache check above can tell a\n // still-valid client from one bound to a superseded credential.\n this.clientAccessKey = credentials.accessKey;\n return client;\n }\n\n /**\n * The application identity object keys are built from — taken from the CREDENTIAL,\n * i.e. the subject the issuer confined the session policy to.\n *\n * Not `resolveStorageApplicationIdentity(appConfigService)`. That was the client's\n * own answer to the same question, and when the two disagreed the credential was\n * confined to one subtree while the client addressed another — every operation\n * failing `Valid and authorized credentials required` with both halves passing\n * their own tests. `assertPolicySafeApplicationId` requires a 24-hex ObjectId, so\n * the policy side cannot be bent to match the client; the client must take the\n * issuer's value.\n *\n * FAILS CLOSED when the issuer supplied none. Falling back to the local identity\n * is precisely the reintroduction of the split — it would work for applications\n * (where the two happen to agree) and silently mis-address for everything else,\n * which is the failure mode that took a day to find.\n */\n private async getApplicationId(executionContext: ExecutionContext<any>): Promise<string> {\n const credentials = await this.ensureCredentials();\n const applicationId = credentials.applicationId;\n\n if (!applicationId) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n operation: 'resolve_confined_application_identity',\n message:\n 'The object storage credential did not name the application it is confined to, so no '\n + 'object key can be addressed. The issuer must return `applicationId` alongside the '\n + 'session credential.',\n },\n }\n );\n }\n\n validateAppId(applicationId, this.errorBuilder, executionContext, 'applicationId');\n return applicationId;\n }\n\n /**\n * Resolve the canonical app-level object-key namespace prefix\n * (Slice 3.6).\n *\n * Sourced from `storage.managed.bucketPrefix`, which the configuration loader\n * seeds from `STORAGE_BUCKET_PREFIX`, originating from\n * `wildo.saas.config.dataServices.s3.bucketPrefix`. When set, every\n * application object key produced by `resolveApplicationObjectKey()`\n * (and every authorized `storageRef` it accepts) is prefixed with\n * `${bucketPrefix}/`. The bucket itself remains infra-controlled — N apps\n * can share one bucket with disjoint object trees.\n *\n * Cosmetic only: tenant isolation is enforced by the session policy, which\n * keys on the platform-minted `applicationId` and never on this value.\n *\n * Read lazily on every call (rather than cached at construction) so a\n * configuration change is observed without rebuilding the provider.\n */\n private resolveBucketPrefix(): string {\n const raw = this.managedConnection?.bucketPrefix;\n if (!raw) return '';\n const trimmed = raw.trim();\n return trimmed.length === 0 ? '' : `${trimmed.replace(/\\/+$/, '')}/`;\n }\n\n /**\n * Refuse any key fragment carrying a `.` or `..` segment.\n *\n * ## Why the managed provider needs this at all\n *\n * The local-directory provider has always had a traversal guard\n * (`resolveSafePathFromRelative`: `path.resolve` + a `startsWith(base + sep)` check). This\n * provider had NONE — an S3 key is an opaque string, never resolved by a filesystem, so a `..`\n * segment cannot escape a bucket and the guard looked unnecessary. It is not, for two reasons:\n *\n * 1. **The read guard below is textual.** `startsWith(expectedPrefix)` is satisfied by\n * `applications/<app>/files/x/../../../elsewhere/y`, so a stored ref carrying traversal passes\n * the one check that exists — and a future consumer that DOES normalize the key (a mirror to a\n * filesystem, an archive extraction, a signed-URL rewriter) inherits a ref that was never\n * checked.\n * 2. **A prefix is the tenant boundary here.** `<scope>/<scopeId>` exists so erasure, orphan\n * sweeps and per-tenant listing are prefix operations. A key whose literal text contains `..`\n * still lands under the prefix it was composed from, but it is unreadable as a path and no\n * normalizing tool downstream agrees with the sweep about which tenant owns it.\n *\n * The invariant is enforced HERE rather than at the resolver because `StorageUploadOptions` has\n * more than one producer: `FileStoragePathResolverBackendService` sanitizes (and is the only\n * app-authored source), but the audit-archive batch composes its own `folderPath` and never\n * passes through that sanitizer. This method is the single point every key — upload composition\n * AND every stored `storageRef` on download/delete/metadata — must pass.\n *\n * Fail-closed with AUTHORIZATION, matching the local provider's verdict for the same input, so\n * one authored value cannot mean two different things depending on which provider is bound.\n */\n private assertNoTraversalSegments(\n candidate: string,\n executionContext: ExecutionContext<any>,\n diagnostics: Record<string, unknown>,\n ): void {\n if (!storageKeyHasTraversalSegment(candidate)) {\n return;\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_PATH_TRAVERSAL_DETECTED,\n context: {\n // diagnostic (log-only)\n ...diagnostics,\n candidate,\n provider: this.providerId,\n },\n }\n );\n }\n\n private async resolveApplicationObjectKey(\n fileId: string,\n executionContext: ExecutionContext<any>,\n storageRef?: string,\n linkedResourceType?: ResourceType,\n fileScope?: FileScopeIdentifiers,\n ): Promise<string> {\n // Checked BEFORE the application identity is resolved: a traversal segment is a refusal that\n // needs no credential, and paying an apps-manager STS round trip to reject it would let a\n // hostile key fragment drive outbound requests.\n this.assertNoTraversalSegments(fileId, executionContext, { fileId, source: 'composed_key' });\n\n const applicationId = await this.getApplicationId(executionContext);\n const bucketPrefix = this.resolveBucketPrefix();\n // The relative key comes from the SHARED composer, so the local-directory provider addresses the\n // same blob at the same place. `bucketPrefix` is the one part that stays here: it is an\n // object-store namespacing knob (N applications sharing one bucket) with no meaning on a\n // filesystem, so it frames the shared key rather than living inside it.\n const defaultKey =\n bucketPrefix\n + composeApplicationStorageKey({ applicationId, leafPath: fileId, linkedResourceType, scope: fileScope });\n\n if (!storageRef) {\n return defaultKey;\n }\n\n const normalizedStorageRef = storageRef.trim();\n if (!normalizedStorageRef) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_REF_INVALID,\n context: {\n // diagnostic (log-only)\n fileId,\n applicationId,\n },\n }\n );\n }\n\n // A stored ref is checked for traversal too, not only the freshly-composed key. The prefix\n // check below is TEXTUAL, so `applications/<app>/files/x/../../../elsewhere/y` satisfies it;\n // the row it came from is not a trusted source just because it is persisted.\n this.assertNoTraversalSegments(normalizedStorageRef, executionContext, { fileId, applicationId, source: 'stored_storage_ref' });\n\n // The guard confines to the APPLICATION subtree, deliberately NOT to this call's resource\n // segment. A read of an already-stored blob supplies no `linkedResourceType`, so keying the\n // guard on the current call would reject every legitimate read of a linked file. Per-resource\n // confinement is the session policy's job (it is minted per principal); this guard's job is\n // that a `storageRef` from a row cannot escape the application.\n const expectedPrefix =\n bucketPrefix\n + `applications/${applicationId}/files/`;\n if (!normalizedStorageRef.startsWith(expectedPrefix)) {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_REF_FORBIDDEN,\n context: {\n // diagnostic (log-only)\n fileId,\n applicationId,\n storageRef: normalizedStorageRef,\n expectedPrefix,\n },\n }\n );\n }\n\n return normalizedStorageRef;\n }\n\n private convertStorageError(\n error: unknown,\n operation: 'upload' | 'download' | 'delete' | 'metadata',\n executionContext: ExecutionContext<any> | undefined,\n context: Record<string, unknown>,\n ): never {\n if (isWildoBackendError(error)) {\n throw error;\n }\n\n const errorMessage = describeCaughtError(error);\n // Classify on the S3 error CODE first; the message is a fallback only.\n //\n // A message is prose an SDK is free to reword, and matching on substrings has\n // two real failure modes here: a benign message containing \"not found\" is\n // misread as a missing object, and — the one F-D made concrete — a genuine\n // `AccessDenied` whose message is phrased differently escapes classification\n // entirely and surfaces as a generic connectivity error, pointing the reader\n // at the wrong subsystem. The minio client exposes `code` on its errors, so\n // the reliable signal is available and was simply not being used.\n const errorCode = resolveStorageErrorCode(error);\n const errorMessageLower = errorMessage.toLowerCase();\n\n if (\n errorCode === 'NoSuchKey'\n || errorCode === 'NotFound'\n || errorCode === 'NoSuchBucket'\n || (!errorCode && (errorMessageLower.includes('nosuchkey') || errorMessageLower.includes('not found')))\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: {\n // diagnostic (log-only)\n operation,\n ...context,\n },\n }\n );\n }\n\n if (\n errorCode === 'AccessDenied'\n || errorCode === 'Forbidden'\n || errorCode === 'SignatureDoesNotMatch'\n || errorCode === 'InvalidAccessKeyId'\n || errorCode === 'ExpiredToken'\n || errorCode === 'InvalidToken'\n || (!errorCode && (\n errorMessageLower.includes('accessdenied')\n || errorMessageLower.includes('access denied')\n || errorMessageLower.includes('forbidden')\n || errorMessageLower.includes('signaturedoesnotmatch')\n || errorMessageLower.includes('invalidaccesskeyid')\n ))\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_ACCESS_DENIED,\n context: {\n // diagnostic (log-only)\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n if (\n errorMessageLower.includes('bucketnotfound')\n || errorMessageLower.includes('invalidbucketname')\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n message: 'Managed storage bucket configuration error',\n operation,\n bucketName: this.bucketName,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n if (\n errorMessageLower.includes('connection')\n || errorMessageLower.includes('timeout')\n || errorMessageLower.includes('econnrefused')\n || errorMessageLower.includes('network')\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.NETWORK,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.NETWORK,\n context: {\n message: 'Managed storage connection failed',\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n if (\n errorMessageLower.includes('stream')\n || errorMessageLower.includes('pipe')\n || errorMessageLower.includes('readable')\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: 'File stream error during storage operation',\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: `Managed storage operation failed: ${operation}`,\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n async upload(\n fileStream: Readable,\n fileId: string,\n mimeType: string,\n size: number,\n executionContext: ExecutionContext<any>,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n validateFileId(fileId, this.errorBuilder, executionContext, 'fileId');\n validateContentType(mimeType, this.errorBuilder, executionContext, 'mimeType');\n validateSize(\n size,\n resolveConfiguredMaxFileSize(this.appConfigService.config.storage?.maxFileSize),\n this.errorBuilder,\n executionContext,\n 'size',\n );\n validateStream(fileStream, this.errorBuilder, executionContext, 'fileStream');\n\n // Above this, the client would take the multipart branch, whose opening\n // ListMultipartUploads call a prefix-confined session cannot perform — the\n // store would answer a bare `AccessDenied` that reads as a credential fault.\n // Refuse here instead, naming the real reason. Reachable only when an\n // application configures `storage.maxFileSize` above the single-PUT ceiling;\n // `validateSize` has already applied that configured limit.\n // See MAX_SINGLE_PUT_OBJECT_SIZE_BYTES.\n if (size > MAX_SINGLE_PUT_OBJECT_SIZE_BYTES) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n // Same reference `validateContentLength` uses for a size violation —\n // this IS one, just against a provider ceiling rather than the\n // application's configured limit.\n customMessageReference: ErrorCustomMessageReference.CONTENT_LENGTH_VALIDATION_FAILED,\n context: {\n // diagnostic (log-only)\n fileId,\n size,\n reason: 'exceeds_single_put_ceiling',\n maxSinglePutSize: MAX_SINGLE_PUT_OBJECT_SIZE_BYTES,\n message:\n 'Object exceeds the single-PutObject ceiling for managed storage. Managed storage cannot use '\n + 'multipart upload under a prefix-confined credential; lower storage.maxFileSize to at most '\n + `${MAX_SINGLE_PUT_OBJECT_SIZE_BYTES} bytes.`,\n },\n }\n );\n }\n\n const effectiveFileId = composeStorageLeafPath(fileId, options);\n\n if (!effectiveFileId) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_KEY_COMPOSITION_FAILED,\n }\n );\n }\n\n const includeAppId = options?.includeApplicationId ?? true;\n const key = includeAppId\n ? await this.resolveApplicationObjectKey(effectiveFileId, executionContext, undefined, options?.linkedResourceType, options?.scope)\n : effectiveFileId;\n const client = await this.getClient();\n\n try {\n await client.putObject(\n this.bucketName,\n key,\n fileStream,\n size,\n {\n [WildoHeaderKeys.CONTENT_TYPE]: mimeType,\n },\n );\n } catch (error) {\n this.convertStorageError(error, 'upload', executionContext, {\n fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n\n return {\n storageRef: key,\n provider: this.providerId,\n };\n }\n\n async download(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageDownloadResult> {\n const key = await this.resolveApplicationObjectKey(file.fileId, executionContext, file.storageRef);\n const client = await this.getClient();\n let stream: Readable;\n let metadata: StorageFileMetadata;\n\n try {\n const stat = await client.statObject(this.bucketName, key);\n const contentType = stat.metaData[WildoHeaderKeys.CONTENT_TYPE];\n if (!contentType) {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: `Managed storage object metadata missing required ${WildoHeaderKeys.CONTENT_TYPE}`,\n fileId: file.fileId,\n storageRef: key,\n },\n },\n );\n }\n\n stream = await client.getObject(this.bucketName, key);\n metadata = {\n contentType,\n size: stat.size,\n etag: stat.etag,\n lastModified: stat.lastModified,\n };\n } catch (error) {\n this.convertStorageError(error, 'download', executionContext, {\n fileId: file.fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n\n return {\n stream,\n contentType: metadata.contentType,\n size: metadata.size,\n etag: metadata.etag,\n lastModified: metadata.lastModified,\n };\n }\n\n async delete(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<void> {\n const key = await this.resolveApplicationObjectKey(file.fileId, executionContext, file.storageRef);\n const client = await this.getClient();\n\n try {\n await client.removeObject(this.bucketName, key);\n } catch (error) {\n // Same code-first classification as `convertStorageError`: a delete of an\n // already-absent object is a no-op, but only when the store actually said\n // so. Inferring it from prose can swallow a real failure.\n const deleteErrorCode = resolveStorageErrorCode(error);\n const errorMessageLower = describeCaughtError(error).toLowerCase();\n if (\n deleteErrorCode === 'NoSuchKey'\n || deleteErrorCode === 'NotFound'\n || (!deleteErrorCode && (errorMessageLower.includes('nosuchkey') || errorMessageLower.includes('not found')))\n ) {\n return;\n }\n this.convertStorageError(error, 'delete', executionContext, {\n fileId: file.fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n }\n\n async getMetadata(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageFileMetadata> {\n const key = await this.resolveApplicationObjectKey(file.fileId, executionContext, file.storageRef);\n const client = await this.getClient();\n\n try {\n const stat = await client.statObject(this.bucketName, key);\n const contentType = stat.metaData[WildoHeaderKeys.CONTENT_TYPE];\n if (!contentType) {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: `Managed storage object metadata missing required ${WildoHeaderKeys.CONTENT_TYPE}`,\n fileId: file.fileId,\n storageRef: key,\n },\n },\n );\n }\n\n return {\n contentType,\n size: stat.size,\n etag: stat.etag,\n lastModified: stat.lastModified,\n };\n } catch (error) {\n this.convertStorageError(error, 'metadata', executionContext, {\n fileId: file.fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n }\n\n // =========================================================================\n // Health check\n // =========================================================================\n\n async healthCheck(): Promise<StorageProviderHealthResult> {\n const startTime = Date.now();\n\n // RECOVER, don't just report. This used to `return { healthy: false }` on a\n // null client and never try again — which turned any transient startup failure\n // into a PERMANENT one: `initialize()` runs once, so a client that failed to\n // build at boot was never rebuilt, storage stayed unhealthy for the process\n // lifetime, and `/health/ready` answered 503 forever while `/health` looked\n // fine. That is the documented \"port open + /health healthy + /health/ready 503\n // forever\" state (`platform/CLAUDE.md`), reached without any ongoing fault.\n //\n // Observed exactly that way on apps-manager: the credential fetch was refused\n // at boot, the listener came up 0.4s later, and nothing retried. A readiness\n // probe is the natural retry point — it is called repeatedly, by design, and a\n // dependency that has come back should be allowed to say so.\n //\n // `getClient()` is idempotent and caches, so a healthy probe costs no extra\n // work; a still-failing one reports the CURRENT reason instead of the stale\n // \"not initialized\".\n if (!this.client) {\n try {\n await this.getClient();\n } catch (error) {\n return { healthy: false, latency: Date.now() - startTime, error: describeCaughtError(error) };\n }\n }\n\n /**\n * Declared OUTSIDE the try so the credential-rejection retry below can probe the SAME key.\n * Recomputing it there would ask a different question than the one that just failed.\n */\n let probeKey = '';\n\n try {\n // ⚠️ Probes with an OBJECT-level call, not `bucketExists()`. Second site of\n // F-D, and the more damaging one: this is the readiness dependency behind\n // `/health/ready`, so a probe the credential cannot satisfy produces the\n // documented \"port open + /health healthy + /health/ready 503 forever\"\n // state (see `platform/CLAUDE.md`) — with remote clients looping on\n // \"Remote API not ready\" and nothing pointing at storage.\n //\n // `bucketExists()` issues HeadBucket, authorised by an UNCONDITIONED\n // `s3:ListBucket`. The session policy grants `ListBucket` only under\n // `Condition StringLike s3:prefix`, and HeadBucket sends no prefix, so it\n // can never pass. `statObject` on a key inside this application's own\n // prefix is authorised by the policy's object statements, which is what the\n // credential is actually for.\n //\n // A `NoSuchKey` reply is the HEALTHY answer: it proves the store was\n // reached AND the credential was accepted. Only a real refusal or transport\n // failure is unhealthy.\n // The probe key must sit inside the prefix the CREDENTIAL covers, not the\n // one the client would have guessed — otherwise readiness fails `AccessDenied`\n // on a perfectly good credential and blames storage. Same identity source as\n // every real operation, for the same reason.\n const probeApplicationId = (await this.ensureCredentials()).applicationId\n ?? this.appConfigService.applicationId;\n probeKey = `${this.resolveBucketPrefix()}`\n + API_ROUTES_BACKEND_DEFINITIONS.FILE_STORAGE.STORAGE_KEY_APPLICATION_FILE(\n probeApplicationId,\n '__storage_healthcheck__',\n // The probe has no File row and no resource. It must sit under the SAME staging segment\n // a real unlinked blob uses — once the session policy narrows per resource, a probe key\n // outside every granted prefix would fail `AccessDenied` on a perfectly good credential\n // and report storage unhealthy.\n UNLINKED_STORAGE_SEGMENT,\n ResourcePrimaryScope.APPLICATION,\n probeApplicationId,\n );\n\n // `this.client!` — the recovery branch above either populated it or returned.\n await this.client!.statObject(this.bucketName, probeKey);\n return { healthy: true, latency: Date.now() - startTime };\n } catch (error) {\n const code = resolveStorageErrorCode(error);\n if (code === 'NoSuchKey' || code === 'NotFound') {\n return { healthy: true, latency: Date.now() - startTime };\n }\n\n /**\n * A credential the STORE REJECTS is re-acquired, not held until it expires.\n *\n * The provider refreshes on EXPIRY only — its contract says so explicitly (\"Refresh before\n * expiry, not after failure\"), and that is right for the ordinary case: callers should never\n * observe an expired credential. But it leaves one state unrecoverable, and this is the probe\n * that meets it. A session can become invalid while still unexpired — the object store\n * restarts and forgets its STS sessions, or the parent credential rotates underneath it. The\n * cached credential then stays \"fresh\" by the clock and is refused by the store on every call.\n *\n * Measured 2026-08-22: THREE platform runtimes (crontabs, apps-manager, the dev companion)\n * held such a credential for ~27 HOURS. `/health` stayed 200 while `/health/ready` answered\n * 503 the whole time, and the application backend logged `Remote API not ready` 2,384 times\n * against one of them. Restarting each process cleared it — which is the definition of a\n * defect that requires manual intervention, and it is exactly the state\n * `platform/CLAUDE.md` describes as \"port open + /health healthy + /health/ready 503 forever\".\n *\n * `StorageCredentialProvider.invalidate()` existed for precisely this — its own JSDoc says\n * \"for an explicit re-acquire after a hard failure\" — and NOTHING called it, in production or\n * in a test. A capability with no door: the third found in this workstream, after\n * `usePostgreSQL` and `MongoDBService.overrideUri`.\n *\n * Retried ONCE, and only for a rejection that names a credential problem. A blanket retry\n * would mask a genuine outage as latency, and a retry loop on a store that is simply down\n * would turn a readiness probe into a stall. One attempt distinguishes \"this credential is\n * stale\" from \"the store is unreachable\", which is the only question this probe has to answer.\n */\n if (this.isCredentialRejection(code, error)) {\n this.credentialProvider?.invalidate();\n this.client = null;\n this.clientAccessKey = undefined;\n\n try {\n const retryClient = await this.getClient();\n await retryClient.statObject(this.bucketName, probeKey);\n this.logger.info(\n 'Object storage credential was refused and has been re-acquired; storage is healthy again.',\n );\n return { healthy: true, latency: Date.now() - startTime };\n } catch (retryError) {\n const retryCode = resolveStorageErrorCode(retryError);\n if (retryCode === 'NoSuchKey' || retryCode === 'NotFound') {\n this.logger.info(\n 'Object storage credential was refused and has been re-acquired; storage is healthy again.',\n );\n return { healthy: true, latency: Date.now() - startTime };\n }\n return {\n healthy: false,\n latency: Date.now() - startTime,\n error: describeCaughtError(retryError),\n };\n }\n }\n\n return { healthy: false, latency: Date.now() - startTime, error: describeCaughtError(error) };\n }\n }\n\n /**\n * Whether a failure says \"this CREDENTIAL is not accepted\" rather than \"the STORE is unavailable\".\n *\n * Only the first is worth re-acquiring for. The distinction is made on the error CODE where the\n * client supplies one, and falls back to the message otherwise — MinIO answers a rejected STS\n * session with `Valid and authorized credentials required`, which carries no S3 error code, and\n * that exact string is what the three stuck runtimes reported for 27 hours.\n */\n private isCredentialRejection(code: string | undefined, error: unknown): boolean {\n const CREDENTIAL_REJECTION_CODES = new Set([\n 'AccessDenied',\n 'InvalidAccessKeyId',\n 'SignatureDoesNotMatch',\n 'ExpiredToken',\n 'InvalidToken',\n 'TokenRefreshRequired',\n 'AuthorizationHeaderMalformed',\n ]);\n if (code && CREDENTIAL_REJECTION_CODES.has(code)) return true;\n\n const message = error instanceof Error ? error.message : String(error ?? '');\n return /valid and authorized credentials required|security token|access denied|invalid access key/i\n .test(message);\n }\n}\n"]}
1
+ {"version":3,"file":"wildo-managed-storage-provider.backend.service.js","sourceRoot":"","sources":["../../../../src/files/storage/wildo-managed-storage-provider.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Wildo-Managed Storage Provider\n *\n * Default IFileStorageProvider implementation backed by MinIO/S3.\n * All file operations go through z_file() declarations and the unified\n * IFileStorageProvider interface.\n *\n * Two inputs, from two different places, and the split is deliberate:\n * - TOPOLOGY (endpoint, port, ssl, bucket, key prefix) comes from resolved\n * application configuration (`storage.managed`), which the configuration\n * loader seeds from the environment.\n * - CREDENTIALS are short-lived, prefix-confined STS sessions fetched from\n * apps-manager per use. They never appear in configuration or in the\n * environment.\n */\n\nimport { injectable, inject, optional } from 'inversify';\nimport { Readable } from 'stream';\nimport { Client, ClientOptions } from 'minio';\nimport { ErrorType, ErrorCustomMessageReference, WildoHeaderKeys, isWildoBackendError } from '@wildo-ai/saas-models';\nimport { FileStorageAccepted } from '@wildo-ai/zod-decorators';\nimport { INFRA_DEFAULT_PORTS, STORAGE_DEFAULTS } from '@wildo-ai/platform-config-lib';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { AppConfiguration_Storage_ManagedConnection } from '~wildo-backend-lib/config/models/app-config.backend.schemas';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport { validateAppId, validateContentType, validateFileId, validateSize, validateStream, resolveConfiguredMaxFileSize } from '~wildo-backend-lib/files/utils/file-validation.utils';\nimport { API_ROUTES_BACKEND_DEFINITIONS } from '~wildo-backend-lib/requests/models/api-routes.backend.defintions';\nimport { ResourcePrimaryScope } from '@wildo-ai/saas-models';\nimport type { FileScopeIdentifiers, ResourceType } from '@wildo-ai/saas-models';\n\nimport { StorageCredentialProvider } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\nimport type { ResolvedStorageCredentials, StorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\nimport { createStsStorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-sts-credential-resolver.backend.utils';\nimport { resolveStorageApplicationIdentity } from '~wildo-backend-lib/files/utils/storage-application-identity.backend.utils';\nimport {\n UNLINKED_STORAGE_SEGMENT,\n composeApplicationStorageKey,\n composeStorageLeafPath,\n storageKeyHasTraversalSegment,\n} from './application-storage-key.backend.utils';\nimport type {\n IFileStorageProvider,\n StorageUploadResult,\n StorageUploadOptions,\n StorageDownloadResult,\n StorageFileMetadata,\n StorageProviderHealthResult,\n StoredFileStorageTarget,\n} from './file-storage-provider.types';\n\nconst DEFAULT_STORAGE_REGION = 'us-east-1';\n\n/**\n * S3's maximum object size for a SINGLE `PutObject` request, and therefore the\n * largest object this provider can store under a prefix-confined credential.\n *\n * ## Why a prefix-confined credential cannot use multipart at all\n *\n * The minio client's multipart path opens with `findUploadId()`, which issues\n * **ListMultipartUploads** — a BUCKET-level operation authorised by\n * `s3:ListBucketMultipartUploads`. That action is not in the session policy, so\n * every upload large enough to take the multipart branch is refused\n * `AccessDenied` before a single byte is sent. Measured against live MinIO:\n * `CreateMultipartUpload` is allowed (it maps to `s3:PutObject`), while\n * `findUploadId` and `AbortMultipartUpload` are both refused.\n *\n * Granting the missing action is NOT an option, and not merely on preference —\n * MinIO rejects the policy outright: `s3:ListBucketMultipartUploads` does not\n * accept the `s3:prefix` condition key\n * (`InvalidParameterValue: unsupported condition keys '[s3:prefix]'`). The only\n * way to grant it is an UNCONDITIONED bucket-wide statement, which would expose\n * every other application's in-flight upload keys — the same tenant-structure\n * leak the conditioned `s3:ListBucket` exists to prevent.\n *\n * So the multipart branch is avoided rather than authorised: {@link PART_SIZE_BYTES}\n * is set high enough that no object this provider accepts can reach it, and\n * anything above this ceiling is refused here with a precise error rather than\n * an opaque `AccessDenied` from the store.\n *\n * See `.claude/plans/object-storage-root-credential-distribution.md` (F-D).\n */\nconst MAX_SINGLE_PUT_OBJECT_SIZE_BYTES = 5 * 1024 * 1024 * 1024;\n\n/**\n * Forces every upload onto the single-`PutObject` path — see\n * {@link MAX_SINGLE_PUT_OBJECT_SIZE_BYTES} for why multipart is unreachable.\n *\n * The client branches on `size <= partSize`, so pinning this to the single-PUT\n * ceiling makes the branch unreachable for any object the provider accepts.\n *\n * It costs no additional memory: the single-PUT path buffers `size` bytes, which\n * is bounded by the application's own configured `storage.maxFileSize`, not by\n * this value. What it does mean is that an upload is fully buffered rather than\n * streamed in chunks — acceptable at the 100 MB default ceiling, and the reason\n * `storage.maxFileSize` is the knob that governs storage memory pressure.\n */\nconst PART_SIZE_BYTES = MAX_SINGLE_PUT_OBJECT_SIZE_BYTES;\n\n/**\n * The S3/MinIO error CODE, when the thrown value carries one.\n *\n * Preferred over message matching everywhere in this file. The minio client sets\n * `code` (e.g. `AccessDenied`, `NoSuchKey`, `ExpiredToken`) on its errors, and a\n * code is a stable contract where a message is prose the SDK may reword between\n * releases. F-D is the concrete cost of getting this wrong: a real `AccessDenied`\n * whose message did not contain the expected substring was classified as a\n * generic connectivity failure, so the log blamed credentials and the actual\n * cause — an unauthorised HeadBucket probe — stayed invisible.\n *\n * Returns `undefined` for a plain `Error`, which is the signal for callers to\n * fall back to substring matching rather than mis-classify.\n */\nfunction resolveStorageErrorCode(error: unknown): string | undefined {\n const code = (error as { code?: unknown })?.code;\n return typeof code === 'string' && code.length > 0 ? code : undefined;\n}\n\n@injectable()\nexport class WildoManagedStorageProvider implements IFileStorageProvider {\n readonly providerId = FileStorageAccepted.WILDO_MANAGED;\n private client: Client | null = null;\n /**\n * Access key the cached {@link client} was built with. A storage client binds\n * its credentials at construction, so once those credentials can EXPIRE the\n * client must be rebuilt when they change — caching it unconditionally (as this\n * did while the credential was the never-changing root key) would keep using a\n * dead session until the process restarted.\n */\n private clientAccessKey: string | undefined;\n /**\n * Renews credentials before they expire. Today it is fed the long-lived env\n * credential, so behaviour is unchanged; the point of the seam is that\n * `getClient()` no longer assumes the credential is immutable, which is what\n * short-lived prefix-confined STS credentials require.\n * See `.claude/plans/object-storage-root-credential-distribution.md`.\n */\n private credentialProvider: StorageCredentialProvider | null = null;\n /**\n * The object store's topology (endpoint, port, ssl, bucket, key prefix), read\n * from resolved application configuration on every use.\n *\n * ## Why configuration and not `process.env`\n *\n * Topology is platform-injected material, exactly like `database.mongodb.host`,\n * and configuration is where platform-injected material belongs: it is the one\n * seam that can later be served over the wire instead of baked into a `.env`\n * file. The environment is still the SOURCE — `buildStorageTopologyFromEnvironment`\n * reads it — but it is read once, at configuration construction, rather than by\n * each consumer.\n *\n * Resolved lazily on every use rather than captured at construction. The bucket\n * used to be a class field initializer, evaluated during DI wiring — before\n * application configuration exists — which is precisely why a construction-time\n * capture cannot be the source here.\n * See `.claude/plans/application-runtime-topology-delivery.md`.\n *\n * Returns `undefined` when no managed store is configured; callers fail with a\n * precise CONFIGURATION error rather than inventing a default, because a\n * plausible default would make an unconfigured runtime look configured and fail\n * later at an object operation.\n */\n private get managedConnection(): AppConfiguration_Storage_ManagedConnection | undefined {\n return this.appConfigService.config.storage?.managed;\n }\n\n /**\n * The bucket. Not optional in practice: reached only from paths that have\n * already resolved a client, and therefore already proved a managed\n * connection exists. The fallback exists so an error-formatting path\n * (`convertStorageError`) can name the bucket without being able to throw a\n * second error while reporting the first.\n */\n private get bucketName(): string {\n return this.managedConnection?.bucket ?? STORAGE_DEFAULTS.BUCKET;\n }\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n /**\n * OPTIONAL override for how credentials are obtained — appended LAST so no\n * existing construction site shifts.\n *\n * Unbound (the common case) the provider fetches sessions from apps-manager\n * over HTTP. A runtime CO-LOCATED with the issuer binds an in-process resolver\n * instead: same broker, same prefix-confined session policy, same short-lived\n * credential — no network hop, and therefore no dependency on a listener that\n * may not exist yet.\n *\n * Optional deliberately, and the default is the SAFE case: omitting it yields\n * the ordinary remote fetch. Only the co-located runtime opts out, and it must\n * do so explicitly.\n */\n @inject(SAAS_SERVICE_TYPES.StorageCredentialResolver) @optional()\n private readonly credentialResolverOverride?: StorageCredentialResolver,\n ) {}\n\n /**\n * ⚠️ Deliberately does NOT test `STORAGE_ACCESS_KEY` / `STORAGE_SECRET_KEY`.\n *\n * Those are the root credential this provider stopped consuming, and Step 2 of\n * the storage plan removes them from generated env entirely. Leaving them in\n * this predicate would mean storage silently reports itself UNCONFIGURED the\n * moment they are removed — the file feature would disable itself with no\n * error, which is far worse than failing loudly.\n *\n * What storage now needs is the endpoint plus the bootstrap contract by which\n * credentials are fetched.\n *\n * The endpoint and the caller's own identity come from CONFIGURATION; the two\n * apps-manager REACHABILITY values stay in the ENVIRONMENT, deliberately — a URL\n * and a secret are what a process needs before it can fetch anything at all,\n * configuration included, so they cannot themselves be delivered as\n * configuration.\n *\n * ## Why identity is NOT `process.env.APPLICATION_ID`\n *\n * It used to be, while the object-key builder read\n * `appConfigService.applicationId` — two sources for one concept. They agree for\n * an application (the loader seeds config from that env var) and they do NOT\n * agree for a platform service, which resolves its identity locally and has no\n * `APPLICATION_ID` in env at all. That split is F-G: every platform service\n * reported storage UNCONFIGURED on the env conjunct, the router skipped it in\n * silence, and module-registry publish has been dead since. Reading the same\n * source the operation addresses removes the disagreement by construction —\n * and it needs no new environment variable, so nothing changes at env-generation\n * time. See `.claude/plans/object-storage-root-credential-distribution.md`.\n *\n * Reading configuration here can throw `app_configuration_not_initialized`, and\n * that is left unsoftened on purpose: answering `false` for \"configuration is\n * not loaded yet\" is indistinguishable from \"this application has no file\n * feature\", and the router would SKIP the provider in silence. Every caller was\n * enumerated and runs after configuration init.\n */\n isConfigured(): boolean {\n return !!this.managedConnection?.endpoint && this.hasUsableCredentialSource();\n }\n\n /**\n * Whether SOME credential source can serve this runtime.\n *\n * The split matters: the four-var bootstrap contract is a property of the HTTP\n * resolver, not of storage. Testing it unconditionally made the predicate ask\n * \"can I reach apps-manager?\" of a runtime that does not need to — which is how\n * a co-located runtime with a perfectly good in-process source would still\n * report UNCONFIGURED and be skipped by the router.\n */\n private hasUsableCredentialSource(): boolean {\n // An injected resolver IS the source; it needs nothing from the environment.\n if (this.credentialResolverOverride) return true;\n\n return !!process.env.PLATFORM_APPS_MANAGER_URL\n && !!process.env.PLATFORM_APPLICATION_PRIMARY_SECRET\n // ⚠️ REVERTED 2026-08-12, and the env read is LOAD-BEARING here — do not\n // \"clean it up\" to the configuration identity without reading this first.\n //\n // Identity was briefly taken from configuration, to close the dual-source\n // split described on the resolver. That is the right end state and it caused\n // an OUTAGE, because it made this predicate true for PLATFORM services — and\n // apps-manager is the STS ISSUER. It then fetched its own storage credentials\n // from itself, over HTTP, BEFORE its own listener existed: a guaranteed\n // `ECONNREFUSED`, not a race. `healthCheck()` never retried, so storage stayed\n // unhealthy for the process lifetime and `/health/ready` answered 503 forever\n // — the exact state the comment there warns about.\n //\n // Absence of `APPLICATION_ID` in a platform env is therefore doing real work\n // today: it is what keeps a platform service out of a client relationship with\n // itself. Single-sourcing the identity is safe only once (a) the platform-plane\n // STS door exists and (b) the issuer is excluded from being its own client.\n // Until then this stays an env read. See F-G in\n // `.claude/plans/object-storage-root-credential-distribution.md`.\n && !!process.env.APPLICATION_ID;\n }\n\n /**\n * The credential source, built lazily so env is read at first use rather than\n * at construction — preserving the pre-existing behaviour that tests and\n * dynamic relayers rely on to re-use one instance under different env contexts.\n *\n * Credentials come from apps-manager as short-lived, prefix-confined STS\n * sessions. The env resolver that preceded this was DELETED rather than kept as\n * a fallback: a fallback would fire on any transient apps-manager hiccup,\n * succeed with the ROOT credential, and leave no signal that the confinement\n * had been bypassed.\n */\n private getCredentialProvider(): StorageCredentialProvider {\n if (this.credentialProvider) return this.credentialProvider;\n\n this.credentialProvider = new StorageCredentialProvider(\n this.credentialResolverOverride\n // Identity from CONFIGURATION, single-sourced with the object-key builder\n // (`resolveStorageApplicationIdentity`) rather than re-read from env.\n ?? createStsStorageCredentialResolver(() => resolveStorageApplicationIdentity(this.appConfigService)),\n );\n return this.credentialProvider;\n }\n\n /**\n * Eagerly initialize the MinIO client and verify bucket access.\n * Call this at startup to fail fast on misconfiguration.\n * If not called, the client is created lazily on first operation.\n */\n async initialize(): Promise<void> {\n await this.getClient();\n }\n\n /**\n * Obtain (and renew) the session credential WITHOUT building a client.\n *\n * Split out of `getClient()` so the object-key authorization guard can run\n * before any minio client exists. The guard needs the CONFINED applicationId,\n * which only arrives with the credential — so the order has to be\n * credentials → guard → client, not guard → credentials → client.\n *\n * The pinned property survives: no client is constructed for a rejected\n * `storageRef`. What changes is that a rejected ref now costs a credential\n * LOOKUP — which `StorageCredentialProvider` caches for the session lifetime,\n * so in practice it is a cache read rather than a round trip.\n *\n * Config is validated FIRST so an unconfigured runtime fails with a precise\n * CONFIGURATION error rather than an opaque credential one, and does not make a\n * pointless apps-manager round-trip on its way to failing.\n */\n private async ensureCredentials(): Promise<ResolvedStorageCredentials> {\n const connection = this.managedConnection;\n const endpoint = connection?.endpoint;\n const port = connection?.port ?? INFRA_DEFAULT_PORTS.MINIO;\n const useSSL = connection?.useSsl ?? false;\n\n // Configuration is validated BEFORE credentials are fetched — both so an\n // unconfigured runtime fails with a precise CONFIGURATION error rather than\n // an opaque credential error, and so it does not make a pointless\n // apps-manager round-trip on its way to failing.\n //\n // The required set changed with the credential source: the storage keys are\n // gone (they were the ROOT credential) and what is needed now is the\n // endpoint plus the bootstrap contract used to fetch session credentials.\n if (!endpoint || !this.isConfigured()) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n message:\n 'Incomplete managed storage configuration. Required: storage.managed.endpoint (from STORAGE_ENDPOINT), '\n + 'PLATFORM_APPS_MANAGER_URL, PLATFORM_APPLICATION_PRIMARY_SECRET, APPLICATION_ID',\n hasEndpoint: !!endpoint,\n hasAppsManagerUrl: !!process.env.PLATFORM_APPS_MANAGER_URL,\n hasPrimarySecret: !!process.env.PLATFORM_APPLICATION_PRIMARY_SECRET,\n // Env, matching `isConfigured()` — the flag must name the SAME source\n // the predicate gates on, or the diagnostic sends the reader to a\n // value that was never the cause.\n hasApplicationId: !!process.env.APPLICATION_ID,\n },\n }\n );\n }\n\n // Renew, THEN decide whether the cached client is still usable. Checking the\n // cache first would return a client bound to an expired session and the\n // failure would surface as an opaque auth error mid-upload.\n let credentials;\n try {\n credentials = await this.getCredentialProvider().getCredentials();\n } catch (error) {\n // Fail closed, but as a typed CONFIGURATION error so callers and the\n // readiness probe can classify it — not as a bare Error escaping from the\n // resolver.\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n operation: 'acquire_storage_credentials',\n message: 'Could not obtain object storage session credentials from apps-manager.',\n error: describeCaughtError(error),\n },\n }\n );\n }\n\n return credentials;\n }\n\n /**\n * The minio client for the CURRENT credential, rebuilt when that credential\n * changes. Renew first, THEN decide whether the cached client is still usable:\n * checking the cache first would return a client bound to an expired session and\n * the failure would surface as an opaque auth error mid-upload.\n */\n private async getClient(): Promise<Client> {\n const credentials = await this.ensureCredentials();\n const connection = this.managedConnection;\n const endpoint = connection?.endpoint ?? '';\n const port = connection?.port ?? INFRA_DEFAULT_PORTS.MINIO;\n const useSSL = connection?.useSsl ?? false;\n\n if (this.client && this.clientAccessKey === credentials.accessKey) {\n return this.client;\n }\n\n const endpointUrl = endpoint.includes('://')\n ? new URL(endpoint)\n : new URL(`http${useSSL ? 's' : ''}://${endpoint}`);\n\n const options: ClientOptions = {\n endPoint: endpointUrl.hostname,\n port: endpointUrl.port ? parseInt(endpointUrl.port, 10) : port,\n useSSL: useSSL || endpointUrl.protocol === 'https:',\n accessKey: credentials.accessKey,\n secretKey: credentials.secretKey,\n // Present only for an STS session credential; a long-lived credential\n // carries none and the field stays undefined.\n ...(credentials.sessionToken ? { sessionToken: credentials.sessionToken } : {}),\n region: DEFAULT_STORAGE_REGION,\n // Keeps every upload on the single-PutObject path. The multipart branch\n // opens with a BUCKET-level ListMultipartUploads that a prefix-confined\n // session cannot be granted — see MAX_SINGLE_PUT_OBJECT_SIZE_BYTES.\n partSize: PART_SIZE_BYTES,\n };\n\n const client = new Client(options);\n\n // ⚠️ NO `bucketExists()` PROBE HERE — deliberately. This is F-D.\n //\n // The probe used to live here (and before that, `makeBucket()`). Under a\n // prefix-confined session credential it can NEVER succeed: `bucketExists()`\n // issues HeadBucket, which S3 authorises via `s3:ListBucket`, and the session\n // policy grants `ListBucket` only under `Condition StringLike s3:prefix`.\n // HeadBucket carries no prefix, so the condition cannot match and the call is\n // refused `AccessDenied` — on a credential whose object operations work\n // perfectly. Keeping it broke EVERY file operation in dev, in the backend and\n // in every minion, with a message pointing at credentials rather than at the\n // probe.\n //\n // Do NOT \"fix\" this by adding an unconditioned `ListBucket` to the policy.\n // That is the tempting repair and it re-grants bucket-wide enumeration —\n // every other application's object keys — to close a check that buys nothing:\n // bucket existence is already guaranteed platform-side by\n // `ObjectStorageStsBrokerService.ensureBucketExists()`, which runs with admin\n // rights on the credential-issuance path immediately before this client is\n // built. A missing bucket now surfaces at the first real operation, which is\n // where a genuine storage fault belongs.\n //\n // See `.claude/plans/object-storage-root-credential-distribution.md` (F-D).\n\n this.client = client;\n // Stamped together with the client so the cache check above can tell a\n // still-valid client from one bound to a superseded credential.\n this.clientAccessKey = credentials.accessKey;\n return client;\n }\n\n /**\n * The application identity object keys are built from — taken from the CREDENTIAL,\n * i.e. the subject the issuer confined the session policy to.\n *\n * Not `resolveStorageApplicationIdentity(appConfigService)`. That was the client's\n * own answer to the same question, and when the two disagreed the credential was\n * confined to one subtree while the client addressed another — every operation\n * failing `Valid and authorized credentials required` with both halves passing\n * their own tests. `assertPolicySafeApplicationId` requires a 24-hex ObjectId, so\n * the policy side cannot be bent to match the client; the client must take the\n * issuer's value.\n *\n * FAILS CLOSED when the issuer supplied none. Falling back to the local identity\n * is precisely the reintroduction of the split — it would work for applications\n * (where the two happen to agree) and silently mis-address for everything else,\n * which is the failure mode that took a day to find.\n */\n private async getApplicationId(executionContext: ExecutionContext<any>): Promise<string> {\n const credentials = await this.ensureCredentials();\n const applicationId = credentials.applicationId;\n\n if (!applicationId) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n operation: 'resolve_confined_application_identity',\n message:\n 'The object storage credential did not name the application it is confined to, so no '\n + 'object key can be addressed. The issuer must return `applicationId` alongside the '\n + 'session credential.',\n },\n }\n );\n }\n\n validateAppId(applicationId, this.errorBuilder, executionContext, 'applicationId');\n return applicationId;\n }\n\n /**\n * Resolve the canonical app-level object-key namespace prefix\n * (Slice 3.6).\n *\n * Sourced from `storage.managed.bucketPrefix`, which the configuration loader\n * seeds from `STORAGE_BUCKET_PREFIX`, originating from\n * `wildo.saas.config.dataServices.s3.bucketPrefix`. When set, every\n * application object key produced by `resolveApplicationObjectKey()`\n * (and every authorized `storageRef` it accepts) is prefixed with\n * `${bucketPrefix}/`. The bucket itself remains infra-controlled — N apps\n * can share one bucket with disjoint object trees.\n *\n * Cosmetic only: tenant isolation is enforced by the session policy, which\n * keys on the platform-minted `applicationId` and never on this value.\n *\n * Read lazily on every call (rather than cached at construction) so a\n * configuration change is observed without rebuilding the provider.\n */\n private resolveBucketPrefix(): string {\n const raw = this.managedConnection?.bucketPrefix;\n if (!raw) return '';\n const trimmed = raw.trim();\n return trimmed.length === 0 ? '' : `${trimmed.replace(/\\/+$/, '')}/`;\n }\n\n /**\n * Refuse any key fragment carrying a `.` or `..` segment.\n *\n * ## Why the managed provider needs this at all\n *\n * The local-directory provider has always had a traversal guard\n * (`resolveSafePathFromRelative`: `path.resolve` + a `startsWith(base + sep)` check). This\n * provider had NONE — an S3 key is an opaque string, never resolved by a filesystem, so a `..`\n * segment cannot escape a bucket and the guard looked unnecessary. It is not, for two reasons:\n *\n * 1. **The read guard below is textual.** `startsWith(expectedPrefix)` is satisfied by\n * `applications/<app>/files/x/../../../elsewhere/y`, so a stored ref carrying traversal passes\n * the one check that exists — and a future consumer that DOES normalize the key (a mirror to a\n * filesystem, an archive extraction, a signed-URL rewriter) inherits a ref that was never\n * checked.\n * 2. **A prefix is the tenant boundary here.** `<scope>/<scopeId>` exists so erasure, orphan\n * sweeps and per-tenant listing are prefix operations. A key whose literal text contains `..`\n * still lands under the prefix it was composed from, but it is unreadable as a path and no\n * normalizing tool downstream agrees with the sweep about which tenant owns it.\n *\n * The invariant is enforced HERE rather than at the resolver because `StorageUploadOptions` has\n * more than one producer: `FileStoragePathResolverBackendService` sanitizes (and is the only\n * app-authored source), but the audit-archive batch composes its own `folderPath` and never\n * passes through that sanitizer. This method is the single point every key — upload composition\n * AND every stored `storageRef` on download/delete/metadata — must pass.\n *\n * Fail-closed with AUTHORIZATION, matching the local provider's verdict for the same input, so\n * one authored value cannot mean two different things depending on which provider is bound.\n */\n private assertNoTraversalSegments(\n candidate: string,\n executionContext: ExecutionContext<any>,\n diagnostics: Record<string, unknown>,\n ): void {\n if (!storageKeyHasTraversalSegment(candidate)) {\n return;\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_PATH_TRAVERSAL_DETECTED,\n context: {\n // diagnostic (log-only)\n ...diagnostics,\n candidate,\n provider: this.providerId,\n },\n }\n );\n }\n\n private async resolveApplicationObjectKey(\n fileId: string,\n executionContext: ExecutionContext<any>,\n storageRef?: string,\n linkedResourceType?: ResourceType,\n fileScope?: FileScopeIdentifiers,\n ): Promise<string> {\n // Checked BEFORE the application identity is resolved: a traversal segment is a refusal that\n // needs no credential, and paying an apps-manager STS round trip to reject it would let a\n // hostile key fragment drive outbound requests.\n this.assertNoTraversalSegments(fileId, executionContext, { fileId, source: 'composed_key' });\n\n const applicationId = await this.getApplicationId(executionContext);\n const bucketPrefix = this.resolveBucketPrefix();\n // The relative key comes from the SHARED composer, so the local-directory provider addresses the\n // same blob at the same place. `bucketPrefix` is the one part that stays here: it is an\n // object-store namespacing knob (N applications sharing one bucket) with no meaning on a\n // filesystem, so it frames the shared key rather than living inside it.\n const defaultKey =\n bucketPrefix\n + composeApplicationStorageKey({ applicationId, leafPath: fileId, linkedResourceType, scope: fileScope });\n\n if (!storageRef) {\n return defaultKey;\n }\n\n const normalizedStorageRef = storageRef.trim();\n if (!normalizedStorageRef) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_REF_INVALID,\n context: {\n // diagnostic (log-only)\n fileId,\n applicationId,\n },\n }\n );\n }\n\n // A stored ref is checked for traversal too, not only the freshly-composed key. The prefix\n // check below is TEXTUAL, so `applications/<app>/files/x/../../../elsewhere/y` satisfies it;\n // the row it came from is not a trusted source just because it is persisted.\n this.assertNoTraversalSegments(normalizedStorageRef, executionContext, { fileId, applicationId, source: 'stored_storage_ref' });\n\n // The guard confines to the APPLICATION subtree, deliberately NOT to this call's resource\n // segment. A read of an already-stored blob supplies no `linkedResourceType`, so keying the\n // guard on the current call would reject every legitimate read of a linked file. Per-resource\n // confinement is the session policy's job (it is minted per principal); this guard's job is\n // that a `storageRef` from a row cannot escape the application.\n const expectedPrefix =\n bucketPrefix\n + `applications/${applicationId}/files/`;\n if (!normalizedStorageRef.startsWith(expectedPrefix)) {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_REF_FORBIDDEN,\n context: {\n // diagnostic (log-only)\n fileId,\n applicationId,\n storageRef: normalizedStorageRef,\n expectedPrefix,\n },\n }\n );\n }\n\n return normalizedStorageRef;\n }\n\n private convertStorageError(\n error: unknown,\n operation: 'upload' | 'download' | 'delete' | 'metadata',\n executionContext: ExecutionContext<any> | undefined,\n context: Record<string, unknown>,\n ): never {\n if (isWildoBackendError(error)) {\n throw error;\n }\n\n const errorMessage = describeCaughtError(error);\n // Classify on the S3 error CODE first; the message is a fallback only.\n //\n // A message is prose an SDK is free to reword, and matching on substrings has\n // two real failure modes here: a benign message containing \"not found\" is\n // misread as a missing object, and — the one F-D made concrete — a genuine\n // `AccessDenied` whose message is phrased differently escapes classification\n // entirely and surfaces as a generic connectivity error, pointing the reader\n // at the wrong subsystem. The minio client exposes `code` on its errors, so\n // the reliable signal is available and was simply not being used.\n const errorCode = resolveStorageErrorCode(error);\n const errorMessageLower = errorMessage.toLowerCase();\n\n if (\n errorCode === 'NoSuchKey'\n || errorCode === 'NotFound'\n || errorCode === 'NoSuchBucket'\n || (!errorCode && (errorMessageLower.includes('nosuchkey') || errorMessageLower.includes('not found')))\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: {\n // diagnostic (log-only)\n operation,\n ...context,\n },\n }\n );\n }\n\n if (\n errorCode === 'AccessDenied'\n || errorCode === 'Forbidden'\n || errorCode === 'SignatureDoesNotMatch'\n || errorCode === 'InvalidAccessKeyId'\n || errorCode === 'ExpiredToken'\n || errorCode === 'InvalidToken'\n || (!errorCode && (\n errorMessageLower.includes('accessdenied')\n || errorMessageLower.includes('access denied')\n || errorMessageLower.includes('forbidden')\n || errorMessageLower.includes('signaturedoesnotmatch')\n || errorMessageLower.includes('invalidaccesskeyid')\n ))\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_ACCESS_DENIED,\n context: {\n // diagnostic (log-only)\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n if (\n errorMessageLower.includes('bucketnotfound')\n || errorMessageLower.includes('invalidbucketname')\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n message: 'Managed storage bucket configuration error',\n operation,\n bucketName: this.bucketName,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n if (\n errorMessageLower.includes('connection')\n || errorMessageLower.includes('timeout')\n || errorMessageLower.includes('econnrefused')\n || errorMessageLower.includes('network')\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.NETWORK,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.NETWORK,\n context: {\n message: 'Managed storage connection failed',\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n if (\n errorMessageLower.includes('stream')\n || errorMessageLower.includes('pipe')\n || errorMessageLower.includes('readable')\n ) {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: 'File stream error during storage operation',\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: `Managed storage operation failed: ${operation}`,\n operation,\n ...context,\n originalError: errorMessage,\n },\n }\n );\n }\n\n async upload(\n fileStream: Readable,\n fileId: string,\n mimeType: string,\n size: number,\n executionContext: ExecutionContext<any>,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n validateFileId(fileId, this.errorBuilder, executionContext, 'fileId');\n validateContentType(mimeType, this.errorBuilder, executionContext, 'mimeType');\n validateSize(\n size,\n resolveConfiguredMaxFileSize(this.appConfigService.config.storage?.maxFileSize),\n this.errorBuilder,\n executionContext,\n 'size',\n );\n validateStream(fileStream, this.errorBuilder, executionContext, 'fileStream');\n\n // Above this, the client would take the multipart branch, whose opening\n // ListMultipartUploads call a prefix-confined session cannot perform — the\n // store would answer a bare `AccessDenied` that reads as a credential fault.\n // Refuse here instead, naming the real reason. Reachable only when an\n // application configures `storage.maxFileSize` above the single-PUT ceiling;\n // `validateSize` has already applied that configured limit.\n // See MAX_SINGLE_PUT_OBJECT_SIZE_BYTES.\n if (size > MAX_SINGLE_PUT_OBJECT_SIZE_BYTES) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n // Same reference `validateContentLength` uses for a size violation —\n // this IS one, just against a provider ceiling rather than the\n // application's configured limit.\n customMessageReference: ErrorCustomMessageReference.CONTENT_LENGTH_VALIDATION_FAILED,\n context: {\n // diagnostic (log-only)\n fileId,\n size,\n reason: 'exceeds_single_put_ceiling',\n maxSinglePutSize: MAX_SINGLE_PUT_OBJECT_SIZE_BYTES,\n message:\n 'Object exceeds the single-PutObject ceiling for managed storage. Managed storage cannot use '\n + 'multipart upload under a prefix-confined credential; lower storage.maxFileSize to at most '\n + `${MAX_SINGLE_PUT_OBJECT_SIZE_BYTES} bytes.`,\n },\n }\n );\n }\n\n const effectiveFileId = composeStorageLeafPath(fileId, options);\n\n if (!effectiveFileId) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_KEY_COMPOSITION_FAILED,\n }\n );\n }\n\n const includeAppId = options?.includeApplicationId ?? true;\n const key = includeAppId\n ? await this.resolveApplicationObjectKey(effectiveFileId, executionContext, undefined, options?.linkedResourceType, options?.scope)\n : effectiveFileId;\n const client = await this.getClient();\n\n try {\n await client.putObject(\n this.bucketName,\n key,\n fileStream,\n size,\n {\n [WildoHeaderKeys.CONTENT_TYPE]: mimeType,\n },\n );\n } catch (error) {\n this.convertStorageError(error, 'upload', executionContext, {\n fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n\n return {\n storageRef: key,\n provider: this.providerId,\n };\n }\n\n async download(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageDownloadResult> {\n const key = await this.resolveApplicationObjectKey(file.fileId, executionContext, file.storageRef);\n const client = await this.getClient();\n let stream: Readable;\n let metadata: StorageFileMetadata;\n\n try {\n const stat = await client.statObject(this.bucketName, key);\n const contentType = stat.metaData[WildoHeaderKeys.CONTENT_TYPE];\n if (!contentType) {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: `Managed storage object metadata missing required ${WildoHeaderKeys.CONTENT_TYPE}`,\n fileId: file.fileId,\n storageRef: key,\n },\n },\n );\n }\n\n stream = await client.getObject(this.bucketName, key);\n metadata = {\n contentType,\n size: stat.size,\n etag: stat.etag,\n lastModified: stat.lastModified,\n };\n } catch (error) {\n this.convertStorageError(error, 'download', executionContext, {\n fileId: file.fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n\n return {\n stream,\n contentType: metadata.contentType,\n size: metadata.size,\n etag: metadata.etag,\n lastModified: metadata.lastModified,\n };\n }\n\n async delete(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<void> {\n const key = await this.resolveApplicationObjectKey(file.fileId, executionContext, file.storageRef);\n const client = await this.getClient();\n\n try {\n await client.removeObject(this.bucketName, key);\n } catch (error) {\n // Same code-first classification as `convertStorageError`: a delete of an\n // already-absent object is a no-op, but only when the store actually said\n // so. Inferring it from prose can swallow a real failure.\n const deleteErrorCode = resolveStorageErrorCode(error);\n const errorMessageLower = describeCaughtError(error).toLowerCase();\n if (\n deleteErrorCode === 'NoSuchKey'\n || deleteErrorCode === 'NotFound'\n || (!deleteErrorCode && (errorMessageLower.includes('nosuchkey') || errorMessageLower.includes('not found')))\n ) {\n return;\n }\n this.convertStorageError(error, 'delete', executionContext, {\n fileId: file.fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n }\n\n async getMetadata(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageFileMetadata> {\n const key = await this.resolveApplicationObjectKey(file.fileId, executionContext, file.storageRef);\n const client = await this.getClient();\n\n try {\n const stat = await client.statObject(this.bucketName, key);\n const contentType = stat.metaData[WildoHeaderKeys.CONTENT_TYPE];\n if (!contentType) {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: {\n message: `Managed storage object metadata missing required ${WildoHeaderKeys.CONTENT_TYPE}`,\n fileId: file.fileId,\n storageRef: key,\n },\n },\n );\n }\n\n return {\n contentType,\n size: stat.size,\n etag: stat.etag,\n lastModified: stat.lastModified,\n };\n } catch (error) {\n this.convertStorageError(error, 'metadata', executionContext, {\n fileId: file.fileId,\n storageRef: key,\n provider: this.providerId,\n });\n }\n }\n\n // =========================================================================\n // Health check\n // =========================================================================\n\n async healthCheck(): Promise<StorageProviderHealthResult> {\n const startTime = Date.now();\n\n // RECOVER, don't just report. This used to `return { healthy: false }` on a\n // null client and never try again — which turned any transient startup failure\n // into a PERMANENT one: `initialize()` runs once, so a client that failed to\n // build at boot was never rebuilt, storage stayed unhealthy for the process\n // lifetime, and `/health/ready` answered 503 forever while `/health` looked\n // fine. That is the documented \"port open + /health healthy + /health/ready 503\n // forever\" state (`platform/CLAUDE.md`), reached without any ongoing fault.\n //\n // Observed exactly that way on apps-manager: the credential fetch was refused\n // at boot, the listener came up 0.4s later, and nothing retried. A readiness\n // probe is the natural retry point — it is called repeatedly, by design, and a\n // dependency that has come back should be allowed to say so.\n //\n // `getClient()` is idempotent and caches, so a healthy probe costs no extra\n // work; a still-failing one reports the CURRENT reason instead of the stale\n // \"not initialized\".\n if (!this.client) {\n try {\n await this.getClient();\n } catch (error) {\n return { healthy: false, latency: Date.now() - startTime, error: describeCaughtError(error) };\n }\n }\n\n /**\n * Declared OUTSIDE the try so the credential-rejection retry below can probe the SAME key.\n * Recomputing it there would ask a different question than the one that just failed.\n */\n let probeKey = '';\n\n try {\n // ⚠️ Probes with an OBJECT-level call, not `bucketExists()`. Second site of\n // F-D, and the more damaging one: this is the readiness dependency behind\n // `/health/ready`, so a probe the credential cannot satisfy produces the\n // documented \"port open + /health healthy + /health/ready 503 forever\"\n // state (see `platform/CLAUDE.md`) — with remote clients looping on\n // \"Remote API not ready\" and nothing pointing at storage.\n //\n // `bucketExists()` issues HeadBucket, authorised by an UNCONDITIONED\n // `s3:ListBucket`. The session policy grants `ListBucket` only under\n // `Condition StringLike s3:prefix`, and HeadBucket sends no prefix, so it\n // can never pass. `statObject` on a key inside this application's own\n // prefix is authorised by the policy's object statements, which is what the\n // credential is actually for.\n //\n // A `NoSuchKey` reply is the HEALTHY answer: it proves the store was\n // reached AND the credential was accepted. Only a real refusal or transport\n // failure is unhealthy.\n // The probe key must sit inside the prefix the CREDENTIAL covers, not the\n // one the client would have guessed — otherwise readiness fails `AccessDenied`\n // on a perfectly good credential and blames storage. Same identity source as\n // every real operation, for the same reason.\n const probeApplicationId = (await this.ensureCredentials()).applicationId\n ?? this.appConfigService.applicationId;\n probeKey = `${this.resolveBucketPrefix()}`\n + API_ROUTES_BACKEND_DEFINITIONS.FILE_STORAGE.STORAGE_KEY_APPLICATION_FILE(\n probeApplicationId,\n '__storage_healthcheck__',\n // The probe has no File row and no resource. It must sit under the SAME staging segment\n // a real unlinked blob uses — once the session policy narrows per resource, a probe key\n // outside every granted prefix would fail `AccessDenied` on a perfectly good credential\n // and report storage unhealthy.\n UNLINKED_STORAGE_SEGMENT,\n ResourcePrimaryScope.APPLICATION,\n probeApplicationId,\n );\n\n // `this.client!` — the recovery branch above either populated it or returned.\n await this.client!.statObject(this.bucketName, probeKey);\n return { healthy: true, latency: Date.now() - startTime };\n } catch (error) {\n const code = resolveStorageErrorCode(error);\n if (code === 'NoSuchKey' || code === 'NotFound') {\n return { healthy: true, latency: Date.now() - startTime };\n }\n\n /**\n * A credential the STORE REJECTS is re-acquired, not held until it expires.\n *\n * The provider refreshes on EXPIRY only — its contract says so explicitly (\"Refresh before\n * expiry, not after failure\"), and that is right for the ordinary case: callers should never\n * observe an expired credential. But it leaves one state unrecoverable, and this is the probe\n * that meets it. A session can become invalid while still unexpired — the object store\n * restarts and forgets its STS sessions, or the parent credential rotates underneath it. The\n * cached credential then stays \"fresh\" by the clock and is refused by the store on every call.\n *\n * Measured 2026-08-22: THREE platform runtimes (crontabs, apps-manager, the dev companion)\n * held such a credential for ~27 HOURS. `/health` stayed 200 while `/health/ready` answered\n * 503 the whole time, and the application backend logged `Remote API not ready` 2,384 times\n * against one of them. Restarting each process cleared it — which is the definition of a\n * defect that requires manual intervention, and it is exactly the state\n * `platform/CLAUDE.md` describes as \"port open + /health healthy + /health/ready 503 forever\".\n *\n * `StorageCredentialProvider.invalidate()` existed for precisely this — its own JSDoc says\n * \"for an explicit re-acquire after a hard failure\" — and NOTHING called it, in production or\n * in a test. A capability with no door: the third found in this workstream, after\n * `usePostgreSQL` and `MongoDBService.overrideUri`.\n *\n * Retried ONCE, and only for a rejection that names a credential problem. A blanket retry\n * would mask a genuine outage as latency, and a retry loop on a store that is simply down\n * would turn a readiness probe into a stall. One attempt distinguishes \"this credential is\n * stale\" from \"the store is unreachable\", which is the only question this probe has to answer.\n */\n if (this.isCredentialRejection(code, error)) {\n this.credentialProvider?.invalidate();\n this.client = null;\n this.clientAccessKey = undefined;\n\n try {\n const retryClient = await this.getClient();\n await retryClient.statObject(this.bucketName, probeKey);\n this.logger.info(\n 'Object storage credential was refused and has been re-acquired; storage is healthy again.',\n );\n return { healthy: true, latency: Date.now() - startTime };\n } catch (retryError) {\n const retryCode = resolveStorageErrorCode(retryError);\n if (retryCode === 'NoSuchKey' || retryCode === 'NotFound') {\n this.logger.info(\n 'Object storage credential was refused and has been re-acquired; storage is healthy again.',\n );\n return { healthy: true, latency: Date.now() - startTime };\n }\n return {\n healthy: false,\n latency: Date.now() - startTime,\n error: describeCaughtError(retryError),\n };\n }\n }\n\n return { healthy: false, latency: Date.now() - startTime, error: describeCaughtError(error) };\n }\n }\n\n /**\n * Whether a failure says \"this CREDENTIAL is not accepted\" rather than \"the STORE is unavailable\".\n *\n * Only the first is worth re-acquiring for. The distinction is made on the error CODE where the\n * client supplies one, and falls back to the message otherwise — MinIO answers a rejected STS\n * session with `Valid and authorized credentials required`, which carries no S3 error code, and\n * that exact string is what the three stuck runtimes reported for 27 hours.\n */\n private isCredentialRejection(code: string | undefined, error: unknown): boolean {\n const CREDENTIAL_REJECTION_CODES = new Set([\n 'AccessDenied',\n 'InvalidAccessKeyId',\n 'SignatureDoesNotMatch',\n 'ExpiredToken',\n 'InvalidToken',\n 'TokenRefreshRequired',\n 'AuthorizationHeaderMalformed',\n ]);\n if (code && CREDENTIAL_REJECTION_CODES.has(code)) return true;\n\n const message = error instanceof Error ? error.message : String(error ?? '');\n return /valid and authorized credentials required|security token|access denied|invalid access key/i\n .test(message);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"file-field-schema-path.backend.utils.d.ts","sourceRoot":"","sources":["../../../../../src/files/utils/file-field-schema-path.backend.utils.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAeL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,oCAAqC,SAAQ,KAAK;aAE3C,SAAS,EAAE,MAAM;aACjB,gBAAgB,EAAE,kBAAkB;aACpC,mBAAmB,EAAE,kBAAkB;gBAFvC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,kBAAkB,EACpC,mBAAmB,EAAE,kBAAkB;CAO1D;AAED,qBAAa,yCAA0C,SAAQ,KAAK;aACtC,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAM9C;AAED,qBAAa,+CAAgD,SAAQ,KAAK;aAC5C,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAM9C;AAkFD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,EAChC,UAAU,GAAE,MAAW,EACvB,aAAa,GAAE,OAAO,CAAC,MAAM,CAAyB,GACrD,+BAA+B,EAAE,CAyHnC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAChB,+BAA+B,GAAG,SAAS,CAI7C;AAaD,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,EACb,kBAAkB,EAAE,MAAM,GACzB,wBAAwB,EAAE,CAuD5B;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,OAAO,EAClB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAsCT;AAED,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,OAAO,GACjB,OAAO,CAgCT;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,EAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CAqCN"}
1
+ {"version":3,"file":"file-field-schema-path.backend.utils.d.ts","sourceRoot":"","sources":["../../../../src/files/utils/file-field-schema-path.backend.utils.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAeL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,oCAAqC,SAAQ,KAAK;aAE3C,SAAS,EAAE,MAAM;aACjB,gBAAgB,EAAE,kBAAkB;aACpC,mBAAmB,EAAE,kBAAkB;gBAFvC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,kBAAkB,EACpC,mBAAmB,EAAE,kBAAkB;CAO1D;AAED,qBAAa,yCAA0C,SAAQ,KAAK;aACtC,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAM9C;AAED,qBAAa,+CAAgD,SAAQ,KAAK;aAC5C,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAM9C;AAkFD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,EAChC,UAAU,GAAE,MAAW,EACvB,aAAa,GAAE,OAAO,CAAC,MAAM,CAAyB,GACrD,+BAA+B,EAAE,CAyHnC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAChB,+BAA+B,GAAG,SAAS,CAI7C;AAaD,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,EACb,kBAAkB,EAAE,MAAM,GACzB,wBAAwB,EAAE,CAuD5B;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,OAAO,EAClB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAsCT;AAED,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,OAAO,GACjB,OAAO,CAgCT;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,EAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CAqCN"}