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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1056) hide show
  1. package/dist/esm/__tests__/fixture-deep-partial.d.ts.map +1 -1
  2. package/dist/esm/__tests__/integration/redis-integration-gate.d.ts.map +1 -1
  3. package/dist/esm/__tests__/setup.d.ts.map +1 -1
  4. package/dist/esm/__tests__/test-container.d.ts.map +1 -1
  5. package/dist/esm/applications/models/applications.backend.schemas.d.ts.map +1 -1
  6. package/dist/esm/applications/seeds/application-metadata-defaults.seeds.d.ts.map +1 -1
  7. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
  8. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
  9. package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
  10. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
  11. package/dist/esm/base-classes/models/repositories.backend.schemas.d.ts.map +1 -1
  12. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts +1 -1
  13. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts.map +1 -1
  14. package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.d.ts.map +1 -1
  15. package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.d.ts.map +1 -1
  16. package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.d.ts.map +1 -1
  17. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -1
  18. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -1
  19. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -1
  20. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +12 -1
  21. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -1
  22. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
  23. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
  24. package/dist/esm/base-classes/services/batches/resource-retention-sweep.batch.backend.service.d.ts.map +1 -1
  25. package/dist/esm/base-classes/services/batches/suspension-reactivation-sweep.batch.backend.service.d.ts.map +1 -1
  26. package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.d.ts.map +1 -1
  27. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
  28. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
  29. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
  30. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
  31. package/dist/esm/base-classes/services/controllers/utils/audit-access-fields.backend.utils.d.ts.map +1 -1
  32. package/dist/esm/base-classes/services/controllers/utils/operation-response-serializer.backend.utils.d.ts.map +1 -1
  33. package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.d.ts.map +1 -1
  34. package/dist/esm/base-classes/services/repositories/__tests__/method-span-scan.guard-helpers.d.ts.map +1 -1
  35. package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.d.ts.map +1 -1
  36. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
  37. package/dist/esm/base-classes/services/repositories/http-api/http-api-filter-translation.backend.d.ts.map +1 -1
  38. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
  39. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +13 -4
  40. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
  41. package/dist/esm/base-classes/services/repositories/http-api/http-api-query.backend.d.ts.map +1 -1
  42. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
  43. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +17 -0
  44. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
  45. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
  46. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
  47. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -1
  48. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -1
  49. package/dist/esm/base-classes/services/repositories/http-api/http-api-row-projection.backend.d.ts.map +1 -1
  50. package/dist/esm/base-classes/services/repositories/http-api/http-api-subject-erasure-effect.backend.d.ts.map +1 -1
  51. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
  52. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
  53. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
  54. package/dist/esm/base-classes/services/repositories/http-api/odoo-jsonrpc-compiler.backend.d.ts.map +1 -1
  55. package/dist/esm/base-classes/services/repositories/http-api/rest-json-query-compiler.backend.d.ts.map +1 -1
  56. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
  57. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
  58. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
  59. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
  60. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +57 -0
  61. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
  62. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +95 -2
  63. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
  64. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
  65. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
  66. package/dist/esm/base-classes/services/repositories/repository-guarded-mutation.backend.types.d.ts.map +1 -1
  67. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +5 -2
  68. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
  69. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +14 -3
  70. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
  71. package/dist/esm/base-classes/services/repositories/repository-version-metadata.backend.utils.d.ts.map +1 -1
  72. package/dist/esm/base-classes/services/repositories/resource-write-integrity.backend.d.ts.map +1 -1
  73. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts +72 -0
  74. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts.map +1 -0
  75. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js +88 -0
  76. package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js.map +1 -0
  77. package/dist/esm/base-classes/services/repositories/unique-constraint-conflict-reference.backend.d.ts.map +1 -1
  78. package/dist/esm/base-classes/services/resource-operations-helper.backend.service.d.ts.map +1 -1
  79. package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.d.ts.map +1 -1
  80. package/dist/esm/base-classes/services/services/__tests__/mock-system-access.service.d.ts.map +1 -1
  81. package/dist/esm/base-classes/services/services/read-only-field-change.backend.utils.d.ts.map +1 -1
  82. package/dist/esm/base-classes/services/services/resource-operation-audit-emission.backend.utils.d.ts.map +1 -1
  83. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
  84. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
  85. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts.map +1 -1
  86. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts.map +1 -1
  87. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
  88. package/dist/esm/base-classes/services/services/resource-operation-server-injected-fields.backend.utils.d.ts.map +1 -1
  89. package/dist/esm/base-classes/services/services/resource-operation-transaction-persistence.backend.utils.d.ts.map +1 -1
  90. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
  91. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
  92. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
  93. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
  94. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
  95. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +44 -6
  96. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
  97. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
  98. package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
  99. package/dist/esm/base-classes/utils/backend-type-utils.d.ts.map +1 -1
  100. package/dist/esm/base-classes/utils/single-subject-addressing.backend.utils.d.ts.map +1 -1
  101. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -1
  102. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -1
  103. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -1
  104. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -1
  105. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -1
  106. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -1
  107. package/dist/esm/billing/services/back-office/abstract-billing.backend.service.d.ts.map +1 -1
  108. package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.d.ts.map +1 -1
  109. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +1 -1
  110. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -1
  111. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +5 -4
  112. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -1
  113. package/dist/esm/billing/services/back-office/billing-state.backend.service.d.ts.map +1 -1
  114. package/dist/esm/billing/services/back-office/billing-state.backend.service.js +11 -1
  115. package/dist/esm/billing/services/back-office/billing-state.backend.service.js.map +1 -1
  116. package/dist/esm/billing/services/back-office/billing-subject-erasure-effect.backend.d.ts.map +1 -1
  117. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
  118. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
  119. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
  120. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
  121. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -1
  122. package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -1
  123. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
  124. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
  125. package/dist/esm/billing/services/billing.utils.d.ts.map +1 -1
  126. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
  127. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
  128. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +32 -0
  129. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
  130. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +32 -1
  131. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
  132. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
  133. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
  134. package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  135. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  136. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
  137. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
  138. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
  139. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +9 -6
  140. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
  141. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +9 -6
  142. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
  143. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -1
  144. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -1
  145. package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.d.ts.map +1 -1
  146. package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.d.ts.map +1 -1
  147. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
  148. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +50 -3
  149. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
  150. package/dist/esm/billing/testing/billing-test-fixtures.d.ts.map +1 -1
  151. package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
  152. package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
  153. package/dist/esm/charts/controllers/chart.backend.controller.d.ts.map +1 -1
  154. package/dist/esm/charts/services/chart-registry.backend.service.d.ts +80 -7
  155. package/dist/esm/charts/services/chart-registry.backend.service.d.ts.map +1 -1
  156. package/dist/esm/charts/services/chart-registry.backend.service.js +115 -8
  157. package/dist/esm/charts/services/chart-registry.backend.service.js.map +1 -1
  158. package/dist/esm/companion-exports.d.ts.map +1 -1
  159. package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.d.ts.map +1 -1
  160. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.d.ts.map +1 -1
  161. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
  162. package/dist/esm/compliance/audit-trails/batches/immudb-audit-reconcile.batch.backend.service.d.ts.map +1 -1
  163. package/dist/esm/compliance/audit-trails/batches/siem-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  164. package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.d.ts.map +1 -1
  165. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
  166. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
  167. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +107 -4
  168. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
  169. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +176 -5
  170. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
  171. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
  172. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
  173. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
  174. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
  175. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
  176. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
  177. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -1
  178. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -1
  179. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
  180. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +21 -0
  181. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
  182. package/dist/esm/compliance/audit-trails/services/utils/ocsf-class-mapping.backend.utils.d.ts.map +1 -1
  183. package/dist/esm/compliance/audit-trails/services/utils/siem-dictionary.backend.utils.d.ts.map +1 -1
  184. package/dist/esm/compliance/audit-trails/services/utils/siem-ocsf-projection.backend.utils.d.ts.map +1 -1
  185. package/dist/esm/compliance/audit-trails/services/utils/siem-projection-contract.backend.utils.d.ts.map +1 -1
  186. package/dist/esm/compliance/audit-trails/utils/audit-actor.backend.utils.d.ts.map +1 -1
  187. package/dist/esm/compliance/audit-trails/utils/layer2-audit-provider-boot-diagnostic.backend.utils.d.ts.map +1 -1
  188. package/dist/esm/compliance/index.d.ts.map +1 -1
  189. package/dist/esm/compliance/privacy/retention-hide-predicate.backend.d.ts.map +1 -1
  190. package/dist/esm/compliance/privacy/services/subject-erasure-external-effects.backend.service.d.ts.map +1 -1
  191. package/dist/esm/compliance/privacy/services/subject-session-revocation.backend.service.d.ts.map +1 -1
  192. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
  193. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
  194. package/dist/esm/config/bootstrap/minion-initialization-projection.backend.d.ts.map +1 -1
  195. package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.d.ts.map +1 -1
  196. package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js +3 -0
  197. package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js.map +1 -1
  198. package/dist/esm/config/bootstrap/runtime-principal.backend.service.d.ts.map +1 -1
  199. package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
  200. package/dist/esm/config/models/app-config-secrets.backend.schemas.d.ts.map +1 -1
  201. package/dist/esm/config/models/app-config.backend-authored.definitions.d.ts.map +1 -1
  202. package/dist/esm/config/models/app-config.backend.schemas.d.ts +4 -4
  203. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
  204. package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
  205. package/dist/esm/config/models/app-env-config.backend.schemas.d.ts.map +1 -1
  206. package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts +36 -0
  207. package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts.map +1 -0
  208. package/dist/esm/config/models/apps-manager-transport.backend.definitions.js +36 -0
  209. package/dist/esm/config/models/apps-manager-transport.backend.definitions.js.map +1 -0
  210. package/dist/esm/config/models/config-mutation-boundary.utils.d.ts.map +1 -1
  211. package/dist/esm/config/models/postgresql-env-config.backend.schemas.d.ts.map +1 -1
  212. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
  213. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
  214. package/dist/esm/config/models/runtime-topology.backend.contracts.d.ts.map +1 -1
  215. package/dist/esm/config/services/__tests__/mock-app-configuration.service.d.ts.map +1 -1
  216. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
  217. package/dist/esm/config/services/app-configuration-loader.backend.service.js +3 -0
  218. package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
  219. package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
  220. package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
  221. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
  222. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
  223. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +12 -0
  224. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
  225. package/dist/esm/config/services/application-startup-config-validator.backend.service.js +28 -0
  226. package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
  227. package/dist/esm/data-seeding/batches/data-seeding-run-cleanup.batch.backend.service.d.ts.map +1 -1
  228. package/dist/esm/data-seeding/batches/data-seeding-scheduled-rerun.batch.backend.service.d.ts.map +1 -1
  229. package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.contracts.d.ts.map +1 -1
  230. package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.controller.d.ts.map +1 -1
  231. package/dist/esm/data-seeding/data-seeding-models.d.ts.map +1 -1
  232. package/dist/esm/data-seeding/models/business-key-resolver.shared.utils.d.ts.map +1 -1
  233. package/dist/esm/data-seeding/models/data-seed-execution-context.shared.types.d.ts.map +1 -1
  234. package/dist/esm/data-seeding/models/data-seed-migrator-runner.shared.utils.d.ts.map +1 -1
  235. package/dist/esm/data-seeding/models/data-seed-reconciler.shared.utils.d.ts.map +1 -1
  236. package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.schemas.d.ts.map +1 -1
  237. package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.utils.d.ts.map +1 -1
  238. package/dist/esm/data-seeding/models/data-seed-run.shared.resources-config.schemas.d.ts.map +1 -1
  239. package/dist/esm/data-seeding/models/data-seed-run.shared.schemas.d.ts.map +1 -1
  240. package/dist/esm/data-seeding/models/data-seed-trigger-mode-matrix.shared.utils.d.ts.map +1 -1
  241. package/dist/esm/data-seeding/models/data-seed.shared.schemas.d.ts.map +1 -1
  242. package/dist/esm/data-seeding/services/data-seed-application-bootstrap.backend.d.ts.map +1 -1
  243. package/dist/esm/data-seeding/services/data-seed-dispatcher.backend.service.d.ts.map +1 -1
  244. package/dist/esm/data-seeding/services/data-seed-registry.backend.service.d.ts.map +1 -1
  245. package/dist/esm/data-seeding/services/data-seed-scope-resolver-registry.backend.service.d.ts.map +1 -1
  246. package/dist/esm/data-seeding/services/engines/additive-seed-engine.backend.service.d.ts.map +1 -1
  247. package/dist/esm/data-seeding/services/engines/lazy-seed-engine.backend.service.d.ts.map +1 -1
  248. package/dist/esm/data-seeding/services/engines/manual-seed-engine.backend.service.d.ts.map +1 -1
  249. package/dist/esm/data-seeding/services/engines/sync-seed-engine.backend.service.d.ts.map +1 -1
  250. package/dist/esm/data-seeding/services/engines/upgrade-seed-engine.backend.service.d.ts.map +1 -1
  251. package/dist/esm/data-seeding/services/shared/data-seed-business-key.shared.utils.d.ts.map +1 -1
  252. package/dist/esm/data-seeding/services/shared/data-seed-error.shared.utils.d.ts.map +1 -1
  253. package/dist/esm/data-seeding/services/shared/data-seed-run-counters.shared.types.d.ts.map +1 -1
  254. package/dist/esm/data-seeding/services/shared/data-seed-run-ledger.backend.d.ts.map +1 -1
  255. package/dist/esm/data-seeding/services/shared/data-seed-scope-anchor.shared.types.d.ts.map +1 -1
  256. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts.map +1 -1
  257. package/dist/esm/data-seeding/services/shared/data-seed-scope-resolution.backend.d.ts.map +1 -1
  258. package/dist/esm/databases/models/aggregation.backend.schemas.d.ts.map +1 -1
  259. package/dist/esm/databases/models/databases.backend.schemas.d.ts.map +1 -1
  260. package/dist/esm/databases/models/filter.backend.schemas.d.ts.map +1 -1
  261. package/dist/esm/databases/models/resolve-persistence-adapter.backend.utils.d.ts.map +1 -1
  262. package/dist/esm/databases/models/sql.backend.schemas.d.ts.map +1 -1
  263. package/dist/esm/databases/models/transaction.shared.schemas.d.ts.map +1 -1
  264. package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.d.ts.map +1 -1
  265. package/dist/esm/databases/services/__tests__/mock-mongodb.service.d.ts.map +1 -1
  266. package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.d.ts.map +1 -1
  267. package/dist/esm/databases/services/__tests__/mock-redis.service.d.ts.map +1 -1
  268. package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.d.ts.map +1 -1
  269. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
  270. package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.d.ts.map +1 -1
  271. package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.d.ts.map +1 -1
  272. package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.d.ts.map +1 -1
  273. package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.d.ts.map +1 -1
  274. package/dist/esm/databases/services/aggregation/topn-processor.backend.service.d.ts.map +1 -1
  275. package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.d.ts.map +1 -1
  276. package/dist/esm/databases/services/db-utils.d.ts.map +1 -1
  277. package/dist/esm/databases/services/mongo-aggregation.backend.service.d.ts.map +1 -1
  278. package/dist/esm/databases/services/mongodb.service.d.ts.map +1 -1
  279. package/dist/esm/databases/services/postgresql-aggregation.backend.service.d.ts.map +1 -1
  280. package/dist/esm/databases/services/postgresql-database.backend.service.d.ts.map +1 -1
  281. package/dist/esm/databases/services/postgresql-development-provisioning.backend.d.ts.map +1 -1
  282. package/dist/esm/databases/services/postgresql-filter.backend.service.d.ts.map +1 -1
  283. package/dist/esm/databases/services/postgresql-migration-runner.backend.d.ts.map +1 -1
  284. package/dist/esm/databases/services/postgresql-schema-ddl.backend.d.ts.map +1 -1
  285. package/dist/esm/databases/services/postgresql-schema-migration-sql.backend.d.ts.map +1 -1
  286. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
  287. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
  288. package/dist/esm/databases/services/postgresql-schema-plan-lockfile.backend.d.ts.map +1 -1
  289. package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
  290. package/dist/esm/databases/services/resource-persistence-unit-of-work.backend.service.d.ts.map +1 -1
  291. package/dist/esm/databases/services/schema-planning-standalone.backend.d.ts.map +1 -1
  292. package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.d.ts.map +1 -1
  293. package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.d.ts.map +1 -1
  294. package/dist/esm/databases/utils/postgresql-identifier.backend.utils.d.ts.map +1 -1
  295. package/dist/esm/errors/services/__tests__/mock-error-builder.service.d.ts.map +1 -1
  296. package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
  297. package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
  298. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
  299. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
  300. package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
  301. package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
  302. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
  303. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
  304. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
  305. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
  306. package/dist/esm/external-data/batches/external-data-pipeline-scheduled-run.batch.backend.service.d.ts.map +1 -1
  307. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -1
  308. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -1
  309. package/dist/esm/external-data/external-data-extraction-source.backend.d.ts.map +1 -1
  310. package/dist/esm/external-data/external-data-models.exports.d.ts.map +1 -1
  311. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
  312. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
  313. package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
  314. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
  315. package/dist/esm/external-providers/models/external-providers.backend.schemas.d.ts.map +1 -1
  316. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
  317. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
  318. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +102 -52
  319. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -1
  320. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +117 -71
  321. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -1
  322. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -1
  323. package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -1
  324. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -1
  325. package/dist/esm/external-providers/operations/provider-request-signing.backend.js +26 -7
  326. package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -1
  327. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -1
  328. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -1
  329. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
  330. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
  331. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -1
  332. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -1
  333. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
  334. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
  335. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts +81 -34
  336. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
  337. package/dist/esm/external-providers/services/document-extraction.backend.service.js +179 -98
  338. package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
  339. package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
  340. package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
  341. package/dist/esm/external-providers/services/external-api-handler.backend.service.d.ts.map +1 -1
  342. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +121 -0
  343. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
  344. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +151 -0
  345. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
  346. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts +15 -1
  347. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
  348. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +60 -4
  349. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
  350. package/dist/esm/features/controllers/features.backend.controller.d.ts.map +1 -1
  351. package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.d.ts.map +1 -1
  352. package/dist/esm/features/services/__tests__/mock-feature-resolution.service.d.ts.map +1 -1
  353. package/dist/esm/features/services/application-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
  354. package/dist/esm/features/services/feature-definition-registry.backend.service.d.ts.map +1 -1
  355. package/dist/esm/features/services/feature-gate.backend.service.d.ts.map +1 -1
  356. package/dist/esm/features/services/feature-resolution.backend.service.d.ts.map +1 -1
  357. package/dist/esm/features/services/organization-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
  358. package/dist/esm/features/services/scope-feature-ledger-relationship.backend.utils.d.ts.map +1 -1
  359. package/dist/esm/features/services/scope-features-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
  360. package/dist/esm/features/testing/feature-test-utils.d.ts.map +1 -1
  361. package/dist/esm/files/batches/files-cleanup.batch.backend.service.d.ts.map +1 -1
  362. package/dist/esm/files/constraints/file-analyzers.types.d.ts.map +1 -1
  363. package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.d.ts.map +1 -1
  364. package/dist/esm/files/constraints/file-constraint.types.d.ts.map +1 -1
  365. package/dist/esm/files/constraints/file-validation.backend.service.d.ts.map +1 -1
  366. package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.d.ts.map +1 -1
  367. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
  368. package/dist/esm/files/controllers/file.controller.js.map +1 -1
  369. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -1
  370. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -1
  371. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +37 -0
  372. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
  373. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +221 -21
  374. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
  375. package/dist/esm/files/scanning/clamav-scanner.backend.service.d.ts.map +1 -1
  376. package/dist/esm/files/scanning/file-scan.types.d.ts.map +1 -1
  377. package/dist/esm/files/scanning/yara-scanner.backend.service.d.ts.map +1 -1
  378. package/dist/esm/files/scanning/yara-scanner.backend.service.js +20 -2
  379. package/dist/esm/files/scanning/yara-scanner.backend.service.js.map +1 -1
  380. package/dist/esm/files/services/__tests__/mock-file-field-detection.service.d.ts.map +1 -1
  381. package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.d.ts.map +1 -1
  382. package/dist/esm/files/services/__tests__/mock-file-repository.service.d.ts.map +1 -1
  383. package/dist/esm/files/services/file-field-detection.backend.service.d.ts.map +1 -1
  384. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
  385. package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
  386. package/dist/esm/files/services/file-population.backend.service.d.ts.map +1 -1
  387. package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
  388. package/dist/esm/files/services/file-scanning.backend.service.js +5 -0
  389. package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
  390. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
  391. package/dist/esm/files/services/file-text-extraction.backend.service.js +8 -5
  392. package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
  393. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
  394. package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
  395. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
  396. package/dist/esm/files/services/files.backend.service.js +3 -1
  397. package/dist/esm/files/services/files.backend.service.js.map +1 -1
  398. package/dist/esm/files/services/rag-source-field-detection.backend.service.d.ts.map +1 -1
  399. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -1
  400. package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -1
  401. package/dist/esm/files/storage/file-storage-path-resolver.backend.service.d.ts.map +1 -1
  402. package/dist/esm/files/storage/file-storage-provider.types.d.ts +36 -1
  403. package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
  404. package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
  405. package/dist/esm/files/storage/file-storage-router.backend.service.d.ts +21 -3
  406. package/dist/esm/files/storage/file-storage-router.backend.service.d.ts.map +1 -1
  407. package/dist/esm/files/storage/file-storage-router.backend.service.js +38 -5
  408. package/dist/esm/files/storage/file-storage-router.backend.service.js.map +1 -1
  409. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts +87 -0
  410. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts.map +1 -0
  411. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js +340 -0
  412. package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js.map +1 -0
  413. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
  414. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
  415. package/dist/esm/files/storage/storage-credential-provider.backend.utils.d.ts.map +1 -1
  416. package/dist/esm/files/storage/storage-platform-sts-credential-resolver.backend.utils.d.ts.map +1 -1
  417. package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.d.ts.map +1 -1
  418. package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js +10 -3
  419. package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js.map +1 -1
  420. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
  421. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
  422. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
  423. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
  424. package/dist/esm/files/utils/file-upload.utils.d.ts.map +1 -1
  425. package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
  426. package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
  427. package/dist/esm/files/utils/file-validation.utils.d.ts.map +1 -1
  428. package/dist/esm/files/utils/image-derivation.backend.utils.d.ts.map +1 -1
  429. package/dist/esm/files/utils/image-thumbnail.backend.utils.d.ts.map +1 -1
  430. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -1
  431. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -1
  432. package/dist/esm/files/utils/rag-source-field-schema-path.backend.utils.d.ts.map +1 -1
  433. package/dist/esm/files/utils/storage-application-identity.backend.utils.d.ts.map +1 -1
  434. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
  435. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
  436. package/dist/esm/flows-actors/a2a/batches/a2a-push-delivery.batch.backend.service.d.ts.map +1 -1
  437. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
  438. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
  439. package/dist/esm/flows-actors/a2a/models/a2a-dialect.backend.schemas.d.ts.map +1 -1
  440. package/dist/esm/flows-actors/a2a/models/a2a-push-notification-delivery.backend.utils.d.ts.map +1 -1
  441. package/dist/esm/flows-actors/a2a/models/a2a-push-notification.backend.schemas.d.ts.map +1 -1
  442. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
  443. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
  444. package/dist/esm/flows-actors/a2a/services/a2a-push-delivery-log.repository.d.ts.map +1 -1
  445. package/dist/esm/flows-actors/a2a/services/a2a-push-dispatcher.backend.service.d.ts.map +1 -1
  446. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
  447. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
  448. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
  449. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
  450. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
  451. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
  452. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
  453. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
  454. package/dist/esm/flows-actors/controllers/flows-actors.controller.d.ts.map +1 -1
  455. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
  456. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
  457. package/dist/esm/flows-actors/models/agent-facets.backend.definitions.d.ts.map +1 -1
  458. package/dist/esm/flows-actors/models/agents.backend.definitions.d.ts.map +1 -1
  459. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
  460. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
  461. package/dist/esm/flows-actors/models/flows-actors.backend.definitions.d.ts.map +1 -1
  462. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
  463. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
  464. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +107 -16
  465. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
  466. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +118 -18
  467. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
  468. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
  469. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
  470. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -1
  471. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -1
  472. package/dist/esm/flows-actors/services/__tests__/fixtures/meta-workflow-evaluation-treatment.test-fixture.d.ts.map +1 -1
  473. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
  474. package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
  475. package/dist/esm/flows-actors/services/agent-call-trace-sink.backend.d.ts.map +1 -1
  476. package/dist/esm/flows-actors/services/agent-facets.backend.service.d.ts.map +1 -1
  477. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +104 -5
  478. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
  479. package/dist/esm/flows-actors/services/agents.backend.service.js +263 -31
  480. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
  481. package/dist/esm/flows-actors/services/context-curation.backend.service.d.ts.map +1 -1
  482. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +46 -1
  483. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
  484. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +193 -6
  485. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
  486. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
  487. package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
  488. package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
  489. package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
  490. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
  491. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
  492. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -1
  493. package/dist/esm/flows-actors/services/mcp-client.backend.service.js +3 -0
  494. package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -1
  495. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts +99 -0
  496. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts.map +1 -0
  497. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js +155 -0
  498. package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js.map +1 -0
  499. package/dist/esm/flows-actors/services/meta-workflow-evaluation-treatment-compiler.backend.service.d.ts.map +1 -1
  500. package/dist/esm/flows-actors/services/meta-workflow-standard-action-contracts.backend.service.d.ts.map +1 -1
  501. package/dist/esm/flows-actors/services/meta-workflow-standard-evaluation-contracts.backend.service.d.ts.map +1 -1
  502. package/dist/esm/flows-actors/services/meta-workflow-structured-artifact-action-compiler.backend.service.d.ts.map +1 -1
  503. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
  504. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
  505. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
  506. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +9 -0
  507. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
  508. package/dist/esm/flows-actors/utils/bounded-subprocess.backend.utils.d.ts.map +1 -1
  509. package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.d.ts.map +1 -1
  510. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
  511. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
  512. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
  513. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
  514. package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.d.ts.map +1 -1
  515. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts +77 -0
  516. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts.map +1 -0
  517. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js +164 -0
  518. package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js.map +1 -0
  519. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts +48 -0
  520. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts.map +1 -0
  521. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js +101 -0
  522. package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js.map +1 -0
  523. package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.d.ts.map +1 -1
  524. package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.d.ts.map +1 -1
  525. package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.d.ts.map +1 -1
  526. package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.d.ts.map +1 -1
  527. package/dist/esm/guidance/services/lifecycle-scope-id.backend.utils.d.ts.map +1 -1
  528. package/dist/esm/guidance/services/milestone-condition-registry.backend.service.d.ts.map +1 -1
  529. package/dist/esm/guidance/services/milestone-definition-registry.backend.service.d.ts.map +1 -1
  530. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
  531. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
  532. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -1
  533. package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -1
  534. package/dist/esm/guidance/services/scoped-state-read-custom-implementations.backend.d.ts.map +1 -1
  535. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
  536. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
  537. package/dist/esm/i18n/services/i18n.backend.service.d.ts.map +1 -1
  538. package/dist/esm/index.d.ts +0 -1
  539. package/dist/esm/index.d.ts.map +1 -1
  540. package/dist/esm/index.js +0 -1
  541. package/dist/esm/index.js.map +1 -1
  542. package/dist/esm/inject/models/container.d.ts +10 -0
  543. package/dist/esm/inject/models/container.d.ts.map +1 -1
  544. package/dist/esm/inject/models/container.js +49 -1
  545. package/dist/esm/inject/models/container.js.map +1 -1
  546. package/dist/esm/inject/models/service-types.d.ts +3 -0
  547. package/dist/esm/inject/models/service-types.d.ts.map +1 -1
  548. package/dist/esm/inject/models/service-types.js +3 -0
  549. package/dist/esm/inject/models/service-types.js.map +1 -1
  550. package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
  551. package/dist/esm/mcp/controllers/mcp.controller.js +50 -3
  552. package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
  553. package/dist/esm/mcp/models/mcp-protocol.backend.schemas.d.ts.map +1 -1
  554. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
  555. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
  556. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
  557. package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
  558. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
  559. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
  560. package/dist/esm/mcp/services/resource-server-instances-registry.backend.service.d.ts.map +1 -1
  561. package/dist/esm/mcp/utils/zod-to-mcp-json-schema.backend.utils.d.ts.map +1 -1
  562. package/dist/esm/meta-workflow-runtime.exports.d.ts.map +1 -1
  563. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
  564. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
  565. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -1
  566. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -1
  567. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
  568. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
  569. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
  570. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
  571. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
  572. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
  573. package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.d.ts.map +1 -1
  574. package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
  575. package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
  576. package/dist/esm/monitoring/logger/services/logger.service.js +3 -3
  577. package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
  578. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -1
  579. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -1
  580. package/dist/esm/monitoring/logger/utils/log-value-normalization.backend.utils.d.ts.map +1 -1
  581. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +10 -6
  582. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -1
  583. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +10 -6
  584. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -1
  585. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
  586. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
  587. package/dist/esm/monitoring/observability/otel-preload.d.ts.map +1 -1
  588. package/dist/esm/monitoring/observability/otel-sdk-global-handle.d.ts.map +1 -1
  589. package/dist/esm/monitoring/observability/services/__tests__/mock-metrics.service.d.ts.map +1 -1
  590. package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
  591. package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
  592. package/dist/esm/monitoring/observability/services/observability.backend.service.d.ts.map +1 -1
  593. package/dist/esm/notifications/email/components/email-components.d.ts.map +1 -1
  594. package/dist/esm/notifications/email/models/email-template-definition.d.ts.map +1 -1
  595. package/dist/esm/notifications/email/models/email-transport.backend.definitions.d.ts.map +1 -1
  596. package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.d.ts.map +1 -1
  597. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
  598. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
  599. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
  600. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
  601. package/dist/esm/notifications/email/services/email.backend.service.d.ts +47 -6
  602. package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
  603. package/dist/esm/notifications/email/services/email.backend.service.js +86 -36
  604. package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
  605. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
  606. package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
  607. package/dist/esm/notifications/email/utils/interpolate-email-label.utils.d.ts.map +1 -1
  608. package/dist/esm/notifications/email/utils/zod-to-typescript.utils.d.ts.map +1 -1
  609. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
  610. package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
  611. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
  612. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
  613. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts +32 -0
  614. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts.map +1 -0
  615. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js +32 -0
  616. package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js.map +1 -0
  617. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +64 -10
  618. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
  619. package/dist/esm/notifications/sms/services/sms.backend.service.js +277 -82
  620. package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
  621. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
  622. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
  623. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  624. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
  625. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
  626. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
  627. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
  628. package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.custom-impl.backend.service.d.ts.map +1 -1
  629. package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.repository.d.ts.map +1 -1
  630. package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-dispatcher.backend.service.d.ts.map +1 -1
  631. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-public-key.custom-impl.backend.service.d.ts.map +1 -1
  632. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
  633. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
  634. package/dist/esm/notifications/webhooks/outbound/services/webhook-config.backend.service.d.ts.map +1 -1
  635. package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.d.ts.map +1 -1
  636. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
  637. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
  638. package/dist/esm/organizations/batches/organization-member-invitation-sweep.batch.backend.service.d.ts.map +1 -1
  639. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts.map +1 -1
  640. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
  641. package/dist/esm/organizations/services/authority-change-audit.backend.utils.d.ts.map +1 -1
  642. package/dist/esm/organizations/services/invitation-acceptance.backend.utils.d.ts.map +1 -1
  643. package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.d.ts.map +1 -1
  644. package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.d.ts.map +1 -1
  645. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
  646. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
  647. package/dist/esm/organizations/services/organization-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
  648. package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.d.ts.map +1 -1
  649. package/dist/esm/organizations/services/organization-onboarding-operation.backend.utils.d.ts.map +1 -1
  650. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
  651. package/dist/esm/organizations/services/organization-unit-member-custom-implementation.backend.service.d.ts.map +1 -1
  652. package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.d.ts.map +1 -1
  653. package/dist/esm/organizations/services/user-org-type-grant.backend.utils.d.ts.map +1 -1
  654. package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.d.ts.map +1 -1
  655. package/dist/esm/pdf-templates/__tests__/fixtures/tiny-pdf-template.fixture.d.ts.map +1 -1
  656. package/dist/esm/pdf-templates/models/pdf-template-binding.d.ts.map +1 -1
  657. package/dist/esm/pdf-templates/models/pdf-template-definition.d.ts.map +1 -1
  658. package/dist/esm/pdf-templates/services/pdf-generated-file-writer.backend.service.d.ts.map +1 -1
  659. package/dist/esm/pdf-templates/services/pdf-generation-orchestrator.backend.service.d.ts.map +1 -1
  660. package/dist/esm/pdf-templates/services/pdf-renderer.backend.service.d.ts.map +1 -1
  661. package/dist/esm/pdf-templates/services/pdf-template-binding.backend.service.d.ts.map +1 -1
  662. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -1
  663. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -1
  664. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -1
  665. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -1
  666. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -1
  667. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -1
  668. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -1
  669. package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -1
  670. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
  671. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
  672. package/dist/esm/queue/apps-crontabs-manager.backend.service.d.ts.map +1 -1
  673. package/dist/esm/queue/cron-job-sync.backend.service.d.ts.map +1 -1
  674. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
  675. package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
  676. package/dist/esm/queue/job-completion-registry.backend.service.d.ts.map +1 -1
  677. package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
  678. package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
  679. package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
  680. package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
  681. package/dist/esm/queue/job-payload-storage.backend.service.d.ts.map +1 -1
  682. package/dist/esm/queue/job-status-tracking.backend.service.d.ts.map +1 -1
  683. package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
  684. package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
  685. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
  686. package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
  687. package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
  688. package/dist/esm/queue/queue.backend.service.js.map +1 -1
  689. package/dist/esm/queue/scheduled-message-verifier.backend.service.d.ts.map +1 -1
  690. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
  691. package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
  692. package/dist/esm/rag/batches/rag-embedding-drain.batch.backend.service.d.ts.map +1 -1
  693. package/dist/esm/rag/batches/rag-reconciliation-sweep.batch.backend.service.d.ts.map +1 -1
  694. package/dist/esm/rag/models/rag-chunk-store.backend.types.d.ts.map +1 -1
  695. package/dist/esm/rag/models/rag-retrieval.backend.types.d.ts.map +1 -1
  696. package/dist/esm/rag/services/mongodb-rag-chunk-store.backend.service.d.ts.map +1 -1
  697. package/dist/esm/rag/services/postgresql-rag-chunk-store.backend.service.d.ts.map +1 -1
  698. package/dist/esm/rag/services/rag-chunk-collection.mongodb-ddl.backend.d.ts.map +1 -1
  699. package/dist/esm/rag/services/rag-chunk-retrieval.mongodb-query.backend.d.ts.map +1 -1
  700. package/dist/esm/rag/services/rag-chunk-retrieval.postgresql-query.backend.d.ts.map +1 -1
  701. package/dist/esm/rag/services/rag-chunk-store.backend.service.d.ts.map +1 -1
  702. package/dist/esm/rag/services/rag-chunk-table.postgresql-ddl.backend.d.ts.map +1 -1
  703. package/dist/esm/rag/services/rag-ingestion.backend.service.d.ts.map +1 -1
  704. package/dist/esm/rag/services/rag-retrieval.backend.service.d.ts.map +1 -1
  705. package/dist/esm/rag/utils/rag-chunk-fusion.backend.utils.d.ts.map +1 -1
  706. package/dist/esm/rag/utils/rag-chunk-removal.backend.utils.d.ts.map +1 -1
  707. package/dist/esm/rag/utils/rag-chunk-row-shaping.backend.utils.d.ts.map +1 -1
  708. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
  709. package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
  710. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
  711. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
  712. package/dist/esm/rag/utils/rag-ingestion-trigger.backend.utils.d.ts.map +1 -1
  713. package/dist/esm/rag/utils/rag-retrieval-scope.backend.utils.d.ts.map +1 -1
  714. package/dist/esm/rag/utils/rag-source-field-value.backend.utils.d.ts.map +1 -1
  715. package/dist/esm/requests/models/api-routes.backend.defintions.d.ts.map +1 -1
  716. package/dist/esm/requests/models/requests.backend.schemas.d.ts.map +1 -1
  717. package/dist/esm/requests/service/platform-mutualized-handler.backend.service.d.ts.map +1 -1
  718. package/dist/esm/requests/service/platform-requests.backend.utils.d.ts.map +1 -1
  719. package/dist/esm/requests/service/remote-client-base.backend.service.d.ts.map +1 -1
  720. package/dist/esm/requests/service/serverless-services-handler.backend.service.d.ts.map +1 -1
  721. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
  722. package/dist/esm/requests/service/websocket.service.js +49 -1
  723. package/dist/esm/requests/service/websocket.service.js.map +1 -1
  724. package/dist/esm/resources/backend-resource-registry.exports.d.ts.map +1 -1
  725. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
  726. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +2 -0
  727. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
  728. package/dist/esm/resources/models/index.d.ts.map +1 -1
  729. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
  730. package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
  731. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
  732. package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
  733. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
  734. package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
  735. package/dist/esm/resources/models/resources.backend.schemas.d.ts.map +1 -1
  736. package/dist/esm/resources/models/virtual-fields.backend.types.d.ts.map +1 -1
  737. package/dist/esm/resources/services/__tests__/mock-resources-registry.service.d.ts.map +1 -1
  738. package/dist/esm/resources/services/resource-context.backend.service.d.ts.map +1 -1
  739. package/dist/esm/resources/services/resource-id.backend.service.d.ts.map +1 -1
  740. package/dist/esm/resources/services/resource-population.backend.service.d.ts +17 -2
  741. package/dist/esm/resources/services/resource-population.backend.service.d.ts.map +1 -1
  742. package/dist/esm/resources/services/resource-population.backend.service.js +74 -18
  743. package/dist/esm/resources/services/resource-population.backend.service.js.map +1 -1
  744. package/dist/esm/resources/services/resources-registry.backend.service.d.ts +23 -0
  745. package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
  746. package/dist/esm/resources/services/resources-registry.backend.service.js +31 -0
  747. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
  748. package/dist/esm/resources/services/virtual-fields.backend.service.d.ts.map +1 -1
  749. package/dist/esm/resources/utils/resource-retention.backend.utils.d.ts.map +1 -1
  750. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
  751. package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
  752. package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
  753. package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
  754. package/dist/esm/runtime/models/execution-context.backend.schemas.d.ts.map +1 -1
  755. package/dist/esm/runtime/models/request-context.als.backend.d.ts.map +1 -1
  756. package/dist/esm/runtime/models/runtime.backend.schemas.d.ts.map +1 -1
  757. package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
  758. package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
  759. package/dist/esm/runtime/services/execution-context-handler.backend.service.d.ts.map +1 -1
  760. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
  761. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
  762. package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
  763. package/dist/esm/runtime/services/http-server.backend.service.js +10 -0
  764. package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
  765. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
  766. package/dist/esm/runtime/services/start-application.backend.service.js +26 -12
  767. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
  768. package/dist/esm/runtime/services/utils/oauth-body-cap.backend.utils.d.ts.map +1 -1
  769. package/dist/esm/runtime/testing/execution-context-test-fixtures.d.ts.map +1 -1
  770. package/dist/esm/runtime/testing/mock-execution-context-creator.service.d.ts.map +1 -1
  771. package/dist/esm/runtime/utils/application-startup-config-access.backend.utils.d.ts.map +1 -1
  772. package/dist/esm/runtime/utils/feature-gated-core-resource-exclusions.backend.utils.d.ts.map +1 -1
  773. package/dist/esm/runtime/utils/request-client-ip.utils.d.ts.map +1 -1
  774. package/dist/esm/runtime/utils/scan-default-exports.backend.utils.d.ts.map +1 -1
  775. package/dist/esm/security/api-keys/api-key-generation.backend.utils.d.ts.map +1 -1
  776. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
  777. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
  778. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
  779. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
  780. package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.d.ts.map +1 -1
  781. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts +22 -0
  782. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
  783. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +84 -0
  784. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
  785. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
  786. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
  787. package/dist/esm/security/authentications/models/auth-constants.backend.d.ts.map +1 -1
  788. package/dist/esm/security/authentications/models/authentications.backend.schemas.d.ts.map +1 -1
  789. package/dist/esm/security/authentications/models/authorization-client.backend.schemas.d.ts.map +1 -1
  790. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
  791. package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
  792. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts +37 -0
  793. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts.map +1 -0
  794. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js +37 -0
  795. package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js.map +1 -0
  796. package/dist/esm/security/authentications/models/identity-persistence-boundaries.backend.d.ts.map +1 -1
  797. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
  798. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
  799. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
  800. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
  801. package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.d.ts.map +1 -1
  802. package/dist/esm/security/authentications/models/sso-connection.backend.schemas.d.ts.map +1 -1
  803. package/dist/esm/security/authentications/models/user-authorization-version.backend.utils.d.ts.map +1 -1
  804. package/dist/esm/security/authentications/seeds/enterprise-config-defaults.seeds.d.ts.map +1 -1
  805. package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.d.ts.map +1 -1
  806. package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.d.ts.map +1 -1
  807. package/dist/esm/security/authentications/services/__tests__/oauth-provider-audit-spies.mock.d.ts.map +1 -1
  808. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.d.ts.map +1 -1
  809. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.d.ts.map +1 -1
  810. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
  811. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
  812. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
  813. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
  814. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
  815. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
  816. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
  817. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
  818. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.d.ts.map +1 -1
  819. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js +2 -1
  820. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js.map +1 -1
  821. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +9 -2
  822. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
  823. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +9 -2
  824. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
  825. package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.d.ts.map +1 -1
  826. package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.d.ts.map +1 -1
  827. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
  828. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
  829. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
  830. package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts.map +1 -1
  831. package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.d.ts.map +1 -1
  832. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
  833. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
  834. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts +97 -0
  835. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
  836. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +218 -26
  837. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
  838. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts +14 -0
  839. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
  840. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +36 -0
  841. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
  842. package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.d.ts.map +1 -1
  843. package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.d.ts.map +1 -1
  844. package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.d.ts.map +1 -1
  845. package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.d.ts.map +1 -1
  846. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
  847. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
  848. package/dist/esm/security/authentications/services/auth-session-store.backend.service.d.ts.map +1 -1
  849. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
  850. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
  851. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
  852. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
  853. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
  854. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
  855. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
  856. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
  857. package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.d.ts.map +1 -1
  858. package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.d.ts.map +1 -1
  859. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -1
  860. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +57 -1
  861. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -1
  862. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
  863. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
  864. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.d.ts.map +1 -1
  865. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js +11 -1
  866. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js.map +1 -1
  867. package/dist/esm/security/authentications/services/email-verification-initiator.backend.service.d.ts.map +1 -1
  868. package/dist/esm/security/authentications/services/machine-token-issuer.backend.service.d.ts.map +1 -1
  869. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
  870. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
  871. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
  872. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
  873. package/dist/esm/security/authentications/services/oidc-user-claims.backend.service.d.ts.map +1 -1
  874. package/dist/esm/security/authentications/services/resolve-active-member-orgs.backend.utils.d.ts.map +1 -1
  875. package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.d.ts.map +1 -1
  876. package/dist/esm/security/authentications/services/utils/auth-controller.utils.d.ts.map +1 -1
  877. package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.d.ts.map +1 -1
  878. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
  879. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
  880. package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.d.ts.map +1 -1
  881. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
  882. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
  883. package/dist/esm/security/authentications/services/utils/concurrent-session-eviction.backend.utils.d.ts.map +1 -1
  884. package/dist/esm/security/authentications/services/utils/ensure-user-profile.backend.utils.d.ts.map +1 -1
  885. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
  886. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
  887. package/dist/esm/security/authentications/services/utils/machine-auth-rate-limit.backend.utils.d.ts.map +1 -1
  888. package/dist/esm/security/authentications/services/utils/pkce.backend.utils.d.ts.map +1 -1
  889. package/dist/esm/security/authentications/services/utils/saml-java-availability.d.ts.map +1 -1
  890. package/dist/esm/security/authentications/utils/application-auth-policy-audit.backend.utils.d.ts.map +1 -1
  891. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
  892. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
  893. package/dist/esm/security/authentications/utils/one-off-session-lifetime.backend.utils.d.ts.map +1 -1
  894. package/dist/esm/security/authentications/utils/social-oauth2-purpose.backend.utils.d.ts.map +1 -1
  895. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts +59 -0
  896. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts.map +1 -0
  897. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js +111 -0
  898. package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js.map +1 -0
  899. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts +57 -0
  900. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts.map +1 -0
  901. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js +133 -0
  902. package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js.map +1 -0
  903. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts +41 -0
  904. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts.map +1 -0
  905. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js +157 -0
  906. package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js.map +1 -0
  907. package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts +84 -0
  908. package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts.map +1 -0
  909. package/dist/esm/security/authorizations/application-wide-read-admission.backend.js +99 -0
  910. package/dist/esm/security/authorizations/application-wide-read-admission.backend.js.map +1 -0
  911. package/dist/esm/security/authorizations/authorization-denial-audit.backend.utils.d.ts.map +1 -1
  912. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -1
  913. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -1
  914. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
  915. package/dist/esm/security/authorizations/junction-scope-resolution.backend.d.ts.map +1 -1
  916. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
  917. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
  918. package/dist/esm/security/authorizations/organization-unit-narrowing-enforcement.backend.d.ts.map +1 -1
  919. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
  920. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +20 -181
  921. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
  922. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -1
  923. package/dist/esm/security/authorizations/relationship-foreign-key-filter.backend.d.ts.map +1 -1
  924. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
  925. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
  926. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +40 -0
  927. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -1
  928. package/dist/esm/security/authorizations/role-conferral.backend.utils.js +43 -1
  929. package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -1
  930. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +27 -17
  931. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
  932. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +27 -17
  933. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
  934. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +72 -0
  935. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
  936. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +153 -10
  937. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
  938. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
  939. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
  940. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -1
  941. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -1
  942. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +139 -1
  943. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -1
  944. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +474 -33
  945. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -1
  946. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +40 -0
  947. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -1
  948. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -1
  949. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -1
  950. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -1
  951. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +19 -0
  952. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -1
  953. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +38 -0
  954. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -1
  955. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -1
  956. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -1
  957. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -1
  958. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +17 -1
  959. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -1
  960. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +14 -0
  961. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -1
  962. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +16 -0
  963. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -1
  964. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -1
  965. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +1 -1
  966. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -1
  967. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +19 -0
  968. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -1
  969. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +45 -2
  970. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -1
  971. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -1
  972. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -1
  973. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +37 -1
  974. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -1
  975. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -1
  976. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -1
  977. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -1
  978. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -1
  979. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -1
  980. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts +34 -0
  981. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts.map +1 -0
  982. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js +39 -0
  983. package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js.map +1 -0
  984. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
  985. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -1
  986. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
  987. package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.d.ts.map +1 -1
  988. package/dist/esm/security/consumable-tokens/models/index.d.ts.map +1 -1
  989. package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.d.ts.map +1 -1
  990. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
  991. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
  992. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
  993. package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
  994. package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.d.ts.map +1 -1
  995. package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
  996. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts +13 -0
  997. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts.map +1 -1
  998. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js +14 -0
  999. package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js.map +1 -1
  1000. package/dist/esm/security/jwt/utils/jwt-verification-error-classification.backend.utils.d.ts.map +1 -1
  1001. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
  1002. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
  1003. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
  1004. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
  1005. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts +39 -0
  1006. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts.map +1 -0
  1007. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js +60 -0
  1008. package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js.map +1 -0
  1009. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts +66 -0
  1010. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts.map +1 -0
  1011. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js +75 -0
  1012. package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js.map +1 -0
  1013. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
  1014. package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
  1015. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
  1016. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
  1017. package/dist/esm/security/scim/utils/scim-attribute-path-resolver.backend.utils.d.ts.map +1 -1
  1018. package/dist/esm/security/scim/utils/scim-filter-parser.d.ts.map +1 -1
  1019. package/dist/esm/security/scim/utils/scim-response-formatter.d.ts.map +1 -1
  1020. package/dist/esm/security/session-invalidation-fence.backend.utils.d.ts.map +1 -1
  1021. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
  1022. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
  1023. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -1
  1024. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -1
  1025. package/dist/esm/security/token-invalidation-fence.backend.utils.d.ts.map +1 -1
  1026. package/dist/esm/testing.d.ts.map +1 -1
  1027. package/dist/esm/users/services/inbound-contact-custom-implementation.backend.service.d.ts.map +1 -1
  1028. package/dist/esm/users/services/user-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
  1029. package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.d.ts.map +1 -1
  1030. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -1
  1031. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -1
  1032. package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.d.ts.map +1 -1
  1033. package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts.map +1 -1
  1034. package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.d.ts.map +1 -1
  1035. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1036. package/package.json +9 -9
  1037. package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts +0 -45
  1038. package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts.map +0 -1
  1039. package/dist/esm/external-providers/services/flow-actor-design.backend.service.js +0 -22
  1040. package/dist/esm/external-providers/services/flow-actor-design.backend.service.js.map +0 -1
  1041. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -0
  1042. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -0
  1043. package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -0
  1044. package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -0
  1045. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -0
  1046. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -0
  1047. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -0
  1048. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -0
  1049. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -0
  1050. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -0
  1051. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -0
  1052. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -0
  1053. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -0
  1054. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -0
  1055. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -0
  1056. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"oidc-authorization-code.backend.service.js","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/oidc-authorization-code.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport { inject, injectable } from 'inversify';\nimport type { Container } from 'inversify';\nimport { createHash } from 'crypto';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { ConsumableTokenBackendService } from '~wildo-backend-lib/security/consumable-tokens/services/consumable-token.backend.service';\nimport type { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport type { RepositoriesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport {\n ApiKeyScope,\n ConsumableToken_ConsumptionMode,\n CoreConsumableTokenTypes,\n CoreResourceOperation,\n CoreResourceType,\n ErrorCustomMessageReference,\n ErrorType,\n isConfidentialTokenEndpointAuthMethod,\n isWildoBackendError,\n OAuthClientStatus,\n OAuthCodeExchangeFailureReason,\n OAuthGrantType,\n OAuthClientRegistrationOrigin,\n OAuthTokenEndpointAuthMethod,\n OrganizationMemberStatus,\n} from '@wildo-ai/saas-models';\nimport { OAUTH_CONSENT_GRANT_DEFAULT_LIFETIME_DAYS } from '@wildo-ai/saas-models';\nimport type { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { OAuthClientBase, OAuthClientOrganization, OAuthConsentGrant } from '@wildo-ai/saas-models';\nimport { AuditLogsBackendService } from '~wildo-backend-lib/compliance/audit-trails/services/audit-logs.backend.service';\nimport { isCredentialExpired, isRotationGraceWindowOpen } from '~wildo-backend-lib/security/credential-rotation-grace.backend.utils';\nimport { hashOAuthClientSecret } from '~wildo-backend-lib/security/oauth-clients/oauth-client-generation.backend.utils';\nimport { isValidPkceCodeVerifier, isValidS256CodeChallenge } from '~wildo-backend-lib/security/authentications/services/utils/pkce.backend.utils';\nimport type { SystemAccessBackendService } from '~wildo-backend-lib/base-classes/services/services/system-access.backend.service';\nimport { DurationUnit } from '@wildo-ai/zod-decorators';\nimport type { CimdClientMetadataBackendService } from '~wildo-backend-lib/security/authentications/services/cimd-client-metadata.backend.service';\nimport { OIDC_SUPPORTED_IDENTITY_SCOPES } from '~wildo-backend-lib/security/authentications/services/oidc-user-claims.backend.service';\nimport {\n AuthorizationClientOrigin,\n AuthorizationClientTenancy,\n isClientIdMetadataDocumentClient,\n} from '~wildo-backend-lib/security/authentications/models/authorization-client.backend.schemas';\nimport type {\n ClientIdMetadataDocumentAuthorizationClient,\n RegisteredAuthorizationClient,\n ResolvedAuthorizationClient,\n} from '~wildo-backend-lib/security/authentications/models/authorization-client.backend.schemas';\n\n/** The authorization request the authorize endpoint hands over AFTER the user has consented. */\nexport interface OidcAuthorizationCodeRequest {\n userId: string;\n clientId: string;\n redirectUri: string;\n scope: string[];\n codeChallenge: string;\n codeChallengeMethod: 'S256';\n nonce?: string;\n /**\n * RFC 8707 resource indicator — the canonical audience of the resource server the client\n * wants the access token for (an A2A / MCP endpoint URI). Captured at authorize time and\n * bound into the token's `aud` at exchange. MANDATORY for the delegated-token exchange:\n * `issueAuthorizationCodeToken` fail-closes with `invalid_target` when it is absent (a\n * delegated user token MUST be audience-bound — B-S2). Optional on THIS type only because the\n * authorize endpoint accepts the request before the token exchange enforces it.\n */\n resource?: string;\n /**\n * revocation-C: the End-User's OP login `sessionId`, captured from the first-party access token at\n * authorize/consent. Carried through the code into the id_token's `sid` so the RP-Initiated Logout\n * endpoint can terminate exactly this session. Optional — absent if the authorizing token carried no\n * session (should not happen for a first-party interactive authorize, but the pipeline stays lenient).\n */\n sessionId?: string;\n}\n\n/** The binding recovered when an authorization code is redeemed, used to mint the tokens. */\nexport interface OidcAuthorizationCodeGrant {\n userId: string;\n clientId: string;\n scope: string[];\n nonce?: string;\n /** RFC 8707 resource indicator captured at authorize (see {@link OidcAuthorizationCodeRequest.resource}). */\n resource?: string;\n /** revocation-C: the End-User's OP login `sessionId` → the id_token `sid` (see {@link OidcAuthorizationCodeRequest.sessionId}). */\n sessionId?: string;\n}\n\n/**\n * The authorization request stashed in a single-use consent-request token at `/oauth/authorize` for\n * a `requiresConsent` client (INSTEAD of the code), and recovered at `/oauth/authorize/decision` to\n * mint the code on APPROVE. Carries the SAME fields the code would bind PLUS the OAuth `state` (echoed\n * back on the final redirect). Stored server-side so the consent decision cannot tamper with the\n * parameters — the client/redirect/scope the user approved are exactly the ones the code binds.\n */\nexport interface OidcConsentRequest {\n userId: string;\n clientId: string;\n redirectUri: string;\n scope: string[];\n codeChallenge: string;\n nonce?: string;\n resource?: string;\n state?: string;\n}\n\n/**\n * What the authorize endpoint needs to know about a client before it decides whether to prompt.\n *\n * Carries the DISPLAY obligations alongside the decision, because the specification makes display a\n * requirement rather than a nicety for a client whose identity is only a domain: the redirect\n * hostname must be shown, and a loopback-only redirect set warrants an extra warning.\n */\nexport interface AuthorizationClientConsentPosture {\n requiresConsent: boolean;\n clientName: string;\n /** Which mechanism established this identity — the consent screen presents the two differently. */\n origin: AuthorizationClientOrigin;\n /**\n * Whether any tenant of this application vouches for the client — the actual trust signal.\n *\n * `origin` alone is misleading for a dynamically registered client: it IS a registered row, so it\n * reports `REGISTERED`, while nobody with standing here ever vetted it. `UNAFFILIATED` is the\n * value the consent screen must key on when it decides how cautious to be.\n */\n tenancy: AuthorizationClientTenancy;\n /** The hostname the user will be sent back to; `null` only if the URI is unparseable. */\n redirectUriHostname: string | null;\n /** Every redirect URI this client claims is loopback — show the impersonation warning. */\n warnsLoopbackOnlyRedirects: boolean;\n}\n\n/**\n * OIDC authorization_code engine (Wildo-as-provider). Two halves:\n * - {@link issueAuthorizationCode} — after the user consents, validate the request against\n * the registered client and mint a single-use, short-TTL code bound to the user + client +\n * scope + redirect_uri + PKCE challenge (+ nonce).\n * - {@link exchangeAuthorizationCode} — at the token endpoint, atomically consume the code and\n * verify the client + redirect_uri binding and PKCE (RFC 7636 S256), then return the binding.\n *\n * Built on the `OIDC_AUTHORIZATION_CODE` consumable token (Mongo, atomic SINGLE_USE, TTL) — the\n * same hardened primitive behind `AUTH_CODE_EXCHANGE`. PKCE is MANDATORY (S256 only). Every\n * failure is fail-closed and carries the RFC 6749 error code in `context.oauthError`.\n */\n@injectable()\nexport class OidcAuthorizationCodeBackendService {\n constructor(\n @inject(SAAS_SERVICE_TYPES.Container) private readonly container: Container,\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.ConsumableTokenService) private readonly consumableTokens: ConsumableTokenBackendService,\n ) {}\n\n public async issueAuthorizationCode(request: OidcAuthorizationCodeRequest): Promise<{ code: string }> {\n if (request.codeChallengeMethod !== 'S256') {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_request', 'only PKCE S256 is supported');\n }\n // RFC 7636 §4.2: reject a malformed S256 code_challenge at mint (defense-in-depth over the controller's\n // entry check) — a valid challenge is 43 unreserved-base64url chars, so a client cannot bind a\n // low-entropy / garbage challenge that would weaken the exchange-time proof.\n if (!isValidS256CodeChallenge(request.codeChallenge)) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_request', 'a valid PKCE S256 code_challenge is required');\n }\n const client = await this.resolveAuthorizationClient(request.clientId);\n this.assertAuthorizationCodeClient(client, request.redirectUri);\n this.assertScopeAllowed(client, request.scope);\n\n const created = await this.consumableTokens.createToken({\n tokenType: CoreConsumableTokenTypes.OIDC_AUTHORIZATION_CODE,\n consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,\n expiresIn: { value: 5, unit: DurationUnit.MINUTES },\n userId: request.userId,\n metadata: {\n clientId: request.clientId,\n scope: request.scope,\n redirectUri: request.redirectUri,\n codeChallenge: request.codeChallenge,\n ...(request.nonce ? { nonce: request.nonce } : {}),\n ...(request.resource ? { resource: request.resource } : {}),\n ...(request.sessionId ? { sessionId: request.sessionId } : {}),\n },\n });\n\n this.logger.debug('Issued OIDC authorization code', { clientId: request.clientId, userId: request.userId, scopeCount: request.scope.length });\n return { code: created.token };\n }\n\n public async exchangeAuthorizationCode(params: { code: string; clientId: string; redirectUri: string; codeVerifier: string; presentedClientSecret?: string }): Promise<OidcAuthorizationCodeGrant> {\n // A-6: every rejection below is a potential attack signal (code replay, PKCE downgrade, redirect\n // tampering, cross-client redemption). Each emits `OAUTH_CODE_EXCHANGE_FAILED` with a closed-vocabulary\n // `reason` BEFORE its (client-indistinguishable) `invalid_grant`. Post-decode branches also carry the\n // code's `userId`/`resource`; the atomic replay/consume failure carries only the request-supplied clientId\n // (the code never decoded). assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — failed delegated\n // exchange + monitoring. Fire-and-forget (helper `_auditCodeExchangeFailure`) — never affects the throw.\n let consumed: { tokenType?: string; userId?: string; metadata?: Record<string, unknown> };\n try {\n consumed = await this.consumableTokens.consumeToken(params.code) as typeof consumed;\n } catch {\n // Not found / expired / already used — all indistinguishable to the client (RFC 6749 §5.2).\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.CODE_REPLAY_OR_INVALID, { clientId: params.clientId });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'authorization code invalid, expired, or already used');\n }\n\n if (consumed.tokenType !== CoreConsumableTokenTypes.OIDC_AUTHORIZATION_CODE) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.NOT_AUTHORIZATION_CODE, { clientId: params.clientId });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'token is not an authorization code');\n }\n const userId = consumed.userId;\n if (!userId) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.NO_SUBJECT, { clientId: params.clientId });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'authorization code has no subject');\n }\n const meta = (consumed.metadata ?? {}) as { clientId?: string; scope?: string[]; redirectUri?: string; codeChallenge?: string; nonce?: string; resource?: string; sessionId?: string };\n\n // RFC 6749 §4.1.3: the client + redirect_uri MUST match the original authorization request.\n if (meta.clientId !== params.clientId) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.CLIENT_MISMATCH, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'authorization code was issued to a different client');\n }\n if (meta.redirectUri !== params.redirectUri) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.REDIRECT_URI_MISMATCH, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'redirect_uri does not match the authorization request');\n }\n\n // RFC 7636 §4.1: the code_verifier MUST be 43–128 chars of the unreserved set. Enforce the shape here\n // — AFTER the atomic consume, so a malformed verifier still BURNS the single-use code (no retry oracle,\n // same as a wrong verifier) — and reject it even if it would otherwise match a non-compliant challenge.\n if (!isValidPkceCodeVerifier(params.codeVerifier)) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.PKCE_VERIFICATION_FAILED, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'PKCE verification failed');\n }\n // RFC 7636: base64url(sha256(code_verifier)) MUST equal the bound code_challenge.\n const computedChallenge = createHash('sha256').update(params.codeVerifier).digest('base64url');\n // security-decision (accepted-low — H-57, see .claude/plans/oidc-provider-test-coverage.md § \"ACCEPTED RISK\"):\n // the `!==` below is not constant-time, but both operands are fixed-length base64url SHA-256 digests of a\n // 43-char PKCE verifier — a timing side-channel leaks nothing brute-forceable, so `crypto.timingSafeEqual`\n // is not warranted. Revisit only if a compare ever moves onto a low-entropy / attacker-chosen-length input.\n if (!meta.codeChallenge || computedChallenge !== meta.codeChallenge) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.PKCE_VERIFICATION_FAILED, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'PKCE verification failed');\n }\n\n // Defense-in-depth (RFC 6749 §4.1.3): re-verify the client is STILL active and STILL authorized\n // for the authorization_code grant at REDEMPTION time — the code outlives its 5-minute TTL past\n // the issue-time checks in `issueAuthorizationCode`, so a client deactivated (or whose grant was\n // revoked) within that window must not be able to complete the exchange. Read by the already-\n // matched `params.clientId` (== `meta.clientId`, verified above).\n //\n // Resolved through the SAME union as issuance, so a CIMD client is re-checked too: its document\n // must still resolve, still be trusted by the deployment's current policy, and still claim the\n // authorization_code grant. A CIMD document that was taken down, or a policy narrowed to an\n // allow-list that no longer admits it, must not be redeemable on a code minted before the change —\n // that is precisely the revocation path the cache's upper TTL bound exists to bound.\n let client: ResolvedAuthorizationClient | null;\n try {\n client = await this.resolveAuthorizationClient(params.clientId);\n } catch {\n // A CIMD refusal throws `invalid_client`; at REDEMPTION the client-indistinguishable answer is\n // `invalid_grant`, same as every other post-decode failure here.\n client = null;\n }\n if (!client || (client.origin === AuthorizationClientOrigin.REGISTERED\n && (client.record.status !== OAuthClientStatus.ACTIVE || isCredentialExpired(client.record.expiresAt)))) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.CLIENT_INACTIVE, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'client is no longer active');\n }\n if (!client.allowedGrants.includes(OAuthGrantType.AUTHORIZATION_CODE)) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.GRANT_TYPE_LOST, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHORIZATION, 'unauthorized_client', 'client is no longer authorized for the authorization_code grant');\n }\n\n // F-OIDC-11: a CONFIDENTIAL client (`tokenEndpointAuthMethod !== NONE`) MUST additionally present a\n // valid `client_secret` — defense-in-depth over PKCE. A PUBLIC client (the default) is PKCE-only and\n // presents no secret. Enforced here at the same client re-read as the active/grant checks; like the\n // accepted F-OIDC-9 wrinkle, a wrong secret on a valid code burns that single-use code, which is\n // acceptable (the caller already holds a live high-entropy code, and issuance is fail-closed anyway).\n // Registered clients only. A CIMD client is public by construction — the resolver REFUSES any\n // document declaring a shared-secret `token_endpoint_auth_method` (the draft forbids them) or an\n // asymmetric one this provider does not implement, so there is no CIMD client for which a secret\n // check could ever be meaningful. Narrowed on the discriminant rather than on a nullable secret\n // field, so the impossibility is enforced by the type rather than by this comment.\n if (client.origin === AuthorizationClientOrigin.REGISTERED) {\n this.assertConfidentialClientSecret(client.record, params.presentedClientSecret);\n }\n\n return { userId, clientId: params.clientId, scope: meta.scope ?? [], nonce: meta.nonce, resource: meta.resource, sessionId: meta.sessionId };\n }\n\n /**\n * Read + validate the client for an authorization request, and report whether it requires\n * INTERACTIVE CONSENT. The authorize endpoint calls this BEFORE issuing anything: a\n * `requiresConsent` client is routed to {@link createConsentRequest} (→ `consent_required`); a\n * trusted/first-party client (`requiresConsent` false) proceeds straight to\n * {@link issueAuthorizationCode}. Applies the SAME client validation as `issueAuthorizationCode`\n * (active, authorization_code-grant-allowed, exact redirect_uri) so an invalid client fails\n * identically on either path.\n */\n public async resolveAuthorizationClientConsent(clientId: string, redirectUri: string, userId: string): Promise<AuthorizationClientConsentPosture> {\n const client = await this.resolveAuthorizationClient(clientId);\n this.assertAuthorizationCodeClient(client, redirectUri);\n\n // A CIMD client ALWAYS sees the consent screen, and its own document has no say in it.\n //\n // The registered path lets a client declare itself consent-free, because someone with standing in\n // this application registered it and made that call. A client metadata document is authored by the\n // party being trusted, so honouring a consent-free declaration from it would be self-certification:\n // anyone who can host a JSON file could mint an identity that skips the user's approval. There is\n // deliberately no `declaresConsentFree` on the CIMD arm at all — the field cannot be read here\n // because it does not exist there, which is stronger than remembering not to read it.\n //\n // This is also what the specification depicts: in the Client ID Metadata Documents flow, the\n // authorization server's step after validation is \"Display consent page with client_name\".\n // spec-cite: MCP 2025-11-25 — Authorization § Client ID Metadata Documents Flow\n if (isClientIdMetadataDocumentClient(client)) {\n return {\n requiresConsent: true,\n clientName: client.name,\n origin: client.origin,\n tenancy: client.tenancy.kind,\n // \"Authorization servers … MUST clearly display the redirect URI hostname during authorization\"\n // — so the hostname travels to the consent screen as DATA rather than being re-derived there.\n // spec-cite: MCP 2025-11-25 — Authorization § Client ID Metadata Document Security → Localhost\n // Redirect URI Risks\n redirectUriHostname: this.hostnameOf(redirectUri),\n warnsLoopbackOnlyRedirects: client.claimsOnlyLoopbackRedirects,\n };\n }\n\n let requiresConsent = !client.declaresConsentFree;\n\n // D4 option B — SAME-ORG consent gate.\n // assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — a user must\n // explicitly authorize third-party delegated access to their account. A client that declares itself\n // consent-free (`requiresConsent:false`) may skip the prompt ONLY inside its own trust boundary: for\n // an ORG-scoped client that is an ACTIVE member of its OWN org. A CROSS-ORG user (not a member) is a\n // third-party delegation and MUST see the consent screen — otherwise an ORG_ADMIN could register a\n // no-consent client and silently harvest OTHER orgs' users' delegated tokens by phishing them to the\n // authorize endpoint. APP-scoped clients are platform-operator-created (first-party) and keep their\n // declared posture. Fail-closed: any membership-read error forces consent (the safe default).\n if (!requiresConsent && client.tenancy.kind === AuthorizationClientTenancy.ORGANIZATION) {\n const orgId = client.tenancy.organizationId;\n if (!orgId || !(await this.isActiveOrgMember(userId, orgId))) {\n requiresConsent = true;\n }\n }\n\n return {\n requiresConsent,\n clientName: client.name,\n origin: client.origin,\n tenancy: client.tenancy.kind,\n redirectUriHostname: this.hostnameOf(redirectUri),\n // A DYNAMICALLY registered client earns the same loopback warning as a CIMD one: it asserted\n // its own name and redirect URIs, so \"the app you recognise\" and \"the app that registered\n // this name\" are not the same claim. An OPERATOR-registered client was vetted by someone with\n // standing here, and warning on those would train users to click through the warning that\n // matters.\n warnsLoopbackOnlyRedirects: client.tenancy.kind === AuthorizationClientTenancy.UNAFFILIATED\n && client.redirectUris.length > 0\n && client.redirectUris.every((uri) => this.isLoopbackRedirect(uri)),\n };\n }\n\n /** Loopback test shared by the registered-but-unaffiliated path and the CIMD resolver's own. */\n private isLoopbackRedirect(uri: string): boolean {\n try {\n const host = new URL(uri).hostname.toLowerCase();\n return host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]';\n } catch {\n return false;\n }\n }\n\n /**\n * The hostname a redirect URI will send the user to, for consent-screen display.\n *\n * Returns `null` rather than throwing on an unparseable URI: by the time this runs the URI has\n * already exact-matched the client's registered/claimed set, so an unparseable value here is a\n * data-integrity oddity, and failing the whole authorize request over a DISPLAY field would trade a\n * working flow for a cosmetic one.\n */\n private hostnameOf(redirectUri: string): string | null {\n try {\n return new URL(redirectUri).hostname;\n } catch {\n return null;\n }\n }\n\n /**\n * D4/B membership check (fail-closed): is `userId` an ACTIVE member of `organizationId`? Reads\n * `ORGANIZATION_MEMBERS` by the `(userId, organizationId, status=ACTIVE)` grain with an internal system\n * EC. Returns FALSE on any error so the caller forces consent rather than silently skipping it.\n */\n private async isActiveOrgMember(userId: string, organizationId: string): Promise<boolean> {\n try {\n const ecCreator = this.container.get<ExecutionContextCreatorBackendService>(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService);\n const repos = this.container.get<RepositoriesRegistryHandlerBackendService>(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService);\n const ec = await ecCreator.createForInternalRepositoryOperation({\n resourceType: CoreResourceType.ORGANIZATION_MEMBERS,\n operationIdentifier: CoreResourceOperation.READ,\n });\n const member = await repos\n .getRepository(CoreResourceType.ORGANIZATION_MEMBERS)\n .read<{ _id: string }>(ec, { userId, organizationId, status: OrganizationMemberStatus.ACTIVE });\n return !!member;\n } catch (error) {\n this.logger.warn('Org-membership check failed; forcing consent (fail-closed)', {\n userId, organizationId, reason: describeCaughtError(error),\n });\n return false;\n }\n }\n\n /**\n * Mint a single-use consent-request token for a `requiresConsent` client (used INSTEAD of the\n * authorization code at authorize time). Re-validates the client + scope (defense-in-depth, mirrors\n * {@link issueAuthorizationCode}). The returned token is handed to the caller in the\n * `consent_required` response and redeemed at {@link consumeConsentRequest} on the user's decision.\n */\n public async createConsentRequest(request: OidcConsentRequest): Promise<{ consentToken: string }> {\n const client = await this.resolveAuthorizationClient(request.clientId);\n this.assertAuthorizationCodeClient(client, request.redirectUri);\n this.assertScopeAllowed(client, request.scope);\n\n const created = await this.consumableTokens.createToken({\n tokenType: CoreConsumableTokenTypes.OIDC_CONSENT_REQUEST,\n consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,\n expiresIn: { value: 10, unit: DurationUnit.MINUTES },\n userId: request.userId,\n metadata: {\n clientId: request.clientId,\n scope: request.scope,\n redirectUri: request.redirectUri,\n codeChallenge: request.codeChallenge,\n ...(request.nonce ? { nonce: request.nonce } : {}),\n ...(request.resource ? { resource: request.resource } : {}),\n ...(request.state ? { state: request.state } : {}),\n },\n });\n this.logger.debug('Issued OIDC consent request', { clientId: request.clientId, userId: request.userId });\n return { consentToken: created.token };\n }\n\n /**\n * Atomically consume a consent-request token (single-use) → the stashed authorization request. The\n * decision endpoint then binds this to the AUTHENTICATED user (the token subject MUST match) and, on\n * APPROVE, feeds it to {@link issueAuthorizationCode}. Not-found / expired / already-used are all\n * indistinguishable `invalid_grant` (RFC 6749 §5.2), same as the code exchange.\n */\n public async consumeConsentRequest(consentToken: string): Promise<OidcConsentRequest> {\n let consumed: { tokenType?: string; userId?: string; metadata?: Record<string, unknown> };\n try {\n consumed = await this.consumableTokens.consumeToken(consentToken) as typeof consumed;\n } catch {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'consent request invalid, expired, or already used');\n }\n if (consumed.tokenType !== CoreConsumableTokenTypes.OIDC_CONSENT_REQUEST) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'token is not a consent request');\n }\n const userId = consumed.userId;\n if (!userId) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'consent request has no subject');\n }\n const meta = (consumed.metadata ?? {}) as { clientId?: string; scope?: string[]; redirectUri?: string; codeChallenge?: string; nonce?: string; resource?: string; state?: string };\n if (!meta.clientId || !meta.redirectUri || !meta.codeChallenge) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'consent request is malformed');\n }\n return {\n userId,\n clientId: meta.clientId,\n redirectUri: meta.redirectUri,\n scope: meta.scope ?? [],\n codeChallenge: meta.codeChallenge,\n nonce: meta.nonce,\n resource: meta.resource,\n state: meta.state,\n };\n }\n\n /**\n * Mint a single-use logout-confirmation token (revocation-C §6 — the logout-confirmation prompt).\n * Called at `GET /oauth/end-session` for a NON-trusted logout (a valid `id_token_hint` whose\n * `post_logout_redirect_uri` is absent / unregistered / mismatched), INSTEAD of terminating the\n * session inline — the Keycloak-style posture skips the prompt only for a trusted RP (valid hint +\n * exact-match registered redirect). The already-validated `{ userId, sessionId }` is stashed\n * server-side so the confirmation cannot tamper with WHICH session ends. The returned token is\n * carried to the frontend `/oauth/logout-confirm` prompt and redeemed at\n * {@link consumeLogoutConfirmation} when the End-User confirms. Minted ONLY when a real session was\n * identified (a valid hint) — a request with nothing to terminate lands on the signed-out page with\n * no prompt, so the token always names a session.\n */\n public async createLogoutConfirmation(request: {\n userId: string;\n sessionId: string;\n clientId?: string;\n postLogoutRedirectUriRejected: boolean;\n }): Promise<{ confirmationToken: string }> {\n const created = await this.consumableTokens.createToken({\n tokenType: CoreConsumableTokenTypes.OIDC_LOGOUT_CONFIRMATION,\n consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,\n expiresIn: { value: 10, unit: DurationUnit.MINUTES },\n userId: request.userId,\n // The RP the hint named (`clientId`) and whether a presented `post_logout_redirect_uri` was rejected\n // are stashed alongside the session, so the confirm-endpoint audit keeps FULL attribution — the token\n // is the only thing `POST /oauth/end-session/confirm` sees (it re-verifies no hint).\n metadata: {\n sessionId: request.sessionId,\n postLogoutRedirectUriRejected: request.postLogoutRedirectUriRejected,\n ...(request.clientId ? { clientId: request.clientId } : {}),\n },\n });\n this.logger.debug('Issued OIDC logout confirmation', { userId: request.userId });\n return { confirmationToken: created.token };\n }\n\n /**\n * Atomically consume a logout-confirmation token → the stashed `{ userId, sessionId }`. Unlike\n * {@link consumeConsentRequest}, a not-found / expired / already-used token is NOT an error: the\n * End-User confirmed a logout, so a stale token yields `null` and the caller simply lands them on the\n * signed-out page WITHOUT terminating (the session is most likely already gone, and revealing whether\n * the token was live would be a session-state oracle). A wrong token type is treated identically.\n */\n public async consumeLogoutConfirmation(confirmationToken: string): Promise<{\n userId?: string;\n sessionId?: string;\n clientId?: string;\n postLogoutRedirectUriRejected?: boolean;\n } | null> {\n let consumed: { tokenType?: string; userId?: string; metadata?: Record<string, unknown> };\n try {\n consumed = await this.consumableTokens.consumeToken(confirmationToken) as typeof consumed;\n } catch {\n return null;\n }\n if (consumed.tokenType !== CoreConsumableTokenTypes.OIDC_LOGOUT_CONFIRMATION) {\n return null;\n }\n const meta = (consumed.metadata ?? {}) as { sessionId?: string; clientId?: string; postLogoutRedirectUriRejected?: boolean };\n return {\n userId: consumed.userId,\n sessionId: meta.sessionId,\n clientId: meta.clientId,\n postLogoutRedirectUriRejected: meta.postLogoutRedirectUriRejected,\n };\n }\n\n // ── client resolution ─────────────────────────────────────────────────────\n /**\n * Resolve a `client_id` to the identity behind it, from EITHER source this provider accepts.\n *\n * Triage is on the SHAPE of the identifier, which is what makes the two mechanisms coexist without\n * a mode flag: a CIMD `client_id` is an `https://` URL, and a registered one is a Mongo `_id`.\n * Neither can be mistaken for the other, and the CIMD branch is entered ONLY for a URL — so a\n * deployment with the policy `DISABLED` never fetches anything, and a registered lookup never\n * touches the network.\n *\n * Returns `null` for \"no such client\"; THROWS for a URL-shaped client_id that resolved and was\n * refused, because those two are not the same fact: the first is a typo, the second is a policy or\n * security decision whose reason the operator needs.\n */\n /**\n * revocation-C: is `uri` a registered POST-LOGOUT redirect for `clientId`? The `/oauth/end-session`\n * handler calls this to validate a presented `post_logout_redirect_uri` before it redirects the browser\n * back to the relying party. EXACT string match against the resolved client's `postLogoutRedirectUris`\n * allowlist — the SAME anti-open-redirect discipline as the authorization-code `redirect_uri` gate\n * (`exchangeAuthorizationCode`), never a prefix or origin match. A client that cannot be resolved, or\n * that registered no post-logout URIs, admits none — fail closed. (A CIMD client CAN register\n * them since #464; before that, none could.)\n * spec-cite: OpenID Connect RP-Initiated Logout 1.0 §3 (the OP \"MUST NOT perform post-logout redirection\n * if the `post_logout_redirect_uri` value supplied does not exactly match one of the previously\n * registered `post_logout_redirect_uris` values\"; registration of those values is §2).\n */\n public async isRegisteredPostLogoutRedirectUri(clientId: string, uri: string): Promise<boolean> {\n let client: ResolvedAuthorizationClient | null;\n try {\n client = await this.resolveAuthorizationClient(clientId);\n } catch {\n client = null;\n }\n return client?.postLogoutRedirectUris.includes(uri) ?? false;\n }\n\n private async resolveAuthorizationClient(clientId: string): Promise<ResolvedAuthorizationClient | null> {\n const cimd = this.container.get<CimdClientMetadataBackendService>(SAAS_SERVICE_TYPES.CimdClientMetadata);\n if (cimd.isCimdClientId(clientId)) {\n return this.resolveClientIdMetadataDocumentClient(cimd, clientId);\n }\n const record = await this.readRegisteredClientById(clientId);\n return record ? this.adaptRegisteredClient(record) : null;\n }\n\n /** Read a registered client by `_id` across both scope collections (org then app). */\n private async readRegisteredClientById(clientId: string): Promise<OAuthClientBase | null> {\n const ecCreator = this.container.get<ExecutionContextCreatorBackendService>(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService);\n const repos = this.container.get<RepositoriesRegistryHandlerBackendService>(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService);\n for (const resourceType of [CoreResourceType.OAUTH_CLIENTS_ORGANIZATION, CoreResourceType.OAUTH_CLIENTS_APPLICATION]) {\n const ec = await ecCreator.createForInternalRepositoryOperation({ resourceType, operationIdentifier: CoreResourceOperation.READ });\n const client = await repos.getRepository(resourceType).read<OAuthClientBase>(ec, { _id: clientId });\n if (client) return client;\n }\n return null;\n }\n\n /**\n * Project a registered client row onto the union arm that describes it.\n *\n * `scope` (an `ApiKeyScope`) becomes `tenancy`, and that translation is the reason this type exists\n * at all — downstream, `tenancy` is the field the consent gate reads, and it can now express a\n * client that belongs to NO tenant, which `ApiKeyScope` cannot.\n */\n private adaptRegisteredClient(record: OAuthClientBase): RegisteredAuthorizationClient {\n // A DYNAMICALLY registered client is stored on the APPLICATION collection because it has no\n // organization — and `scope: APPLICATION` otherwise means platform-operator first-party. Reading\n // tenancy from `scope` alone would therefore hand a stranger the most trusted posture in the\n // system purely because of where its row had to be filed. Provenance wins over storage.\n const isDynamic = record.registrationOrigin === OAuthClientRegistrationOrigin.DYNAMIC;\n return {\n origin: AuthorizationClientOrigin.REGISTERED,\n clientId: record._id,\n name: record.name,\n redirectUris: record.redirectUris ?? [],\n // revocation-C: the RP-Initiated Logout post-logout allowlist. Same `?? []` fail-closed default as\n // `redirectUris` — a registered client with none configured admits no `post_logout_redirect_uri`.\n postLogoutRedirectUris: record.postLogoutRedirectUris ?? [],\n // Identity scopes only for a self-registered client, whatever the row says. The row's\n // `allowedScopes` was authored by the registration request — i.e. by the client itself — so\n // honouring it would be the client granting itself permission. `/register` already refuses a\n // wider request, and this is the second half of that invariant: even a row that acquired\n // wider scopes by any other means cannot spend them.\n allowedScopes: isDynamic ? OIDC_SUPPORTED_IDENTITY_SCOPES : (record.allowedScopes ?? []),\n allowedGrants: record.allowedGrants ?? [],\n tenancy: isDynamic\n ? { kind: AuthorizationClientTenancy.UNAFFILIATED }\n : record.scope === ApiKeyScope.ORGANIZATION\n ? { kind: AuthorizationClientTenancy.ORGANIZATION, organizationId: (record as OAuthClientOrganization).organizationId }\n : { kind: AuthorizationClientTenancy.APPLICATION },\n // A self-registered client can never declare itself consent-free. Same reasoning as CIMD:\n // self-certification by the party being trusted. The row's `requiresConsent` is ignored rather\n // than trusted-and-checked, so a future write path that forgot to force it cannot leak.\n declaresConsentFree: isDynamic ? false : record.requiresConsent !== true,\n record,\n };\n }\n\n /**\n * Resolve a URL-shaped `client_id` through CIMD and project the document onto its union arm.\n *\n * ## The two ceilings this applies, and why they are not negotiable\n *\n * **Scopes are IDENTITY-ONLY.** A CIMD client asks for `openid`/`profile`/`email` and nothing else.\n * A registered client's `allowedScopes` is a decision an operator or organization administrator\n * made about a client THEY registered; a CIMD document is authored by the client itself, so reading\n * a scope ceiling out of it would be the client granting itself permission. Identity scopes are the\n * one set where that is harmless, because they authorize nothing: authorization in this framework\n * is roles-only, and scope-as-authorization was removed in 2026-07-21.\n *\n * **Grants default to `authorization_code`.** The draft says the metadata values \"are the values\n * defined in the OAuth Dynamic Client Registration Metadata OAuth Parameters registry\"\n * (spec-cite: draft-ietf-oauth-client-id-metadata-document-00 § 4.1), so RFC 7591 § 2 supplies the\n * default: \"If omitted, the default behavior is that the client will use only the\n * `authorization_code` Grant Type.\" (spec-cite: RFC 7591 § 2). An UNKNOWN grant string is dropped\n * rather than refused — this provider simply does not offer it, and refusing would break a client\n * whose document legitimately advertises a grant to some OTHER authorization server.\n */\n private async resolveClientIdMetadataDocumentClient(\n cimd: CimdClientMetadataBackendService,\n clientId: string,\n ): Promise<ClientIdMetadataDocumentAuthorizationClient> {\n const resolution = await cimd.resolve(clientId, cimd.deploymentConfiguration());\n if (resolution.kind !== 'ok') {\n // assurance-control: WILDO.IDENTITY.CLIENT_IDENTITY_ASSERTION — a refused client-identity\n // assertion. The reason vocabulary spans a misconfiguration (`host_not_allowed`) and an active\n // attack (`ssrf_target_refused`); both arrive at the same endpoint from the same kind of\n // unauthenticated caller, so only the reason tells them apart and an operator needs it\n // queryable rather than buried in a log line. Fire-and-forget: auditing must never change the\n // refusal it observes.\n this.logger.warn('CIMD client resolution refused', { clientId, reason: resolution.reason, detail: resolution.detail });\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logCimdClientRefused({\n clientId,\n reason: resolution.reason,\n detail: resolution.detail,\n }).catch((auditError) => this.logger.warn('OAUTH_CIMD_CLIENT_REFUSED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', resolution.detail);\n }\n const metadata = resolution.metadata;\n const declaredGrants = metadata.grant_types;\n const allowedGrants = declaredGrants === undefined\n ? [OAuthGrantType.AUTHORIZATION_CODE]\n : declaredGrants.filter((grant): grant is OAuthGrantType => (Object.values(OAuthGrantType) as string[]).includes(grant));\n return {\n origin: AuthorizationClientOrigin.CLIENT_ID_METADATA_DOCUMENT,\n clientId,\n name: metadata.client_name,\n redirectUris: metadata.redirect_uris,\n // revocation-C: RP-Initiated Logout post-logout redirects, honoured for a CIMD client since\n // 2026-09-08 (#464). The document's `post_logout_redirect_uris` is carried through and matched\n // EXACTLY by `isRegisteredPostLogoutRedirectUri` — the same anti-open-redirect discipline as\n // the authorization-code `redirect_uri` gate, and the same trust model, since both members\n // come from the same client-authored document fetched through the same SSRF guard.\n //\n // A document that registers none still admits none: fail-closed empty, which is what every\n // CIMD client got while the member was undeclared. What changed is that a client which DOES\n // register one stops having its redirect silently ignored.\n postLogoutRedirectUris: metadata.post_logout_redirect_uris ?? [],\n allowedScopes: OIDC_SUPPORTED_IDENTITY_SCOPES,\n allowedGrants,\n tenancy: { kind: AuthorizationClientTenancy.UNAFFILIATED },\n claimsOnlyLoopbackRedirects: cimd.claimsOnlyLoopbackRedirects(metadata),\n metadata,\n };\n }\n\n // ── helpers ───────────────────────────────────────────────────────────────\n private assertAuthorizationCodeClient(client: ResolvedAuthorizationClient | null, redirectUri: string): asserts client {\n if (!client) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client not found or inactive');\n }\n // Status and expiry are properties of a ROW this application minted; a client metadata document\n // has neither, and its liveness is the document's continued resolvability — already proven by the\n // fact that we are holding it. Narrowed on the discriminant so the compiler, not a convention,\n // is what keeps a row-only check off the CIMD arm.\n if (client.origin === AuthorizationClientOrigin.REGISTERED) {\n const record = client.record;\n if (record.status !== OAuthClientStatus.ACTIVE || isCredentialExpired(record.expiresAt)) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client not found or inactive');\n }\n }\n if (!client.allowedGrants.includes(OAuthGrantType.AUTHORIZATION_CODE)) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'unauthorized_client', 'client is not authorized for the authorization_code grant');\n }\n // Anti-open-redirect (RFC 6749 §3.1.2): exact-match allowlist, no wildcards/substrings. For a CIMD\n // client the allow-list is the document's own `redirect_uris`, which is exactly what the\n // specification requires: authorization servers \"MUST validate redirect URIs presented in an\n // authorization request against those in the metadata document\".\n // spec-cite: MCP 2025-11-25 — Authorization § Client ID Metadata Documents → Implementation Requirements\n if (!client.redirectUris.includes(redirectUri)) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_request', 'redirect_uri is not registered for this client');\n }\n }\n\n private assertScopeAllowed(client: ResolvedAuthorizationClient, scope: string[]): void {\n const allowed = client.allowedScopes;\n const unauthorized = scope.filter((s) => !allowed.includes(s));\n if (unauthorized.length > 0) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_scope', `scope(s) not allowed: ${unauthorized.join(', ')}`);\n }\n }\n\n // ── Compliance audit helpers (fire-and-forget; auditing must never affect the OAuth flow) ──\n\n /**\n * A-6 — emit `OAUTH_CODE_EXCHANGE_FAILED` for a rejected authorization_code exchange. `userId`/`resource`\n * are present only for post-decode causes (never for the atomic replay/consume failure). Audit is pulled\n * lazily via the container (mirrors this file's other lazy-service pattern) and never throws onto the flow.\n */\n private _auditCodeExchangeFailure(reason: OAuthCodeExchangeFailureReason, ctx: { clientId?: string; userId?: string; resource?: string }): void {\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logOAuthCodeExchangeFailed({\n reason,\n clientId: ctx.clientId,\n userId: ctx.userId,\n resource: ctx.resource,\n }).catch((auditError) => this.logger.warn('OAUTH_CODE_EXCHANGE_FAILED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n }\n\n /**\n * A-7 — emit the `MACHINE_AUTH_FAILED` audit for a confidential-client authentication failure on the\n * code / refresh / revoke secret front (the code-flow twin of the existing client_credentials front).\n * Never the raw secret — only the human-routable prefix (`oc_org_` / `oc_app_`), derived the same way as\n * the client_credentials emitter. No request/IP is in scope at these service methods.\n */\n private _auditConfidentialClientSecretFailure(presentedSecret: string | undefined): void {\n const credentialPrefix = presentedSecret?.startsWith('oc_org_')\n ? 'oc_org_'\n : presentedSecret?.startsWith('oc_app_') ? 'oc_app_' : undefined;\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logMachineAuthFailed({\n credentialKind: 'oauth_client',\n credentialPrefix,\n reason: 'invalid_client',\n }).catch((auditError) => this.logger.warn('MACHINE_AUTH_FAILED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n }\n\n /**\n * A-3 — emit `OAUTH_CONSENT_GRANT_PERSISTED` for a created (`isNewGrant`) or widened persistent consent\n * grant. `scopes` is the set the grant covers AFTER the write (the union on a widen). Fire-and-forget.\n */\n private _auditConsentGrantPersisted(userId: string, clientId: string, resource: string | undefined, scopes: string[], isNewGrant: boolean): void {\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logOAuthConsentGrantPersisted({\n userId,\n clientId,\n resource,\n scopes,\n isNewGrant,\n }).catch((auditError) => this.logger.warn('OAUTH_CONSENT_GRANT_PERSISTED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n }\n\n /**\n * F-OIDC-11 confidential-client authentication. For a client whose `tokenEndpointAuthMethod` is not\n * `NONE`, the presented `client_secret` MUST resolve to the client's current `hashedSecret` (or its\n * `previousHashedSecret` while the rotation-grace window is open — mirroring the client_credentials\n * secret front, so a confidential client can rotate without a hard cutover). A PUBLIC (`NONE`) client\n * requires no secret and is a no-op. `tokenEndpointAuthMethod` is `?? NONE`-defaulted so a client row\n * persisted before this field existed reads as public (back-compat). Fail-closed: a confidential\n * client with a missing or wrong secret is rejected `invalid_client`.\n */\n private assertConfidentialClientSecret(client: OAuthClientBase, presentedClientSecret: string | undefined): void {\n if (!isConfidentialTokenEndpointAuthMethod(client.tokenEndpointAuthMethod ?? OAuthTokenEndpointAuthMethod.NONE)) {\n return;\n }\n if (!presentedClientSecret) {\n // A-7: a confidential client that presented NO secret failed authentication — audit it (the\n // code-flow twin of the client_credentials MACHINE_AUTH_FAILED front).\n this._auditConfidentialClientSecretFailure(presentedClientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'this confidential client must authenticate with its client_secret');\n }\n const presentedHash = hashOAuthClientSecret(presentedClientSecret);\n // security-decision (accepted-low — H-57, see the coverage plan § \"ACCEPTED RISK\"): the `===` secret\n // compares below are not constant-time, but both operands are fixed-length SHA-256 digests of a 256-bit\n // secret — a timing side-channel leaks nothing brute-forceable; `crypto.timingSafeEqual` is not warranted.\n const matchesCurrent = !!client.hashedSecret && presentedHash === client.hashedSecret;\n const matchesRotationGrace = !!client.previousHashedSecret\n && presentedHash === client.previousHashedSecret\n && isRotationGraceWindowOpen(client.previousSecretInvalidationDate);\n if (!matchesCurrent && !matchesRotationGrace) {\n // assurance-control: WILDO.IDENTITY.CREDENTIAL_LIFECYCLE — a confidential-client secret failure is an\n // authentication failure, audited as the code-flow twin of the client_credentials MACHINE_AUTH_FAILED\n // front (never the raw secret; carries the credential prefix).\n // security-decision (accepted-low — D11, see the coverage plan § \"ACCEPTED RISK\"): the code/refresh/revoke\n // secret fronts are DELIBERATELY not per-endpoint rate-limited — 256-bit secrets make online guessing\n // infeasible and the global ~1000/min/IP limiter caps DoS. This front is now audited (above), so a lockout\n // counter is cheap to add IF the decision is ever revisited.\n this._auditConfidentialClientSecretFailure(presentedClientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client authentication failed');\n }\n }\n\n /**\n * F-OIDC-6 (RFC 7009 §2.1): authenticate a client that presents credentials at the token-revocation\n * endpoint. The presented `client_secret` MUST match the client's current `hashedSecret` (or its\n * rotation-grace `previousHashedSecret`) and the client must be ACTIVE — else `invalid_client`. Called\n * ONLY when the revoke request actually carries credentials; an unauthenticated bearer revoke stays\n * allowed (RFC 7009 permits it for a public client, and the refresh token itself is the bearer\n * credential). NOTE: Wildo's revoke operates on first-party user refresh tokens that no OAuth client\n * owns, so there is no client↔token binding to additionally enforce — this adds the client-authentication\n * capability §2.1 expects, and closes the \"no client authentication\" finding.\n *\n * spec-cite: RFC 7009 §2.1 — \"The authorization server first validates the client credentials (in case\n * of a confidential client) and then verifies whether the token was issued to the client making the\n * revocation request.\" The parenthetical is what permits an unauthenticated (public-client) revoke; the\n * second clause is the binding check, which is N/A here for the reason stated above.\n * The quoted \"no client authentication\" is NOT specification text — it is the name of the internal audit\n * finding this method closes. https://www.rfc-editor.org/rfc/rfc7009#section-2.1\n */\n public async verifyPresentedClientSecret(clientId: string, clientSecret: string): Promise<void> {\n // REGISTERED clients only, and deliberately so: a CIMD client has no secret this server ever\n // minted, so a URL-shaped client_id here resolves to nothing and fails `invalid_client` — which\n // is the correct answer, not a gap. Routing it through the CIMD resolver instead would make an\n // outbound fetch on an unauthenticated revoke request for no benefit.\n const client = await this.readRegisteredClientById(clientId);\n if (!client || client.status !== OAuthClientStatus.ACTIVE || isCredentialExpired(client.expiresAt)) {\n // A-7: confidential-client authentication failure on the refresh/revoke secret front (the client did\n // not resolve or is inactive) — audited as the code-flow twin of MACHINE_AUTH_FAILED.\n this._auditConfidentialClientSecretFailure(clientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client not found or inactive');\n }\n const presentedHash = hashOAuthClientSecret(clientSecret);\n // security-decision (accepted-low, see the coverage plan § \"ACCEPTED RISK\"): this refresh/revoke secret\n // front is DELIBERATELY not per-endpoint rate-limited (D11) and its `===` compares are not constant-time\n // (H-57) — 256-bit secrets + the global IP limiter make brute-force infeasible, and a fixed-length SHA-256\n // compare leaks no exploitable timing. Revisit conditions are in the plan.\n const matchesCurrent = !!client.hashedSecret && presentedHash === client.hashedSecret;\n const matchesRotationGrace = !!client.previousHashedSecret\n && presentedHash === client.previousHashedSecret\n && isRotationGraceWindowOpen(client.previousSecretInvalidationDate);\n if (!matchesCurrent && !matchesRotationGrace) {\n // A-7: a wrong secret on the refresh/revoke front — audited as the code-flow twin of MACHINE_AUTH_FAILED.\n // assurance-control: WILDO.AUDIT.SECURITY_EVENT — confidential-client authentication failure.\n this._auditConfidentialClientSecretFailure(clientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client authentication failed');\n }\n }\n\n // ── Persistent consent grants (\"remember this app\") ────────────────────────\n /**\n * PERSISTENT-CONSENT lookup (Item 3). Returns true iff a stored, non-expired grant for\n * `(userId, clientId, resource)` already covers EVERY requested scope — in which case\n * `/oauth/authorize` skips the consent prompt for a `requiresConsent` client. Fail-closed: no grant,\n * insufficient scopes (a requested scope not in the grant), expiry, or any read error ⇒ false, so the\n * user is re-prompted. Scope matching is SUBSET, never expansion.\n */\n public async hasCoveringConsentGrant(userId: string, clientId: string, resource: string | undefined, requestedScopes: string[]): Promise<boolean> {\n try {\n const grant = await this.readConsentGrant(userId, clientId, resource);\n if (!grant) return false;\n if (grant.expiresAt && new Date(grant.expiresAt).getTime() <= Date.now()) return false;\n const granted = new Set(grant.scopes ?? []);\n return requestedScopes.every((s) => granted.has(s));\n } catch {\n return false;\n }\n }\n\n /**\n * Store or widen the user's persistent consent grant when they approve WITH \"remember this app\".\n * Upserts on the `(userId, clientId, resource)` business key: widen an existing grant's scopes to the\n * UNION of prior + newly-approved, else create a fresh grant. System write (createAsSystem /\n * updateAsSystem — the CREATE DTO strips the context FK `userId`, re-attached from the schema allowlist).\n */\n public async upsertConsentGrant(userId: string, clientId: string, resource: string | undefined, scopes: string[]): Promise<void> {\n const systemAccess = this.container.get<SystemAccessBackendService>(SAAS_SERVICE_TYPES.SystemAccessService);\n const existing = await this.readConsentGrant(userId, clientId, resource);\n if (existing) {\n await this.widenConsentGrantScopes(systemAccess, existing, scopes);\n return;\n }\n // #465: every affirmative consent carries an expiry. The field had a reader and no writer, so a\n // remembered approval lived until the person revoked it while reading to an operator as a policy\n // knob that existed.\n const data: Record<string, unknown> = { userId, clientId, scopes, expiresAt: this.consentGrantExpiry() };\n if (resource) data.resource = resource;\n try {\n await systemAccess.createAsSystem(CoreResourceType.OAUTH_CONSENT_GRANTS, data);\n // A-3: a NEW persistent consent grant was created (\"remember this app\") — a durable delegated-authority\n // artifact that lets future authorize flows SKIP the prompt, so its creation is a first-class audit\n // concern. assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — persistent delegated-access authorization.\n this._auditConsentGrantPersisted(userId, clientId, resource, scopes, true);\n } catch (error) {\n // CONCURRENCY — race-safe upsert on the `(userId, clientId, resource)` business key.\n // Two approvals for the SAME app+resource can interleave: both `readConsentGrant` above return null,\n // both reach here, and the compound UNIQUE index (which the runtime really emits — proven by the\n // consent-grant persistence integration test) rejects the SECOND insert with `ErrorType.CONFLICT`.\n // That is NOT a failure of the \"remember this app\" intent — re-read the grant the winning racer created\n // and widen it to the union, so both converge on ONE grant carrying the union of their approved scopes.\n // Without this, the losing approval surfaced an unhandled 5xx (the bug this closes).\n // assurance-control: WILDO.PRIVACY.CONSENT_RECORD — the user's consent is recorded exactly once, never lost to a race.\n if (!isWildoBackendError(error) || error.type !== ErrorType.CONFLICT) throw error;\n const winner = await this.readConsentGrant(userId, clientId, resource);\n if (!winner) throw error; // a CONFLICT on some OTHER key (not ours) — surface it rather than mask it\n await this.widenConsentGrantScopes(systemAccess, winner, scopes);\n }\n }\n\n /**\n * When a consent granted NOW should lapse (#465).\n *\n * The operator's `auth.consentGrantLifetimeDays` when authored, else the framework default — whose\n * reasoning is at `OAUTH_CONSENT_GRANT_DEFAULT_LIFETIME_DAYS`. There is no \"never\": that was the\n * state this replaced.\n *\n * Reads config through the container and TOLERATES its absence, deliberately. A consent the user\n * has just given must not fail to persist because a policy lookup threw — losing the grant is a\n * worse outcome than applying the default, and the default is the safer of the two anyway.\n */\n private consentGrantExpiry(): Date {\n let lifetimeDays = OAUTH_CONSENT_GRANT_DEFAULT_LIFETIME_DAYS;\n try {\n const configured = this.container.get<AppConfigurationService>(SAAS_SERVICE_TYPES.AppConfigService)\n ?.config?.auth?.consentGrantLifetimeDays;\n if (typeof configured === 'number') lifetimeDays = configured;\n } catch {\n // Unbound in a harness that never looks at consent policy — the default stands.\n }\n return new Date(Date.now() + lifetimeDays * 24 * 60 * 60 * 1000);\n }\n\n /**\n * Widen an existing consent grant's scopes to the UNION of its current scopes + the newly-approved set,\n * via a system update. Shared by the initial-existing path and the concurrency-recovery path so the\n * union semantics never drift between them.\n */\n private async widenConsentGrantScopes(systemAccess: SystemAccessBackendService, existing: OAuthConsentGrant, scopes: string[]): Promise<void> {\n const merged = Array.from(new Set([...(existing.scopes ?? []), ...scopes]));\n // The expiry RESTARTS on a widen (#465): a widen only happens because the user approved again,\n // and a re-affirmation that left the old clock running would expire a consent the person gave\n // moments ago. Both callers of this method — the initial-existing path and the\n // concurrency-recovery path — are affirmative acts, so both refresh.\n await systemAccess.updateAsSystem(CoreResourceType.OAUTH_CONSENT_GRANTS, existing._id, {\n scopes: merged,\n expiresAt: this.consentGrantExpiry(),\n });\n // A-3: an existing persistent consent grant was WIDENED (scopes unioned). Shared by the initial-existing\n // path AND the concurrency-recovery path, so both audit the durable-authority change once.\n // assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — persistent delegated-access authorization (widen).\n this._auditConsentGrantPersisted(existing.userId, existing.clientId, existing.resource, merged, false);\n }\n\n /**\n * Read the single grant for the `(userId, clientId, resource)` business key, or null. A resource-less\n * grant (OIDC-only login) is stored with `resource` absent; the `?? null` filter matches it (Mongo\n * `{ resource: null }` matches a null OR absent field), while a resource-bound grant matches exactly.\n */\n private async readConsentGrant(userId: string, clientId: string, resource: string | undefined): Promise<OAuthConsentGrant | null> {\n const ecCreator = this.container.get<ExecutionContextCreatorBackendService>(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService);\n const repos = this.container.get<RepositoriesRegistryHandlerBackendService>(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService);\n const ec = await ecCreator.createForInternalRepositoryOperation({\n resourceType: CoreResourceType.OAUTH_CONSENT_GRANTS,\n operationIdentifier: CoreResourceOperation.READ,\n });\n return repos\n .getRepository(CoreResourceType.OAUTH_CONSENT_GRANTS)\n .read<OAuthConsentGrant>(ec, { userId, clientId, resource: resource ?? null });\n }\n\n private oauthError(type: ErrorType, oauthError: string, detail: string) {\n return this.errorBuilder.buildError(type, undefined, {\n customMessageReference: type === ErrorType.AUTHENTICATION\n ? ErrorCustomMessageReference.AUTHENTICATION_API_KEY_INVALID\n : ErrorCustomMessageReference.AUTHORIZATIONS_ACCESS_DENIED,\n context: { oauthError, detail },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"oidc-authorization-code.backend.service.js","sourceRoot":"","sources":["../../../../../src/security/authentications/services/oidc-authorization-code.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport { inject, injectable } from 'inversify';\nimport type { Container } from 'inversify';\nimport { createHash } from 'crypto';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError, projectCaughtErrorLogFields } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { ConsumableTokenBackendService } from '~wildo-backend-lib/security/consumable-tokens/services/consumable-token.backend.service';\nimport type { ExecutionContextCreatorBackendService } from '~wildo-backend-lib/runtime/services/execution-context-creator.backend.service';\nimport type { RepositoriesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/repositories/repositories-registry-handler.backend.service';\nimport {\n ApiKeyScope,\n ConsumableToken_ConsumptionMode,\n CoreConsumableTokenTypes,\n CoreResourceOperation,\n CoreResourceType,\n ErrorCustomMessageReference,\n ErrorType,\n isConfidentialTokenEndpointAuthMethod,\n isWildoBackendError,\n OAuthClientStatus,\n OAuthCodeExchangeFailureReason,\n OAuthGrantType,\n OAuthClientRegistrationOrigin,\n OAuthTokenEndpointAuthMethod,\n OrganizationMemberStatus,\n} from '@wildo-ai/saas-models';\nimport { OAUTH_CONSENT_GRANT_DEFAULT_LIFETIME_DAYS } from '@wildo-ai/saas-models';\nimport type { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { OAuthClientBase, OAuthClientOrganization, OAuthConsentGrant } from '@wildo-ai/saas-models';\nimport { AuditLogsBackendService } from '~wildo-backend-lib/compliance/audit-trails/services/audit-logs.backend.service';\nimport { isCredentialExpired, isRotationGraceWindowOpen } from '~wildo-backend-lib/security/credential-rotation-grace.backend.utils';\nimport { hashOAuthClientSecret } from '~wildo-backend-lib/security/oauth-clients/oauth-client-generation.backend.utils';\nimport { isValidPkceCodeVerifier, isValidS256CodeChallenge } from '~wildo-backend-lib/security/authentications/services/utils/pkce.backend.utils';\nimport type { SystemAccessBackendService } from '~wildo-backend-lib/base-classes/services/services/system-access.backend.service';\nimport { DurationUnit } from '@wildo-ai/zod-decorators';\nimport type { CimdClientMetadataBackendService } from '~wildo-backend-lib/security/authentications/services/cimd-client-metadata.backend.service';\nimport { OIDC_SUPPORTED_IDENTITY_SCOPES } from '~wildo-backend-lib/security/authentications/services/oidc-user-claims.backend.service';\nimport {\n AuthorizationClientOrigin,\n AuthorizationClientTenancy,\n isClientIdMetadataDocumentClient,\n} from '~wildo-backend-lib/security/authentications/models/authorization-client.backend.schemas';\nimport type {\n ClientIdMetadataDocumentAuthorizationClient,\n RegisteredAuthorizationClient,\n ResolvedAuthorizationClient,\n} from '~wildo-backend-lib/security/authentications/models/authorization-client.backend.schemas';\n\n/** The authorization request the authorize endpoint hands over AFTER the user has consented. */\nexport interface OidcAuthorizationCodeRequest {\n userId: string;\n clientId: string;\n redirectUri: string;\n scope: string[];\n codeChallenge: string;\n codeChallengeMethod: 'S256';\n nonce?: string;\n /**\n * RFC 8707 resource indicator — the canonical audience of the resource server the client\n * wants the access token for (an A2A / MCP endpoint URI). Captured at authorize time and\n * bound into the token's `aud` at exchange. MANDATORY for the delegated-token exchange:\n * `issueAuthorizationCodeToken` fail-closes with `invalid_target` when it is absent (a\n * delegated user token MUST be audience-bound — B-S2). Optional on THIS type only because the\n * authorize endpoint accepts the request before the token exchange enforces it.\n */\n resource?: string;\n /**\n * revocation-C: the End-User's OP login `sessionId`, captured from the first-party access token at\n * authorize/consent. Carried through the code into the id_token's `sid` so the RP-Initiated Logout\n * endpoint can terminate exactly this session. Optional — absent if the authorizing token carried no\n * session (should not happen for a first-party interactive authorize, but the pipeline stays lenient).\n */\n sessionId?: string;\n}\n\n/** The binding recovered when an authorization code is redeemed, used to mint the tokens. */\nexport interface OidcAuthorizationCodeGrant {\n userId: string;\n clientId: string;\n scope: string[];\n nonce?: string;\n /** RFC 8707 resource indicator captured at authorize (see {@link OidcAuthorizationCodeRequest.resource}). */\n resource?: string;\n /** revocation-C: the End-User's OP login `sessionId` → the id_token `sid` (see {@link OidcAuthorizationCodeRequest.sessionId}). */\n sessionId?: string;\n}\n\n/**\n * The authorization request stashed in a single-use consent-request token at `/oauth/authorize` for\n * a `requiresConsent` client (INSTEAD of the code), and recovered at `/oauth/authorize/decision` to\n * mint the code on APPROVE. Carries the SAME fields the code would bind PLUS the OAuth `state` (echoed\n * back on the final redirect). Stored server-side so the consent decision cannot tamper with the\n * parameters — the client/redirect/scope the user approved are exactly the ones the code binds.\n */\nexport interface OidcConsentRequest {\n userId: string;\n clientId: string;\n redirectUri: string;\n scope: string[];\n codeChallenge: string;\n nonce?: string;\n resource?: string;\n state?: string;\n}\n\n/**\n * What the authorize endpoint needs to know about a client before it decides whether to prompt.\n *\n * Carries the DISPLAY obligations alongside the decision, because the specification makes display a\n * requirement rather than a nicety for a client whose identity is only a domain: the redirect\n * hostname must be shown, and a loopback-only redirect set warrants an extra warning.\n */\nexport interface AuthorizationClientConsentPosture {\n requiresConsent: boolean;\n clientName: string;\n /** Which mechanism established this identity — the consent screen presents the two differently. */\n origin: AuthorizationClientOrigin;\n /**\n * Whether any tenant of this application vouches for the client — the actual trust signal.\n *\n * `origin` alone is misleading for a dynamically registered client: it IS a registered row, so it\n * reports `REGISTERED`, while nobody with standing here ever vetted it. `UNAFFILIATED` is the\n * value the consent screen must key on when it decides how cautious to be.\n */\n tenancy: AuthorizationClientTenancy;\n /** The hostname the user will be sent back to; `null` only if the URI is unparseable. */\n redirectUriHostname: string | null;\n /** Every redirect URI this client claims is loopback — show the impersonation warning. */\n warnsLoopbackOnlyRedirects: boolean;\n}\n\n/**\n * OIDC authorization_code engine (Wildo-as-provider). Two halves:\n * - {@link issueAuthorizationCode} — after the user consents, validate the request against\n * the registered client and mint a single-use, short-TTL code bound to the user + client +\n * scope + redirect_uri + PKCE challenge (+ nonce).\n * - {@link exchangeAuthorizationCode} — at the token endpoint, atomically consume the code and\n * verify the client + redirect_uri binding and PKCE (RFC 7636 S256), then return the binding.\n *\n * Built on the `OIDC_AUTHORIZATION_CODE` consumable token (Mongo, atomic SINGLE_USE, TTL) — the\n * same hardened primitive behind `AUTH_CODE_EXCHANGE`. PKCE is MANDATORY (S256 only). Every\n * failure is fail-closed and carries the RFC 6749 error code in `context.oauthError`.\n */\n@injectable()\nexport class OidcAuthorizationCodeBackendService {\n constructor(\n @inject(SAAS_SERVICE_TYPES.Container) private readonly container: Container,\n @inject(SAAS_SERVICE_TYPES.Logger) private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.ConsumableTokenService) private readonly consumableTokens: ConsumableTokenBackendService,\n ) {}\n\n public async issueAuthorizationCode(request: OidcAuthorizationCodeRequest): Promise<{ code: string }> {\n if (request.codeChallengeMethod !== 'S256') {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_request', 'only PKCE S256 is supported');\n }\n // RFC 7636 §4.2: reject a malformed S256 code_challenge at mint (defense-in-depth over the controller's\n // entry check) — a valid challenge is 43 unreserved-base64url chars, so a client cannot bind a\n // low-entropy / garbage challenge that would weaken the exchange-time proof.\n if (!isValidS256CodeChallenge(request.codeChallenge)) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_request', 'a valid PKCE S256 code_challenge is required');\n }\n const client = await this.resolveAuthorizationClient(request.clientId);\n this.assertAuthorizationCodeClient(client, request.redirectUri);\n this.assertScopeAllowed(client, request.scope);\n\n const created = await this.consumableTokens.createToken({\n tokenType: CoreConsumableTokenTypes.OIDC_AUTHORIZATION_CODE,\n consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,\n expiresIn: { value: 5, unit: DurationUnit.MINUTES },\n userId: request.userId,\n metadata: {\n clientId: request.clientId,\n scope: request.scope,\n redirectUri: request.redirectUri,\n codeChallenge: request.codeChallenge,\n ...(request.nonce ? { nonce: request.nonce } : {}),\n ...(request.resource ? { resource: request.resource } : {}),\n ...(request.sessionId ? { sessionId: request.sessionId } : {}),\n },\n });\n\n this.logger.debug('Issued OIDC authorization code', { clientId: request.clientId, userId: request.userId, scopeCount: request.scope.length });\n return { code: created.token };\n }\n\n public async exchangeAuthorizationCode(params: { code: string; clientId: string; redirectUri: string; codeVerifier: string; presentedClientSecret?: string }): Promise<OidcAuthorizationCodeGrant> {\n // A-6: every rejection below is a potential attack signal (code replay, PKCE downgrade, redirect\n // tampering, cross-client redemption). Each emits `OAUTH_CODE_EXCHANGE_FAILED` with a closed-vocabulary\n // `reason` BEFORE its (client-indistinguishable) `invalid_grant`. Post-decode branches also carry the\n // code's `userId`/`resource`; the atomic replay/consume failure carries only the request-supplied clientId\n // (the code never decoded). assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — failed delegated\n // exchange + monitoring. Fire-and-forget (helper `_auditCodeExchangeFailure`) — never affects the throw.\n let consumed: { tokenType?: string; userId?: string; metadata?: Record<string, unknown> };\n try {\n consumed = await this.consumableTokens.consumeToken(params.code) as typeof consumed;\n } catch {\n // Not found / expired / already used — all indistinguishable to the client (RFC 6749 §5.2).\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.CODE_REPLAY_OR_INVALID, { clientId: params.clientId });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'authorization code invalid, expired, or already used');\n }\n\n if (consumed.tokenType !== CoreConsumableTokenTypes.OIDC_AUTHORIZATION_CODE) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.NOT_AUTHORIZATION_CODE, { clientId: params.clientId });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'token is not an authorization code');\n }\n const userId = consumed.userId;\n if (!userId) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.NO_SUBJECT, { clientId: params.clientId });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'authorization code has no subject');\n }\n const meta = (consumed.metadata ?? {}) as { clientId?: string; scope?: string[]; redirectUri?: string; codeChallenge?: string; nonce?: string; resource?: string; sessionId?: string };\n\n // RFC 6749 §4.1.3: the client + redirect_uri MUST match the original authorization request.\n if (meta.clientId !== params.clientId) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.CLIENT_MISMATCH, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'authorization code was issued to a different client');\n }\n if (meta.redirectUri !== params.redirectUri) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.REDIRECT_URI_MISMATCH, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'redirect_uri does not match the authorization request');\n }\n\n // RFC 7636 §4.1: the code_verifier MUST be 43–128 chars of the unreserved set. Enforce the shape here\n // — AFTER the atomic consume, so a malformed verifier still BURNS the single-use code (no retry oracle,\n // same as a wrong verifier) — and reject it even if it would otherwise match a non-compliant challenge.\n if (!isValidPkceCodeVerifier(params.codeVerifier)) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.PKCE_VERIFICATION_FAILED, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'PKCE verification failed');\n }\n // RFC 7636: base64url(sha256(code_verifier)) MUST equal the bound code_challenge.\n const computedChallenge = createHash('sha256').update(params.codeVerifier).digest('base64url');\n // security-decision (accepted-low — H-57, see .claude/plans/oidc-provider-test-coverage.md § \"ACCEPTED RISK\"):\n // the `!==` below is not constant-time, but both operands are fixed-length base64url SHA-256 digests of a\n // 43-char PKCE verifier — a timing side-channel leaks nothing brute-forceable, so `crypto.timingSafeEqual`\n // is not warranted. Revisit only if a compare ever moves onto a low-entropy / attacker-chosen-length input.\n if (!meta.codeChallenge || computedChallenge !== meta.codeChallenge) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.PKCE_VERIFICATION_FAILED, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'PKCE verification failed');\n }\n\n // Defense-in-depth (RFC 6749 §4.1.3): re-verify the client is STILL active and STILL authorized\n // for the authorization_code grant at REDEMPTION time — the code outlives its 5-minute TTL past\n // the issue-time checks in `issueAuthorizationCode`, so a client deactivated (or whose grant was\n // revoked) within that window must not be able to complete the exchange. Read by the already-\n // matched `params.clientId` (== `meta.clientId`, verified above).\n //\n // Resolved through the SAME union as issuance, so a CIMD client is re-checked too: its document\n // must still resolve, still be trusted by the deployment's current policy, and still claim the\n // authorization_code grant. A CIMD document that was taken down, or a policy narrowed to an\n // allow-list that no longer admits it, must not be redeemable on a code minted before the change —\n // that is precisely the revocation path the cache's upper TTL bound exists to bound.\n let client: ResolvedAuthorizationClient | null;\n try {\n client = await this.resolveAuthorizationClient(params.clientId);\n } catch {\n // A CIMD refusal throws `invalid_client`; at REDEMPTION the client-indistinguishable answer is\n // `invalid_grant`, same as every other post-decode failure here.\n client = null;\n }\n if (!client || (client.origin === AuthorizationClientOrigin.REGISTERED\n && (client.record.status !== OAuthClientStatus.ACTIVE || isCredentialExpired(client.record.expiresAt)))) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.CLIENT_INACTIVE, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'client is no longer active');\n }\n if (!client.allowedGrants.includes(OAuthGrantType.AUTHORIZATION_CODE)) {\n this._auditCodeExchangeFailure(OAuthCodeExchangeFailureReason.GRANT_TYPE_LOST, { clientId: params.clientId, userId, resource: meta.resource });\n throw this.oauthError(ErrorType.AUTHORIZATION, 'unauthorized_client', 'client is no longer authorized for the authorization_code grant');\n }\n\n // F-OIDC-11: a CONFIDENTIAL client (`tokenEndpointAuthMethod !== NONE`) MUST additionally present a\n // valid `client_secret` — defense-in-depth over PKCE. A PUBLIC client (the default) is PKCE-only and\n // presents no secret. Enforced here at the same client re-read as the active/grant checks; like the\n // accepted F-OIDC-9 wrinkle, a wrong secret on a valid code burns that single-use code, which is\n // acceptable (the caller already holds a live high-entropy code, and issuance is fail-closed anyway).\n // Registered clients only. A CIMD client is public by construction — the resolver REFUSES any\n // document declaring a shared-secret `token_endpoint_auth_method` (the draft forbids them) or an\n // asymmetric one this provider does not implement, so there is no CIMD client for which a secret\n // check could ever be meaningful. Narrowed on the discriminant rather than on a nullable secret\n // field, so the impossibility is enforced by the type rather than by this comment.\n if (client.origin === AuthorizationClientOrigin.REGISTERED) {\n this.assertConfidentialClientSecret(client.record, params.presentedClientSecret);\n }\n\n return { userId, clientId: params.clientId, scope: meta.scope ?? [], nonce: meta.nonce, resource: meta.resource, sessionId: meta.sessionId };\n }\n\n /**\n * Read + validate the client for an authorization request, and report whether it requires\n * INTERACTIVE CONSENT. The authorize endpoint calls this BEFORE issuing anything: a\n * `requiresConsent` client is routed to {@link createConsentRequest} (→ `consent_required`); a\n * trusted/first-party client (`requiresConsent` false) proceeds straight to\n * {@link issueAuthorizationCode}. Applies the SAME client validation as `issueAuthorizationCode`\n * (active, authorization_code-grant-allowed, exact redirect_uri) so an invalid client fails\n * identically on either path.\n */\n public async resolveAuthorizationClientConsent(clientId: string, redirectUri: string, userId: string): Promise<AuthorizationClientConsentPosture> {\n const client = await this.resolveAuthorizationClient(clientId);\n this.assertAuthorizationCodeClient(client, redirectUri);\n\n // A CIMD client ALWAYS sees the consent screen, and its own document has no say in it.\n //\n // The registered path lets a client declare itself consent-free, because someone with standing in\n // this application registered it and made that call. A client metadata document is authored by the\n // party being trusted, so honouring a consent-free declaration from it would be self-certification:\n // anyone who can host a JSON file could mint an identity that skips the user's approval. There is\n // deliberately no `declaresConsentFree` on the CIMD arm at all — the field cannot be read here\n // because it does not exist there, which is stronger than remembering not to read it.\n //\n // This is also what the specification depicts: in the Client ID Metadata Documents flow, the\n // authorization server's step after validation is \"Display consent page with client_name\".\n // spec-cite: MCP 2025-11-25 — Authorization § Client ID Metadata Documents Flow\n if (isClientIdMetadataDocumentClient(client)) {\n return {\n requiresConsent: true,\n clientName: client.name,\n origin: client.origin,\n tenancy: client.tenancy.kind,\n // \"Authorization servers … MUST clearly display the redirect URI hostname during authorization\"\n // — so the hostname travels to the consent screen as DATA rather than being re-derived there.\n // spec-cite: MCP 2025-11-25 — Authorization § Client ID Metadata Document Security → Localhost\n // Redirect URI Risks\n redirectUriHostname: this.hostnameOf(redirectUri),\n warnsLoopbackOnlyRedirects: client.claimsOnlyLoopbackRedirects,\n };\n }\n\n let requiresConsent = !client.declaresConsentFree;\n\n // D4 option B — SAME-ORG consent gate.\n // assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — a user must\n // explicitly authorize third-party delegated access to their account. A client that declares itself\n // consent-free (`requiresConsent:false`) may skip the prompt ONLY inside its own trust boundary: for\n // an ORG-scoped client that is an ACTIVE member of its OWN org. A CROSS-ORG user (not a member) is a\n // third-party delegation and MUST see the consent screen — otherwise an ORG_ADMIN could register a\n // no-consent client and silently harvest OTHER orgs' users' delegated tokens by phishing them to the\n // authorize endpoint. APP-scoped clients are platform-operator-created (first-party) and keep their\n // declared posture. Fail-closed: any membership-read error forces consent (the safe default).\n if (!requiresConsent && client.tenancy.kind === AuthorizationClientTenancy.ORGANIZATION) {\n const orgId = client.tenancy.organizationId;\n if (!orgId || !(await this.isActiveOrgMember(userId, orgId))) {\n requiresConsent = true;\n }\n }\n\n return {\n requiresConsent,\n clientName: client.name,\n origin: client.origin,\n tenancy: client.tenancy.kind,\n redirectUriHostname: this.hostnameOf(redirectUri),\n // A DYNAMICALLY registered client earns the same loopback warning as a CIMD one: it asserted\n // its own name and redirect URIs, so \"the app you recognise\" and \"the app that registered\n // this name\" are not the same claim. An OPERATOR-registered client was vetted by someone with\n // standing here, and warning on those would train users to click through the warning that\n // matters.\n warnsLoopbackOnlyRedirects: client.tenancy.kind === AuthorizationClientTenancy.UNAFFILIATED\n && client.redirectUris.length > 0\n && client.redirectUris.every((uri) => this.isLoopbackRedirect(uri)),\n };\n }\n\n /** Loopback test shared by the registered-but-unaffiliated path and the CIMD resolver's own. */\n private isLoopbackRedirect(uri: string): boolean {\n try {\n const host = new URL(uri).hostname.toLowerCase();\n return host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]';\n } catch {\n return false;\n }\n }\n\n /**\n * The hostname a redirect URI will send the user to, for consent-screen display.\n *\n * Returns `null` rather than throwing on an unparseable URI: by the time this runs the URI has\n * already exact-matched the client's registered/claimed set, so an unparseable value here is a\n * data-integrity oddity, and failing the whole authorize request over a DISPLAY field would trade a\n * working flow for a cosmetic one.\n */\n private hostnameOf(redirectUri: string): string | null {\n try {\n return new URL(redirectUri).hostname;\n } catch {\n return null;\n }\n }\n\n /**\n * D4/B membership check (fail-closed): is `userId` an ACTIVE member of `organizationId`? Reads\n * `ORGANIZATION_MEMBERS` by the `(userId, organizationId, status=ACTIVE)` grain with an internal system\n * EC. Returns FALSE on any error so the caller forces consent rather than silently skipping it.\n */\n private async isActiveOrgMember(userId: string, organizationId: string): Promise<boolean> {\n try {\n const ecCreator = this.container.get<ExecutionContextCreatorBackendService>(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService);\n const repos = this.container.get<RepositoriesRegistryHandlerBackendService>(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService);\n const ec = await ecCreator.createForInternalRepositoryOperation({\n resourceType: CoreResourceType.ORGANIZATION_MEMBERS,\n operationIdentifier: CoreResourceOperation.READ,\n });\n const member = await repos\n .getRepository(CoreResourceType.ORGANIZATION_MEMBERS)\n .read<{ _id: string }>(ec, { userId, organizationId, status: OrganizationMemberStatus.ACTIVE });\n return !!member;\n } catch (error) {\n this.logger.warn('Org-membership check failed; forcing consent (fail-closed)', {\n userId, organizationId, reason: describeCaughtError(error),\n });\n return false;\n }\n }\n\n /**\n * Mint a single-use consent-request token for a `requiresConsent` client (used INSTEAD of the\n * authorization code at authorize time). Re-validates the client + scope (defense-in-depth, mirrors\n * {@link issueAuthorizationCode}). The returned token is handed to the caller in the\n * `consent_required` response and redeemed at {@link consumeConsentRequest} on the user's decision.\n */\n public async createConsentRequest(request: OidcConsentRequest): Promise<{ consentToken: string }> {\n const client = await this.resolveAuthorizationClient(request.clientId);\n this.assertAuthorizationCodeClient(client, request.redirectUri);\n this.assertScopeAllowed(client, request.scope);\n\n const created = await this.consumableTokens.createToken({\n tokenType: CoreConsumableTokenTypes.OIDC_CONSENT_REQUEST,\n consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,\n expiresIn: { value: 10, unit: DurationUnit.MINUTES },\n userId: request.userId,\n metadata: {\n clientId: request.clientId,\n scope: request.scope,\n redirectUri: request.redirectUri,\n codeChallenge: request.codeChallenge,\n ...(request.nonce ? { nonce: request.nonce } : {}),\n ...(request.resource ? { resource: request.resource } : {}),\n ...(request.state ? { state: request.state } : {}),\n },\n });\n this.logger.debug('Issued OIDC consent request', { clientId: request.clientId, userId: request.userId });\n return { consentToken: created.token };\n }\n\n /**\n * Atomically consume a consent-request token (single-use) → the stashed authorization request. The\n * decision endpoint then binds this to the AUTHENTICATED user (the token subject MUST match) and, on\n * APPROVE, feeds it to {@link issueAuthorizationCode}. Not-found / expired / already-used are all\n * indistinguishable `invalid_grant` (RFC 6749 §5.2), same as the code exchange.\n */\n public async consumeConsentRequest(consentToken: string): Promise<OidcConsentRequest> {\n let consumed: { tokenType?: string; userId?: string; metadata?: Record<string, unknown> };\n try {\n consumed = await this.consumableTokens.consumeToken(consentToken) as typeof consumed;\n } catch {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'consent request invalid, expired, or already used');\n }\n if (consumed.tokenType !== CoreConsumableTokenTypes.OIDC_CONSENT_REQUEST) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'token is not a consent request');\n }\n const userId = consumed.userId;\n if (!userId) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'consent request has no subject');\n }\n const meta = (consumed.metadata ?? {}) as { clientId?: string; scope?: string[]; redirectUri?: string; codeChallenge?: string; nonce?: string; resource?: string; state?: string };\n if (!meta.clientId || !meta.redirectUri || !meta.codeChallenge) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_grant', 'consent request is malformed');\n }\n return {\n userId,\n clientId: meta.clientId,\n redirectUri: meta.redirectUri,\n scope: meta.scope ?? [],\n codeChallenge: meta.codeChallenge,\n nonce: meta.nonce,\n resource: meta.resource,\n state: meta.state,\n };\n }\n\n /**\n * Mint a single-use logout-confirmation token (revocation-C §6 — the logout-confirmation prompt).\n * Called at `GET /oauth/end-session` for a NON-trusted logout (a valid `id_token_hint` whose\n * `post_logout_redirect_uri` is absent / unregistered / mismatched), INSTEAD of terminating the\n * session inline — the Keycloak-style posture skips the prompt only for a trusted RP (valid hint +\n * exact-match registered redirect). The already-validated `{ userId, sessionId }` is stashed\n * server-side so the confirmation cannot tamper with WHICH session ends. The returned token is\n * carried to the frontend `/oauth/logout-confirm` prompt and redeemed at\n * {@link consumeLogoutConfirmation} when the End-User confirms. Minted ONLY when a real session was\n * identified (a valid hint) — a request with nothing to terminate lands on the signed-out page with\n * no prompt, so the token always names a session.\n */\n public async createLogoutConfirmation(request: {\n userId: string;\n sessionId: string;\n clientId?: string;\n postLogoutRedirectUriRejected: boolean;\n }): Promise<{ confirmationToken: string }> {\n const created = await this.consumableTokens.createToken({\n tokenType: CoreConsumableTokenTypes.OIDC_LOGOUT_CONFIRMATION,\n consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,\n expiresIn: { value: 10, unit: DurationUnit.MINUTES },\n userId: request.userId,\n // The RP the hint named (`clientId`) and whether a presented `post_logout_redirect_uri` was rejected\n // are stashed alongside the session, so the confirm-endpoint audit keeps FULL attribution — the token\n // is the only thing `POST /oauth/end-session/confirm` sees (it re-verifies no hint).\n metadata: {\n sessionId: request.sessionId,\n postLogoutRedirectUriRejected: request.postLogoutRedirectUriRejected,\n ...(request.clientId ? { clientId: request.clientId } : {}),\n },\n });\n this.logger.debug('Issued OIDC logout confirmation', { userId: request.userId });\n return { confirmationToken: created.token };\n }\n\n /**\n * Atomically consume a logout-confirmation token → the stashed `{ userId, sessionId }`. Unlike\n * {@link consumeConsentRequest}, a not-found / expired / already-used token is NOT an error: the\n * End-User confirmed a logout, so a stale token yields `null` and the caller simply lands them on the\n * signed-out page WITHOUT terminating (the session is most likely already gone, and revealing whether\n * the token was live would be a session-state oracle). A wrong token type is treated identically.\n */\n public async consumeLogoutConfirmation(confirmationToken: string): Promise<{\n userId?: string;\n sessionId?: string;\n clientId?: string;\n postLogoutRedirectUriRejected?: boolean;\n } | null> {\n let consumed: { tokenType?: string; userId?: string; metadata?: Record<string, unknown> };\n try {\n consumed = await this.consumableTokens.consumeToken(confirmationToken) as typeof consumed;\n } catch {\n return null;\n }\n if (consumed.tokenType !== CoreConsumableTokenTypes.OIDC_LOGOUT_CONFIRMATION) {\n return null;\n }\n const meta = (consumed.metadata ?? {}) as { sessionId?: string; clientId?: string; postLogoutRedirectUriRejected?: boolean };\n return {\n userId: consumed.userId,\n sessionId: meta.sessionId,\n clientId: meta.clientId,\n postLogoutRedirectUriRejected: meta.postLogoutRedirectUriRejected,\n };\n }\n\n // ── client resolution ─────────────────────────────────────────────────────\n /**\n * Resolve a `client_id` to the identity behind it, from EITHER source this provider accepts.\n *\n * Triage is on the SHAPE of the identifier, which is what makes the two mechanisms coexist without\n * a mode flag: a CIMD `client_id` is an `https://` URL, and a registered one is a Mongo `_id`.\n * Neither can be mistaken for the other, and the CIMD branch is entered ONLY for a URL — so a\n * deployment with the policy `DISABLED` never fetches anything, and a registered lookup never\n * touches the network.\n *\n * Returns `null` for \"no such client\"; THROWS for a URL-shaped client_id that resolved and was\n * refused, because those two are not the same fact: the first is a typo, the second is a policy or\n * security decision whose reason the operator needs.\n */\n /**\n * revocation-C: is `uri` a registered POST-LOGOUT redirect for `clientId`? The `/oauth/end-session`\n * handler calls this to validate a presented `post_logout_redirect_uri` before it redirects the browser\n * back to the relying party. EXACT string match against the resolved client's `postLogoutRedirectUris`\n * allowlist — the SAME anti-open-redirect discipline as the authorization-code `redirect_uri` gate\n * (`exchangeAuthorizationCode`), never a prefix or origin match. A client that cannot be resolved, or\n * that registered no post-logout URIs, admits none — fail closed. (A CIMD client CAN register\n * them since #464; before that, none could.)\n * spec-cite: OpenID Connect RP-Initiated Logout 1.0 §3 (the OP \"MUST NOT perform post-logout redirection\n * if the `post_logout_redirect_uri` value supplied does not exactly match one of the previously\n * registered `post_logout_redirect_uris` values\"; registration of those values is §2).\n */\n public async isRegisteredPostLogoutRedirectUri(clientId: string, uri: string): Promise<boolean> {\n let client: ResolvedAuthorizationClient | null;\n try {\n client = await this.resolveAuthorizationClient(clientId);\n } catch {\n client = null;\n }\n return client?.postLogoutRedirectUris.includes(uri) ?? false;\n }\n\n private async resolveAuthorizationClient(clientId: string): Promise<ResolvedAuthorizationClient | null> {\n const cimd = this.container.get<CimdClientMetadataBackendService>(SAAS_SERVICE_TYPES.CimdClientMetadata);\n if (cimd.isCimdClientId(clientId)) {\n return this.resolveClientIdMetadataDocumentClient(cimd, clientId);\n }\n const record = await this.readRegisteredClientById(clientId);\n return record ? this.adaptRegisteredClient(record) : null;\n }\n\n /** Read a registered client by `_id` across both scope collections (org then app). */\n private async readRegisteredClientById(clientId: string): Promise<OAuthClientBase | null> {\n const ecCreator = this.container.get<ExecutionContextCreatorBackendService>(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService);\n const repos = this.container.get<RepositoriesRegistryHandlerBackendService>(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService);\n for (const resourceType of [CoreResourceType.OAUTH_CLIENTS_ORGANIZATION, CoreResourceType.OAUTH_CLIENTS_APPLICATION]) {\n const ec = await ecCreator.createForInternalRepositoryOperation({ resourceType, operationIdentifier: CoreResourceOperation.READ });\n const client = await repos.getRepository(resourceType).read<OAuthClientBase>(ec, { _id: clientId });\n if (client) return client;\n }\n return null;\n }\n\n /**\n * Project a registered client row onto the union arm that describes it.\n *\n * `scope` (an `ApiKeyScope`) becomes `tenancy`, and that translation is the reason this type exists\n * at all — downstream, `tenancy` is the field the consent gate reads, and it can now express a\n * client that belongs to NO tenant, which `ApiKeyScope` cannot.\n */\n private adaptRegisteredClient(record: OAuthClientBase): RegisteredAuthorizationClient {\n // A DYNAMICALLY registered client is stored on the APPLICATION collection because it has no\n // organization — and `scope: APPLICATION` otherwise means platform-operator first-party. Reading\n // tenancy from `scope` alone would therefore hand a stranger the most trusted posture in the\n // system purely because of where its row had to be filed. Provenance wins over storage.\n const isDynamic = record.registrationOrigin === OAuthClientRegistrationOrigin.DYNAMIC;\n return {\n origin: AuthorizationClientOrigin.REGISTERED,\n clientId: record._id,\n name: record.name,\n redirectUris: record.redirectUris ?? [],\n // revocation-C: the RP-Initiated Logout post-logout allowlist. Same `?? []` fail-closed default as\n // `redirectUris` — a registered client with none configured admits no `post_logout_redirect_uri`.\n postLogoutRedirectUris: record.postLogoutRedirectUris ?? [],\n // Identity scopes only for a self-registered client, whatever the row says. The row's\n // `allowedScopes` was authored by the registration request — i.e. by the client itself — so\n // honouring it would be the client granting itself permission. `/register` already refuses a\n // wider request, and this is the second half of that invariant: even a row that acquired\n // wider scopes by any other means cannot spend them.\n allowedScopes: isDynamic ? OIDC_SUPPORTED_IDENTITY_SCOPES : (record.allowedScopes ?? []),\n allowedGrants: record.allowedGrants ?? [],\n tenancy: isDynamic\n ? { kind: AuthorizationClientTenancy.UNAFFILIATED }\n : record.scope === ApiKeyScope.ORGANIZATION\n ? { kind: AuthorizationClientTenancy.ORGANIZATION, organizationId: (record as OAuthClientOrganization).organizationId }\n : { kind: AuthorizationClientTenancy.APPLICATION },\n // A self-registered client can never declare itself consent-free. Same reasoning as CIMD:\n // self-certification by the party being trusted. The row's `requiresConsent` is ignored rather\n // than trusted-and-checked, so a future write path that forgot to force it cannot leak.\n declaresConsentFree: isDynamic ? false : record.requiresConsent !== true,\n record,\n };\n }\n\n /**\n * Resolve a URL-shaped `client_id` through CIMD and project the document onto its union arm.\n *\n * ## The two ceilings this applies, and why they are not negotiable\n *\n * **Scopes are IDENTITY-ONLY.** A CIMD client asks for `openid`/`profile`/`email` and nothing else.\n * A registered client's `allowedScopes` is a decision an operator or organization administrator\n * made about a client THEY registered; a CIMD document is authored by the client itself, so reading\n * a scope ceiling out of it would be the client granting itself permission. Identity scopes are the\n * one set where that is harmless, because they authorize nothing: authorization in this framework\n * is roles-only, and scope-as-authorization was removed in 2026-07-21.\n *\n * **Grants default to `authorization_code`.** The draft says the metadata values \"are the values\n * defined in the OAuth Dynamic Client Registration Metadata OAuth Parameters registry\"\n * (spec-cite: draft-ietf-oauth-client-id-metadata-document-00 § 4.1), so RFC 7591 § 2 supplies the\n * default: \"If omitted, the default behavior is that the client will use only the\n * `authorization_code` Grant Type.\" (spec-cite: RFC 7591 § 2). An UNKNOWN grant string is dropped\n * rather than refused — this provider simply does not offer it, and refusing would break a client\n * whose document legitimately advertises a grant to some OTHER authorization server.\n */\n private async resolveClientIdMetadataDocumentClient(\n cimd: CimdClientMetadataBackendService,\n clientId: string,\n ): Promise<ClientIdMetadataDocumentAuthorizationClient> {\n const resolution = await cimd.resolve(clientId, cimd.deploymentConfiguration());\n if (resolution.kind !== 'ok') {\n // assurance-control: WILDO.IDENTITY.CLIENT_IDENTITY_ASSERTION — a refused client-identity\n // assertion. The reason vocabulary spans a misconfiguration (`host_not_allowed`) and an active\n // attack (`ssrf_target_refused`); both arrive at the same endpoint from the same kind of\n // unauthenticated caller, so only the reason tells them apart and an operator needs it\n // queryable rather than buried in a log line. Fire-and-forget: auditing must never change the\n // refusal it observes.\n this.logger.warn('CIMD client resolution refused', { clientId, reason: resolution.reason, detail: resolution.detail });\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logCimdClientRefused({\n clientId,\n reason: resolution.reason,\n detail: resolution.detail,\n }).catch((auditError) => this.logger.warn('OAUTH_CIMD_CLIENT_REFUSED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', resolution.detail);\n }\n const metadata = resolution.metadata;\n const declaredGrants = metadata.grant_types;\n const allowedGrants = declaredGrants === undefined\n ? [OAuthGrantType.AUTHORIZATION_CODE]\n : declaredGrants.filter((grant): grant is OAuthGrantType => (Object.values(OAuthGrantType) as string[]).includes(grant));\n return {\n origin: AuthorizationClientOrigin.CLIENT_ID_METADATA_DOCUMENT,\n clientId,\n name: metadata.client_name,\n redirectUris: metadata.redirect_uris,\n // revocation-C: RP-Initiated Logout post-logout redirects, honoured for a CIMD client since\n // 2026-09-08 (#464). The document's `post_logout_redirect_uris` is carried through and matched\n // EXACTLY by `isRegisteredPostLogoutRedirectUri` — the same anti-open-redirect discipline as\n // the authorization-code `redirect_uri` gate, and the same trust model, since both members\n // come from the same client-authored document fetched through the same SSRF guard.\n //\n // A document that registers none still admits none: fail-closed empty, which is what every\n // CIMD client got while the member was undeclared. What changed is that a client which DOES\n // register one stops having its redirect silently ignored.\n postLogoutRedirectUris: metadata.post_logout_redirect_uris ?? [],\n allowedScopes: OIDC_SUPPORTED_IDENTITY_SCOPES,\n allowedGrants,\n tenancy: { kind: AuthorizationClientTenancy.UNAFFILIATED },\n claimsOnlyLoopbackRedirects: cimd.claimsOnlyLoopbackRedirects(metadata),\n metadata,\n };\n }\n\n // ── helpers ───────────────────────────────────────────────────────────────\n private assertAuthorizationCodeClient(client: ResolvedAuthorizationClient | null, redirectUri: string): asserts client {\n if (!client) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client not found or inactive');\n }\n // Status and expiry are properties of a ROW this application minted; a client metadata document\n // has neither, and its liveness is the document's continued resolvability — already proven by the\n // fact that we are holding it. Narrowed on the discriminant so the compiler, not a convention,\n // is what keeps a row-only check off the CIMD arm.\n if (client.origin === AuthorizationClientOrigin.REGISTERED) {\n const record = client.record;\n if (record.status !== OAuthClientStatus.ACTIVE || isCredentialExpired(record.expiresAt)) {\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client not found or inactive');\n }\n }\n if (!client.allowedGrants.includes(OAuthGrantType.AUTHORIZATION_CODE)) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'unauthorized_client', 'client is not authorized for the authorization_code grant');\n }\n // Anti-open-redirect (RFC 6749 §3.1.2): exact-match allowlist, no wildcards/substrings. For a CIMD\n // client the allow-list is the document's own `redirect_uris`, which is exactly what the\n // specification requires: authorization servers \"MUST validate redirect URIs presented in an\n // authorization request against those in the metadata document\".\n // spec-cite: MCP 2025-11-25 — Authorization § Client ID Metadata Documents → Implementation Requirements\n if (!client.redirectUris.includes(redirectUri)) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_request', 'redirect_uri is not registered for this client');\n }\n }\n\n private assertScopeAllowed(client: ResolvedAuthorizationClient, scope: string[]): void {\n const allowed = client.allowedScopes;\n const unauthorized = scope.filter((s) => !allowed.includes(s));\n if (unauthorized.length > 0) {\n throw this.oauthError(ErrorType.AUTHORIZATION, 'invalid_scope', `scope(s) not allowed: ${unauthorized.join(', ')}`);\n }\n }\n\n // ── Compliance audit helpers (fire-and-forget; auditing must never affect the OAuth flow) ──\n\n /**\n * A-6 — emit `OAUTH_CODE_EXCHANGE_FAILED` for a rejected authorization_code exchange. `userId`/`resource`\n * are present only for post-decode causes (never for the atomic replay/consume failure). Audit is pulled\n * lazily via the container (mirrors this file's other lazy-service pattern) and never throws onto the flow.\n */\n private _auditCodeExchangeFailure(reason: OAuthCodeExchangeFailureReason, ctx: { clientId?: string; userId?: string; resource?: string }): void {\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logOAuthCodeExchangeFailed({\n reason,\n clientId: ctx.clientId,\n userId: ctx.userId,\n resource: ctx.resource,\n }).catch((auditError) => this.logger.warn('OAUTH_CODE_EXCHANGE_FAILED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n }\n\n /**\n * A-7 — emit the `MACHINE_AUTH_FAILED` audit for a confidential-client authentication failure on the\n * code / refresh / revoke secret front (the code-flow twin of the existing client_credentials front).\n * Never the raw secret — only the human-routable prefix (`oc_org_` / `oc_app_`), derived the same way as\n * the client_credentials emitter. No request/IP is in scope at these service methods.\n */\n private _auditConfidentialClientSecretFailure(presentedSecret: string | undefined): void {\n const credentialPrefix = presentedSecret?.startsWith('oc_org_')\n ? 'oc_org_'\n : presentedSecret?.startsWith('oc_app_') ? 'oc_app_' : undefined;\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logMachineAuthFailed({\n credentialKind: 'oauth_client',\n credentialPrefix,\n reason: 'invalid_client',\n }).catch((auditError) => this.logger.warn('MACHINE_AUTH_FAILED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n }\n\n /**\n * A-3 — emit `OAUTH_CONSENT_GRANT_PERSISTED` for a created (`isNewGrant`) or widened persistent consent\n * grant. `scopes` is the set the grant covers AFTER the write (the union on a widen). Fire-and-forget.\n */\n private _auditConsentGrantPersisted(userId: string, clientId: string, resource: string | undefined, scopes: string[], isNewGrant: boolean): void {\n const auditLogs = this.container.get<AuditLogsBackendService>(SAAS_SERVICE_TYPES.AuditLogsService);\n void auditLogs.logOAuthConsentGrantPersisted({\n userId,\n clientId,\n resource,\n scopes,\n isNewGrant,\n }).catch((auditError) => this.logger.warn('OAUTH_CONSENT_GRANT_PERSISTED audit emit failed (non-fatal)', {\n ...projectCaughtErrorLogFields(auditError),\n }));\n }\n\n /**\n * F-OIDC-11 confidential-client authentication. For a client whose `tokenEndpointAuthMethod` is not\n * `NONE`, the presented `client_secret` MUST resolve to the client's current `hashedSecret` (or its\n * `previousHashedSecret` while the rotation-grace window is open — mirroring the client_credentials\n * secret front, so a confidential client can rotate without a hard cutover). A PUBLIC (`NONE`) client\n * requires no secret and is a no-op. `tokenEndpointAuthMethod` is `?? NONE`-defaulted so a client row\n * persisted before this field existed reads as public (back-compat). Fail-closed: a confidential\n * client with a missing or wrong secret is rejected `invalid_client`.\n */\n private assertConfidentialClientSecret(client: OAuthClientBase, presentedClientSecret: string | undefined): void {\n if (!isConfidentialTokenEndpointAuthMethod(client.tokenEndpointAuthMethod ?? OAuthTokenEndpointAuthMethod.NONE)) {\n return;\n }\n if (!presentedClientSecret) {\n // A-7: a confidential client that presented NO secret failed authentication — audit it (the\n // code-flow twin of the client_credentials MACHINE_AUTH_FAILED front).\n this._auditConfidentialClientSecretFailure(presentedClientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'this confidential client must authenticate with its client_secret');\n }\n const presentedHash = hashOAuthClientSecret(presentedClientSecret);\n // security-decision (accepted-low — H-57, see the coverage plan § \"ACCEPTED RISK\"): the `===` secret\n // compares below are not constant-time, but both operands are fixed-length SHA-256 digests of a 256-bit\n // secret — a timing side-channel leaks nothing brute-forceable; `crypto.timingSafeEqual` is not warranted.\n const matchesCurrent = !!client.hashedSecret && presentedHash === client.hashedSecret;\n const matchesRotationGrace = !!client.previousHashedSecret\n && presentedHash === client.previousHashedSecret\n && isRotationGraceWindowOpen(client.previousSecretInvalidationDate);\n if (!matchesCurrent && !matchesRotationGrace) {\n // assurance-control: WILDO.IDENTITY.CREDENTIAL_LIFECYCLE — a confidential-client secret failure is an\n // authentication failure, audited as the code-flow twin of the client_credentials MACHINE_AUTH_FAILED\n // front (never the raw secret; carries the credential prefix).\n // security-decision (accepted-low — D11, see the coverage plan § \"ACCEPTED RISK\"): the code/refresh/revoke\n // secret fronts are DELIBERATELY not per-endpoint rate-limited — 256-bit secrets make online guessing\n // infeasible and the global ~1000/min/IP limiter caps DoS. This front is now audited (above), so a lockout\n // counter is cheap to add IF the decision is ever revisited.\n this._auditConfidentialClientSecretFailure(presentedClientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client authentication failed');\n }\n }\n\n /**\n * F-OIDC-6 (RFC 7009 §2.1): authenticate a client that presents credentials at the token-revocation\n * endpoint. The presented `client_secret` MUST match the client's current `hashedSecret` (or its\n * rotation-grace `previousHashedSecret`) and the client must be ACTIVE — else `invalid_client`. Called\n * ONLY when the revoke request actually carries credentials; an unauthenticated bearer revoke stays\n * allowed (RFC 7009 permits it for a public client, and the refresh token itself is the bearer\n * credential). NOTE: Wildo's revoke operates on first-party user refresh tokens that no OAuth client\n * owns, so there is no client↔token binding to additionally enforce — this adds the client-authentication\n * capability §2.1 expects, and closes the \"no client authentication\" finding.\n *\n * spec-cite: RFC 7009 §2.1 — \"The authorization server first validates the client credentials (in case\n * of a confidential client) and then verifies whether the token was issued to the client making the\n * revocation request.\" The parenthetical is what permits an unauthenticated (public-client) revoke; the\n * second clause is the binding check, which is N/A here for the reason stated above.\n * The quoted \"no client authentication\" is NOT specification text — it is the name of the internal audit\n * finding this method closes. https://www.rfc-editor.org/rfc/rfc7009#section-2.1\n */\n public async verifyPresentedClientSecret(clientId: string, clientSecret: string): Promise<void> {\n // REGISTERED clients only, and deliberately so: a CIMD client has no secret this server ever\n // minted, so a URL-shaped client_id here resolves to nothing and fails `invalid_client` — which\n // is the correct answer, not a gap. Routing it through the CIMD resolver instead would make an\n // outbound fetch on an unauthenticated revoke request for no benefit.\n const client = await this.readRegisteredClientById(clientId);\n if (!client || client.status !== OAuthClientStatus.ACTIVE || isCredentialExpired(client.expiresAt)) {\n // A-7: confidential-client authentication failure on the refresh/revoke secret front (the client did\n // not resolve or is inactive) — audited as the code-flow twin of MACHINE_AUTH_FAILED.\n this._auditConfidentialClientSecretFailure(clientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client not found or inactive');\n }\n const presentedHash = hashOAuthClientSecret(clientSecret);\n // security-decision (accepted-low, see the coverage plan § \"ACCEPTED RISK\"): this refresh/revoke secret\n // front is DELIBERATELY not per-endpoint rate-limited (D11) and its `===` compares are not constant-time\n // (H-57) — 256-bit secrets + the global IP limiter make brute-force infeasible, and a fixed-length SHA-256\n // compare leaks no exploitable timing. Revisit conditions are in the plan.\n const matchesCurrent = !!client.hashedSecret && presentedHash === client.hashedSecret;\n const matchesRotationGrace = !!client.previousHashedSecret\n && presentedHash === client.previousHashedSecret\n && isRotationGraceWindowOpen(client.previousSecretInvalidationDate);\n if (!matchesCurrent && !matchesRotationGrace) {\n // A-7: a wrong secret on the refresh/revoke front — audited as the code-flow twin of MACHINE_AUTH_FAILED.\n // assurance-control: WILDO.AUDIT.SECURITY_EVENT — confidential-client authentication failure.\n this._auditConfidentialClientSecretFailure(clientSecret);\n throw this.oauthError(ErrorType.AUTHENTICATION, 'invalid_client', 'client authentication failed');\n }\n }\n\n // ── Persistent consent grants (\"remember this app\") ────────────────────────\n /**\n * PERSISTENT-CONSENT lookup (Item 3). Returns true iff a stored, non-expired grant for\n * `(userId, clientId, resource)` already covers EVERY requested scope — in which case\n * `/oauth/authorize` skips the consent prompt for a `requiresConsent` client. Fail-closed: no grant,\n * insufficient scopes (a requested scope not in the grant), expiry, or any read error ⇒ false, so the\n * user is re-prompted. Scope matching is SUBSET, never expansion.\n */\n public async hasCoveringConsentGrant(userId: string, clientId: string, resource: string | undefined, requestedScopes: string[]): Promise<boolean> {\n try {\n const grant = await this.readConsentGrant(userId, clientId, resource);\n if (!grant) return false;\n if (grant.expiresAt && new Date(grant.expiresAt).getTime() <= Date.now()) return false;\n const granted = new Set(grant.scopes ?? []);\n return requestedScopes.every((s) => granted.has(s));\n } catch {\n return false;\n }\n }\n\n /**\n * Store or widen the user's persistent consent grant when they approve WITH \"remember this app\".\n * Upserts on the `(userId, clientId, resource)` business key: widen an existing grant's scopes to the\n * UNION of prior + newly-approved, else create a fresh grant. System write (createAsSystem /\n * updateAsSystem — the CREATE DTO strips the context FK `userId`, re-attached from the schema allowlist).\n */\n public async upsertConsentGrant(userId: string, clientId: string, resource: string | undefined, scopes: string[]): Promise<void> {\n const systemAccess = this.container.get<SystemAccessBackendService>(SAAS_SERVICE_TYPES.SystemAccessService);\n const existing = await this.readConsentGrant(userId, clientId, resource);\n if (existing) {\n await this.widenConsentGrantScopes(systemAccess, existing, scopes);\n return;\n }\n // #465: every affirmative consent carries an expiry. The field had a reader and no writer, so a\n // remembered approval lived until the person revoked it while reading to an operator as a policy\n // knob that existed.\n const data: Record<string, unknown> = { userId, clientId, scopes, expiresAt: this.consentGrantExpiry() };\n if (resource) data.resource = resource;\n try {\n await systemAccess.createAsSystem(CoreResourceType.OAUTH_CONSENT_GRANTS, data);\n // A-3: a NEW persistent consent grant was created (\"remember this app\") — a durable delegated-authority\n // artifact that lets future authorize flows SKIP the prompt, so its creation is a first-class audit\n // concern. assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — persistent delegated-access authorization.\n this._auditConsentGrantPersisted(userId, clientId, resource, scopes, true);\n } catch (error) {\n // CONCURRENCY — race-safe upsert on the `(userId, clientId, resource)` business key.\n // Two approvals for the SAME app+resource can interleave: both `readConsentGrant` above return null,\n // both reach here, and the compound UNIQUE index (which the runtime really emits — proven by the\n // consent-grant persistence integration test) rejects the SECOND insert with `ErrorType.CONFLICT`.\n // That is NOT a failure of the \"remember this app\" intent — re-read the grant the winning racer created\n // and widen it to the union, so both converge on ONE grant carrying the union of their approved scopes.\n // Without this, the losing approval surfaced an unhandled 5xx (the bug this closes).\n // assurance-control: WILDO.PRIVACY.CONSENT_RECORD — the user's consent is recorded exactly once, never lost to a race.\n if (!isWildoBackendError(error) || error.type !== ErrorType.CONFLICT) throw error;\n const winner = await this.readConsentGrant(userId, clientId, resource);\n if (!winner) throw error; // a CONFLICT on some OTHER key (not ours) — surface it rather than mask it\n await this.widenConsentGrantScopes(systemAccess, winner, scopes);\n }\n }\n\n /**\n * When a consent granted NOW should lapse (#465).\n *\n * The operator's `auth.consentGrantLifetimeDays` when authored, else the framework default — whose\n * reasoning is at `OAUTH_CONSENT_GRANT_DEFAULT_LIFETIME_DAYS`. There is no \"never\": that was the\n * state this replaced.\n *\n * Reads config through the container and TOLERATES its absence, deliberately. A consent the user\n * has just given must not fail to persist because a policy lookup threw — losing the grant is a\n * worse outcome than applying the default, and the default is the safer of the two anyway.\n */\n private consentGrantExpiry(): Date {\n let lifetimeDays = OAUTH_CONSENT_GRANT_DEFAULT_LIFETIME_DAYS;\n try {\n const configured = this.container.get<AppConfigurationService>(SAAS_SERVICE_TYPES.AppConfigService)\n ?.config?.auth?.consentGrantLifetimeDays;\n if (typeof configured === 'number') lifetimeDays = configured;\n } catch {\n // Unbound in a harness that never looks at consent policy — the default stands.\n }\n return new Date(Date.now() + lifetimeDays * 24 * 60 * 60 * 1000);\n }\n\n /**\n * Widen an existing consent grant's scopes to the UNION of its current scopes + the newly-approved set,\n * via a system update. Shared by the initial-existing path and the concurrency-recovery path so the\n * union semantics never drift between them.\n */\n private async widenConsentGrantScopes(systemAccess: SystemAccessBackendService, existing: OAuthConsentGrant, scopes: string[]): Promise<void> {\n const merged = Array.from(new Set([...(existing.scopes ?? []), ...scopes]));\n // The expiry RESTARTS on a widen (#465): a widen only happens because the user approved again,\n // and a re-affirmation that left the old clock running would expire a consent the person gave\n // moments ago. Both callers of this method — the initial-existing path and the\n // concurrency-recovery path — are affirmative acts, so both refresh.\n await systemAccess.updateAsSystem(CoreResourceType.OAUTH_CONSENT_GRANTS, existing._id, {\n scopes: merged,\n expiresAt: this.consentGrantExpiry(),\n });\n // A-3: an existing persistent consent grant was WIDENED (scopes unioned). Shared by the initial-existing\n // path AND the concurrency-recovery path, so both audit the durable-authority change once.\n // assurance-control: WILDO.IDENTITY.DELEGATED_AUTHORIZATION — persistent delegated-access authorization (widen).\n this._auditConsentGrantPersisted(existing.userId, existing.clientId, existing.resource, merged, false);\n }\n\n /**\n * Read the single grant for the `(userId, clientId, resource)` business key, or null. A resource-less\n * grant (OIDC-only login) is stored with `resource` absent; the `?? null` filter matches it (Mongo\n * `{ resource: null }` matches a null OR absent field), while a resource-bound grant matches exactly.\n */\n private async readConsentGrant(userId: string, clientId: string, resource: string | undefined): Promise<OAuthConsentGrant | null> {\n const ecCreator = this.container.get<ExecutionContextCreatorBackendService>(SAAS_SERVICE_TYPES.ExecutionContextCreatorBackendService);\n const repos = this.container.get<RepositoriesRegistryHandlerBackendService>(SAAS_SERVICE_TYPES.RepositoriesRegistryHandlerService);\n const ec = await ecCreator.createForInternalRepositoryOperation({\n resourceType: CoreResourceType.OAUTH_CONSENT_GRANTS,\n operationIdentifier: CoreResourceOperation.READ,\n });\n return repos\n .getRepository(CoreResourceType.OAUTH_CONSENT_GRANTS)\n .read<OAuthConsentGrant>(ec, { userId, clientId, resource: resource ?? null });\n }\n\n private oauthError(type: ErrorType, oauthError: string, detail: string) {\n return this.errorBuilder.buildError(type, undefined, {\n customMessageReference: type === ErrorType.AUTHENTICATION\n ? ErrorCustomMessageReference.AUTHENTICATION_API_KEY_INVALID\n : ErrorCustomMessageReference.AUTHORIZATIONS_ACCESS_DENIED,\n context: { oauthError, detail },\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"oidc-user-claims.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/oidc-user-claims.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAkB7F;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS,MAAM,EAAqD,CAAC;AAElH;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAQ7D,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,4BAA4B;IAEC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADH,SAAS,EAAE,SAAS,EACvB,MAAM,EAAE,aAAa;IAG3E;;;;;;;;;;OAUG;IACU,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CA+D1G"}
1
+ {"version":3,"file":"oidc-user-claims.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/security/authentications/services/oidc-user-claims.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAkB7F;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS,MAAM,EAAqD,CAAC;AAElH;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAQ7D,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,4BAA4B;IAEC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADH,SAAS,EAAE,SAAS,EACvB,MAAM,EAAE,aAAa;IAG3E;;;;;;;;;;OAUG;IACU,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CA+D1G"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-active-member-orgs.backend.utils.d.ts","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/resolve-active-member-orgs.backend.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iFAAiF,CAAC;AAElI;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAsB,yBAAyB,CAC7C,mBAAmB,EAAE,0BAA0B,EAC/C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,EAAE,CAAC,CAqB1B"}
1
+ {"version":3,"file":"resolve-active-member-orgs.backend.utils.d.ts","sourceRoot":"","sources":["../../../../../src/security/authentications/services/resolve-active-member-orgs.backend.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iFAAiF,CAAC;AAElI;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAsB,yBAAyB,CAC7C,mBAAmB,EAAE,0BAA0B,EAC/C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,EAAE,CAAC,CAqB1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-auth-user-lookup.service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,kBAAkB,CAAC;AAI1B,qBACa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,yBAAyB,CAAiB;IAGlD,kBAAkB,8CAAyC;IAE3D,eAAe,8CAA4C;IAE3D,YAAY,6CAA2C;IAEvD,YAAY,6CAAuE;IAEnF,0BAA0B,8CAAqD;IAE/E,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIzC,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAItC,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC,4BAA4B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAInD,KAAK,IAAI,IAAI;CAYd"}
1
+ {"version":3,"file":"mock-auth-user-lookup.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,kBAAkB,CAAC;AAI1B,qBACa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,yBAAyB,CAAiB;IAGlD,kBAAkB,8CAAyC;IAE3D,eAAe,8CAA4C;IAE3D,YAAY,6CAA2C;IAEvD,YAAY,6CAAuE;IAEnF,0BAA0B,8CAAqD;IAE/E,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIzC,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAItC,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC,4BAA4B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAInD,KAAK,IAAI,IAAI;CAYd"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-controller.utils.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/utils/auth-controller.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wFAAwF,CAAC;AAC3I,OAAO,EAAsB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,yBAAyB,iBAA+B,CAAC;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,YAAqB,CAAC;AAEhE,qBAAa,mBAAmB;IAC9B;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,gCAAgC,CAAC,cAAc,EAAE,MAAM,GAAG,4BAA4B,GAAG,SAAS;IA8CzG;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAepG,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACH,MAAM,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAc3D;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,oBAAoB,CAAC,cAAc,EAAE,kBAAkB,GAAG,OAAO;IAKxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,MAAM,CAAC,gBAAgB,CACrB,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,MAAM,EACpB,0BAA0B,EAAE,MAAM,EAClC,cAAc,EAAE,kBAAkB,GACjC,IAAI;IAUP;;;;;;;;;OASG;IACH,MAAM,CAAC,kBAAkB,CACvB,GAAG,EAAE,QAAQ,EACb,cAAc,EAAE,kBAAkB,GACjC,IAAI;IAUP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,MAAM,CAAC,6BAA6B,CAClC,GAAG,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACnD,MAAM,GAAG,IAAI;IAQhB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,yBAAyB,CAC9B,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,cAAc,EAAE,kBAAkB,EAClC,aAAa,EAAE,MAAM,GACpB,IAAI;IAWP;;;;;;OAMG;IACH,MAAM,CAAC,2BAA2B,CAChC,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,cAAc,EAAE,kBAAkB,GACjC,IAAI;IAWP;;;;;;;;;OASG;IACH,MAAM,CAAC,iCAAiC,CACtC,GAAG,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACnD,MAAM,GAAG,IAAI;CAQjB"}
1
+ {"version":3,"file":"auth-controller.utils.d.ts","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/utils/auth-controller.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wFAAwF,CAAC;AAC3I,OAAO,EAAsB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,yBAAyB,iBAA+B,CAAC;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,YAAqB,CAAC;AAEhE,qBAAa,mBAAmB;IAC9B;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,gCAAgC,CAAC,cAAc,EAAE,MAAM,GAAG,4BAA4B,GAAG,SAAS;IA8CzG;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAepG,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACH,MAAM,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAc3D;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,oBAAoB,CAAC,cAAc,EAAE,kBAAkB,GAAG,OAAO;IAKxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,MAAM,CAAC,gBAAgB,CACrB,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,MAAM,EACpB,0BAA0B,EAAE,MAAM,EAClC,cAAc,EAAE,kBAAkB,GACjC,IAAI;IAUP;;;;;;;;;OASG;IACH,MAAM,CAAC,kBAAkB,CACvB,GAAG,EAAE,QAAQ,EACb,cAAc,EAAE,kBAAkB,GACjC,IAAI;IAUP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,MAAM,CAAC,6BAA6B,CAClC,GAAG,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACnD,MAAM,GAAG,IAAI;IAQhB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,yBAAyB,CAC9B,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,cAAc,EAAE,kBAAkB,EAClC,aAAa,EAAE,MAAM,GACpB,IAAI;IAWP;;;;;;OAMG;IACH,MAAM,CAAC,2BAA2B,CAChC,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,cAAc,EAAE,kBAAkB,GACjC,IAAI;IAWP;;;;;;;;;OASG;IACH,MAAM,CAAC,iCAAiC,CACtC,GAAG,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACnD,MAAM,GAAG,IAAI;CAQjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-credential-ops.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/utils/auth-credential-ops.backend.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-credential-ops.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/utils/auth-credential-ops.backend.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-policy-resolution.backend.utils.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/utils/auth-policy-resolution.backend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,6DAA6D,CAAC;AAErE;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,iBAAiB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC5C,kBAAkB,GAAG,IAAI,CA6B3B;AAED;;;;;;;GAOG;AACH,wBAAgB,6CAA6C,CAC3D,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAiCT"}
1
+ {"version":3,"file":"auth-policy-resolution.backend.utils.d.ts","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/utils/auth-policy-resolution.backend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,6DAA6D,CAAC;AAErE;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,iBAAiB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC5C,kBAAkB,GAAG,IAAI,CA6B3B;AAED;;;;;;;GAOG;AACH,wBAAgB,6CAA6C,CAC3D,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAiCT"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-policy-resolution.backend.utils.js","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/utils/auth-policy-resolution.backend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,8BAA8B,EAC9B,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAM/B;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAAwB,EACxB,QAAgB,EAChB,gBAAoC,EACpC,iBAA6C;IAE7C,MAAM,SAAS,GACb,iBAAiB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAC1D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,sBAAsB,GAAG,gBAAgB;QAC7C,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,sBAAsB,EAAE,aAAa,CAAC;IAC3D,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAEpD,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACjC,YAAY,EAAE,SAAS;QACvB,YAAY,EAAE,CAAC,YAAY,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB;QACpD,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB;KACvD,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,SAAS;QACZ,kBAAkB,EAChB,QAAQ,CAAC,kBAA8D;QACzE,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,8FAA8F;QAC9F,6FAA6F;QAC7F,gGAAgG;QAChG,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,6CAA6C,CAC3D,MAAwB;IAExB,KAAK,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CACzD,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAC/B,EAAE,CAAC;QACF,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAEjC,MAAM,WAAW,GAAG,2BAA2B,CAC7C,MAAM,CAAC,SAAS,EAChB,gBAAgB,EAChB,EAAE,EACF,8BAA8B,CAAC,UAAU,CAC1C,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,SAAS;QAEnC,MAAM,eAAe,GAAG,oCAAoC,CAC1D,MAAM,EACN,iBAAiB,EACjB,gBAAgB,CACjB,CAAC;QACF,IACE,eAAe,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CACnD,UAAU,CAAC,QAAQ,CACpB;eACE,iBAAiB,CAClB,eAAe,CAAC,kBAAkB,CACnC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC1B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import {\n AuthMethod,\n RegistrationAcquisitionChannel,\n evaluateUserTypeAcquisition,\n getEnabledMethods,\n resolveAuthConfig,\n type UserTypeAuthPolicy,\n} from '@wildo-ai/saas-models';\n\nimport type {\n AppConfiguration,\n} from '~wildo-backend-lib/config/models/app-config.backend.schemas';\n\n/**\n * Resolve one user type's effective policy for a hypothetical member of an\n * organization type. This is the shared no-I/O core used by both runtime\n * invitation policy and startup persistence-boundary reachability.\n */\nexport function resolveAuthPolicyForOrganizationType(\n config: AppConfiguration,\n userType: string,\n organizationType: string | undefined,\n rawPolicyOverride?: UserTypeAuthPolicy | null,\n): UserTypeAuthPolicy | null {\n const rawPolicy =\n rawPolicyOverride ?? config.userTypes?.[userType]?.auth;\n if (!rawPolicy) return null;\n\n const organizationDefinition = organizationType\n ? config.organizationTypes?.[organizationType]\n : undefined;\n const orgOverrides = organizationDefinition?.authOverrides;\n if (!orgOverrides || !config.auth) return rawPolicy;\n\n const resolved = resolveAuthConfig({\n userTypeAuth: rawPolicy,\n orgOverrides: [orgOverrides],\n orgAuthMethodPolicy: config.auth.orgAuthMethodPolicy,\n expandableOrgMethods: config.auth.expandableOrgMethods,\n });\n\n return {\n ...rawPolicy,\n authMethodsEnabled:\n resolved.authMethodsEnabled as UserTypeAuthPolicy['authMethodsEnabled'],\n mfaPolicy: resolved.mfaPolicy,\n passwordPolicy: resolved.passwordPolicy,\n // #527. Spread first, then overwrite: `stepUpAuth` is optional on the user-type policy, and a\n // user type declaring none resolves to `undefined` here — which is the same value the spread\n // already carried, so an organisation cannot introduce a gate the application never configured.\n stepUpAuth: resolved.stepUpAuth,\n };\n}\n\n/**\n * Whether a brand-new invitation accept can persist a password credential.\n *\n * Existing holders keep the acceptance boundary reachable but cannot set a\n * password through this flow. For a new user, every type granted by the\n * organization must allow INVITATION acquisition, while the first granted type\n * is the governing auth policy used by the runtime accept flow.\n */\nexport function isPublicInvitationPasswordCredentialReachable(\n config: AppConfiguration,\n): boolean {\n for (const [organizationType, definition] of Object.entries(\n config.organizationTypes ?? {},\n )) {\n const grantedUserTypes = definition.userTypes ?? [];\n const governingUserType = grantedUserTypes[0];\n if (!governingUserType) continue;\n\n const acquisition = evaluateUserTypeAcquisition(\n config.userTypes,\n grantedUserTypes,\n [],\n RegistrationAcquisitionChannel.INVITATION,\n );\n if (!acquisition.allowed) continue;\n\n const effectivePolicy = resolveAuthPolicyForOrganizationType(\n config,\n governingUserType,\n organizationType,\n );\n if (\n effectivePolicy?.registration.allowedMethods.includes(\n AuthMethod.PASSWORD,\n )\n && getEnabledMethods(\n effectivePolicy.authMethodsEnabled,\n ).has(AuthMethod.PASSWORD)\n ) {\n return true;\n }\n }\n return false;\n}\n"]}
1
+ {"version":3,"file":"auth-policy-resolution.backend.utils.js","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/utils/auth-policy-resolution.backend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,8BAA8B,EAC9B,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAM/B;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAAwB,EACxB,QAAgB,EAChB,gBAAoC,EACpC,iBAA6C;IAE7C,MAAM,SAAS,GACb,iBAAiB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAC1D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,sBAAsB,GAAG,gBAAgB;QAC7C,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,sBAAsB,EAAE,aAAa,CAAC;IAC3D,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAEpD,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACjC,YAAY,EAAE,SAAS;QACvB,YAAY,EAAE,CAAC,YAAY,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB;QACpD,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB;KACvD,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,SAAS;QACZ,kBAAkB,EAChB,QAAQ,CAAC,kBAA8D;QACzE,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,8FAA8F;QAC9F,6FAA6F;QAC7F,gGAAgG;QAChG,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,6CAA6C,CAC3D,MAAwB;IAExB,KAAK,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CACzD,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAC/B,EAAE,CAAC;QACF,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAEjC,MAAM,WAAW,GAAG,2BAA2B,CAC7C,MAAM,CAAC,SAAS,EAChB,gBAAgB,EAChB,EAAE,EACF,8BAA8B,CAAC,UAAU,CAC1C,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,SAAS;QAEnC,MAAM,eAAe,GAAG,oCAAoC,CAC1D,MAAM,EACN,iBAAiB,EACjB,gBAAgB,CACjB,CAAC;QACF,IACE,eAAe,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CACnD,UAAU,CAAC,QAAQ,CACpB;eACE,iBAAiB,CAClB,eAAe,CAAC,kBAAkB,CACnC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC1B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import {\n AuthMethod,\n RegistrationAcquisitionChannel,\n evaluateUserTypeAcquisition,\n getEnabledMethods,\n resolveAuthConfig,\n type UserTypeAuthPolicy,\n} from '@wildo-ai/saas-models';\n\nimport type {\n AppConfiguration,\n} from '~wildo-backend-lib/config/models/app-config.backend.schemas';\n\n/**\n * Resolve one user type's effective policy for a hypothetical member of an\n * organization type. This is the shared no-I/O core used by both runtime\n * invitation policy and startup persistence-boundary reachability.\n */\nexport function resolveAuthPolicyForOrganizationType(\n config: AppConfiguration,\n userType: string,\n organizationType: string | undefined,\n rawPolicyOverride?: UserTypeAuthPolicy | null,\n): UserTypeAuthPolicy | null {\n const rawPolicy =\n rawPolicyOverride ?? config.userTypes?.[userType]?.auth;\n if (!rawPolicy) return null;\n\n const organizationDefinition = organizationType\n ? config.organizationTypes?.[organizationType]\n : undefined;\n const orgOverrides = organizationDefinition?.authOverrides;\n if (!orgOverrides || !config.auth) return rawPolicy;\n\n const resolved = resolveAuthConfig({\n userTypeAuth: rawPolicy,\n orgOverrides: [orgOverrides],\n orgAuthMethodPolicy: config.auth.orgAuthMethodPolicy,\n expandableOrgMethods: config.auth.expandableOrgMethods,\n });\n\n return {\n ...rawPolicy,\n authMethodsEnabled:\n resolved.authMethodsEnabled as UserTypeAuthPolicy['authMethodsEnabled'],\n mfaPolicy: resolved.mfaPolicy,\n passwordPolicy: resolved.passwordPolicy,\n // #527. Spread first, then overwrite: `stepUpAuth` is optional on the user-type policy, and a\n // user type declaring none resolves to `undefined` here — which is the same value the spread\n // already carried, so an organisation cannot introduce a gate the application never configured.\n stepUpAuth: resolved.stepUpAuth,\n };\n}\n\n/**\n * Whether a brand-new invitation accept can persist a password credential.\n *\n * Existing holders keep the acceptance boundary reachable but cannot set a\n * password through this flow. For a new user, every type granted by the\n * organization must allow INVITATION acquisition, while the first granted type\n * is the governing auth policy used by the runtime accept flow.\n */\nexport function isPublicInvitationPasswordCredentialReachable(\n config: AppConfiguration,\n): boolean {\n for (const [organizationType, definition] of Object.entries(\n config.organizationTypes ?? {},\n )) {\n const grantedUserTypes = definition.userTypes ?? [];\n const governingUserType = grantedUserTypes[0];\n if (!governingUserType) continue;\n\n const acquisition = evaluateUserTypeAcquisition(\n config.userTypes,\n grantedUserTypes,\n [],\n RegistrationAcquisitionChannel.INVITATION,\n );\n if (!acquisition.allowed) continue;\n\n const effectivePolicy = resolveAuthPolicyForOrganizationType(\n config,\n governingUserType,\n organizationType,\n );\n if (\n effectivePolicy?.registration.allowedMethods.includes(\n AuthMethod.PASSWORD,\n )\n && getEnabledMethods(\n effectivePolicy.authMethodsEnabled,\n ).has(AuthMethod.PASSWORD)\n ) {\n return true;\n }\n }\n return false;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-response-helper.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/utils/auth-response-helper.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAE/G,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAkB,MAAM,qCAAqC,CAAC;AAEnH;;;GAGG;AACH,qBACa,gCAAgC;IAIN,OAAO,CAAC,QAAQ,CAAC,MAAM;IAClB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAEpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IANnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;gBAGlC,MAAM,EAAE,aAAa,EAChB,WAAW,EAAE,kBAAkB,EAEvE,gBAAgB,EAAE,uBAAuB;IAM5D,eAAe,CAAC,GAAG,EAAE,sBAAsB,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQrF,WAAW,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM;CAUlF"}
1
+ {"version":3,"file":"auth-response-helper.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/utils/auth-response-helper.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAE/G,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAkB,MAAM,qCAAqC,CAAC;AAEnH;;;GAGG;AACH,qBACa,gCAAgC;IAIN,OAAO,CAAC,QAAQ,CAAC,MAAM;IAClB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAEpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IANnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;gBAGlC,MAAM,EAAE,aAAa,EAChB,WAAW,EAAE,kBAAkB,EAEvE,gBAAgB,EAAE,uBAAuB;IAM5D,eAAe,CAAC,GAAG,EAAE,sBAAsB,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQrF,WAAW,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM;CAUlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-user-lookup.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/security/authentications/services/utils/auth-user-lookup.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,6FAA6F,CAAC;AACzJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAE/G,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,kBAAkB,EAAwC,MAAM,uBAAuB,CAAC;AAI7H,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yEAAyE,CAAC;AAC/H,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iFAAiF,CAAC;AAClI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AAC5G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qEAAqE,CAAC;AAK1G;;;;GAIG;AACH,qBACa,4BAA4B;IAIF,OAAO,CAAC,QAAQ,CAAC,MAAM;IACC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IATtF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;gBAGlC,MAAM,EAAE,aAAa,EACG,uBAAuB,EAAE,qCAAqC,EAC5E,gBAAgB,EAAE,uBAAuB,EAGjC,iBAAiB,EAAE,+BAA+B,EACvD,mBAAmB,EAAE,0BAA0B;IAMlH;;;OAGG;IACG,eAAe,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIrF;;;OAGG;IACG,kBAAkB,CACtB,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACzB,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IASvB;;;OAGG;IACG,YAAY,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxE,YAAY,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAI7E,2BAA2B,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI7G;;;;;;;;;;;;;OAaG;IACG,0BAA0B,CAI9B,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAsHrC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,2BAA2B,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,kBAAkB,GAAG,IAAI;CAQ7B"}
1
+ {"version":3,"file":"auth-user-lookup.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/security/authentications/services/utils/auth-user-lookup.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,6FAA6F,CAAC;AACzJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAE/G,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,kBAAkB,EAAwC,MAAM,uBAAuB,CAAC;AAI7H,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yEAAyE,CAAC;AAC/H,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iFAAiF,CAAC;AAClI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AAC5G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qEAAqE,CAAC;AAK1G;;;;GAIG;AACH,qBACa,4BAA4B;IAIF,OAAO,CAAC,QAAQ,CAAC,MAAM;IACC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IATtF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;gBAGlC,MAAM,EAAE,aAAa,EACG,uBAAuB,EAAE,qCAAqC,EAC5E,gBAAgB,EAAE,uBAAuB,EAGjC,iBAAiB,EAAE,+BAA+B,EACvD,mBAAmB,EAAE,0BAA0B;IAMlH;;;OAGG;IACG,eAAe,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIrF;;;OAGG;IACG,kBAAkB,CACtB,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACzB,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IASvB;;;OAGG;IACG,YAAY,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxE,YAAY,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAI7E,2BAA2B,CAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI7G;;;;;;;;;;;;;OAaG;IACG,0BAA0B,CAI9B,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAsHrC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,2BAA2B,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,kBAAkB,GAAG,IAAI;CAQ7B"}