@wildo-ai/saas-backend-lib 1.0.1

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 (1747) hide show
  1. package/dist/esm/__tests__/setup.d.ts +7 -0
  2. package/dist/esm/__tests__/setup.d.ts.map +1 -0
  3. package/dist/esm/__tests__/setup.js +14 -0
  4. package/dist/esm/__tests__/setup.js.map +1 -0
  5. package/dist/esm/__tests__/test-container.d.ts +39 -0
  6. package/dist/esm/__tests__/test-container.d.ts.map +1 -0
  7. package/dist/esm/__tests__/test-container.js +94 -0
  8. package/dist/esm/__tests__/test-container.js.map +1 -0
  9. package/dist/esm/applications/models/applications.backend.schemas.d.ts +11 -0
  10. package/dist/esm/applications/models/applications.backend.schemas.d.ts.map +1 -0
  11. package/dist/esm/applications/models/applications.backend.schemas.js +15 -0
  12. package/dist/esm/applications/models/applications.backend.schemas.js.map +1 -0
  13. package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts +12 -0
  14. package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -0
  15. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +30 -0
  16. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -0
  17. package/dist/esm/base-classes/models/repositories.backend.schemas.d.ts +98 -0
  18. package/dist/esm/base-classes/models/repositories.backend.schemas.d.ts.map +1 -0
  19. package/dist/esm/base-classes/models/repositories.backend.schemas.js +11 -0
  20. package/dist/esm/base-classes/models/repositories.backend.schemas.js.map +1 -0
  21. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts +31 -0
  22. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts.map +1 -0
  23. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.js +52 -0
  24. package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.js.map +1 -0
  25. package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.d.ts +56 -0
  26. package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.d.ts.map +1 -0
  27. package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.js +52 -0
  28. package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.js.map +1 -0
  29. package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.d.ts +33 -0
  30. package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.d.ts.map +1 -0
  31. package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.js +125 -0
  32. package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.js.map +1 -0
  33. package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.d.ts +20 -0
  34. package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.d.ts.map +1 -0
  35. package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.js +45 -0
  36. package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.js.map +1 -0
  37. package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.d.ts +133 -0
  38. package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.d.ts.map +1 -0
  39. package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.js +280 -0
  40. package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.js.map +1 -0
  41. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts +147 -0
  42. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -0
  43. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +1320 -0
  44. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -0
  45. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts +107 -0
  46. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -0
  47. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js +369 -0
  48. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -0
  49. package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.d.ts +194 -0
  50. package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.d.ts.map +1 -0
  51. package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.js +417 -0
  52. package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.js.map +1 -0
  53. package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.d.ts +9 -0
  54. package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.d.ts.map +1 -0
  55. package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.js +35 -0
  56. package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.js.map +1 -0
  57. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +107 -0
  58. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -0
  59. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +800 -0
  60. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -0
  61. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts +181 -0
  62. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -0
  63. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +529 -0
  64. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -0
  65. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +245 -0
  66. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -0
  67. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +1509 -0
  68. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -0
  69. package/dist/esm/base-classes/services/resource-operations-helper.backend.service.d.ts +134 -0
  70. package/dist/esm/base-classes/services/resource-operations-helper.backend.service.d.ts.map +1 -0
  71. package/dist/esm/base-classes/services/resource-operations-helper.backend.service.js +388 -0
  72. package/dist/esm/base-classes/services/resource-operations-helper.backend.service.js.map +1 -0
  73. package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.d.ts +9 -0
  74. package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.d.ts.map +1 -0
  75. package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.js +26 -0
  76. package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.js.map +1 -0
  77. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +144 -0
  78. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -0
  79. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js +49 -0
  80. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -0
  81. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts +84 -0
  82. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts.map +1 -0
  83. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.js +156 -0
  84. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.js.map +1 -0
  85. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts +42 -0
  86. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts.map +1 -0
  87. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.js +94 -0
  88. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.js.map +1 -0
  89. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +593 -0
  90. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -0
  91. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +4015 -0
  92. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -0
  93. package/dist/esm/base-classes/utils/backend-type-utils.d.ts +43 -0
  94. package/dist/esm/base-classes/utils/backend-type-utils.d.ts.map +1 -0
  95. package/dist/esm/base-classes/utils/backend-type-utils.js +10 -0
  96. package/dist/esm/base-classes/utils/backend-type-utils.js.map +1 -0
  97. package/dist/esm/billing/services/back-office/abstract-billing.backend.service.d.ts +44 -0
  98. package/dist/esm/billing/services/back-office/abstract-billing.backend.service.d.ts.map +1 -0
  99. package/dist/esm/billing/services/back-office/abstract-billing.backend.service.js +94 -0
  100. package/dist/esm/billing/services/back-office/abstract-billing.backend.service.js.map +1 -0
  101. package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.d.ts +102 -0
  102. package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.d.ts.map +1 -0
  103. package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.js +405 -0
  104. package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.js.map +1 -0
  105. package/dist/esm/billing/services/back-office/billing-state.backend.service.d.ts +55 -0
  106. package/dist/esm/billing/services/back-office/billing-state.backend.service.d.ts.map +1 -0
  107. package/dist/esm/billing/services/back-office/billing-state.backend.service.js +268 -0
  108. package/dist/esm/billing/services/back-office/billing-state.backend.service.js.map +1 -0
  109. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +83 -0
  110. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -0
  111. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +371 -0
  112. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -0
  113. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +80 -0
  114. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -0
  115. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +255 -0
  116. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -0
  117. package/dist/esm/billing/services/billing.utils.d.ts +17 -0
  118. package/dist/esm/billing/services/billing.utils.d.ts.map +1 -0
  119. package/dist/esm/billing/services/billing.utils.js +25 -0
  120. package/dist/esm/billing/services/billing.utils.js.map +1 -0
  121. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts +50 -0
  122. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -0
  123. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +290 -0
  124. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -0
  125. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +92 -0
  126. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -0
  127. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +193 -0
  128. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -0
  129. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +66 -0
  130. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -0
  131. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +180 -0
  132. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -0
  133. package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.d.ts +31 -0
  134. package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.d.ts.map +1 -0
  135. package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.js +100 -0
  136. package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.js.map +1 -0
  137. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +33 -0
  138. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -0
  139. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +200 -0
  140. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -0
  141. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts +58 -0
  142. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -0
  143. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +362 -0
  144. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -0
  145. package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.d.ts +19 -0
  146. package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.d.ts.map +1 -0
  147. package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.js +50 -0
  148. package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.js.map +1 -0
  149. package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.d.ts +21 -0
  150. package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.d.ts.map +1 -0
  151. package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.js +32 -0
  152. package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.js.map +1 -0
  153. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +114 -0
  154. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -0
  155. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +569 -0
  156. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -0
  157. package/dist/esm/billing/testing/billing-test-fixtures.d.ts +109 -0
  158. package/dist/esm/billing/testing/billing-test-fixtures.d.ts.map +1 -0
  159. package/dist/esm/billing/testing/billing-test-fixtures.js +200 -0
  160. package/dist/esm/billing/testing/billing-test-fixtures.js.map +1 -0
  161. package/dist/esm/billing/testing/mock-billing-provider.d.ts +152 -0
  162. package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -0
  163. package/dist/esm/billing/testing/mock-billing-provider.js +394 -0
  164. package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -0
  165. package/dist/esm/charts/controllers/chart.backend.controller.d.ts +46 -0
  166. package/dist/esm/charts/controllers/chart.backend.controller.d.ts.map +1 -0
  167. package/dist/esm/charts/controllers/chart.backend.controller.js +214 -0
  168. package/dist/esm/charts/controllers/chart.backend.controller.js.map +1 -0
  169. package/dist/esm/charts/services/chart-registry.backend.service.d.ts +55 -0
  170. package/dist/esm/charts/services/chart-registry.backend.service.d.ts.map +1 -0
  171. package/dist/esm/charts/services/chart-registry.backend.service.js +102 -0
  172. package/dist/esm/charts/services/chart-registry.backend.service.js.map +1 -0
  173. package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.d.ts +9 -0
  174. package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.d.ts.map +1 -0
  175. package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.js +80 -0
  176. package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.js.map +1 -0
  177. package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.d.ts +23 -0
  178. package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.d.ts.map +1 -0
  179. package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.js +46 -0
  180. package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.js.map +1 -0
  181. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +73 -0
  182. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -0
  183. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +291 -0
  184. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -0
  185. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +447 -0
  186. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -0
  187. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +898 -0
  188. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -0
  189. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +127 -0
  190. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -0
  191. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +462 -0
  192. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -0
  193. package/dist/esm/compliance/index.d.ts +2 -0
  194. package/dist/esm/compliance/index.d.ts.map +1 -0
  195. package/dist/esm/compliance/index.js +1 -0
  196. package/dist/esm/compliance/index.js.map +1 -0
  197. package/dist/esm/config/custom/application-config-controller.backend.service.d.ts +31 -0
  198. package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -0
  199. package/dist/esm/config/custom/application-config-controller.backend.service.js +112 -0
  200. package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -0
  201. package/dist/esm/config/models/app-config-overrides.backend.definitions.d.ts +29 -0
  202. package/dist/esm/config/models/app-config-overrides.backend.definitions.d.ts.map +1 -0
  203. package/dist/esm/config/models/app-config-overrides.backend.definitions.js +143 -0
  204. package/dist/esm/config/models/app-config-overrides.backend.definitions.js.map +1 -0
  205. package/dist/esm/config/models/app-config-secrets.backend.schemas.d.ts +56 -0
  206. package/dist/esm/config/models/app-config-secrets.backend.schemas.d.ts.map +1 -0
  207. package/dist/esm/config/models/app-config-secrets.backend.schemas.js +121 -0
  208. package/dist/esm/config/models/app-config-secrets.backend.schemas.js.map +1 -0
  209. package/dist/esm/config/models/app-config.backend-authored.definitions.d.ts +35 -0
  210. package/dist/esm/config/models/app-config.backend-authored.definitions.d.ts.map +1 -0
  211. package/dist/esm/config/models/app-config.backend-authored.definitions.js +89 -0
  212. package/dist/esm/config/models/app-config.backend-authored.definitions.js.map +1 -0
  213. package/dist/esm/config/models/app-config.backend.schemas.d.ts +1651 -0
  214. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -0
  215. package/dist/esm/config/models/app-config.backend.schemas.js +478 -0
  216. package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -0
  217. package/dist/esm/config/models/app-env-config.backend.schemas.d.ts +74 -0
  218. package/dist/esm/config/models/app-env-config.backend.schemas.d.ts.map +1 -0
  219. package/dist/esm/config/models/app-env-config.backend.schemas.js +115 -0
  220. package/dist/esm/config/models/app-env-config.backend.schemas.js.map +1 -0
  221. package/dist/esm/config/models/config-mutation-boundary.utils.d.ts +11 -0
  222. package/dist/esm/config/models/config-mutation-boundary.utils.d.ts.map +1 -0
  223. package/dist/esm/config/models/config-mutation-boundary.utils.js +50 -0
  224. package/dist/esm/config/models/config-mutation-boundary.utils.js.map +1 -0
  225. package/dist/esm/config/models/postgresql-env-config.backend.schemas.d.ts +48 -0
  226. package/dist/esm/config/models/postgresql-env-config.backend.schemas.d.ts.map +1 -0
  227. package/dist/esm/config/models/postgresql-env-config.backend.schemas.js +106 -0
  228. package/dist/esm/config/models/postgresql-env-config.backend.schemas.js.map +1 -0
  229. package/dist/esm/config/models/runtime-topology.backend.contracts.d.ts +12 -0
  230. package/dist/esm/config/models/runtime-topology.backend.contracts.d.ts.map +1 -0
  231. package/dist/esm/config/models/runtime-topology.backend.contracts.js +23 -0
  232. package/dist/esm/config/models/runtime-topology.backend.contracts.js.map +1 -0
  233. package/dist/esm/config/services/__tests__/mock-app-configuration.service.d.ts +39 -0
  234. package/dist/esm/config/services/__tests__/mock-app-configuration.service.d.ts.map +1 -0
  235. package/dist/esm/config/services/__tests__/mock-app-configuration.service.js +124 -0
  236. package/dist/esm/config/services/__tests__/mock-app-configuration.service.js.map +1 -0
  237. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +76 -0
  238. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -0
  239. package/dist/esm/config/services/app-configuration-loader.backend.service.js +375 -0
  240. package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -0
  241. package/dist/esm/config/services/app-configuration.backend.service.d.ts +148 -0
  242. package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -0
  243. package/dist/esm/config/services/app-configuration.backend.service.js +494 -0
  244. package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -0
  245. package/dist/esm/config/services/app-configuration.backend.utils.d.ts +17 -0
  246. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -0
  247. package/dist/esm/config/services/app-configuration.backend.utils.js +61 -0
  248. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -0
  249. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +70 -0
  250. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -0
  251. package/dist/esm/config/services/application-startup-config-validator.backend.service.js +470 -0
  252. package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -0
  253. package/dist/esm/databases/models/aggregation.backend.schemas.d.ts +136 -0
  254. package/dist/esm/databases/models/aggregation.backend.schemas.d.ts.map +1 -0
  255. package/dist/esm/databases/models/aggregation.backend.schemas.js +9 -0
  256. package/dist/esm/databases/models/aggregation.backend.schemas.js.map +1 -0
  257. package/dist/esm/databases/models/databases.backend.schemas.d.ts +32 -0
  258. package/dist/esm/databases/models/databases.backend.schemas.d.ts.map +1 -0
  259. package/dist/esm/databases/models/databases.backend.schemas.js +60 -0
  260. package/dist/esm/databases/models/databases.backend.schemas.js.map +1 -0
  261. package/dist/esm/databases/models/filter.backend.schemas.d.ts +83 -0
  262. package/dist/esm/databases/models/filter.backend.schemas.d.ts.map +1 -0
  263. package/dist/esm/databases/models/filter.backend.schemas.js +27 -0
  264. package/dist/esm/databases/models/filter.backend.schemas.js.map +1 -0
  265. package/dist/esm/databases/models/sql.backend.schemas.d.ts +75 -0
  266. package/dist/esm/databases/models/sql.backend.schemas.d.ts.map +1 -0
  267. package/dist/esm/databases/models/sql.backend.schemas.js +31 -0
  268. package/dist/esm/databases/models/sql.backend.schemas.js.map +1 -0
  269. package/dist/esm/databases/models/transaction.shared.schemas.d.ts +120 -0
  270. package/dist/esm/databases/models/transaction.shared.schemas.d.ts.map +1 -0
  271. package/dist/esm/databases/models/transaction.shared.schemas.js +30 -0
  272. package/dist/esm/databases/models/transaction.shared.schemas.js.map +1 -0
  273. package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.d.ts +15 -0
  274. package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.d.ts.map +1 -0
  275. package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.js +60 -0
  276. package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.js.map +1 -0
  277. package/dist/esm/databases/services/__tests__/mock-mongodb.service.d.ts +19 -0
  278. package/dist/esm/databases/services/__tests__/mock-mongodb.service.d.ts.map +1 -0
  279. package/dist/esm/databases/services/__tests__/mock-mongodb.service.js +69 -0
  280. package/dist/esm/databases/services/__tests__/mock-mongodb.service.js.map +1 -0
  281. package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.d.ts +11 -0
  282. package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.d.ts.map +1 -0
  283. package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.js +315 -0
  284. package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.js.map +1 -0
  285. package/dist/esm/databases/services/__tests__/mock-redis.service.d.ts +29 -0
  286. package/dist/esm/databases/services/__tests__/mock-redis.service.d.ts.map +1 -0
  287. package/dist/esm/databases/services/__tests__/mock-redis.service.js +65 -0
  288. package/dist/esm/databases/services/__tests__/mock-redis.service.js.map +1 -0
  289. package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.d.ts +19 -0
  290. package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.d.ts.map +1 -0
  291. package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.js +44 -0
  292. package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.js.map +1 -0
  293. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts +74 -0
  294. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -0
  295. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js +369 -0
  296. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js.map +1 -0
  297. package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.d.ts +110 -0
  298. package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.d.ts.map +1 -0
  299. package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.js +444 -0
  300. package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.js.map +1 -0
  301. package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.d.ts +38 -0
  302. package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.d.ts.map +1 -0
  303. package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.js +180 -0
  304. package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.js.map +1 -0
  305. package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.d.ts +42 -0
  306. package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.d.ts.map +1 -0
  307. package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.js +183 -0
  308. package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.js.map +1 -0
  309. package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.d.ts +48 -0
  310. package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.d.ts.map +1 -0
  311. package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.js +320 -0
  312. package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.js.map +1 -0
  313. package/dist/esm/databases/services/aggregation/topn-processor.backend.service.d.ts +47 -0
  314. package/dist/esm/databases/services/aggregation/topn-processor.backend.service.d.ts.map +1 -0
  315. package/dist/esm/databases/services/aggregation/topn-processor.backend.service.js +187 -0
  316. package/dist/esm/databases/services/aggregation/topn-processor.backend.service.js.map +1 -0
  317. package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.d.ts +47 -0
  318. package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.d.ts.map +1 -0
  319. package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.js +250 -0
  320. package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.js.map +1 -0
  321. package/dist/esm/databases/services/db-utils.d.ts +56 -0
  322. package/dist/esm/databases/services/db-utils.d.ts.map +1 -0
  323. package/dist/esm/databases/services/db-utils.js +66 -0
  324. package/dist/esm/databases/services/db-utils.js.map +1 -0
  325. package/dist/esm/databases/services/mongo-aggregation.backend.service.d.ts +91 -0
  326. package/dist/esm/databases/services/mongo-aggregation.backend.service.d.ts.map +1 -0
  327. package/dist/esm/databases/services/mongo-aggregation.backend.service.js +652 -0
  328. package/dist/esm/databases/services/mongo-aggregation.backend.service.js.map +1 -0
  329. package/dist/esm/databases/services/mongodb.service.d.ts +132 -0
  330. package/dist/esm/databases/services/mongodb.service.d.ts.map +1 -0
  331. package/dist/esm/databases/services/mongodb.service.js +630 -0
  332. package/dist/esm/databases/services/mongodb.service.js.map +1 -0
  333. package/dist/esm/databases/services/postgresql-aggregation.backend.service.d.ts +113 -0
  334. package/dist/esm/databases/services/postgresql-aggregation.backend.service.d.ts.map +1 -0
  335. package/dist/esm/databases/services/postgresql-aggregation.backend.service.js +635 -0
  336. package/dist/esm/databases/services/postgresql-aggregation.backend.service.js.map +1 -0
  337. package/dist/esm/databases/services/postgresql-database.backend.service.d.ts +75 -0
  338. package/dist/esm/databases/services/postgresql-database.backend.service.d.ts.map +1 -0
  339. package/dist/esm/databases/services/postgresql-database.backend.service.js +255 -0
  340. package/dist/esm/databases/services/postgresql-database.backend.service.js.map +1 -0
  341. package/dist/esm/databases/services/postgresql-filter.backend.service.d.ts +116 -0
  342. package/dist/esm/databases/services/postgresql-filter.backend.service.d.ts.map +1 -0
  343. package/dist/esm/databases/services/postgresql-filter.backend.service.js +624 -0
  344. package/dist/esm/databases/services/postgresql-filter.backend.service.js.map +1 -0
  345. package/dist/esm/databases/services/redis.service.d.ts +143 -0
  346. package/dist/esm/databases/services/redis.service.d.ts.map +1 -0
  347. package/dist/esm/databases/services/redis.service.js +429 -0
  348. package/dist/esm/databases/services/redis.service.js.map +1 -0
  349. package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.d.ts +302 -0
  350. package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.d.ts.map +1 -0
  351. package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.js +1787 -0
  352. package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.js.map +1 -0
  353. package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.d.ts +65 -0
  354. package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.d.ts.map +1 -0
  355. package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.js +237 -0
  356. package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.js.map +1 -0
  357. package/dist/esm/errors/services/__tests__/mock-error-builder.service.d.ts +339 -0
  358. package/dist/esm/errors/services/__tests__/mock-error-builder.service.d.ts.map +1 -0
  359. package/dist/esm/errors/services/__tests__/mock-error-builder.service.js +209 -0
  360. package/dist/esm/errors/services/__tests__/mock-error-builder.service.js.map +1 -0
  361. package/dist/esm/errors/services/error-builder.backend.service.d.ts +95 -0
  362. package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -0
  363. package/dist/esm/errors/services/error-builder.backend.service.js +334 -0
  364. package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -0
  365. package/dist/esm/errors/services/error-handler.backend.service.d.ts +43 -0
  366. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -0
  367. package/dist/esm/errors/services/error-handler.backend.service.js +219 -0
  368. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -0
  369. package/dist/esm/errors/services/rate-limit.backend.service.d.ts +23 -0
  370. package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -0
  371. package/dist/esm/errors/services/rate-limit.backend.service.js +59 -0
  372. package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -0
  373. package/dist/esm/external-providers/models/external-providers.backend.schemas.d.ts +135 -0
  374. package/dist/esm/external-providers/models/external-providers.backend.schemas.d.ts.map +1 -0
  375. package/dist/esm/external-providers/models/external-providers.backend.schemas.js +129 -0
  376. package/dist/esm/external-providers/models/external-providers.backend.schemas.js.map +1 -0
  377. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +18 -0
  378. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -0
  379. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +38 -0
  380. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -0
  381. package/dist/esm/external-providers/services/__tests__/mock-lazy-provider-registry.service.d.ts +20 -0
  382. package/dist/esm/external-providers/services/__tests__/mock-lazy-provider-registry.service.d.ts.map +1 -0
  383. package/dist/esm/external-providers/services/__tests__/mock-lazy-provider-registry.service.js +44 -0
  384. package/dist/esm/external-providers/services/__tests__/mock-lazy-provider-registry.service.js.map +1 -0
  385. package/dist/esm/external-providers/services/external-api-handler.backend.service.d.ts +9 -0
  386. package/dist/esm/external-providers/services/external-api-handler.backend.service.d.ts.map +1 -0
  387. package/dist/esm/external-providers/services/external-api-handler.backend.service.js +36 -0
  388. package/dist/esm/external-providers/services/external-api-handler.backend.service.js.map +1 -0
  389. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +83 -0
  390. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -0
  391. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +422 -0
  392. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -0
  393. package/dist/esm/external-providers/services/feature-bindings.backend.service.d.ts +102 -0
  394. package/dist/esm/external-providers/services/feature-bindings.backend.service.d.ts.map +1 -0
  395. package/dist/esm/external-providers/services/feature-bindings.backend.service.js +352 -0
  396. package/dist/esm/external-providers/services/feature-bindings.backend.service.js.map +1 -0
  397. package/dist/esm/external-providers/services/lazy-provider-registry.backend.service.d.ts +141 -0
  398. package/dist/esm/external-providers/services/lazy-provider-registry.backend.service.d.ts.map +1 -0
  399. package/dist/esm/external-providers/services/lazy-provider-registry.backend.service.js +391 -0
  400. package/dist/esm/external-providers/services/lazy-provider-registry.backend.service.js.map +1 -0
  401. package/dist/esm/features/controllers/features.backend.controller.d.ts +35 -0
  402. package/dist/esm/features/controllers/features.backend.controller.d.ts.map +1 -0
  403. package/dist/esm/features/controllers/features.backend.controller.js +179 -0
  404. package/dist/esm/features/controllers/features.backend.controller.js.map +1 -0
  405. package/dist/esm/features/services/__tests__/mock-capability-bindings.service.d.ts +8 -0
  406. package/dist/esm/features/services/__tests__/mock-capability-bindings.service.d.ts.map +1 -0
  407. package/dist/esm/features/services/__tests__/mock-capability-bindings.service.js +31 -0
  408. package/dist/esm/features/services/__tests__/mock-capability-bindings.service.js.map +1 -0
  409. package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.d.ts +22 -0
  410. package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.d.ts.map +1 -0
  411. package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.js +52 -0
  412. package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.js.map +1 -0
  413. package/dist/esm/features/services/__tests__/mock-feature-resolution.service.d.ts +13 -0
  414. package/dist/esm/features/services/__tests__/mock-feature-resolution.service.d.ts.map +1 -0
  415. package/dist/esm/features/services/__tests__/mock-feature-resolution.service.js +36 -0
  416. package/dist/esm/features/services/__tests__/mock-feature-resolution.service.js.map +1 -0
  417. package/dist/esm/features/services/feature-definition-registry.backend.service.d.ts +111 -0
  418. package/dist/esm/features/services/feature-definition-registry.backend.service.d.ts.map +1 -0
  419. package/dist/esm/features/services/feature-definition-registry.backend.service.js +437 -0
  420. package/dist/esm/features/services/feature-definition-registry.backend.service.js.map +1 -0
  421. package/dist/esm/features/services/feature-gate.backend.service.d.ts +110 -0
  422. package/dist/esm/features/services/feature-gate.backend.service.d.ts.map +1 -0
  423. package/dist/esm/features/services/feature-gate.backend.service.js +414 -0
  424. package/dist/esm/features/services/feature-gate.backend.service.js.map +1 -0
  425. package/dist/esm/features/services/feature-resolution.backend.service.d.ts +163 -0
  426. package/dist/esm/features/services/feature-resolution.backend.service.d.ts.map +1 -0
  427. package/dist/esm/features/services/feature-resolution.backend.service.js +550 -0
  428. package/dist/esm/features/services/feature-resolution.backend.service.js.map +1 -0
  429. package/dist/esm/features/testing/feature-test-utils.d.ts +85 -0
  430. package/dist/esm/features/testing/feature-test-utils.d.ts.map +1 -0
  431. package/dist/esm/features/testing/feature-test-utils.js +127 -0
  432. package/dist/esm/features/testing/feature-test-utils.js.map +1 -0
  433. package/dist/esm/files/batches/files-cleanup.batch.backend.service.d.ts +34 -0
  434. package/dist/esm/files/batches/files-cleanup.batch.backend.service.d.ts.map +1 -0
  435. package/dist/esm/files/batches/files-cleanup.batch.backend.service.js +226 -0
  436. package/dist/esm/files/batches/files-cleanup.batch.backend.service.js.map +1 -0
  437. package/dist/esm/files/constraints/file-analyzers.types.d.ts +76 -0
  438. package/dist/esm/files/constraints/file-analyzers.types.d.ts.map +1 -0
  439. package/dist/esm/files/constraints/file-analyzers.types.js +16 -0
  440. package/dist/esm/files/constraints/file-analyzers.types.js.map +1 -0
  441. package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.d.ts +38 -0
  442. package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.d.ts.map +1 -0
  443. package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.js +99 -0
  444. package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.js.map +1 -0
  445. package/dist/esm/files/constraints/file-constraint.types.d.ts +77 -0
  446. package/dist/esm/files/constraints/file-constraint.types.d.ts.map +1 -0
  447. package/dist/esm/files/constraints/file-constraint.types.js +16 -0
  448. package/dist/esm/files/constraints/file-constraint.types.js.map +1 -0
  449. package/dist/esm/files/constraints/file-validation.backend.service.d.ts +63 -0
  450. package/dist/esm/files/constraints/file-validation.backend.service.d.ts.map +1 -0
  451. package/dist/esm/files/constraints/file-validation.backend.service.js +317 -0
  452. package/dist/esm/files/constraints/file-validation.backend.service.js.map +1 -0
  453. package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.d.ts +33 -0
  454. package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.d.ts.map +1 -0
  455. package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.js +126 -0
  456. package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.js.map +1 -0
  457. package/dist/esm/files/controllers/file.controller.d.ts +145 -0
  458. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -0
  459. package/dist/esm/files/controllers/file.controller.js +806 -0
  460. package/dist/esm/files/controllers/file.controller.js.map +1 -0
  461. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +85 -0
  462. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -0
  463. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +512 -0
  464. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -0
  465. package/dist/esm/files/rag/weaviate-vector-store.backend.service.d.ts +84 -0
  466. package/dist/esm/files/rag/weaviate-vector-store.backend.service.d.ts.map +1 -0
  467. package/dist/esm/files/rag/weaviate-vector-store.backend.service.js +224 -0
  468. package/dist/esm/files/rag/weaviate-vector-store.backend.service.js.map +1 -0
  469. package/dist/esm/files/scanning/clamav-scanner.backend.service.d.ts +55 -0
  470. package/dist/esm/files/scanning/clamav-scanner.backend.service.d.ts.map +1 -0
  471. package/dist/esm/files/scanning/clamav-scanner.backend.service.js +202 -0
  472. package/dist/esm/files/scanning/clamav-scanner.backend.service.js.map +1 -0
  473. package/dist/esm/files/scanning/file-scan.types.d.ts +17 -0
  474. package/dist/esm/files/scanning/file-scan.types.d.ts.map +1 -0
  475. package/dist/esm/files/scanning/file-scan.types.js +7 -0
  476. package/dist/esm/files/scanning/file-scan.types.js.map +1 -0
  477. package/dist/esm/files/scanning/yara-scanner.backend.service.d.ts +73 -0
  478. package/dist/esm/files/scanning/yara-scanner.backend.service.d.ts.map +1 -0
  479. package/dist/esm/files/scanning/yara-scanner.backend.service.js +184 -0
  480. package/dist/esm/files/scanning/yara-scanner.backend.service.js.map +1 -0
  481. package/dist/esm/files/services/__tests__/mock-file-field-detection.service.d.ts +12 -0
  482. package/dist/esm/files/services/__tests__/mock-file-field-detection.service.d.ts.map +1 -0
  483. package/dist/esm/files/services/__tests__/mock-file-field-detection.service.js +41 -0
  484. package/dist/esm/files/services/__tests__/mock-file-field-detection.service.js.map +1 -0
  485. package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.d.ts +33 -0
  486. package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.d.ts.map +1 -0
  487. package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.js +71 -0
  488. package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.js.map +1 -0
  489. package/dist/esm/files/services/__tests__/mock-file-repository.service.d.ts +16 -0
  490. package/dist/esm/files/services/__tests__/mock-file-repository.service.d.ts.map +1 -0
  491. package/dist/esm/files/services/__tests__/mock-file-repository.service.js +95 -0
  492. package/dist/esm/files/services/__tests__/mock-file-repository.service.js.map +1 -0
  493. package/dist/esm/files/services/file-field-detection.backend.service.d.ts +57 -0
  494. package/dist/esm/files/services/file-field-detection.backend.service.d.ts.map +1 -0
  495. package/dist/esm/files/services/file-field-detection.backend.service.js +145 -0
  496. package/dist/esm/files/services/file-field-detection.backend.service.js.map +1 -0
  497. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +103 -0
  498. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -0
  499. package/dist/esm/files/services/file-operation-handler.backend.service.js +604 -0
  500. package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -0
  501. package/dist/esm/files/services/file-population.backend.service.d.ts +73 -0
  502. package/dist/esm/files/services/file-population.backend.service.d.ts.map +1 -0
  503. package/dist/esm/files/services/file-population.backend.service.js +367 -0
  504. package/dist/esm/files/services/file-population.backend.service.js.map +1 -0
  505. package/dist/esm/files/services/file-rag-indexing.backend.service.d.ts +64 -0
  506. package/dist/esm/files/services/file-rag-indexing.backend.service.d.ts.map +1 -0
  507. package/dist/esm/files/services/file-rag-indexing.backend.service.js +188 -0
  508. package/dist/esm/files/services/file-rag-indexing.backend.service.js.map +1 -0
  509. package/dist/esm/files/services/file-scanning.backend.service.d.ts +97 -0
  510. package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -0
  511. package/dist/esm/files/services/file-scanning.backend.service.js +323 -0
  512. package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -0
  513. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +52 -0
  514. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -0
  515. package/dist/esm/files/services/file-text-extraction.backend.service.js +168 -0
  516. package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -0
  517. package/dist/esm/files/services/files.backend.service.d.ts +235 -0
  518. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -0
  519. package/dist/esm/files/services/files.backend.service.js +987 -0
  520. package/dist/esm/files/services/files.backend.service.js.map +1 -0
  521. package/dist/esm/files/storage/file-storage-path-resolver.backend.service.d.ts +50 -0
  522. package/dist/esm/files/storage/file-storage-path-resolver.backend.service.d.ts.map +1 -0
  523. package/dist/esm/files/storage/file-storage-path-resolver.backend.service.js +253 -0
  524. package/dist/esm/files/storage/file-storage-path-resolver.backend.service.js.map +1 -0
  525. package/dist/esm/files/storage/file-storage-provider.types.d.ts +156 -0
  526. package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -0
  527. package/dist/esm/files/storage/file-storage-provider.types.js +10 -0
  528. package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -0
  529. package/dist/esm/files/storage/file-storage-router.backend.service.d.ts +68 -0
  530. package/dist/esm/files/storage/file-storage-router.backend.service.d.ts.map +1 -0
  531. package/dist/esm/files/storage/file-storage-router.backend.service.js +168 -0
  532. package/dist/esm/files/storage/file-storage-router.backend.service.js.map +1 -0
  533. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +57 -0
  534. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -0
  535. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +307 -0
  536. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -0
  537. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts +41 -0
  538. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -0
  539. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +397 -0
  540. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -0
  541. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts +30 -0
  542. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -0
  543. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +251 -0
  544. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -0
  545. package/dist/esm/files/utils/file-upload.utils.d.ts +74 -0
  546. package/dist/esm/files/utils/file-upload.utils.d.ts.map +1 -0
  547. package/dist/esm/files/utils/file-upload.utils.js +116 -0
  548. package/dist/esm/files/utils/file-upload.utils.js.map +1 -0
  549. package/dist/esm/files/utils/file-uploader.utils.d.ts +15 -0
  550. package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -0
  551. package/dist/esm/files/utils/file-uploader.utils.js +47 -0
  552. package/dist/esm/files/utils/file-uploader.utils.js.map +1 -0
  553. package/dist/esm/files/utils/file-validation.utils.d.ts +111 -0
  554. package/dist/esm/files/utils/file-validation.utils.d.ts.map +1 -0
  555. package/dist/esm/files/utils/file-validation.utils.js +516 -0
  556. package/dist/esm/files/utils/file-validation.utils.js.map +1 -0
  557. package/dist/esm/flows-actors/agent-catalogs.backend.d.ts +222 -0
  558. package/dist/esm/flows-actors/agent-catalogs.backend.d.ts.map +1 -0
  559. package/dist/esm/flows-actors/agent-catalogs.backend.js +320 -0
  560. package/dist/esm/flows-actors/agent-catalogs.backend.js.map +1 -0
  561. package/dist/esm/flows-actors/controllers/flows-actors.controller.d.ts +33 -0
  562. package/dist/esm/flows-actors/controllers/flows-actors.controller.d.ts.map +1 -0
  563. package/dist/esm/flows-actors/controllers/flows-actors.controller.js +96 -0
  564. package/dist/esm/flows-actors/controllers/flows-actors.controller.js.map +1 -0
  565. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +225 -0
  566. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -0
  567. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +323 -0
  568. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -0
  569. package/dist/esm/flows-actors/models/agent-facets.backend.definitions.d.ts +77 -0
  570. package/dist/esm/flows-actors/models/agent-facets.backend.definitions.d.ts.map +1 -0
  571. package/dist/esm/flows-actors/models/agent-facets.backend.definitions.js +28 -0
  572. package/dist/esm/flows-actors/models/agent-facets.backend.definitions.js.map +1 -0
  573. package/dist/esm/flows-actors/models/agents.backend.definitions.d.ts +1 -0
  574. package/dist/esm/flows-actors/models/agents.backend.definitions.d.ts.map +1 -0
  575. package/dist/esm/flows-actors/models/agents.backend.definitions.js +1 -0
  576. package/dist/esm/flows-actors/models/agents.backend.definitions.js.map +1 -0
  577. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +52 -0
  578. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -0
  579. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +307 -0
  580. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -0
  581. package/dist/esm/flows-actors/models/flows-actors.backend.definitions.d.ts +7 -0
  582. package/dist/esm/flows-actors/models/flows-actors.backend.definitions.d.ts.map +1 -0
  583. package/dist/esm/flows-actors/models/flows-actors.backend.definitions.js +8 -0
  584. package/dist/esm/flows-actors/models/flows-actors.backend.definitions.js.map +1 -0
  585. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +30 -0
  586. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -0
  587. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js +7 -0
  588. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -0
  589. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts +72 -0
  590. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -0
  591. package/dist/esm/flows-actors/services/actors-system.backend.service.js +229 -0
  592. package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -0
  593. package/dist/esm/flows-actors/services/agent-facets.backend.service.d.ts +95 -0
  594. package/dist/esm/flows-actors/services/agent-facets.backend.service.d.ts.map +1 -0
  595. package/dist/esm/flows-actors/services/agent-facets.backend.service.js +276 -0
  596. package/dist/esm/flows-actors/services/agent-facets.backend.service.js.map +1 -0
  597. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +183 -0
  598. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -0
  599. package/dist/esm/flows-actors/services/agents.backend.service.js +2095 -0
  600. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -0
  601. package/dist/esm/flows-actors/services/context-curation.backend.service.d.ts +64 -0
  602. package/dist/esm/flows-actors/services/context-curation.backend.service.d.ts.map +1 -0
  603. package/dist/esm/flows-actors/services/context-curation.backend.service.js +180 -0
  604. package/dist/esm/flows-actors/services/context-curation.backend.service.js.map +1 -0
  605. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +101 -0
  606. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -0
  607. package/dist/esm/flows-actors/services/flows-actors-registry.service.js +313 -0
  608. package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -0
  609. package/dist/esm/flows-actors/services/flows.backend.services.d.ts +64 -0
  610. package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -0
  611. package/dist/esm/flows-actors/services/flows.backend.services.js +203 -0
  612. package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -0
  613. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +91 -0
  614. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -0
  615. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +629 -0
  616. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -0
  617. package/dist/esm/flows-actors/utils/cli-runtime-operation-support.backend.utils.d.ts +15 -0
  618. package/dist/esm/flows-actors/utils/cli-runtime-operation-support.backend.utils.d.ts.map +1 -0
  619. package/dist/esm/flows-actors/utils/cli-runtime-operation-support.backend.utils.js +55 -0
  620. package/dist/esm/flows-actors/utils/cli-runtime-operation-support.backend.utils.js.map +1 -0
  621. package/dist/esm/flows-actors/utils/cli-runtime-runner.backend.utils.d.ts +22 -0
  622. package/dist/esm/flows-actors/utils/cli-runtime-runner.backend.utils.d.ts.map +1 -0
  623. package/dist/esm/flows-actors/utils/cli-runtime-runner.backend.utils.js +131 -0
  624. package/dist/esm/flows-actors/utils/cli-runtime-runner.backend.utils.js.map +1 -0
  625. package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.d.ts +15 -0
  626. package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.d.ts.map +1 -0
  627. package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.js +43 -0
  628. package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.js.map +1 -0
  629. package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.d.ts +66 -0
  630. package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.d.ts.map +1 -0
  631. package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.js +219 -0
  632. package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.js.map +1 -0
  633. package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.d.ts +17 -0
  634. package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.d.ts.map +1 -0
  635. package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.js +110 -0
  636. package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.js.map +1 -0
  637. package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.d.ts +41 -0
  638. package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.d.ts.map +1 -0
  639. package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.js +135 -0
  640. package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.js.map +1 -0
  641. package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.d.ts +33 -0
  642. package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.d.ts.map +1 -0
  643. package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.js +105 -0
  644. package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.js.map +1 -0
  645. package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.d.ts +103 -0
  646. package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.d.ts.map +1 -0
  647. package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.js +685 -0
  648. package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.js.map +1 -0
  649. package/dist/esm/guidance/services/milestone-condition-registry.backend.service.d.ts +23 -0
  650. package/dist/esm/guidance/services/milestone-condition-registry.backend.service.d.ts.map +1 -0
  651. package/dist/esm/guidance/services/milestone-condition-registry.backend.service.js +57 -0
  652. package/dist/esm/guidance/services/milestone-condition-registry.backend.service.js.map +1 -0
  653. package/dist/esm/guidance/services/milestone-definition-registry.backend.service.d.ts +49 -0
  654. package/dist/esm/guidance/services/milestone-definition-registry.backend.service.d.ts.map +1 -0
  655. package/dist/esm/guidance/services/milestone-definition-registry.backend.service.js +248 -0
  656. package/dist/esm/guidance/services/milestone-definition-registry.backend.service.js.map +1 -0
  657. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +64 -0
  658. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -0
  659. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +487 -0
  660. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -0
  661. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +55 -0
  662. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -0
  663. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +208 -0
  664. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -0
  665. package/dist/esm/i18n/services/i18n.backend.service.d.ts +43 -0
  666. package/dist/esm/i18n/services/i18n.backend.service.d.ts.map +1 -0
  667. package/dist/esm/i18n/services/i18n.backend.service.js +83 -0
  668. package/dist/esm/i18n/services/i18n.backend.service.js.map +1 -0
  669. package/dist/esm/index.d.ts +203 -0
  670. package/dist/esm/index.d.ts.map +1 -0
  671. package/dist/esm/index.js +239 -0
  672. package/dist/esm/index.js.map +1 -0
  673. package/dist/esm/inject/models/container.d.ts +44 -0
  674. package/dist/esm/inject/models/container.d.ts.map +1 -0
  675. package/dist/esm/inject/models/container.js +489 -0
  676. package/dist/esm/inject/models/container.js.map +1 -0
  677. package/dist/esm/inject/models/service-types.d.ts +198 -0
  678. package/dist/esm/inject/models/service-types.d.ts.map +1 -0
  679. package/dist/esm/inject/models/service-types.js +226 -0
  680. package/dist/esm/inject/models/service-types.js.map +1 -0
  681. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts +34 -0
  682. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -0
  683. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +122 -0
  684. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -0
  685. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +41 -0
  686. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -0
  687. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +62 -0
  688. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -0
  689. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +18 -0
  690. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -0
  691. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js +43 -0
  692. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -0
  693. package/dist/esm/monitoring/logger/middleware/logging.middleware.d.ts +12 -0
  694. package/dist/esm/monitoring/logger/middleware/logging.middleware.d.ts.map +1 -0
  695. package/dist/esm/monitoring/logger/middleware/logging.middleware.js +25 -0
  696. package/dist/esm/monitoring/logger/middleware/logging.middleware.js.map +1 -0
  697. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +41 -0
  698. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -0
  699. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +29 -0
  700. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -0
  701. package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.d.ts +22 -0
  702. package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.d.ts.map +1 -0
  703. package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.js +53 -0
  704. package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.js.map +1 -0
  705. package/dist/esm/monitoring/logger/services/logger.service.d.ts +37 -0
  706. package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -0
  707. package/dist/esm/monitoring/logger/services/logger.service.js +189 -0
  708. package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -0
  709. package/dist/esm/monitoring/observability/middleware/metrics.middleware.d.ts +38 -0
  710. package/dist/esm/monitoring/observability/middleware/metrics.middleware.d.ts.map +1 -0
  711. package/dist/esm/monitoring/observability/middleware/metrics.middleware.js +147 -0
  712. package/dist/esm/monitoring/observability/middleware/metrics.middleware.js.map +1 -0
  713. package/dist/esm/monitoring/observability/middleware/telemetry.middleware.d.ts +26 -0
  714. package/dist/esm/monitoring/observability/middleware/telemetry.middleware.d.ts.map +1 -0
  715. package/dist/esm/monitoring/observability/middleware/telemetry.middleware.js +117 -0
  716. package/dist/esm/monitoring/observability/middleware/telemetry.middleware.js.map +1 -0
  717. package/dist/esm/monitoring/observability/middleware/tracing.middleware.d.ts +28 -0
  718. package/dist/esm/monitoring/observability/middleware/tracing.middleware.d.ts.map +1 -0
  719. package/dist/esm/monitoring/observability/middleware/tracing.middleware.js +182 -0
  720. package/dist/esm/monitoring/observability/middleware/tracing.middleware.js.map +1 -0
  721. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +86 -0
  722. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -0
  723. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js +1 -0
  724. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -0
  725. package/dist/esm/monitoring/observability/services/instrumentations/custom.instrumentations.d.ts +57 -0
  726. package/dist/esm/monitoring/observability/services/instrumentations/custom.instrumentations.d.ts.map +1 -0
  727. package/dist/esm/monitoring/observability/services/instrumentations/custom.instrumentations.js +77 -0
  728. package/dist/esm/monitoring/observability/services/instrumentations/custom.instrumentations.js.map +1 -0
  729. package/dist/esm/monitoring/observability/services/metrics.service.d.ts +27 -0
  730. package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -0
  731. package/dist/esm/monitoring/observability/services/metrics.service.js +236 -0
  732. package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -0
  733. package/dist/esm/monitoring/observability/services/telemetry.service.d.ts +28 -0
  734. package/dist/esm/monitoring/observability/services/telemetry.service.d.ts.map +1 -0
  735. package/dist/esm/monitoring/observability/services/telemetry.service.js +144 -0
  736. package/dist/esm/monitoring/observability/services/telemetry.service.js.map +1 -0
  737. package/dist/esm/monitoring/observability/services/tracer.service.d.ts +24 -0
  738. package/dist/esm/monitoring/observability/services/tracer.service.d.ts.map +1 -0
  739. package/dist/esm/monitoring/observability/services/tracer.service.js +287 -0
  740. package/dist/esm/monitoring/observability/services/tracer.service.js.map +1 -0
  741. package/dist/esm/notifications/email/components/email-components.d.ts +90 -0
  742. package/dist/esm/notifications/email/components/email-components.d.ts.map +1 -0
  743. package/dist/esm/notifications/email/components/email-components.js +171 -0
  744. package/dist/esm/notifications/email/components/email-components.js.map +1 -0
  745. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +80 -0
  746. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +1 -0
  747. package/dist/esm/notifications/email/models/email-context-provider.interface.js +25 -0
  748. package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +1 -0
  749. package/dist/esm/notifications/email/models/email-template-definition.d.ts +68 -0
  750. package/dist/esm/notifications/email/models/email-template-definition.d.ts.map +1 -0
  751. package/dist/esm/notifications/email/models/email-template-definition.js +12 -0
  752. package/dist/esm/notifications/email/models/email-template-definition.js.map +1 -0
  753. package/dist/esm/notifications/email/models/email-template.actors-system.backend.definitions.d.ts +19 -0
  754. package/dist/esm/notifications/email/models/email-template.actors-system.backend.definitions.d.ts.map +1 -0
  755. package/dist/esm/notifications/email/models/email-template.actors-system.backend.definitions.js +66 -0
  756. package/dist/esm/notifications/email/models/email-template.actors-system.backend.definitions.js.map +1 -0
  757. package/dist/esm/notifications/email/models/email.backend.scheamas.d.ts +1 -0
  758. package/dist/esm/notifications/email/models/email.backend.scheamas.d.ts.map +1 -0
  759. package/dist/esm/notifications/email/models/email.backend.scheamas.js +1 -0
  760. package/dist/esm/notifications/email/models/email.backend.scheamas.js.map +1 -0
  761. package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.d.ts +74 -0
  762. package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.d.ts.map +1 -0
  763. package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.js +196 -0
  764. package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.js.map +1 -0
  765. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +49 -0
  766. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +1 -0
  767. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +141 -0
  768. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +1 -0
  769. package/dist/esm/notifications/email/services/email-renderer.backend.service.d.ts +74 -0
  770. package/dist/esm/notifications/email/services/email-renderer.backend.service.d.ts.map +1 -0
  771. package/dist/esm/notifications/email/services/email-renderer.backend.service.js +215 -0
  772. package/dist/esm/notifications/email/services/email-renderer.backend.service.js.map +1 -0
  773. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +37 -0
  774. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +1 -0
  775. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +121 -0
  776. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +1 -0
  777. package/dist/esm/notifications/email/services/email-template-generation.backend.service.d.ts +115 -0
  778. package/dist/esm/notifications/email/services/email-template-generation.backend.service.d.ts.map +1 -0
  779. package/dist/esm/notifications/email/services/email-template-generation.backend.service.js +634 -0
  780. package/dist/esm/notifications/email/services/email-template-generation.backend.service.js.map +1 -0
  781. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +48 -0
  782. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -0
  783. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +146 -0
  784. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -0
  785. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +58 -0
  786. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +1 -0
  787. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +223 -0
  788. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +1 -0
  789. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts +49 -0
  790. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -0
  791. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +204 -0
  792. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -0
  793. package/dist/esm/notifications/email/services/email.backend.service.d.ts +76 -0
  794. package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -0
  795. package/dist/esm/notifications/email/services/email.backend.service.js +294 -0
  796. package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -0
  797. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +56 -0
  798. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -0
  799. package/dist/esm/notifications/email/utils/color-conversion.utils.js +108 -0
  800. package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -0
  801. package/dist/esm/notifications/email/utils/interpolate-email-label.utils.d.ts +8 -0
  802. package/dist/esm/notifications/email/utils/interpolate-email-label.utils.d.ts.map +1 -0
  803. package/dist/esm/notifications/email/utils/interpolate-email-label.utils.js +15 -0
  804. package/dist/esm/notifications/email/utils/interpolate-email-label.utils.js.map +1 -0
  805. package/dist/esm/notifications/email/utils/zod-to-typescript.utils.d.ts +50 -0
  806. package/dist/esm/notifications/email/utils/zod-to-typescript.utils.d.ts.map +1 -0
  807. package/dist/esm/notifications/email/utils/zod-to-typescript.utils.js +281 -0
  808. package/dist/esm/notifications/email/utils/zod-to-typescript.utils.js.map +1 -0
  809. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +94 -0
  810. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -0
  811. package/dist/esm/notifications/services/notification-badge.backend.service.js +292 -0
  812. package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -0
  813. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +202 -0
  814. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -0
  815. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +1290 -0
  816. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -0
  817. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +50 -0
  818. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -0
  819. package/dist/esm/notifications/sms/services/sms.backend.service.js +209 -0
  820. package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -0
  821. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +58 -0
  822. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -0
  823. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +184 -0
  824. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -0
  825. package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.d.ts +56 -0
  826. package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.d.ts.map +1 -0
  827. package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.js +109 -0
  828. package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.js.map +1 -0
  829. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +96 -0
  830. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -0
  831. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +396 -0
  832. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -0
  833. package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.d.ts +39 -0
  834. package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.d.ts.map +1 -0
  835. package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.js +73 -0
  836. package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.js.map +1 -0
  837. package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.d.ts +22 -0
  838. package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.d.ts.map +1 -0
  839. package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.js +35 -0
  840. package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.js.map +1 -0
  841. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts +10 -0
  842. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -0
  843. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +77 -0
  844. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -0
  845. package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.d.ts +10 -0
  846. package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.d.ts.map +1 -0
  847. package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.js +131 -0
  848. package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.js.map +1 -0
  849. package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.d.ts +22 -0
  850. package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.d.ts.map +1 -0
  851. package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.js +21 -0
  852. package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.js.map +1 -0
  853. package/dist/esm/organizations/services/user-org-type-grant.backend.utils.d.ts +25 -0
  854. package/dist/esm/organizations/services/user-org-type-grant.backend.utils.d.ts.map +1 -0
  855. package/dist/esm/organizations/services/user-org-type-grant.backend.utils.js +34 -0
  856. package/dist/esm/organizations/services/user-org-type-grant.backend.utils.js.map +1 -0
  857. package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.d.ts +32 -0
  858. package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.d.ts.map +1 -0
  859. package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.js +66 -0
  860. package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.js.map +1 -0
  861. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +126 -0
  862. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -0
  863. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +370 -0
  864. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -0
  865. package/dist/esm/queue/apps-crontabs-manager.backend.service.d.ts +86 -0
  866. package/dist/esm/queue/apps-crontabs-manager.backend.service.d.ts.map +1 -0
  867. package/dist/esm/queue/apps-crontabs-manager.backend.service.js +176 -0
  868. package/dist/esm/queue/apps-crontabs-manager.backend.service.js.map +1 -0
  869. package/dist/esm/queue/cron-job-sync.backend.service.d.ts +42 -0
  870. package/dist/esm/queue/cron-job-sync.backend.service.d.ts.map +1 -0
  871. package/dist/esm/queue/cron-job-sync.backend.service.js +181 -0
  872. package/dist/esm/queue/cron-job-sync.backend.service.js.map +1 -0
  873. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +84 -0
  874. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -0
  875. package/dist/esm/queue/domain-queue-consumer.backend.service.js +275 -0
  876. package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -0
  877. package/dist/esm/queue/job-completion-registry.backend.service.d.ts +111 -0
  878. package/dist/esm/queue/job-completion-registry.backend.service.d.ts.map +1 -0
  879. package/dist/esm/queue/job-completion-registry.backend.service.js +237 -0
  880. package/dist/esm/queue/job-completion-registry.backend.service.js.map +1 -0
  881. package/dist/esm/queue/job-consumer.backend.service.d.ts +109 -0
  882. package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -0
  883. package/dist/esm/queue/job-consumer.backend.service.js +515 -0
  884. package/dist/esm/queue/job-consumer.backend.service.js.map +1 -0
  885. package/dist/esm/queue/job-executor.backend.service.d.ts +53 -0
  886. package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -0
  887. package/dist/esm/queue/job-executor.backend.service.js +278 -0
  888. package/dist/esm/queue/job-executor.backend.service.js.map +1 -0
  889. package/dist/esm/queue/job-payload-storage.backend.service.d.ts +86 -0
  890. package/dist/esm/queue/job-payload-storage.backend.service.d.ts.map +1 -0
  891. package/dist/esm/queue/job-payload-storage.backend.service.js +250 -0
  892. package/dist/esm/queue/job-payload-storage.backend.service.js.map +1 -0
  893. package/dist/esm/queue/job-status-tracking.backend.service.d.ts +97 -0
  894. package/dist/esm/queue/job-status-tracking.backend.service.d.ts.map +1 -0
  895. package/dist/esm/queue/job-status-tracking.backend.service.js +281 -0
  896. package/dist/esm/queue/job-status-tracking.backend.service.js.map +1 -0
  897. package/dist/esm/queue/queue-monitoring.backend.service.d.ts +71 -0
  898. package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -0
  899. package/dist/esm/queue/queue-monitoring.backend.service.js +297 -0
  900. package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -0
  901. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +63 -0
  902. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -0
  903. package/dist/esm/queue/queue-worker-initializer.backend.service.js +171 -0
  904. package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -0
  905. package/dist/esm/queue/queue.backend.service.d.ts +108 -0
  906. package/dist/esm/queue/queue.backend.service.d.ts.map +1 -0
  907. package/dist/esm/queue/queue.backend.service.js +419 -0
  908. package/dist/esm/queue/queue.backend.service.js.map +1 -0
  909. package/dist/esm/queue/scheduled-message-verifier.backend.service.d.ts +74 -0
  910. package/dist/esm/queue/scheduled-message-verifier.backend.service.d.ts.map +1 -0
  911. package/dist/esm/queue/scheduled-message-verifier.backend.service.js +189 -0
  912. package/dist/esm/queue/scheduled-message-verifier.backend.service.js.map +1 -0
  913. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +124 -0
  914. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -0
  915. package/dist/esm/queue/worker-shutdown-manager.backend.service.js +250 -0
  916. package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -0
  917. package/dist/esm/requests/models/api-routes.backend.defintions.d.ts +34 -0
  918. package/dist/esm/requests/models/api-routes.backend.defintions.d.ts.map +1 -0
  919. package/dist/esm/requests/models/api-routes.backend.defintions.js +42 -0
  920. package/dist/esm/requests/models/api-routes.backend.defintions.js.map +1 -0
  921. package/dist/esm/requests/models/requests.backend.schemas.d.ts +48 -0
  922. package/dist/esm/requests/models/requests.backend.schemas.d.ts.map +1 -0
  923. package/dist/esm/requests/models/requests.backend.schemas.js +7 -0
  924. package/dist/esm/requests/models/requests.backend.schemas.js.map +1 -0
  925. package/dist/esm/requests/service/__tests__/mock-apps-shared-resources-gateway.service.d.ts +6 -0
  926. package/dist/esm/requests/service/__tests__/mock-apps-shared-resources-gateway.service.d.ts.map +1 -0
  927. package/dist/esm/requests/service/__tests__/mock-apps-shared-resources-gateway.service.js +20 -0
  928. package/dist/esm/requests/service/__tests__/mock-apps-shared-resources-gateway.service.js.map +1 -0
  929. package/dist/esm/requests/service/apps-shared-resources-gateway.backend.service.d.ts +84 -0
  930. package/dist/esm/requests/service/apps-shared-resources-gateway.backend.service.d.ts.map +1 -0
  931. package/dist/esm/requests/service/apps-shared-resources-gateway.backend.service.js +462 -0
  932. package/dist/esm/requests/service/apps-shared-resources-gateway.backend.service.js.map +1 -0
  933. package/dist/esm/requests/service/platform-mutualized-handler.backend.service.d.ts +9 -0
  934. package/dist/esm/requests/service/platform-mutualized-handler.backend.service.d.ts.map +1 -0
  935. package/dist/esm/requests/service/platform-mutualized-handler.backend.service.js +36 -0
  936. package/dist/esm/requests/service/platform-mutualized-handler.backend.service.js.map +1 -0
  937. package/dist/esm/requests/service/platform-requests.backend.utils.d.ts +6 -0
  938. package/dist/esm/requests/service/platform-requests.backend.utils.d.ts.map +1 -0
  939. package/dist/esm/requests/service/platform-requests.backend.utils.js +47 -0
  940. package/dist/esm/requests/service/platform-requests.backend.utils.js.map +1 -0
  941. package/dist/esm/requests/service/remote-client-base.backend.service.d.ts +111 -0
  942. package/dist/esm/requests/service/remote-client-base.backend.service.d.ts.map +1 -0
  943. package/dist/esm/requests/service/remote-client-base.backend.service.js +354 -0
  944. package/dist/esm/requests/service/remote-client-base.backend.service.js.map +1 -0
  945. package/dist/esm/requests/service/serverless-services-handler.backend.service.d.ts +9 -0
  946. package/dist/esm/requests/service/serverless-services-handler.backend.service.d.ts.map +1 -0
  947. package/dist/esm/requests/service/serverless-services-handler.backend.service.js +36 -0
  948. package/dist/esm/requests/service/serverless-services-handler.backend.service.js.map +1 -0
  949. package/dist/esm/requests/service/websocket.service.d.ts +507 -0
  950. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -0
  951. package/dist/esm/requests/service/websocket.service.js +2222 -0
  952. package/dist/esm/requests/service/websocket.service.js.map +1 -0
  953. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts +3 -0
  954. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -0
  955. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +17 -0
  956. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -0
  957. package/dist/esm/resources/models/index.d.ts +7 -0
  958. package/dist/esm/resources/models/index.d.ts.map +1 -0
  959. package/dist/esm/resources/models/index.js +7 -0
  960. package/dist/esm/resources/models/index.js.map +1 -0
  961. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts +4 -0
  962. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -0
  963. package/dist/esm/resources/models/resources-operations.backend.definitions.js +7 -0
  964. package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -0
  965. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts +3 -0
  966. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -0
  967. package/dist/esm/resources/models/resources-relationships.backend.definitions.js +19 -0
  968. package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -0
  969. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +13 -0
  970. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -0
  971. package/dist/esm/resources/models/resources-types.backend.schemas.js +14 -0
  972. package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -0
  973. package/dist/esm/resources/models/resources.backend.schemas.d.ts +7 -0
  974. package/dist/esm/resources/models/resources.backend.schemas.d.ts.map +1 -0
  975. package/dist/esm/resources/models/resources.backend.schemas.js +8 -0
  976. package/dist/esm/resources/models/resources.backend.schemas.js.map +1 -0
  977. package/dist/esm/resources/models/virtual-fields.backend.types.d.ts +121 -0
  978. package/dist/esm/resources/models/virtual-fields.backend.types.d.ts.map +1 -0
  979. package/dist/esm/resources/models/virtual-fields.backend.types.js +10 -0
  980. package/dist/esm/resources/models/virtual-fields.backend.types.js.map +1 -0
  981. package/dist/esm/resources/services/__tests__/mock-resources-registry.service.d.ts +25 -0
  982. package/dist/esm/resources/services/__tests__/mock-resources-registry.service.d.ts.map +1 -0
  983. package/dist/esm/resources/services/__tests__/mock-resources-registry.service.js +59 -0
  984. package/dist/esm/resources/services/__tests__/mock-resources-registry.service.js.map +1 -0
  985. package/dist/esm/resources/services/resource-context.backend.service.d.ts +321 -0
  986. package/dist/esm/resources/services/resource-context.backend.service.d.ts.map +1 -0
  987. package/dist/esm/resources/services/resource-context.backend.service.js +723 -0
  988. package/dist/esm/resources/services/resource-context.backend.service.js.map +1 -0
  989. package/dist/esm/resources/services/resource-id.backend.service.d.ts +110 -0
  990. package/dist/esm/resources/services/resource-id.backend.service.d.ts.map +1 -0
  991. package/dist/esm/resources/services/resource-id.backend.service.js +267 -0
  992. package/dist/esm/resources/services/resource-id.backend.service.js.map +1 -0
  993. package/dist/esm/resources/services/resource-population.backend.service.d.ts +149 -0
  994. package/dist/esm/resources/services/resource-population.backend.service.d.ts.map +1 -0
  995. package/dist/esm/resources/services/resource-population.backend.service.js +543 -0
  996. package/dist/esm/resources/services/resource-population.backend.service.js.map +1 -0
  997. package/dist/esm/resources/services/resources-registry.backend.service.d.ts +151 -0
  998. package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -0
  999. package/dist/esm/resources/services/resources-registry.backend.service.js +867 -0
  1000. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -0
  1001. package/dist/esm/resources/services/virtual-fields.backend.service.d.ts +72 -0
  1002. package/dist/esm/resources/services/virtual-fields.backend.service.d.ts.map +1 -0
  1003. package/dist/esm/resources/services/virtual-fields.backend.service.js +254 -0
  1004. package/dist/esm/resources/services/virtual-fields.backend.service.js.map +1 -0
  1005. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +73 -0
  1006. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -0
  1007. package/dist/esm/runtime/controllers/health-controller.backend.service.js +275 -0
  1008. package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -0
  1009. package/dist/esm/runtime/domain-module.backend.definitions.d.ts +43 -0
  1010. package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -0
  1011. package/dist/esm/runtime/domain-module.backend.definitions.js +70 -0
  1012. package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -0
  1013. package/dist/esm/runtime/models/execution-context.backend.schemas.d.ts +253 -0
  1014. package/dist/esm/runtime/models/execution-context.backend.schemas.d.ts.map +1 -0
  1015. package/dist/esm/runtime/models/execution-context.backend.schemas.js +329 -0
  1016. package/dist/esm/runtime/models/execution-context.backend.schemas.js.map +1 -0
  1017. package/dist/esm/runtime/models/runtime.backend.schemas.d.ts +45 -0
  1018. package/dist/esm/runtime/models/runtime.backend.schemas.d.ts.map +1 -0
  1019. package/dist/esm/runtime/models/runtime.backend.schemas.js +73 -0
  1020. package/dist/esm/runtime/models/runtime.backend.schemas.js.map +1 -0
  1021. package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts +315 -0
  1022. package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -0
  1023. package/dist/esm/runtime/services/execution-context-creator.backend.service.js +1525 -0
  1024. package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -0
  1025. package/dist/esm/runtime/services/execution-context-handler.backend.service.d.ts +60 -0
  1026. package/dist/esm/runtime/services/execution-context-handler.backend.service.d.ts.map +1 -0
  1027. package/dist/esm/runtime/services/execution-context-handler.backend.service.js +150 -0
  1028. package/dist/esm/runtime/services/execution-context-handler.backend.service.js.map +1 -0
  1029. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +11 -0
  1030. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -0
  1031. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js +1 -0
  1032. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -0
  1033. package/dist/esm/runtime/services/http-server.backend.service.d.ts +188 -0
  1034. package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -0
  1035. package/dist/esm/runtime/services/http-server.backend.service.js +755 -0
  1036. package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -0
  1037. package/dist/esm/runtime/services/start-application.backend.service.d.ts +240 -0
  1038. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -0
  1039. package/dist/esm/runtime/services/start-application.backend.service.js +977 -0
  1040. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -0
  1041. package/dist/esm/runtime/testing/execution-context-test-fixtures.d.ts +10 -0
  1042. package/dist/esm/runtime/testing/execution-context-test-fixtures.d.ts.map +1 -0
  1043. package/dist/esm/runtime/testing/execution-context-test-fixtures.js +13 -0
  1044. package/dist/esm/runtime/testing/execution-context-test-fixtures.js.map +1 -0
  1045. package/dist/esm/runtime/testing/mock-execution-context-creator.service.d.ts +15 -0
  1046. package/dist/esm/runtime/testing/mock-execution-context-creator.service.d.ts.map +1 -0
  1047. package/dist/esm/runtime/testing/mock-execution-context-creator.service.js +42 -0
  1048. package/dist/esm/runtime/testing/mock-execution-context-creator.service.js.map +1 -0
  1049. package/dist/esm/runtime/utils/scan-default-exports.backend.utils.d.ts +85 -0
  1050. package/dist/esm/runtime/utils/scan-default-exports.backend.utils.d.ts.map +1 -0
  1051. package/dist/esm/runtime/utils/scan-default-exports.backend.utils.js +171 -0
  1052. package/dist/esm/runtime/utils/scan-default-exports.backend.utils.js.map +1 -0
  1053. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +19 -0
  1054. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -0
  1055. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +59 -0
  1056. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -0
  1057. package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.d.ts +31 -0
  1058. package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.d.ts.map +1 -0
  1059. package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.js +215 -0
  1060. package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.js.map +1 -0
  1061. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts +493 -0
  1062. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -0
  1063. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +2371 -0
  1064. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -0
  1065. package/dist/esm/security/authentications/models/auth-constants.backend.d.ts +83 -0
  1066. package/dist/esm/security/authentications/models/auth-constants.backend.d.ts.map +1 -0
  1067. package/dist/esm/security/authentications/models/auth-constants.backend.js +113 -0
  1068. package/dist/esm/security/authentications/models/auth-constants.backend.js.map +1 -0
  1069. package/dist/esm/security/authentications/models/authentications.backend.schemas.d.ts +98 -0
  1070. package/dist/esm/security/authentications/models/authentications.backend.schemas.d.ts.map +1 -0
  1071. package/dist/esm/security/authentications/models/authentications.backend.schemas.js +59 -0
  1072. package/dist/esm/security/authentications/models/authentications.backend.schemas.js.map +1 -0
  1073. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts +42 -0
  1074. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -0
  1075. package/dist/esm/security/authentications/models/jwt.backend.schemas.js +98 -0
  1076. package/dist/esm/security/authentications/models/jwt.backend.schemas.js.map +1 -0
  1077. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +163 -0
  1078. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -0
  1079. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js +12 -0
  1080. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -0
  1081. package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.d.ts +102 -0
  1082. package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.d.ts.map +1 -0
  1083. package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.js +7 -0
  1084. package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.js.map +1 -0
  1085. package/dist/esm/security/authentications/models/sso-connection.backend.schemas.d.ts +88 -0
  1086. package/dist/esm/security/authentications/models/sso-connection.backend.schemas.d.ts.map +1 -0
  1087. package/dist/esm/security/authentications/models/sso-connection.backend.schemas.js +17 -0
  1088. package/dist/esm/security/authentications/models/sso-connection.backend.schemas.js.map +1 -0
  1089. package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.d.ts +27 -0
  1090. package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.d.ts.map +1 -0
  1091. package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.js +66 -0
  1092. package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.js.map +1 -0
  1093. package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.d.ts +30 -0
  1094. package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.d.ts.map +1 -0
  1095. package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.js +44 -0
  1096. package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.js.map +1 -0
  1097. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.d.ts +19 -0
  1098. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.d.ts.map +1 -0
  1099. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.js +43 -0
  1100. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.js.map +1 -0
  1101. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.d.ts +37 -0
  1102. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.d.ts.map +1 -0
  1103. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.js +58 -0
  1104. package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.js.map +1 -0
  1105. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +85 -0
  1106. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -0
  1107. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +379 -0
  1108. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -0
  1109. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +79 -0
  1110. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -0
  1111. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +205 -0
  1112. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -0
  1113. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +59 -0
  1114. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -0
  1115. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +179 -0
  1116. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -0
  1117. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +116 -0
  1118. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -0
  1119. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +436 -0
  1120. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -0
  1121. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.d.ts +67 -0
  1122. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.d.ts.map +1 -0
  1123. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js +222 -0
  1124. package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js.map +1 -0
  1125. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +80 -0
  1126. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -0
  1127. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +368 -0
  1128. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -0
  1129. package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.d.ts +75 -0
  1130. package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.d.ts.map +1 -0
  1131. package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.js +139 -0
  1132. package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.js.map +1 -0
  1133. package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.d.ts +72 -0
  1134. package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.d.ts.map +1 -0
  1135. package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.js +127 -0
  1136. package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.js.map +1 -0
  1137. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts +57 -0
  1138. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -0
  1139. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +459 -0
  1140. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -0
  1141. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts +44 -0
  1142. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -0
  1143. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js +131 -0
  1144. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js.map +1 -0
  1145. package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts +58 -0
  1146. package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts.map +1 -0
  1147. package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.js +209 -0
  1148. package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.js.map +1 -0
  1149. package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.d.ts +46 -0
  1150. package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.d.ts.map +1 -0
  1151. package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.js +124 -0
  1152. package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.js.map +1 -0
  1153. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +165 -0
  1154. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -0
  1155. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +816 -0
  1156. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -0
  1157. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts +218 -0
  1158. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -0
  1159. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +1026 -0
  1160. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -0
  1161. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts +150 -0
  1162. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -0
  1163. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +737 -0
  1164. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -0
  1165. package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.d.ts +224 -0
  1166. package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.d.ts.map +1 -0
  1167. package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.js +593 -0
  1168. package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.js.map +1 -0
  1169. package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.d.ts +267 -0
  1170. package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.d.ts.map +1 -0
  1171. package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.js +1376 -0
  1172. package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.js.map +1 -0
  1173. package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.d.ts +93 -0
  1174. package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.d.ts.map +1 -0
  1175. package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.js +396 -0
  1176. package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.js.map +1 -0
  1177. package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.d.ts +40 -0
  1178. package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.d.ts.map +1 -0
  1179. package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.js +92 -0
  1180. package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.js.map +1 -0
  1181. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +82 -0
  1182. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -0
  1183. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +325 -0
  1184. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -0
  1185. package/dist/esm/security/authentications/services/auth-session-store.backend.service.d.ts +66 -0
  1186. package/dist/esm/security/authentications/services/auth-session-store.backend.service.d.ts.map +1 -0
  1187. package/dist/esm/security/authentications/services/auth-session-store.backend.service.js +198 -0
  1188. package/dist/esm/security/authentications/services/auth-session-store.backend.service.js.map +1 -0
  1189. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +108 -0
  1190. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -0
  1191. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +406 -0
  1192. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -0
  1193. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +366 -0
  1194. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -0
  1195. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +2631 -0
  1196. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -0
  1197. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts +13 -0
  1198. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -0
  1199. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +53 -0
  1200. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -0
  1201. package/dist/esm/security/authentications/services/custom-impls/auth-policy.custom-impl.backend.service.d.ts +12 -0
  1202. package/dist/esm/security/authentications/services/custom-impls/auth-policy.custom-impl.backend.service.d.ts.map +1 -0
  1203. package/dist/esm/security/authentications/services/custom-impls/auth-policy.custom-impl.backend.service.js +41 -0
  1204. package/dist/esm/security/authentications/services/custom-impls/auth-policy.custom-impl.backend.service.js.map +1 -0
  1205. package/dist/esm/security/authentications/services/custom-impls/scim-provisioning-config.custom-impl.backend.service.d.ts +18 -0
  1206. package/dist/esm/security/authentications/services/custom-impls/scim-provisioning-config.custom-impl.backend.service.d.ts.map +1 -0
  1207. package/dist/esm/security/authentications/services/custom-impls/scim-provisioning-config.custom-impl.backend.service.js +140 -0
  1208. package/dist/esm/security/authentications/services/custom-impls/scim-provisioning-config.custom-impl.backend.service.js.map +1 -0
  1209. package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.d.ts +16 -0
  1210. package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.d.ts.map +1 -0
  1211. package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.js +112 -0
  1212. package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.js.map +1 -0
  1213. package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.d.ts +16 -0
  1214. package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.d.ts.map +1 -0
  1215. package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.js +101 -0
  1216. package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.js.map +1 -0
  1217. package/dist/esm/security/authentications/services/custom-impls/siem-export-config.custom-impl.backend.service.d.ts +18 -0
  1218. package/dist/esm/security/authentications/services/custom-impls/siem-export-config.custom-impl.backend.service.d.ts.map +1 -0
  1219. package/dist/esm/security/authentications/services/custom-impls/siem-export-config.custom-impl.backend.service.js +136 -0
  1220. package/dist/esm/security/authentications/services/custom-impls/siem-export-config.custom-impl.backend.service.js.map +1 -0
  1221. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +19 -0
  1222. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -0
  1223. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +154 -0
  1224. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -0
  1225. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.d.ts +26 -0
  1226. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.d.ts.map +1 -0
  1227. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js +657 -0
  1228. package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js.map +1 -0
  1229. package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.d.ts +27 -0
  1230. package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.d.ts.map +1 -0
  1231. package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.js +60 -0
  1232. package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.js.map +1 -0
  1233. package/dist/esm/security/authentications/services/utils/auth-controller.utils.d.ts +23 -0
  1234. package/dist/esm/security/authentications/services/utils/auth-controller.utils.d.ts.map +1 -0
  1235. package/dist/esm/security/authentications/services/utils/auth-controller.utils.js +44 -0
  1236. package/dist/esm/security/authentications/services/utils/auth-controller.utils.js.map +1 -0
  1237. package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.d.ts +89 -0
  1238. package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.d.ts.map +1 -0
  1239. package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.js +192 -0
  1240. package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.js.map +1 -0
  1241. package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.d.ts +20 -0
  1242. package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.d.ts.map +1 -0
  1243. package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.js +55 -0
  1244. package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.js.map +1 -0
  1245. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts +50 -0
  1246. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -0
  1247. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +135 -0
  1248. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -0
  1249. package/dist/esm/security/authentications/services/utils/saml-java-availability.d.ts +26 -0
  1250. package/dist/esm/security/authentications/services/utils/saml-java-availability.d.ts.map +1 -0
  1251. package/dist/esm/security/authentications/services/utils/saml-java-availability.js +59 -0
  1252. package/dist/esm/security/authentications/services/utils/saml-java-availability.js.map +1 -0
  1253. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +137 -0
  1254. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -0
  1255. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +723 -0
  1256. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -0
  1257. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +28 -0
  1258. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -0
  1259. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +156 -0
  1260. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -0
  1261. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +4 -0
  1262. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -0
  1263. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js +72 -0
  1264. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -0
  1265. package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.d.ts +125 -0
  1266. package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.d.ts.map +1 -0
  1267. package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.js +69 -0
  1268. package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.js.map +1 -0
  1269. package/dist/esm/security/consumable-tokens/models/index.d.ts +3 -0
  1270. package/dist/esm/security/consumable-tokens/models/index.d.ts.map +1 -0
  1271. package/dist/esm/security/consumable-tokens/models/index.js +3 -0
  1272. package/dist/esm/security/consumable-tokens/models/index.js.map +1 -0
  1273. package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.d.ts +26 -0
  1274. package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.d.ts.map +1 -0
  1275. package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.js +55 -0
  1276. package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.js.map +1 -0
  1277. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +142 -0
  1278. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -0
  1279. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +446 -0
  1280. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -0
  1281. package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.d.ts +46 -0
  1282. package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.d.ts.map +1 -0
  1283. package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.js +147 -0
  1284. package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.js.map +1 -0
  1285. package/dist/esm/security/jwt/services/jwt.backend.service.d.ts +75 -0
  1286. package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -0
  1287. package/dist/esm/security/jwt/services/jwt.backend.service.js +368 -0
  1288. package/dist/esm/security/jwt/services/jwt.backend.service.js.map +1 -0
  1289. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts +71 -0
  1290. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -0
  1291. package/dist/esm/security/scim/controllers/scim.backend.controller.js +863 -0
  1292. package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -0
  1293. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +275 -0
  1294. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -0
  1295. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +139 -0
  1296. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -0
  1297. package/dist/esm/security/scim/utils/scim-filter-parser.d.ts +35 -0
  1298. package/dist/esm/security/scim/utils/scim-filter-parser.d.ts.map +1 -0
  1299. package/dist/esm/security/scim/utils/scim-filter-parser.js +232 -0
  1300. package/dist/esm/security/scim/utils/scim-filter-parser.js.map +1 -0
  1301. package/dist/esm/security/scim/utils/scim-response-formatter.d.ts +42 -0
  1302. package/dist/esm/security/scim/utils/scim-response-formatter.d.ts.map +1 -0
  1303. package/dist/esm/security/scim/utils/scim-response-formatter.js +89 -0
  1304. package/dist/esm/security/scim/utils/scim-response-formatter.js.map +1 -0
  1305. package/dist/esm/testing.d.ts +31 -0
  1306. package/dist/esm/testing.d.ts.map +1 -0
  1307. package/dist/esm/testing.js +31 -0
  1308. package/dist/esm/testing.js.map +1 -0
  1309. package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts +9 -0
  1310. package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts.map +1 -0
  1311. package/dist/esm/users/services/user-self-custom-implementations.backend.js +48 -0
  1312. package/dist/esm/users/services/user-self-custom-implementations.backend.js.map +1 -0
  1313. package/dist/tsconfig.build.tsbuildinfo +1 -0
  1314. package/package.json +163 -0
  1315. package/src/__tests__/integration/bulk-repository-write-contract.integration.test.ts +373 -0
  1316. package/src/__tests__/integration/custom-batch-job-execution.integration.test.ts +147 -0
  1317. package/src/__tests__/integration/delete-file-rollback-persistence.integration.test.ts +551 -0
  1318. package/src/__tests__/integration/file-management-nested-persistence.integration.test.ts +487 -0
  1319. package/src/__tests__/integration/file-management-postgresql-persistence.integration.test.ts +466 -0
  1320. package/src/__tests__/integration/files-cleanup-persistence.integration.test.ts +335 -0
  1321. package/src/__tests__/integration/generated-bulk-relationship-runtime.integration.test.ts +545 -0
  1322. package/src/__tests__/integration/lifecycle-delete-rollback-persistence.integration.test.ts +537 -0
  1323. package/src/__tests__/integration/postgresql-contextual-filter-enforcement.integration.test.ts +170 -0
  1324. package/src/__tests__/integration/postgresql-delete-best-effort-boundary.integration.test.ts +604 -0
  1325. package/src/__tests__/integration/prompt-compiler.integration.test.ts +723 -0
  1326. package/src/__tests__/integration/relationship-service-semantics.integration.test.ts +2086 -0
  1327. package/src/__tests__/integration/repositories-registry.integration.test.ts +296 -0
  1328. package/src/__tests__/integration/resource-factory-pipeline.integration.test.ts +556 -0
  1329. package/src/__tests__/integration/resource-services.integration.test.ts +265 -0
  1330. package/src/__tests__/integration/resources-registry.integration.test.ts +327 -0
  1331. package/src/__tests__/integration/services-registry.integration.test.ts +231 -0
  1332. package/src/__tests__/integration/update-many-runtime-guards.integration.test.ts +290 -0
  1333. package/src/__tests__/setup.ts +15 -0
  1334. package/src/__tests__/test-container.ts +120 -0
  1335. package/src/applications/models/applications.backend.schemas.ts +18 -0
  1336. package/src/base-classes/__tests__/batches-cronjobs-executor.test.ts +63 -0
  1337. package/src/base-classes/__tests__/bulk-delete-child-file-guard.test.ts +152 -0
  1338. package/src/base-classes/__tests__/bulk-nested-file-update-coordination.test.ts +171 -0
  1339. package/src/base-classes/__tests__/delete-file-coordination.test.ts +185 -0
  1340. package/src/base-classes/__tests__/postgresql-file-transaction-coordination.test.ts +424 -0
  1341. package/src/base-classes/__tests__/postgresql-repository-contextual-filter-enforcement.test.ts +88 -0
  1342. package/src/base-classes/__tests__/repository-contextual-filter-enforcement.test.ts +87 -0
  1343. package/src/base-classes/__tests__/resource-operation-helper-context-enforcement.test.ts +74 -0
  1344. package/src/base-classes/__tests__/transaction-boundaries.test.ts +153 -0
  1345. package/src/base-classes/models/manual-controllers.backend.definition.ts +56 -0
  1346. package/src/base-classes/models/repositories.backend.schemas.ts +105 -0
  1347. package/src/base-classes/services/__tests__/mock-resource-operation-helper.service.ts +61 -0
  1348. package/src/base-classes/services/batches/batches-cronjobs-custom-execution.service.ts +148 -0
  1349. package/src/base-classes/services/batches/batches-cronjobs-executor.backend.service.ts +115 -0
  1350. package/src/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.ts +58 -0
  1351. package/src/base-classes/services/controllers/__tests__/controller-request-validation.utils.test.ts +292 -0
  1352. package/src/base-classes/services/controllers/__tests__/controller-resource-file-upload-routes.test.ts +1335 -0
  1353. package/src/base-classes/services/controllers/__tests__/controller-resource.version-conflict.test.ts +372 -0
  1354. package/src/base-classes/services/controllers/abstract-controller.backend.service.ts +302 -0
  1355. package/src/base-classes/services/controllers/controller-resource.backend.service.ts +1833 -0
  1356. package/src/base-classes/services/controllers/controllers-registry-handler.backend.service.ts +494 -0
  1357. package/src/base-classes/services/controllers/validate-field-handler.backend.service.ts +613 -0
  1358. package/src/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.ts +31 -0
  1359. package/src/base-classes/services/repositories/__tests__/repository-resource.singleton-read.test.ts +50 -0
  1360. package/src/base-classes/services/repositories/postgresql-resource-repository.backend.service.ts +1207 -0
  1361. package/src/base-classes/services/repositories/repositories-registry-handler.backend.service.ts +804 -0
  1362. package/src/base-classes/services/repositories/repository-resource.backend.service.ts +2186 -0
  1363. package/src/base-classes/services/resource-operations-helper.backend.service.ts +468 -0
  1364. package/src/base-classes/services/services/__tests__/mock-services-registry-handler.service.ts +21 -0
  1365. package/src/base-classes/services/services/__tests__/services-registry-handler.notifications.test.ts +65 -0
  1366. package/src/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.ts +305 -0
  1367. package/src/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.ts +224 -0
  1368. package/src/base-classes/services/services/resource-operation-custom-implementation.factory.backend.ts +331 -0
  1369. package/src/base-classes/services/services/services-registry-handler.backend.service.ts +6288 -0
  1370. package/src/base-classes/utils/backend-type-utils.ts +64 -0
  1371. package/src/billing/services/back-office/__tests__/billing-feature-sync.backend.service.test.ts +132 -0
  1372. package/src/billing/services/back-office/__tests__/billing-state.backend.service.test.ts +245 -0
  1373. package/src/billing/services/back-office/__tests__/product-catalog-sync.backend.service.test.ts +238 -0
  1374. package/src/billing/services/back-office/abstract-billing.backend.service.ts +89 -0
  1375. package/src/billing/services/back-office/billing-feature-sync.backend.service.ts +473 -0
  1376. package/src/billing/services/back-office/billing-state.backend.service.ts +348 -0
  1377. package/src/billing/services/back-office/product-catalog-sync.backend.service.ts +415 -0
  1378. package/src/billing/services/back-office/usage-metering.backend.service.ts +326 -0
  1379. package/src/billing/services/billing.utils.ts +26 -0
  1380. package/src/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.ts +342 -0
  1381. package/src/billing/services/custom-impl/billing-custom-impl-utils.backend.ts +274 -0
  1382. package/src/billing/services/custom-impl/billing-custom-implementations.backend.ts +236 -0
  1383. package/src/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.ts +133 -0
  1384. package/src/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.ts +242 -0
  1385. package/src/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.ts +434 -0
  1386. package/src/billing/services/webhooks/billing-webhook-adapter.backend.service.ts +70 -0
  1387. package/src/billing/services/webhooks/billing-webhook-capability-handler.backend.service.ts +46 -0
  1388. package/src/billing/services/webhooks/billing-webhook-event-router.backend.service.ts +727 -0
  1389. package/src/billing/testing/billing-test-fixtures.ts +296 -0
  1390. package/src/billing/testing/mock-billing-provider.ts +548 -0
  1391. package/src/charts/controllers/__tests__/chart.backend.controller.test.ts +403 -0
  1392. package/src/charts/controllers/chart.backend.controller.ts +238 -0
  1393. package/src/charts/services/__tests__/chart-registry.backend.service.test.ts +120 -0
  1394. package/src/charts/services/chart-registry.backend.service.ts +109 -0
  1395. package/src/compliance/audit-trails/audit-logs.custom-impl.backend.service.ts +104 -0
  1396. package/src/compliance/audit-trails/services/__tests__/mock-audit-logs.service.ts +48 -0
  1397. package/src/compliance/audit-trails/services/audit-event-dispatcher.backend.service.ts +325 -0
  1398. package/src/compliance/audit-trails/services/audit-logs.backend.service.ts +1313 -0
  1399. package/src/compliance/audit-trails/services/siem-webhook-delivery.backend.service.ts +542 -0
  1400. package/src/compliance/index.ts +1 -0
  1401. package/src/config/custom/application-config-controller.backend.service.ts +119 -0
  1402. package/src/config/models/__tests__/app-config-secrets.boundaries.test.ts +56 -0
  1403. package/src/config/models/__tests__/app-config.backend-authored.definitions.test.ts +286 -0
  1404. package/src/config/models/app-config-secrets.backend.schemas.ts +154 -0
  1405. package/src/config/models/app-config.backend-authored.definitions.ts +165 -0
  1406. package/src/config/models/app-config.backend.schemas.ts +614 -0
  1407. package/src/config/models/app-env-config.backend.schemas.ts +135 -0
  1408. package/src/config/models/config-mutation-boundary.utils.ts +76 -0
  1409. package/src/config/models/postgresql-env-config.backend.schemas.ts +126 -0
  1410. package/src/config/models/runtime-topology.backend.contracts.ts +42 -0
  1411. package/src/config/services/__tests__/app-configuration-loader.backend.service.test.ts +118 -0
  1412. package/src/config/services/__tests__/app-configuration.backend.service.test.ts +40 -0
  1413. package/src/config/services/__tests__/app-configuration.backend.utils.test.ts +72 -0
  1414. package/src/config/services/__tests__/application-startup-config-validator.backend.service.test.ts +404 -0
  1415. package/src/config/services/__tests__/mock-app-configuration.service.ts +131 -0
  1416. package/src/config/services/app-configuration-loader.backend.service.ts +443 -0
  1417. package/src/config/services/app-configuration.backend.service.ts +570 -0
  1418. package/src/config/services/app-configuration.backend.utils.ts +94 -0
  1419. package/src/config/services/application-startup-config-validator.backend.service.ts +611 -0
  1420. package/src/databases/models/aggregation.backend.schemas.ts +174 -0
  1421. package/src/databases/models/databases.backend.schemas.ts +70 -0
  1422. package/src/databases/models/filter.backend.schemas.ts +101 -0
  1423. package/src/databases/models/sql.backend.schemas.ts +111 -0
  1424. package/src/databases/models/transaction.shared.schemas.ts +172 -0
  1425. package/src/databases/services/__tests__/mock-mongo-transaction-registry.service.ts +90 -0
  1426. package/src/databases/services/__tests__/mock-mongodb.service.ts +86 -0
  1427. package/src/databases/services/__tests__/mock-mongoose-model.service.ts +411 -0
  1428. package/src/databases/services/__tests__/mock-redis.service.ts +72 -0
  1429. package/src/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.ts +41 -0
  1430. package/src/databases/services/__tests__/mongo-aggregation-compiler.test.ts +918 -0
  1431. package/src/databases/services/__tests__/postgresql-filter.backend.service.test.ts +180 -0
  1432. package/src/databases/services/__tests__/sql-hybrid-transform.test.ts +73 -0
  1433. package/src/databases/services/aggregation/__tests__/aggregation-authorization.backend.service.test.ts +444 -0
  1434. package/src/databases/services/aggregation/__tests__/aggregation-query.backend.service.test.ts +150 -0
  1435. package/src/databases/services/aggregation/__tests__/computed-measure-evaluator.test.ts +525 -0
  1436. package/src/databases/services/aggregation/__tests__/field-access-validator.test.ts +458 -0
  1437. package/src/databases/services/aggregation/__tests__/time-series-densifier.test.ts +631 -0
  1438. package/src/databases/services/aggregation/__tests__/window-function-processor.test.ts +598 -0
  1439. package/src/databases/services/aggregation/aggregation-authorization.backend.service.ts +516 -0
  1440. package/src/databases/services/aggregation/aggregation-query.backend.service.ts +514 -0
  1441. package/src/databases/services/aggregation/computed-measure-evaluator.backend.service.ts +196 -0
  1442. package/src/databases/services/aggregation/field-access-validator.backend.service.ts +225 -0
  1443. package/src/databases/services/aggregation/time-series-densifier.backend.service.ts +389 -0
  1444. package/src/databases/services/aggregation/topn-processor.backend.service.ts +221 -0
  1445. package/src/databases/services/aggregation/window-function-processor.backend.service.ts +301 -0
  1446. package/src/databases/services/db-utils.ts +96 -0
  1447. package/src/databases/services/mongo-aggregation.backend.service.ts +762 -0
  1448. package/src/databases/services/mongodb.service.ts +736 -0
  1449. package/src/databases/services/postgresql-aggregation.backend.service.ts +794 -0
  1450. package/src/databases/services/postgresql-database.backend.service.ts +288 -0
  1451. package/src/databases/services/postgresql-filter.backend.service.ts +673 -0
  1452. package/src/databases/services/redis.service.ts +531 -0
  1453. package/src/databases/services/zod-to-mongoose-schema-convertor.backend.service.ts +2486 -0
  1454. package/src/databases/services/zod-to-sql-hybrid-schema.planner.ts +312 -0
  1455. package/src/errors/services/__tests__/error-builder.backend.service.test.ts +31 -0
  1456. package/src/errors/services/__tests__/error-handler.backend.service.test.ts +82 -0
  1457. package/src/errors/services/__tests__/mock-error-builder.service.ts +288 -0
  1458. package/src/errors/services/error-builder.backend.service.ts +403 -0
  1459. package/src/errors/services/error-handler.backend.service.ts +236 -0
  1460. package/src/errors/services/rate-limit.backend.service.ts +45 -0
  1461. package/src/external-providers/models/external-providers.backend.schemas.ts +243 -0
  1462. package/src/external-providers/services/__tests__/external-providers-registry.backend.service.test.ts +136 -0
  1463. package/src/external-providers/services/__tests__/feature-bindings.backend.service.test.ts +40 -0
  1464. package/src/external-providers/services/__tests__/mock-external-providers-registry.service.ts +33 -0
  1465. package/src/external-providers/services/__tests__/mock-lazy-provider-registry.service.ts +45 -0
  1466. package/src/external-providers/services/external-api-handler.backend.service.ts +19 -0
  1467. package/src/external-providers/services/external-providers-registry.backend.service.ts +534 -0
  1468. package/src/external-providers/services/feature-bindings.backend.service.ts +422 -0
  1469. package/src/external-providers/services/lazy-provider-registry.backend.service.ts +486 -0
  1470. package/src/features/__tests__/feature-builders.test.ts +152 -0
  1471. package/src/features/controllers/__tests__/features.backend.controller.test.ts +173 -0
  1472. package/src/features/controllers/features.backend.controller.ts +200 -0
  1473. package/src/features/services/__tests__/feature-definition-registry.backend.service.test.ts +152 -0
  1474. package/src/features/services/__tests__/feature-gate.test.ts +484 -0
  1475. package/src/features/services/__tests__/feature-resolution.backend.service.test.ts +203 -0
  1476. package/src/features/services/__tests__/mock-capability-bindings.service.ts +26 -0
  1477. package/src/features/services/__tests__/mock-feature-definition-registry.service.ts +56 -0
  1478. package/src/features/services/__tests__/mock-feature-resolution.service.ts +36 -0
  1479. package/src/features/services/feature-definition-registry.backend.service.ts +537 -0
  1480. package/src/features/services/feature-gate.backend.service.ts +522 -0
  1481. package/src/features/services/feature-resolution.backend.service.ts +652 -0
  1482. package/src/features/testing/feature-test-utils.ts +200 -0
  1483. package/src/files/batches/__tests__/files-cleanup.batch.backend.service.test.ts +186 -0
  1484. package/src/files/batches/files-cleanup.batch.backend.service.ts +259 -0
  1485. package/src/files/constraints/file-analyzers.types.ts +85 -0
  1486. package/src/files/constraints/file-constraint-resolver-chain.backend.service.ts +99 -0
  1487. package/src/files/constraints/file-constraint.types.ts +104 -0
  1488. package/src/files/constraints/file-validation.backend.service.ts +359 -0
  1489. package/src/files/constraints/resource-field-constraint-resolver.backend.service.ts +138 -0
  1490. package/src/files/controllers/__tests__/file.controller.behavior.test.ts +655 -0
  1491. package/src/files/controllers/file.controller.ts +1030 -0
  1492. package/src/files/handlers/__tests__/resource-file-upload-handler.backend.service.test.ts +392 -0
  1493. package/src/files/handlers/resource-file-upload-handler.backend.service.ts +605 -0
  1494. package/src/files/rag/weaviate-vector-store.backend.service.ts +271 -0
  1495. package/src/files/scanning/clamav-scanner.backend.service.ts +214 -0
  1496. package/src/files/scanning/file-scan.types.ts +17 -0
  1497. package/src/files/scanning/yara-scanner.backend.service.ts +212 -0
  1498. package/src/files/services/__tests__/file-field-detection.backend.service.test.ts +91 -0
  1499. package/src/files/services/__tests__/file-operation-handler.backend.service.test.ts +272 -0
  1500. package/src/files/services/__tests__/file-population.backend.service.test.ts +120 -0
  1501. package/src/files/services/__tests__/file-scanning.backend.service.test.ts +163 -0
  1502. package/src/files/services/__tests__/files.backend.service.test.ts +885 -0
  1503. package/src/files/services/__tests__/mock-file-field-detection.service.ts +43 -0
  1504. package/src/files/services/__tests__/mock-file-operation-handler.service.ts +113 -0
  1505. package/src/files/services/__tests__/mock-file-repository.service.ts +104 -0
  1506. package/src/files/services/file-field-detection.backend.service.ts +156 -0
  1507. package/src/files/services/file-operation-handler.backend.service.ts +861 -0
  1508. package/src/files/services/file-population.backend.service.ts +485 -0
  1509. package/src/files/services/file-rag-indexing.backend.service.ts +229 -0
  1510. package/src/files/services/file-scanning.backend.service.ts +373 -0
  1511. package/src/files/services/file-text-extraction.backend.service.ts +193 -0
  1512. package/src/files/services/files.backend.service.ts +1356 -0
  1513. package/src/files/storage/file-storage-path-resolver.backend.service.ts +289 -0
  1514. package/src/files/storage/file-storage-provider.types.ts +188 -0
  1515. package/src/files/storage/file-storage-router.backend.service.ts +172 -0
  1516. package/src/files/storage/local-directory-storage-provider.backend.service.ts +417 -0
  1517. package/src/files/storage/wildo-managed-storage-provider.backend.service.ts +530 -0
  1518. package/src/files/utils/__tests__/file-field-schema-path.backend.utils.test.ts +44 -0
  1519. package/src/files/utils/__tests__/file-uploader.utils.test.ts +57 -0
  1520. package/src/files/utils/__tests__/file-validation.utils.test.ts +559 -0
  1521. package/src/files/utils/file-field-schema-path.backend.utils.ts +385 -0
  1522. package/src/files/utils/file-upload.utils.ts +146 -0
  1523. package/src/files/utils/file-uploader.utils.ts +65 -0
  1524. package/src/files/utils/file-validation.utils.ts +753 -0
  1525. package/src/flows-actors/agent-catalogs.backend.ts +427 -0
  1526. package/src/flows-actors/controllers/flows-actors.controller.ts +91 -0
  1527. package/src/flows-actors/models/agent-catalogs.backend.definitions.ts +430 -0
  1528. package/src/flows-actors/models/agent-facets.backend.definitions.ts +120 -0
  1529. package/src/flows-actors/models/agents.backend.definitions.ts +4 -0
  1530. package/src/flows-actors/models/core-facets.backend.definitions.ts +348 -0
  1531. package/src/flows-actors/models/flows-actors.backend.definitions.ts +13 -0
  1532. package/src/flows-actors/models/flows-actors.backend.schemas.ts +44 -0
  1533. package/src/flows-actors/services/__tests__/agent-facets-catalogs.test.ts +544 -0
  1534. package/src/flows-actors/services/__tests__/agents.backend.service.cli-runtime.test.ts +234 -0
  1535. package/src/flows-actors/services/actors-system.backend.service.ts +270 -0
  1536. package/src/flows-actors/services/agent-facets.backend.service.ts +350 -0
  1537. package/src/flows-actors/services/agents.backend.service.ts +2730 -0
  1538. package/src/flows-actors/services/context-curation.backend.service.ts +203 -0
  1539. package/src/flows-actors/services/flows-actors-registry.service.ts +374 -0
  1540. package/src/flows-actors/services/flows.backend.services.ts +237 -0
  1541. package/src/flows-actors/services/prompt-compiler.backend.service.ts +734 -0
  1542. package/src/flows-actors/utils/__tests__/cli-runtime-operation-support.backend.utils.test.ts +95 -0
  1543. package/src/flows-actors/utils/cli-runtime-operation-support.backend.utils.ts +87 -0
  1544. package/src/flows-actors/utils/cli-runtime-runner.backend.utils.ts +171 -0
  1545. package/src/flows-actors/utils/flows-actors-frontend-extractor.utils.ts +63 -0
  1546. package/src/flows-actors/utils/prompt-ir-adapters.backend.utils.ts +257 -0
  1547. package/src/guidance/batches/dormancy-detection.batch.backend.service.ts +126 -0
  1548. package/src/guidance/services/__tests__/guidance-trigger-evaluator.backend.service.test.ts +49 -0
  1549. package/src/guidance/services/__tests__/lifecycle-evaluator.backend.service.test.ts +85 -0
  1550. package/src/guidance/services/__tests__/milestone-definition-registry.backend.service.test.ts +211 -0
  1551. package/src/guidance/services/__tests__/milestone-evaluator.backend.service.test.ts +561 -0
  1552. package/src/guidance/services/guidance-trigger-evaluator.backend.service.ts +151 -0
  1553. package/src/guidance/services/lifecycle-custom-implementations.backend.ts +139 -0
  1554. package/src/guidance/services/lifecycle-evaluator.backend.service.ts +908 -0
  1555. package/src/guidance/services/milestone-condition-registry.backend.service.ts +57 -0
  1556. package/src/guidance/services/milestone-definition-registry.backend.service.ts +265 -0
  1557. package/src/guidance/services/milestone-evaluator.backend.service.ts +611 -0
  1558. package/src/i18n/controllers/i18n-controller.backend.service.ts +227 -0
  1559. package/src/i18n/services/i18n.backend.service.ts +88 -0
  1560. package/src/index.ts +286 -0
  1561. package/src/inject/models/container.ts +586 -0
  1562. package/src/inject/models/service-types.ts +488 -0
  1563. package/src/monitoring/analytics/controllers/analytics.backend.controller.ts +114 -0
  1564. package/src/monitoring/analytics/services/value-moment-engine.backend.service.ts +53 -0
  1565. package/src/monitoring/analytics/services/value-moment-handler-registry.backend.service.ts +38 -0
  1566. package/src/monitoring/logger/middleware/logging.middleware.ts +40 -0
  1567. package/src/monitoring/logger/models/logger.backend.schemas.ts +56 -0
  1568. package/src/monitoring/logger/services/__tests__/mock-logger.service.ts +49 -0
  1569. package/src/monitoring/logger/services/logger.service.ts +214 -0
  1570. package/src/monitoring/observability/middleware/metrics.middleware.ts +205 -0
  1571. package/src/monitoring/observability/middleware/telemetry.middleware.ts +188 -0
  1572. package/src/monitoring/observability/middleware/tracing.middleware.ts +265 -0
  1573. package/src/monitoring/observability/models/observability.backend.schemas.ts +96 -0
  1574. package/src/monitoring/observability/services/instrumentations/custom.instrumentations.ts +132 -0
  1575. package/src/monitoring/observability/services/metrics.service.ts +266 -0
  1576. package/src/monitoring/observability/services/telemetry.service.ts +157 -0
  1577. package/src/monitoring/observability/services/tracer.service.ts +334 -0
  1578. package/src/notifications/email/components/email-components.ts +341 -0
  1579. package/src/notifications/email/models/email-context-provider.interface.ts +107 -0
  1580. package/src/notifications/email/models/email-template-definition.ts +74 -0
  1581. package/src/notifications/email/models/email-template.actors-system.backend.definitions.ts +80 -0
  1582. package/src/notifications/email/models/email.backend.scheamas.ts +0 -0
  1583. package/src/notifications/email/services/email-batch-send.batch.backend.service.ts +236 -0
  1584. package/src/notifications/email/services/email-context-provider-registry.backend.service.ts +157 -0
  1585. package/src/notifications/email/services/email-renderer.backend.service.ts +274 -0
  1586. package/src/notifications/email/services/email-template-compiler.backend.service.ts +136 -0
  1587. package/src/notifications/email/services/email-template-generation.backend.service.ts +811 -0
  1588. package/src/notifications/email/services/email-template-registry.backend.service.ts +166 -0
  1589. package/src/notifications/email/services/email-template-sandbox.backend.service.ts +255 -0
  1590. package/src/notifications/email/services/email-template-validator.backend.service.ts +229 -0
  1591. package/src/notifications/email/services/email.backend.service.ts +429 -0
  1592. package/src/notifications/email/utils/color-conversion.utils.ts +142 -0
  1593. package/src/notifications/email/utils/interpolate-email-label.utils.ts +16 -0
  1594. package/src/notifications/email/utils/zod-to-typescript.utils.ts +352 -0
  1595. package/src/notifications/services/__tests__/notifications-dispatcher.operation-semantics.test.ts +773 -0
  1596. package/src/notifications/services/__tests__/notifications-dispatcher.websocket-integration.test.ts +173 -0
  1597. package/src/notifications/services/notification-badge.backend.service.ts +412 -0
  1598. package/src/notifications/services/notifications-dispatcher.backend.service.ts +1696 -0
  1599. package/src/notifications/sms/services/sms.backend.service.ts +283 -0
  1600. package/src/notifications/webhooks/controllers/webhook-auto-controller.backend.service.ts +220 -0
  1601. package/src/notifications/webhooks/services/polymorphic-lookup.backend.service.ts +131 -0
  1602. package/src/notifications/webhooks/services/webhook-handler.backend.service.ts +481 -0
  1603. package/src/organizations/services/__tests__/org-creation-on-registration.backend.utils.test.ts +193 -0
  1604. package/src/organizations/services/__tests__/org-member-roles-validation.backend.utils.test.ts +101 -0
  1605. package/src/organizations/services/__tests__/organization-custom-implementation.backend.service.test.ts +113 -0
  1606. package/src/organizations/services/__tests__/scim-provisioning-gate.backend.utils.test.ts +94 -0
  1607. package/src/organizations/services/__tests__/user-org-type-grant.backend.utils.test.ts +164 -0
  1608. package/src/organizations/services/__tests__/user-type-revocation-on-org-leave.backend.utils.test.ts +161 -0
  1609. package/src/organizations/services/org-creation-on-registration.backend.utils.ts +119 -0
  1610. package/src/organizations/services/org-member-roles-validation.backend.utils.ts +51 -0
  1611. package/src/organizations/services/organization-custom-implementation.backend.service.ts +106 -0
  1612. package/src/organizations/services/organization-member-custom-implementation.backend.service.ts +150 -0
  1613. package/src/organizations/services/scim-provisioning-gate.backend.utils.ts +34 -0
  1614. package/src/organizations/services/user-org-type-grant.backend.utils.ts +49 -0
  1615. package/src/organizations/services/user-type-revocation-on-org-leave.backend.utils.ts +102 -0
  1616. package/src/queue/adapters/rabbitmq-adapter.backend.service.ts +494 -0
  1617. package/src/queue/apps-crontabs-manager.backend.service.ts +258 -0
  1618. package/src/queue/cron-job-sync.backend.service.ts +184 -0
  1619. package/src/queue/domain-queue-consumer.backend.service.ts +333 -0
  1620. package/src/queue/job-completion-registry.backend.service.ts +342 -0
  1621. package/src/queue/job-consumer.backend.service.ts +646 -0
  1622. package/src/queue/job-executor.backend.service.ts +315 -0
  1623. package/src/queue/job-payload-storage.backend.service.ts +297 -0
  1624. package/src/queue/job-status-tracking.backend.service.ts +376 -0
  1625. package/src/queue/queue-monitoring.backend.service.ts +333 -0
  1626. package/src/queue/queue-worker-initializer.backend.service.ts +179 -0
  1627. package/src/queue/queue.backend.service.ts +530 -0
  1628. package/src/queue/scheduled-message-verifier.backend.service.ts +228 -0
  1629. package/src/queue/worker-shutdown-manager.backend.service.ts +298 -0
  1630. package/src/requests/models/api-routes.backend.defintions.ts +45 -0
  1631. package/src/requests/models/requests.backend.schemas.ts +73 -0
  1632. package/src/requests/service/__tests__/websocket.service.auth-refresh.test.ts +361 -0
  1633. package/src/requests/service/__tests__/websocket.service.resource-room-validation.test.ts +234 -0
  1634. package/src/requests/service/__tests__/websocket.service.variant-authorization.test.ts +94 -0
  1635. package/src/requests/service/platform-mutualized-handler.backend.service.ts +19 -0
  1636. package/src/requests/service/platform-requests.backend.utils.ts +54 -0
  1637. package/src/requests/service/remote-client-base.backend.service.ts +485 -0
  1638. package/src/requests/service/serverless-services-handler.backend.service.ts +19 -0
  1639. package/src/requests/service/websocket.service.ts +2844 -0
  1640. package/src/resources/models/custom-service-implementations.backend.definition.ts +22 -0
  1641. package/src/resources/models/index.ts +7 -0
  1642. package/src/resources/models/resources-operations.backend.definitions.ts +9 -0
  1643. package/src/resources/models/resources-relationships.backend.definitions.ts +30 -0
  1644. package/src/resources/models/resources-types.backend.schemas.ts +14 -0
  1645. package/src/resources/models/resources.backend.schemas.ts +6 -0
  1646. package/src/resources/models/virtual-fields.backend.types.ts +132 -0
  1647. package/src/resources/services/__tests__/mock-resources-registry.service.ts +69 -0
  1648. package/src/resources/services/__tests__/resource-id.backend.service.test.ts +69 -0
  1649. package/src/resources/services/resource-context.backend.service.ts +1107 -0
  1650. package/src/resources/services/resource-id.backend.service.ts +280 -0
  1651. package/src/resources/services/resource-population.backend.service.ts +761 -0
  1652. package/src/resources/services/resources-registry.backend.service.ts +1126 -0
  1653. package/src/resources/services/virtual-fields.backend.service.ts +303 -0
  1654. package/src/runtime/__tests__/execution-context-creator.backend.service.test.ts +469 -0
  1655. package/src/runtime/controllers/health-controller.backend.service.ts +297 -0
  1656. package/src/runtime/domain-module.backend.definitions.test.ts +83 -0
  1657. package/src/runtime/domain-module.backend.definitions.ts +161 -0
  1658. package/src/runtime/models/execution-context.backend.schemas.ts +456 -0
  1659. package/src/runtime/models/runtime.backend.schemas.ts +82 -0
  1660. package/src/runtime/services/execution-context-creator.backend.service.ts +2102 -0
  1661. package/src/runtime/services/execution-context-handler.backend.service.ts +224 -0
  1662. package/src/runtime/services/health-readiness-contributor.backend.interface.ts +11 -0
  1663. package/src/runtime/services/http-server.backend.service.ts +870 -0
  1664. package/src/runtime/services/start-application.backend.service.ts +1109 -0
  1665. package/src/runtime/testing/execution-context-test-fixtures.ts +14 -0
  1666. package/src/runtime/testing/mock-execution-context-creator.service.ts +46 -0
  1667. package/src/runtime/utils/scan-default-exports.backend.utils.ts +247 -0
  1668. package/src/security/authentications/__tests__/auth-registration.test.ts +338 -0
  1669. package/src/security/authentications/__tests__/authentication-controller.test.ts +31 -0
  1670. package/src/security/authentications/__tests__/authentication-orchestrator.test.ts +27 -0
  1671. package/src/security/authentications/__tests__/saml-assertion-validator.test.ts +631 -0
  1672. package/src/security/authentications/__tests__/saml-authentication.test.ts +126 -0
  1673. package/src/security/authentications/__tests__/saml-integration-test-helpers.test.ts +234 -0
  1674. package/src/security/authentications/__tests__/saml-metadata.test.ts +185 -0
  1675. package/src/security/authentications/__tests__/saml-replay-guard.test.ts +99 -0
  1676. package/src/security/authentications/__tests__/saml-sso-flow.integration.test.ts +355 -0
  1677. package/src/security/authentications/__tests__/saml-test-fixtures.test.ts +433 -0
  1678. package/src/security/authentications/__tests__/saml-test-parser.test.ts +117 -0
  1679. package/src/security/authentications/__tests__/sso-connection-custom-ops.integration.test.ts +236 -0
  1680. package/src/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.ts +71 -0
  1681. package/src/security/authentications/controllers/auth-method-management-controller.backend.service.ts +205 -0
  1682. package/src/security/authentications/controllers/authentication-controller.backend.service.ts +2712 -0
  1683. package/src/security/authentications/models/auth-constants.backend.ts +141 -0
  1684. package/src/security/authentications/models/authentications.backend.schemas.ts +106 -0
  1685. package/src/security/authentications/models/jwt.backend.schemas.ts +107 -0
  1686. package/src/security/authentications/models/oauth2-connection.backend.schemas.ts +196 -0
  1687. package/src/security/authentications/models/saml-authentication.backend.schemas.ts +124 -0
  1688. package/src/security/authentications/models/sso-connection.backend.schemas.ts +104 -0
  1689. package/src/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.ts +73 -0
  1690. package/src/security/authentications/services/__tests__/mock-auth-token-issuer.service.ts +46 -0
  1691. package/src/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.ts +40 -0
  1692. package/src/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.ts +67 -0
  1693. package/src/security/authentications/services/admin-config/auth-organization-configuration.service.ts +424 -0
  1694. package/src/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.ts +244 -0
  1695. package/src/security/authentications/services/admin-config/domain-verification.backend.service.ts +215 -0
  1696. package/src/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.ts +509 -0
  1697. package/src/security/authentications/services/admin-config/oidc-discovery.backend.service.ts +250 -0
  1698. package/src/security/authentications/services/anonymous-session.backend.service.ts +442 -0
  1699. package/src/security/authentications/services/auth-credential-verifier.backend.service.ts +147 -0
  1700. package/src/security/authentications/services/auth-execution-context-factory.backend.service.ts +132 -0
  1701. package/src/security/authentications/services/auth-methods/auth-method-management.backend.service.ts +532 -0
  1702. package/src/security/authentications/services/auth-methods/auth-mfa.backend.service.ts +141 -0
  1703. package/src/security/authentications/services/auth-methods/auth-password-reset.backend.service.ts +215 -0
  1704. package/src/security/authentications/services/auth-methods/auth-phone-verification.backend.service.ts +136 -0
  1705. package/src/security/authentications/services/auth-methods/auth-registration.backend.service.ts +994 -0
  1706. package/src/security/authentications/services/auth-methods/oauth2-authentication.backend.service.ts +1210 -0
  1707. package/src/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.ts +903 -0
  1708. package/src/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.ts +791 -0
  1709. package/src/security/authentications/services/auth-methods/saml-authentication.backend.service.ts +1727 -0
  1710. package/src/security/authentications/services/auth-methods/saml-metadata.backend.service.ts +432 -0
  1711. package/src/security/authentications/services/auth-methods/saml-replay-guard.backend.service.ts +90 -0
  1712. package/src/security/authentications/services/auth-methods/webauthn.backend.service.ts +393 -0
  1713. package/src/security/authentications/services/auth-session-store.backend.service.ts +211 -0
  1714. package/src/security/authentications/services/auth-token-issuer.backend.service.ts +496 -0
  1715. package/src/security/authentications/services/authentication-orchestrator.backend.service.ts +3156 -0
  1716. package/src/security/authentications/services/custom-impls/auth-custom-implementations.backend.ts +88 -0
  1717. package/src/security/authentications/services/custom-impls/auth-policy.custom-impl.backend.service.ts +54 -0
  1718. package/src/security/authentications/services/custom-impls/scim-provisioning-config.custom-impl.backend.service.ts +167 -0
  1719. package/src/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.ts +136 -0
  1720. package/src/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.ts +123 -0
  1721. package/src/security/authentications/services/custom-impls/siem-export-config.custom-impl.backend.service.ts +161 -0
  1722. package/src/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.ts +185 -0
  1723. package/src/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.ts +792 -0
  1724. package/src/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.ts +62 -0
  1725. package/src/security/authentications/services/utils/auth-controller.utils.ts +51 -0
  1726. package/src/security/authentications/services/utils/auth-credential-ops.backend.service.ts +202 -0
  1727. package/src/security/authentications/services/utils/auth-response-helper.backend.service.ts +38 -0
  1728. package/src/security/authentications/services/utils/auth-user-lookup.backend.service.ts +128 -0
  1729. package/src/security/authentications/services/utils/saml-java-availability.ts +64 -0
  1730. package/src/security/authorizations/__tests__/authorizations.backend.service.test.ts +82 -0
  1731. package/src/security/authorizations/services/authorizations.backend.service.ts +934 -0
  1732. package/src/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.ts +168 -0
  1733. package/src/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.ts +92 -0
  1734. package/src/security/consumable-tokens/models/consumable-tokens.shared.schemas.ts +86 -0
  1735. package/src/security/consumable-tokens/models/index.ts +3 -0
  1736. package/src/security/consumable-tokens/services/__tests__/mock-consumable-token.service.ts +63 -0
  1737. package/src/security/consumable-tokens/services/consumable-token.backend.service.ts +568 -0
  1738. package/src/security/jwt/services/auth-jwt-guard.backend.service.ts +137 -0
  1739. package/src/security/jwt/services/jwt.backend.service.ts +397 -0
  1740. package/src/security/scim/__tests__/scim-filter-parser.test.ts +121 -0
  1741. package/src/security/scim/controllers/scim.backend.controller.ts +1066 -0
  1742. package/src/security/scim/models/scim-protocol.backend.schemas.ts +258 -0
  1743. package/src/security/scim/utils/scim-filter-parser.ts +289 -0
  1744. package/src/security/scim/utils/scim-response-formatter.ts +122 -0
  1745. package/src/testing.ts +30 -0
  1746. package/src/types/xmldom.d.ts +9 -0
  1747. package/src/users/services/user-self-custom-implementations.backend.ts +62 -0
@@ -0,0 +1,2631 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var AuthenticationOrchestratorBackendService_1;
14
+ import 'reflect-metadata';
15
+ import { inject, injectable } from 'inversify';
16
+ import * as crypto from 'crypto';
17
+ import { SAAS_SERVICE_TYPES } from '../../../inject/models/service-types.js';
18
+ import { LoggerService } from '../../../monitoring/logger/services/logger.service.js';
19
+ import { ErrorBuilderBackendService } from '../../../errors/services/error-builder.backend.service.js';
20
+ import { CoreConsumableTokenTypes, ConsumableToken_ConsumptionMode, ErrorCustomMessageReference, ErrorType, isWildoBackendError, UserStatus, } from '@wildo-ai/saas-models';
21
+ import { CoreResourceType } from '@wildo-ai/saas-models';
22
+ import { AuthUtils, AuthIdentificationResponseSchema, AuthMethod, AuthFactorLevel, AuthenticationResponseSchema, AuthenticationSessionSchema, AuthenticationSessionState, AuthNextStep, AuthScopeType, } from '@wildo-ai/saas-models';
23
+ import { AuthSessionPurpose, MfaEnrollmentState } from '@wildo-ai/saas-models';
24
+ import { RegistrationMode, EmailVerificationMode } from '@wildo-ai/saas-models';
25
+ import { DurationUnit } from '@wildo-ai/zod-decorators';
26
+ import { AppConfigurationService } from '../../../config/services/app-configuration.backend.service.js';
27
+ import { AuditLogsBackendService } from '../../../compliance/audit-trails/services/audit-logs.backend.service.js';
28
+ import { createOrgOnRegistration } from '../../../organizations/services/org-creation-on-registration.backend.utils.js';
29
+ import { grantUserTypesOnOrgJoin } from '../../../organizations/services/user-org-type-grant.backend.utils.js';
30
+ // New decomposed services
31
+ import { AuthSessionStoreBackendService } from '../../../security/authentications/services/auth-session-store.backend.service.js';
32
+ import { AuthCredentialVerifierBackendService } from '../../../security/authentications/services/auth-credential-verifier.backend.service.js';
33
+ import { AuthTokenIssuerBackendService } from '../../../security/authentications/services/auth-token-issuer.backend.service.js';
34
+ import { WebAuthnBackendService } from '../../../security/authentications/services/auth-methods/webauthn.backend.service.js';
35
+ import { ConsumableTokenBackendService } from '../../../security/consumable-tokens/services/consumable-token.backend.service.js';
36
+ import { RedisService } from '../../../databases/services/redis.service.js';
37
+ import { RateLimitBackendService } from '../../../errors/services/rate-limit.backend.service.js';
38
+ import { DomainToOrgLookupBackendService } from '../../../security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js';
39
+ import { AuthOrganizationConfigurationService } from '../../../security/authentications/services/admin-config/auth-organization-configuration.service.js';
40
+ import { AUTH_REDIS_KEYS } from '../../../security/authentications/models/auth-constants.backend.js';
41
+ import { OAuth2ConnectionResolverBackendService } from '../../../security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js';
42
+ import { AuthUserLookupBackendService } from '../../../security/authentications/services/utils/auth-user-lookup.backend.service.js';
43
+ import { AuthCredentialOpsBackendService } from '../../../security/authentications/services/utils/auth-credential-ops.backend.service.js';
44
+ /**
45
+ * AuthenticationOrchestratorBackendService
46
+ *
47
+ * Orchestrates the authentication flow: identify → authenticate → tokens.
48
+ *
49
+ * Decomposed from the original AuthenticationBackendService (1900 lines → ~400 lines).
50
+ * Session storage, credential verification, and token issuance are delegated to
51
+ * focused sub-services (AuthSessionStore, AuthCredentialVerifier, AuthTokenIssuer).
52
+ *
53
+ * Public API preserved:
54
+ * - identify(request) → AuthIdentificationResponse
55
+ * - authenticate(request) → AuthenticationResponse
56
+ * - authenticatePassword(request) → AuthenticationResponse
57
+ * - getAuthenticationSessionState(sessionId) → AuthenticationSession | null
58
+ *
59
+ * TRAP 2: The controller calls exactly these methods. Signatures accept EC as the first parameter.
60
+ * TRAP 9: Dependency arrows flow one way: Orchestrator → Services → Infrastructure.
61
+ * TRAP 13: Audit logging stays here (not in sub-services).
62
+ */
63
+ let AuthenticationOrchestratorBackendService = class AuthenticationOrchestratorBackendService {
64
+ static { AuthenticationOrchestratorBackendService_1 = this; }
65
+ logger;
66
+ appConfigService;
67
+ errorBuilder;
68
+ servicesRegistryHandler;
69
+ auditLogsService;
70
+ sessionStore;
71
+ credentialVerifier;
72
+ tokenIssuer;
73
+ consumableTokenService;
74
+ redisService;
75
+ rateLimitService;
76
+ domainToOrgLookup;
77
+ orgConfigService;
78
+ webAuthnService;
79
+ oauth2Resolver;
80
+ userLookup;
81
+ credentialOps;
82
+ /** L11: Default session duration in minutes (absolute TTL). Overridden by userTypes[t].auth.sessionDurationMinutes. */
83
+ static DEFAULT_SESSION_DURATION_MINUTES = 30;
84
+ /** Idle timeout in minutes — session is deleted if lastActivity exceeds this. Must be < SESSION_DURATION_MINUTES. */
85
+ static AUTH_SESSION_IDLE_TIMEOUT_MINUTES = 5;
86
+ /** Default number of MFA methods required (for future MFA support). */
87
+ static DEFAULT_MFA_METHODS_REQUIRED = 1;
88
+ logDebug;
89
+ constructor(logger, appConfigService, errorBuilder, servicesRegistryHandler, auditLogsService, sessionStore, credentialVerifier, tokenIssuer, consumableTokenService, redisService, rateLimitService, domainToOrgLookup, orgConfigService, webAuthnService, oauth2Resolver, userLookup, credentialOps) {
90
+ this.logger = logger;
91
+ this.appConfigService = appConfigService;
92
+ this.errorBuilder = errorBuilder;
93
+ this.servicesRegistryHandler = servicesRegistryHandler;
94
+ this.auditLogsService = auditLogsService;
95
+ this.sessionStore = sessionStore;
96
+ this.credentialVerifier = credentialVerifier;
97
+ this.tokenIssuer = tokenIssuer;
98
+ this.consumableTokenService = consumableTokenService;
99
+ this.redisService = redisService;
100
+ this.rateLimitService = rateLimitService;
101
+ this.domainToOrgLookup = domainToOrgLookup;
102
+ this.orgConfigService = orgConfigService;
103
+ this.webAuthnService = webAuthnService;
104
+ this.oauth2Resolver = oauth2Resolver;
105
+ this.userLookup = userLookup;
106
+ this.credentialOps = credentialOps;
107
+ this.logDebug = this.logger.debugByType('AuthenticationOrchestrator');
108
+ this.logger.setDebugTypeLogging('AuthenticationOrchestrator', false);
109
+ }
110
+ /**
111
+ * Global lockout policy for email-scoped rate limiting (pre-authentication, user type unknown).
112
+ * Computed as the most-restrictive lockout across all configured user types:
113
+ * lowest maxLoginAttempts, longest lockoutDuration, progressive if any type uses it.
114
+ */
115
+ get lockoutPolicy() {
116
+ const userTypes = this.appConfigService.config.userTypes;
117
+ const policies = Object.values(userTypes).map(ut => ut.auth.lockoutPolicy);
118
+ if (policies.length === 0) {
119
+ return { maxLoginAttempts: 5, lockoutDurationMinutes: 30, progressiveLockout: false, maxProgressiveLockoutHours: 24 };
120
+ }
121
+ return {
122
+ maxLoginAttempts: Math.min(...policies.map(p => p.maxLoginAttempts)),
123
+ lockoutDurationMinutes: Math.max(...policies.map(p => p.lockoutDurationMinutes)),
124
+ progressiveLockout: policies.some(p => p.progressiveLockout),
125
+ maxProgressiveLockoutHours: Math.max(...policies.map(p => p.maxProgressiveLockoutHours)),
126
+ };
127
+ }
128
+ get otpConfig() {
129
+ return this.appConfigService.config.auth.otpOperational;
130
+ }
131
+ get magicLinkConfig() {
132
+ return this.appConfigService.config.auth.magicLinkOperational;
133
+ }
134
+ get totpConfig() {
135
+ return this.appConfigService.config.auth.totpOperational;
136
+ }
137
+ // ===============================
138
+ // PER-USER-TYPE AUTH CONFIG RESOLUTION (W3.1)
139
+ // ===============================
140
+ /**
141
+ * Resolve the effective auth policy for a given user type.
142
+ * If the user type exists in config.userTypes, returns its auth policy.
143
+ * Falls back to FALLBACK_AUTH_POLICY when no user type is configured.
144
+ */
145
+ _resolveAuthPolicy(activeUserType) {
146
+ if (activeUserType) {
147
+ const policy = this.appConfigService.getUserTypeAuthPolicy(activeUserType);
148
+ if (policy)
149
+ return policy;
150
+ }
151
+ return AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
152
+ }
153
+ /**
154
+ * W6.8: Safe default auth policy when no user type is resolved.
155
+ * All values are restrictive-safe. Applications MUST configure userTypes for full control.
156
+ */
157
+ static FALLBACK_AUTH_POLICY = {
158
+ authMethodsEnabled: { [AuthMethod.PASSWORD]: true },
159
+ mfaPolicy: {
160
+ requireMFA: false,
161
+ requireStrongMFA: false,
162
+ enrollmentGracePeriodDays: 0,
163
+ passkeyExemptFromMFA: true,
164
+ },
165
+ registration: {
166
+ mode: RegistrationMode.OPEN,
167
+ allowedMethods: [AuthMethod.PASSWORD],
168
+ requirePasswordOnRegister: true,
169
+ emailVerification: EmailVerificationMode.REQUIRED_BEFORE_ACCESS,
170
+ blockForSSODomains: false,
171
+ },
172
+ passwordPolicy: {
173
+ minLength: 8,
174
+ maxLength: 128,
175
+ requireUppercase: true,
176
+ requireLowercase: true,
177
+ requireNumbers: true,
178
+ requireSpecialChars: false,
179
+ expiryDays: 0,
180
+ },
181
+ sessionDurationMinutes: AuthenticationOrchestratorBackendService_1.DEFAULT_SESSION_DURATION_MINUTES,
182
+ lockoutPolicy: {
183
+ maxLoginAttempts: 5,
184
+ lockoutDurationMinutes: 30,
185
+ progressiveLockout: false,
186
+ maxProgressiveLockoutHours: 24,
187
+ },
188
+ autoLinkByEmail: true,
189
+ methodManagement: {
190
+ allowUserMethodRemoval: true,
191
+ requireReauthForMethodChanges: false,
192
+ },
193
+ };
194
+ /**
195
+ * AUTH-14: Resolve auth policy with org override merging for a known user.
196
+ * Use this instead of _resolveAuthPolicy when userId is available.
197
+ * Falls back to raw user-type policy if org resolution fails.
198
+ */
199
+ async _resolveAuthPolicyWithOrgOverrides(ec, activeUserType, userId) {
200
+ if (!activeUserType)
201
+ return AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
202
+ const effective = await this.userLookup.resolveEffectiveAuthPolicy(ec, userId, activeUserType);
203
+ return effective ?? AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
204
+ }
205
+ /**
206
+ * W6.8: Check if an auth method is enabled in ANY configured user type.
207
+ * Used for pre-identification guards (sendMagicLink, sendSMSOTP) where
208
+ * the user type is not yet known.
209
+ */
210
+ _isMethodEnabledGlobally(method) {
211
+ const userTypes = this.appConfigService.config.userTypes ?? {};
212
+ for (const [, typeDef] of Object.entries(userTypes)) {
213
+ if (typeDef?.auth?.authMethodsEnabled?.[method])
214
+ return true;
215
+ }
216
+ return false;
217
+ }
218
+ /**
219
+ * Resolve auth policy from a session's activeUserType. Convenience wrapper.
220
+ */
221
+ _resolveAuthPolicyFromSession(session) {
222
+ return this._resolveAuthPolicy(session.activeUserType);
223
+ }
224
+ _assertFrontendServiceAuthAllowed(frontendServiceName, userType) {
225
+ if (!frontendServiceName || !userType) {
226
+ return;
227
+ }
228
+ const userManagement = this.appConfigService.getFrontendServiceUserManagementEntry(frontendServiceName, userType);
229
+ if (!userManagement?.auth) {
230
+ throw this.errorBuilder.buildError(ErrorType.AUTHORIZATION, undefined, {
231
+ customMessageReference: ErrorCustomMessageReference.AUTHORIZATION,
232
+ context: {
233
+ message: `Authentication is disabled for frontend service "${frontendServiceName}" and user type "${userType}"`,
234
+ frontendServiceName,
235
+ activeUserType: userType,
236
+ },
237
+ });
238
+ }
239
+ }
240
+ // ===============================
241
+ // SESSION HELPERS (delegate to AuthSessionStore)
242
+ // ===============================
243
+ _getSessionTtlSeconds(activeUserType) {
244
+ const policy = this._resolveAuthPolicy(activeUserType);
245
+ return policy.sessionDurationMinutes * 60;
246
+ }
247
+ /**
248
+ * Create a new authentication session in the store.
249
+ */
250
+ /** W4: Registration sessions get longer TTL (24h) to match email verification token expiry. */
251
+ static REGISTRATION_SESSION_TTL_SECONDS = 24 * 60 * 60;
252
+ async createSession(sessionId, initialState = AuthenticationSessionState.CREATED, options = {}) {
253
+ const authPolicy = this._resolveAuthPolicy(options.activeUserType);
254
+ const isRegistrationFlow = options.purpose === AuthSessionPurpose.REGISTRATION || options.purpose === AuthSessionPurpose.INVITATION;
255
+ const ttlSeconds = isRegistrationFlow
256
+ ? AuthenticationOrchestratorBackendService_1.REGISTRATION_SESSION_TTL_SECONDS
257
+ : authPolicy.sessionDurationMinutes * 60;
258
+ const now = new Date();
259
+ const expiresAt = new Date(now.getTime() + ttlSeconds * 1000);
260
+ const session = {
261
+ sessionId,
262
+ state: initialState,
263
+ activeUserType: options.activeUserType,
264
+ purpose: options.purpose ?? AuthSessionPurpose.LOGIN,
265
+ email: options.email,
266
+ userId: options.userId,
267
+ createdAt: now,
268
+ expiresAt,
269
+ lastActivity: now,
270
+ completedFactors: [],
271
+ availableFirstFactorMethods: [],
272
+ availableSecondFactorMethods: [],
273
+ availableEnrollmentMethods: [],
274
+ enrolledSecondFactorMethods: [],
275
+ usableSecondFactorMethods: [],
276
+ requiresMFA: false,
277
+ requireStrongMFA: false,
278
+ mfaMethodsRequired: AuthenticationOrchestratorBackendService_1.DEFAULT_MFA_METHODS_REQUIRED,
279
+ attempts: 0,
280
+ maxAttempts: authPolicy.lockoutPolicy.maxLoginAttempts,
281
+ requestedIntegrations: [],
282
+ deviceInfo: options.deviceInfo,
283
+ pendingOrgType: options.pendingOrgType,
284
+ version: 0,
285
+ };
286
+ await this.sessionStore.set(sessionId, session, ttlSeconds);
287
+ this.logDebug(`Created new authentication session: ${sessionId}`, { purpose: session.purpose });
288
+ return session;
289
+ }
290
+ /**
291
+ * Get and validate a session. Returns null if not found, expired, or idle-timed-out.
292
+ */
293
+ async getSession(sessionId) {
294
+ const session = await this.sessionStore.get(sessionId);
295
+ if (!session) {
296
+ return null;
297
+ }
298
+ // Check expiry (Redis TTL handles this too, but defensive check)
299
+ if (session.expiresAt < new Date()) {
300
+ await this.sessionStore.delete(sessionId);
301
+ this.logDebug(`Session expired and removed: ${sessionId}`);
302
+ return null;
303
+ }
304
+ // M15 fix: Idle timeout — delete session if lastActivity is stale
305
+ if (session.lastActivity) {
306
+ const idleLimitMs = AuthenticationOrchestratorBackendService_1.AUTH_SESSION_IDLE_TIMEOUT_MINUTES * 60 * 1000;
307
+ const idleDuration = Date.now() - session.lastActivity.getTime();
308
+ if (idleDuration > idleLimitMs) {
309
+ await this.sessionStore.delete(sessionId);
310
+ this.logDebug(`Session idle-timed-out and removed: ${sessionId}`, {
311
+ idleMinutes: Math.round(idleDuration / 60000),
312
+ limitMinutes: AuthenticationOrchestratorBackendService_1.AUTH_SESSION_IDLE_TIMEOUT_MINUTES,
313
+ });
314
+ return null;
315
+ }
316
+ }
317
+ return session;
318
+ }
319
+ /** Maximum retries for atomic session updates before falling back to non-atomic write. */
320
+ static ATOMIC_UPDATE_MAX_RETRIES = 3;
321
+ /**
322
+ * Update a session in the store using atomic compare-and-swap (M1 fix).
323
+ *
324
+ * Uses the session `version` field for optimistic concurrency control.
325
+ * On version mismatch (concurrent writer), re-reads and retries up to MAX_RETRIES.
326
+ * Falls back to a non-atomic write only if all retries are exhausted.
327
+ */
328
+ async updateSession(sessionId, updates) {
329
+ for (let attempt = 0; attempt <= AuthenticationOrchestratorBackendService_1.ATOMIC_UPDATE_MAX_RETRIES; attempt++) {
330
+ const session = await this.getSession(sessionId);
331
+ if (!session) {
332
+ return null;
333
+ }
334
+ const expectedVersion = session.version ?? 0;
335
+ const updatedSession = AuthenticationSessionSchema.parse({
336
+ ...session,
337
+ ...updates,
338
+ lastActivity: new Date(),
339
+ version: expectedVersion + 1,
340
+ });
341
+ // Try atomic update via Lua compare-and-swap
342
+ const result = await this.sessionStore.atomicUpdate(sessionId, updatedSession, expectedVersion, this._getSessionTtlSeconds(updatedSession.activeUserType));
343
+ if (result) {
344
+ this.logDebug(`Updated authentication session: ${sessionId}`, {
345
+ state: updatedSession.state,
346
+ version: updatedSession.version,
347
+ });
348
+ return result;
349
+ }
350
+ // Version mismatch — another writer beat us. Retry with fresh read.
351
+ this.logDebug(`Session update version conflict (attempt ${attempt + 1}): ${sessionId}`);
352
+ }
353
+ // All retries exhausted — return null to signal failure rather than falling back
354
+ // to a non-atomic write that could silently overwrite a concurrent writer's update.
355
+ this.logger.warn?.('Session atomic update retries exhausted, returning failure', { sessionId });
356
+ return null;
357
+ }
358
+ /**
359
+ * Remove a session from the store.
360
+ */
361
+ async removeSession(sessionId) {
362
+ await this.sessionStore.delete(sessionId);
363
+ this.logDebug(`Removed authentication session: ${sessionId}`);
364
+ }
365
+ /**
366
+ * Increment session attempts and check for lockout.
367
+ * W3.1: Uses per-user-type lockout policy from session's activeUserType.
368
+ */
369
+ async incrementSessionAttempts(ec, sessionId) {
370
+ const session = await this.getSession(sessionId);
371
+ if (!session) {
372
+ return { session: null, locked: false };
373
+ }
374
+ const sessionPolicy = this._resolveAuthPolicyFromSession(session);
375
+ const sessionLockout = sessionPolicy.lockoutPolicy;
376
+ const attempts = session.attempts + 1;
377
+ const locked = attempts >= session.maxAttempts;
378
+ let effectiveLockoutMinutes = sessionLockout.lockoutDurationMinutes;
379
+ // W2.3: Progressive lockout — double duration for each consecutive lockout, capped at maxProgressiveLockoutHours
380
+ if (locked && sessionLockout.progressiveLockout && session.userId) {
381
+ try {
382
+ const { previousCount } = await this.credentialOps.incrementLockout(ec, session.userId);
383
+ const maxMinutes = (sessionLockout.maxProgressiveLockoutHours ?? 24) * 60;
384
+ effectiveLockoutMinutes = Math.min(sessionLockout.lockoutDurationMinutes * Math.pow(2, previousCount), maxMinutes);
385
+ }
386
+ catch {
387
+ // Fallback to base duration if credential lookup fails
388
+ }
389
+ }
390
+ const updates = {
391
+ attempts,
392
+ state: locked ? AuthenticationSessionState.LOCKED : session.state,
393
+ lockoutUntil: locked
394
+ ? new Date(Date.now() + effectiveLockoutMinutes * 60 * 1000)
395
+ : undefined,
396
+ };
397
+ const updatedSession = await this.updateSession(sessionId, updates);
398
+ if (locked && updatedSession?.userId) {
399
+ const deviceInfo = updatedSession.deviceInfo;
400
+ await this.auditLogsService.logUserAccountLocked({
401
+ userId: updatedSession.userId,
402
+ email: updatedSession.email || 'unknown',
403
+ authMethod: AuthMethod.PASSWORD,
404
+ lockoutDuration: effectiveLockoutMinutes,
405
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
406
+ userAgent: deviceInfo?.userAgent || 'unknown',
407
+ sessionId,
408
+ });
409
+ }
410
+ return { session: updatedSession, locked };
411
+ }
412
+ // ===============================
413
+ // GLOBAL LOCKOUT (C1 fix — per-email, Redis-based)
414
+ // ===============================
415
+ /**
416
+ * Get the current global attempt count for an email address.
417
+ */
418
+ async _getGlobalAttempts(email) {
419
+ const key = `${AUTH_REDIS_KEYS.GLOBAL_LOCKOUT}${email.toLowerCase()}`;
420
+ return this.redisService.getRateLimitCount(key);
421
+ }
422
+ /**
423
+ * Increment the global attempt counter for an email.
424
+ * Returns the new count and whether the account is locked.
425
+ * The key auto-expires after the lockout duration.
426
+ */
427
+ async _incrementGlobalAttempts(email) {
428
+ const key = `${AUTH_REDIS_KEYS.GLOBAL_LOCKOUT}${email.toLowerCase()}`;
429
+ const count = await this.redisService.incrementRateLimit(key, this.lockoutPolicy.lockoutDurationMinutes * 60);
430
+ return { count, locked: count >= this.lockoutPolicy.maxLoginAttempts };
431
+ }
432
+ /**
433
+ * Reset the global attempt counter on successful authentication.
434
+ */
435
+ async _resetGlobalAttempts(email) {
436
+ const key = `${AUTH_REDIS_KEYS.GLOBAL_LOCKOUT}${email.toLowerCase()}`;
437
+ await this.redisService.del(`rate_limit:${key}`);
438
+ }
439
+ /**
440
+ * Check if an email is globally locked out. If so, throw an error.
441
+ */
442
+ async _checkGlobalLockout(email) {
443
+ const attempts = await this._getGlobalAttempts(email);
444
+ if (attempts >= this.lockoutPolicy.maxLoginAttempts) {
445
+ this.logDebug('Global lockout active', { email, attempts, max: this.lockoutPolicy.maxLoginAttempts });
446
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
447
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_ACCOUNT_LOCKED,
448
+ context: {
449
+ message: 'Account temporarily locked due to too many failed attempts. Please try again later.',
450
+ lockoutDurationMinutes: this.lockoutPolicy.lockoutDurationMinutes,
451
+ },
452
+ });
453
+ }
454
+ }
455
+ // ===============================
456
+ // INTERNAL HELPERS
457
+ // ===============================
458
+ /**
459
+ * Resolve user for authentication by email.
460
+ */
461
+ async _resolveUserForAuthentication(ec, _session, email, sessionId) {
462
+ this.logDebug(`Resolving user for authentication: sessionId=${sessionId}, email=${email}`);
463
+ const user = await this.userLookup.findAnyUserByEmail(ec, email);
464
+ if (!user) {
465
+ const { locked } = await this.incrementSessionAttempts(ec, sessionId);
466
+ const authResponse = this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.FIRST, { retryAllowed: !locked });
467
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
468
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_USER_NOT_FOUND,
469
+ context: { email, authResponse },
470
+ });
471
+ }
472
+ this._enforceUserStatus(user, sessionId);
473
+ return user;
474
+ }
475
+ _enforceUserStatus(user, sessionId) {
476
+ if (user.status === UserStatus.ACTIVE)
477
+ return;
478
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
479
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_ACCOUNT_LOCKED,
480
+ context: { userStatus: user.status, sessionId },
481
+ });
482
+ }
483
+ /**
484
+ * Update session after successful method authentication.
485
+ * Sets the correct session state based on whether this is a first or second factor completion.
486
+ */
487
+ async _updateSessionAfterSuccessfulAuth(ec, sessionId, userId, authMethod) {
488
+ const session = await this.getSession(sessionId);
489
+ if (!session) {
490
+ throw this.errorBuilder.buildError(ErrorType.NOT_FOUND, undefined, {
491
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SESSION_INVALID,
492
+ context: { sessionId, operation: 'update' },
493
+ });
494
+ }
495
+ const currentFactors = session.completedFactors || [];
496
+ const newCompletedFactors = currentFactors.includes(authMethod)
497
+ ? currentFactors
498
+ : [...currentFactors, authMethod];
499
+ // Determine correct session state: second-factor methods get COMPLETED (not FIRST_FACTOR_COMPLETED)
500
+ const isSecondFactor = AuthUtils.canBeSecondFactor(authMethod) && currentFactors.length > 0;
501
+ // Backend enforcement: reject second-factor methods not in usableSecondFactorMethods.
502
+ // Prevents API-level bypass of requireStrongMFA (e.g. submitting EMAIL_OTP directly).
503
+ if (isSecondFactor && session.usableSecondFactorMethods && session.usableSecondFactorMethods.length > 0) {
504
+ if (!session.usableSecondFactorMethods.includes(authMethod)) {
505
+ throw this.errorBuilder.buildError(ErrorType.AUTHORIZATION, undefined, {
506
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_METHOD_NOT_SUPPORTED,
507
+ context: { method: authMethod, reason: 'METHOD_NOT_IN_USABLE_LIST' },
508
+ });
509
+ }
510
+ }
511
+ const newState = isSecondFactor
512
+ ? AuthenticationSessionState.COMPLETED
513
+ : AuthenticationSessionState.FIRST_FACTOR_COMPLETED;
514
+ // AUTH-14: Use org-override-aware policy when userId is known
515
+ const sessionPolicy = userId
516
+ ? await this._resolveAuthPolicyWithOrgOverrides(ec, session.activeUserType, userId)
517
+ : this._resolveAuthPolicyFromSession(session);
518
+ const sessionUpdate = {
519
+ state: newState,
520
+ completedFactors: newCompletedFactors,
521
+ attempts: 0, // Reset attempts on successful authentication
522
+ userId: userId,
523
+ };
524
+ // After first-factor success, determine if MFA is required for this session.
525
+ // W3.1: Resolve per-user-type auth policy from session's activeUserType.
526
+ if (!isSecondFactor) {
527
+ const mfaCheck = await this._shouldRequireMFA(ec, userId, session.organizationId, authMethod, sessionPolicy);
528
+ if (mfaCheck.required) {
529
+ const hasEnrolledStrongFactor = mfaCheck.enrolledMethods.some(m => m !== AuthMethod.EMAIL_OTP);
530
+ if (!hasEnrolledStrongFactor) {
531
+ // W4.5: MFA required but no strong factor enrolled — route to enrollment
532
+ const secondFactorMethods = AuthUtils.getSecondFactorMethods();
533
+ const availableEnrollment = secondFactorMethods.filter(m => sessionPolicy.authMethodsEnabled?.[m]);
534
+ sessionUpdate.state = AuthenticationSessionState.MFA_ENROLLMENT_REQUIRED;
535
+ sessionUpdate.requiresMFA = true;
536
+ sessionUpdate.requireStrongMFA = sessionPolicy.mfaPolicy?.requireStrongMFA ?? false;
537
+ sessionUpdate.nextStep = AuthNextStep.MFA_ENROLLMENT;
538
+ sessionUpdate.availableEnrollmentMethods = availableEnrollment;
539
+ }
540
+ else {
541
+ const mfaResolution = await this._resolveUsableMfaMethods(mfaCheck.enrolledMethods, sessionPolicy);
542
+ sessionUpdate.requiresMFA = true;
543
+ sessionUpdate.requireStrongMFA = mfaResolution.requireStrongMFA;
544
+ sessionUpdate.availableSecondFactorMethods = mfaResolution.availableMethods;
545
+ sessionUpdate.enrolledSecondFactorMethods = mfaCheck.enrolledMethods;
546
+ sessionUpdate.usableSecondFactorMethods = mfaResolution.usableMethods;
547
+ }
548
+ }
549
+ }
550
+ await this.updateSession(sessionId, sessionUpdate);
551
+ // W2.3: Reset progressive lockout counter on successful auth
552
+ if (sessionPolicy.lockoutPolicy.progressiveLockout && userId) {
553
+ try {
554
+ await this.credentialOps.resetLockout(ec, userId);
555
+ }
556
+ catch {
557
+ // Non-critical: lockout counter reset failure should not block auth
558
+ }
559
+ }
560
+ }
561
+ // ===============================
562
+ // AUTHENTICATION FLOW METHODS
563
+ // ===============================
564
+ async identify(ec, identificationRequest, activeUserType, frontendServiceName) {
565
+ const { email, deviceInfo } = identificationRequest;
566
+ this.logDebug(`User identification request: email=${email}`);
567
+ // H1 fix: Rate limit identify() — 10 req/min per IP, 10 req/min per email
568
+ if (deviceInfo?.ipAddress) {
569
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.IDENTIFY_IP}${deviceInfo.ipAddress}`, 10, 60);
570
+ }
571
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.IDENTIFY_EMAIL}${email.toLowerCase()}`, 10, 60);
572
+ // C1 fix: Check global lockout before creating a session
573
+ await this._checkGlobalLockout(email);
574
+ const user = await this.userLookup.findAnyUserByEmail(ec, email);
575
+ this.logDebug(`User lookup result: userExists=${!!user}, email=${email}`);
576
+ // AUTH-10 FIX: When the user exists in DB, trust their stored userTypes over
577
+ // the client-provided X-Frontend-Service-Name-derived hint. The header is only used as a
578
+ // hint when the user is unknown (pre-registration UI).
579
+ const dbUserTypes = user ? user.userTypes : undefined;
580
+ const resolvedUserType = (dbUserTypes?.length ? dbUserTypes[0] : undefined) ?? activeUserType;
581
+ // ─── Step 14: Domain-based SSO routing ───
582
+ // Extract email domain and check if an org claims it for SSO
583
+ const emailDomain = email.split('@')[1]?.toLowerCase();
584
+ let domainOrgLookup = null;
585
+ if (emailDomain) {
586
+ try {
587
+ domainOrgLookup = await this.domainToOrgLookup.findOrgByDomain(ec, emailDomain);
588
+ }
589
+ catch {
590
+ this.logDebug('Domain-to-org lookup failed (non-fatal)', { emailDomain });
591
+ }
592
+ }
593
+ // Generate cryptographically secure session ID (Section 6.5 fix)
594
+ const sessionId = this.sessionStore.generateSessionId();
595
+ // AUTH-14: Use org-override-aware policy when user is known, raw policy for unknown users
596
+ this._assertFrontendServiceAuthAllowed(frontendServiceName, resolvedUserType);
597
+ const authPolicy = (user && resolvedUserType)
598
+ ? await this._resolveAuthPolicyWithOrgOverrides(ec, resolvedUserType, user._id)
599
+ : this._resolveAuthPolicy(resolvedUserType);
600
+ const firstFactorMethods = await this._getAvailableFirstFactorMethods(ec, domainOrgLookup, authPolicy);
601
+ // G1: Filter PASSKEY from firstFactorMethods if the user has no registered passkeys.
602
+ // Also enrich the PASSKEY method config with the registered passkey count for UI hints.
603
+ if (user) {
604
+ try {
605
+ const userId = user._id;
606
+ const cred = await this.credentialVerifier.resolveCredentials(ec, userId);
607
+ const passkeyCount = cred?.passkeyCredentials?.length ?? 0;
608
+ if (passkeyCount === 0) {
609
+ // Remove PASSKEY from available first factor methods since user has none registered
610
+ const passkeyIdx = firstFactorMethods.findIndex(m => m.method === AuthMethod.PASSKEY);
611
+ if (passkeyIdx >= 0) {
612
+ firstFactorMethods.splice(passkeyIdx, 1);
613
+ }
614
+ }
615
+ else {
616
+ // Enrich PASSKEY config with credential count for UI hinting
617
+ const passkeyMethod = firstFactorMethods.find(m => m.method === AuthMethod.PASSKEY);
618
+ if (passkeyMethod) {
619
+ passkeyMethod.config = {
620
+ ...passkeyMethod.config,
621
+ registeredPasskeyCount: passkeyCount,
622
+ };
623
+ }
624
+ }
625
+ }
626
+ catch {
627
+ // If credential lookup fails, just leave PASSKEY as-is from app config
628
+ }
629
+ }
630
+ // If org requires SSO and disallows password fallback, filter out password
631
+ if (domainOrgLookup?.enforcement?.requireSSO && !domainOrgLookup.enforcement.allowPasswordFallback) {
632
+ const ssoOnlyMethods = firstFactorMethods.filter(m => m.method === AuthMethod.ORG_OPENID_CONNECT || m.method === AuthMethod.ORG_SAML);
633
+ if (ssoOnlyMethods.length > 0) {
634
+ firstFactorMethods.length = 0;
635
+ firstFactorMethods.push(...ssoOnlyMethods);
636
+ }
637
+ }
638
+ // Create session (W3.5: activeUserType stored on session, W3.1: per-user-type TTL + lockout)
639
+ // AUTH-10: Store the DB-resolved user type, not the raw header value
640
+ const session = await this.createSession(sessionId, AuthenticationSessionState.IDENTIFIED, {
641
+ deviceInfo,
642
+ activeUserType: resolvedUserType,
643
+ });
644
+ await this.updateSession(sessionId, {
645
+ email: email.toLowerCase(),
646
+ userExists: !!user,
647
+ userId: user?._id,
648
+ availableFirstFactorMethods: firstFactorMethods,
649
+ organizationId: domainOrgLookup?.scopeId,
650
+ scopeType: domainOrgLookup?.scopeType,
651
+ });
652
+ // Build organization branding if domain matched an org
653
+ const organizationBranding = domainOrgLookup
654
+ ? { organizationName: domainOrgLookup.matchedProvider?.displayName }
655
+ : undefined;
656
+ // H2 fix: Always return userExists: true to prevent email enumeration.
657
+ // If no user was found, still advertise PASSWORD as available method so the
658
+ // response shape is identical regardless of email existence.
659
+ if (!user && firstFactorMethods.length === 0) {
660
+ const passwordMethod = await this._buildAvailableMethodObject(undefined, AuthMethod.PASSWORD, undefined, authPolicy);
661
+ if (passwordMethod) {
662
+ firstFactorMethods.push(passwordMethod);
663
+ }
664
+ }
665
+ // #13g Step 3: Flag ssoMigrationRequired when user's domain matches enforced SSO
666
+ // but they haven't linked yet — signals the frontend to show migration messaging.
667
+ let ssoMigrationRequired = false;
668
+ if (user && domainOrgLookup?.enforcement?.requireSSO && domainOrgLookup.matchedProvider) {
669
+ try {
670
+ const matchedConnectionId = domainOrgLookup.matchedProvider._id || domainOrgLookup.matchedProvider.connectionId;
671
+ if (matchedConnectionId) {
672
+ const existingLink = await this.servicesRegistryHandler.read(CoreResourceType.USER_IDENTITY_LINKS, ec, {
673
+ userId: user._id,
674
+ connectionId: matchedConnectionId,
675
+ });
676
+ if (!existingLink) {
677
+ ssoMigrationRequired = true;
678
+ }
679
+ }
680
+ }
681
+ catch {
682
+ this.logger.warn('SSO migration check failed (non-fatal)', { email });
683
+ }
684
+ }
685
+ const payload = {
686
+ sessionId,
687
+ email: email.toLowerCase(),
688
+ userExists: true, // H2 fix: always true to prevent enumeration
689
+ firstFactorMethods,
690
+ defaultFirstFactorMethod: firstFactorMethods.length > 0 ? firstFactorMethods[0].method : undefined,
691
+ secondFactorMethods: [],
692
+ requiresMFA: false,
693
+ mfaMethodsRequired: AuthenticationOrchestratorBackendService_1.DEFAULT_MFA_METHODS_REQUIRED,
694
+ organizationBranding,
695
+ availableIntegrations: [],
696
+ ssoMigrationRequired,
697
+ };
698
+ return AuthIdentificationResponseSchema.parse(payload);
699
+ }
700
+ // ===============================
701
+ // AVAILABLE METHODS LOGIC
702
+ // ===============================
703
+ async _getAvailableFirstFactorMethods(ec, domainOrgLookup, authPolicy) {
704
+ const policy = authPolicy ?? AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
705
+ const methods = [];
706
+ for (const method of AuthUtils.getFirstFactorMethods()) {
707
+ const availableMethod = await this._buildAvailableMethodObject(ec, method, domainOrgLookup, policy);
708
+ if (availableMethod) {
709
+ methods.push(availableMethod);
710
+ }
711
+ }
712
+ return methods;
713
+ }
714
+ async _getAvailableSecondFactorMethods(authPolicy) {
715
+ const policy = authPolicy ?? AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
716
+ const methods = [];
717
+ for (const method of AuthUtils.getSecondFactorMethods()) {
718
+ const availableMethod = await this._buildAvailableMethodObject(undefined, method, undefined, policy);
719
+ if (availableMethod) {
720
+ methods.push(availableMethod);
721
+ }
722
+ }
723
+ const acceptable = policy.mfaPolicy?.acceptableMFAMethods ?? [];
724
+ if (acceptable.length > 0) {
725
+ return methods.filter(m => acceptable.includes(m.method));
726
+ }
727
+ return methods;
728
+ }
729
+ /**
730
+ * Intersects available methods with enrolled methods, applying requireStrongMFA filtering.
731
+ * Returns { availableMethods, usableMethods, requireStrongMFA } for session population.
732
+ */
733
+ async _resolveUsableMfaMethods(enrolledMethods, authPolicy) {
734
+ const policy = authPolicy ?? AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
735
+ const availableMethods = await this._getAvailableSecondFactorMethods(policy);
736
+ const enrolledSet = new Set(enrolledMethods);
737
+ const requireStrongMFA = !!policy.mfaPolicy?.requireStrongMFA;
738
+ let usableMethods = availableMethods
739
+ .filter(m => enrolledSet.has(m.method))
740
+ .map(m => m.method);
741
+ if (requireStrongMFA) {
742
+ usableMethods = usableMethods.filter(m => m !== AuthMethod.EMAIL_OTP);
743
+ }
744
+ return { availableMethods, usableMethods, requireStrongMFA };
745
+ }
746
+ // ===============================
747
+ // PASSWORD AUTHENTICATION
748
+ // ===============================
749
+ async authenticatePassword(ec, passwordAuthRequest) {
750
+ const { sessionId, password } = passwordAuthRequest;
751
+ this.logDebug('Password authentication started', { sessionId, hasPassword: !!password });
752
+ // Get and validate session
753
+ const session = await this.getSession(sessionId);
754
+ if (!session) {
755
+ this.logDebug('Session not found', { sessionId });
756
+ const authResponse = this._buildIdentificationErrorResponse(sessionId, passwordAuthRequest.factorLevel, false, session);
757
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
758
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SESSION_INVALID,
759
+ context: { sessionId, authResponse },
760
+ });
761
+ }
762
+ // Check session-level lockout
763
+ if (session.state === AuthenticationSessionState.LOCKED) {
764
+ const authResponse = this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.FIRST, {
765
+ retryAllowed: false,
766
+ lockoutUntil: session.lockoutUntil,
767
+ });
768
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
769
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_ACCOUNT_LOCKED,
770
+ context: { sessionId, authResponse },
771
+ });
772
+ }
773
+ // M2 fix: State machine guard — only allow password auth from valid states
774
+ const validPasswordStates = new Set([
775
+ AuthenticationSessionState.IDENTIFIED,
776
+ AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS,
777
+ ]);
778
+ if (!validPasswordStates.has(session.state)) {
779
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
780
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SESSION_INVALID,
781
+ context: { message: 'Invalid session state for password authentication' },
782
+ });
783
+ }
784
+ const { email } = session;
785
+ // H1 fix: Rate limit authenticatePassword() — 5 req/min per email+IP
786
+ const ipAddress = session.deviceInfo?.ipAddress;
787
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.PASSWORD_EMAIL}${email.toLowerCase()}`, 5, 60);
788
+ if (ipAddress) {
789
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.PASSWORD_IP}${ipAddress}`, 10, 60);
790
+ }
791
+ // C1 fix: Check global lockout (per-email, survives session recreation)
792
+ await this._checkGlobalLockout(email);
793
+ // M14 fix: If user's scope requires SSO, check grace login allowance before proceeding.
794
+ if (session.organizationId) {
795
+ await this._checkSSOGraceLoginAllowed(ec, session.scopeType || AuthScopeType.ORGANIZATION, session.organizationId, session.userId || '');
796
+ }
797
+ // Update session state
798
+ await this.updateSession(sessionId, {
799
+ state: AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS,
800
+ currentFactor: AuthFactorLevel.FIRST,
801
+ });
802
+ // Resolve user
803
+ const user = await this._resolveUserForAuthentication(ec, session, email, sessionId);
804
+ const userId = user._id;
805
+ // Resolve credentials via AuthCredentialVerifier
806
+ const cred = await this.credentialVerifier.resolveCredentials(ec, userId);
807
+ if (!cred) {
808
+ const { locked } = await this.incrementSessionAttempts(ec, sessionId);
809
+ const authResponse = this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.FIRST, {
810
+ authMethod: AuthMethod.PASSWORD,
811
+ retryAllowed: !locked,
812
+ });
813
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
814
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_USER_CREDENTIALS_NOT_FOUND,
815
+ context: { email, authResponse },
816
+ });
817
+ }
818
+ // Verify password via AuthCredentialVerifier
819
+ this.logDebug('Verifying password', { sessionId });
820
+ const ok = await this.credentialVerifier.verifyPassword(cred.passwordHash, password);
821
+ this.logDebug('Password verification result', { sessionId, passwordMatch: ok });
822
+ if (!ok) {
823
+ this.logDebug('Password verification failed', { sessionId });
824
+ const { locked } = await this.incrementSessionAttempts(ec, sessionId);
825
+ // C1 fix: Also increment global counter (survives session recreation)
826
+ const { locked: globalLocked } = await this._incrementGlobalAttempts(email);
827
+ const effectivelyLocked = locked || globalLocked;
828
+ // Audit log authentication failure (TRAP 13: audit stays in orchestrator)
829
+ const deviceInfo = session.deviceInfo;
830
+ await this.auditLogsService.logUserLoginFailed({
831
+ email,
832
+ authMethod: AuthMethod.PASSWORD,
833
+ failureReason: 'Invalid credentials',
834
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
835
+ userAgent: deviceInfo?.userAgent || 'unknown',
836
+ attemptsRemaining: session.maxAttempts - session.attempts - 1,
837
+ sessionId,
838
+ });
839
+ const authResponse = this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.FIRST, {
840
+ authMethod: AuthMethod.PASSWORD,
841
+ retryAllowed: !effectivelyLocked,
842
+ });
843
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
844
+ customMessageReference: effectivelyLocked
845
+ ? ErrorCustomMessageReference.AUTHENTICATION_ACCOUNT_LOCKED
846
+ : ErrorCustomMessageReference.AUTHENTICATION_USER_CREDENTIALS_INVALID,
847
+ context: { email, authResponse },
848
+ });
849
+ }
850
+ // Password verified — update session
851
+ this.logDebug('Password authentication successful', { sessionId, userId });
852
+ // C1 fix: Reset global lockout counter on successful authentication
853
+ await this._resetGlobalAttempts(email);
854
+ // M14 fix: Increment SSO grace login counter after successful password auth.
855
+ if (session.organizationId) {
856
+ await this._incrementSSOGraceLogin(ec, session.scopeType || AuthScopeType.ORGANIZATION, session.organizationId, userId);
857
+ }
858
+ await this._updateSessionAfterSuccessfulAuth(ec, sessionId, userId, AuthMethod.PASSWORD);
859
+ const updatedSession = await this.getSession(sessionId);
860
+ return this._buildAuthenticationSuccessMethod(sessionId, AuthFactorLevel.FIRST, AuthMethod.PASSWORD, '', // No access token yet — tokens issued after completion check in authenticate()
861
+ {
862
+ completedFactors: updatedSession?.completedFactors || [],
863
+ requiresMFA: updatedSession?.requiresMFA || false,
864
+ availableMFAMethods: updatedSession?.availableSecondFactorMethods || [],
865
+ mfaMethodsRequired: updatedSession?.mfaMethodsRequired,
866
+ enrolledSecondFactorMethods: updatedSession?.enrolledSecondFactorMethods || [],
867
+ usableSecondFactorMethods: updatedSession?.usableSecondFactorMethods || [],
868
+ nextStep: updatedSession?.nextStep,
869
+ availableEnrollmentMethods: updatedSession?.availableEnrollmentMethods || [],
870
+ });
871
+ }
872
+ // ===============================
873
+ // NATIVE SDK FIRST-FACTOR (S0.9)
874
+ // ===============================
875
+ /**
876
+ * Handle a native SDK token exchange as a completed first factor.
877
+ * Creates a session, checks MFA requirement, and either issues tokens or returns MFA-required.
878
+ * User status is enforced before any token issuance.
879
+ */
880
+ async handleNativeSDKFirstFactor(ec, userId, email, deviceInfo, activeUserType, frontendServiceName) {
881
+ const user = await this.userLookup.findUserById(ec, userId);
882
+ if (!user || user.status !== UserStatus.ACTIVE) {
883
+ this._enforceUserStatus(user || { status: UserStatus.DELETED }, `native-sdk:${userId}`);
884
+ }
885
+ // AUTH-10 FIX: Trust DB user type over header. The user already exists (provisioned above).
886
+ const nativeDbUserTypes = user?.userTypes ?? [];
887
+ const nativeResolvedUserType = nativeDbUserTypes[0] ?? activeUserType;
888
+ // W3.1b: Validate header-claimed type matches DB if both are present
889
+ if (activeUserType && nativeDbUserTypes.length > 0 && !nativeDbUserTypes.includes(activeUserType)) {
890
+ throw this.errorBuilder.buildError(ErrorType.AUTHORIZATION, undefined, {
891
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_USER_TYPE_MISMATCH,
892
+ context: { message: 'Your account is not registered for this application.', activeUserType },
893
+ });
894
+ }
895
+ this._assertFrontendServiceAuthAllowed(frontendServiceName, nativeResolvedUserType);
896
+ // AUTH-14: Use org-override-aware policy for native SDK flows
897
+ const nativeSdkPolicy = await this._resolveAuthPolicyWithOrgOverrides(ec, nativeResolvedUserType, userId);
898
+ const mfaCheck = await this._shouldRequireMFA(ec, userId, undefined, AuthMethod.EXTERNAL_OAUTH2, nativeSdkPolicy);
899
+ if (mfaCheck.required) {
900
+ const hasEnrolledStrongFactor = mfaCheck.enrolledMethods.some(m => m !== AuthMethod.EMAIL_OTP);
901
+ if (hasEnrolledStrongFactor) {
902
+ const sessionId = this.sessionStore.generateSessionId();
903
+ await this.createSession(sessionId, AuthenticationSessionState.FIRST_FACTOR_COMPLETED, { deviceInfo, activeUserType: nativeResolvedUserType });
904
+ const mfaResolution = await this._resolveUsableMfaMethods(mfaCheck.enrolledMethods, nativeSdkPolicy);
905
+ await this.updateSession(sessionId, {
906
+ userId,
907
+ email,
908
+ completedFactors: [AuthMethod.EXTERNAL_OAUTH2],
909
+ requiresMFA: true,
910
+ requireStrongMFA: mfaResolution.requireStrongMFA,
911
+ availableSecondFactorMethods: mfaResolution.availableMethods,
912
+ enrolledSecondFactorMethods: mfaCheck.enrolledMethods,
913
+ usableSecondFactorMethods: mfaResolution.usableMethods,
914
+ });
915
+ return { mfaRequired: true, sessionId, enrolledMethods: mfaCheck.enrolledMethods };
916
+ }
917
+ // W4.5: MFA required but no strong factor enrolled — block token issuance, require enrollment
918
+ const sessionId = this.sessionStore.generateSessionId();
919
+ const secondFactorMethods = AuthUtils.getSecondFactorMethods();
920
+ const availableEnrollment = secondFactorMethods.filter(m => nativeSdkPolicy.authMethodsEnabled?.[m]);
921
+ await this.createSession(sessionId, AuthenticationSessionState.MFA_ENROLLMENT_REQUIRED, { deviceInfo, activeUserType: nativeResolvedUserType });
922
+ await this.updateSession(sessionId, {
923
+ userId,
924
+ email,
925
+ completedFactors: [AuthMethod.EXTERNAL_OAUTH2],
926
+ requiresMFA: true,
927
+ requireStrongMFA: nativeSdkPolicy.mfaPolicy?.requireStrongMFA ?? false,
928
+ nextStep: AuthNextStep.MFA_ENROLLMENT,
929
+ availableEnrollmentMethods: availableEnrollment,
930
+ });
931
+ return { mfaRequired: true, sessionId, enrolledMethods: [] };
932
+ }
933
+ const tokens = await this.tokenIssuer.issueTokensForUser(userId, undefined, {
934
+ lastAuthenticatedAt: Math.floor(Date.now() / 1000),
935
+ });
936
+ return { mfaRequired: false, tokens };
937
+ }
938
+ // ===============================
939
+ // W4: REGISTRATION PIPELINE
940
+ // ===============================
941
+ /**
942
+ * W4.1: Create a registration session after user account creation.
943
+ * Called by `registerUser()` instead of returning a generic success message.
944
+ * The session tracks the registration pipeline state (email verify → MFA enrollment → complete).
945
+ */
946
+ async createRegistrationSession(userId, email, options = {}) {
947
+ const sessionId = this.sessionStore.generateSessionId();
948
+ const session = await this.createSession(sessionId, AuthenticationSessionState.REGISTERED, {
949
+ activeUserType: options.activeUserType,
950
+ purpose: options.purpose ?? AuthSessionPurpose.REGISTRATION,
951
+ email,
952
+ userId,
953
+ deviceInfo: options.deviceInfo,
954
+ pendingOrgType: options.pendingOrgType,
955
+ });
956
+ return session;
957
+ }
958
+ /**
959
+ * W4.1: Process email verification through the registration pipeline.
960
+ * Instead of issuing tokens directly, transitions the session through:
961
+ * EMAIL_VERIFIED → check MFA → MFA_ENROLLMENT_REQUIRED / MFA_ENROLLMENT_GRACE / COMPLETED.
962
+ *
963
+ * Returns the updated session with `nextStep` indicating what the frontend should do.
964
+ */
965
+ async processEmailVerification(ec, userId, email, activeUserType, deviceInfo, purpose) {
966
+ const authPolicy = activeUserType
967
+ ? await this._resolveAuthPolicyWithOrgOverrides(ec, activeUserType, userId)
968
+ : AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
969
+ const sessionId = this.sessionStore.generateSessionId();
970
+ const session = await this.createSession(sessionId, AuthenticationSessionState.EMAIL_VERIFIED, {
971
+ activeUserType,
972
+ purpose: purpose ?? AuthSessionPurpose.REGISTRATION,
973
+ email,
974
+ userId,
975
+ deviceInfo,
976
+ });
977
+ return this._advanceRegistrationPipeline(ec, session, authPolicy, userId);
978
+ }
979
+ /**
980
+ * W4: Advance a registration session through the pipeline after a state transition.
981
+ * Checks MFA requirements, grace period, and onboarding to determine next state.
982
+ */
983
+ async _advanceRegistrationPipeline(ec, session, authPolicy, userId) {
984
+ if (session.state !== AuthenticationSessionState.EMAIL_VERIFIED) {
985
+ return session;
986
+ }
987
+ const mfaResult = await this._shouldRequireMFA(ec, userId, undefined, undefined, authPolicy);
988
+ const cred = await this.credentialOps.readByUserId(ec, userId);
989
+ if (mfaResult.required) {
990
+ const hasEnrolledStrongFactor = mfaResult.enrolledMethods.some(m => m !== AuthMethod.EMAIL_OTP);
991
+ if (hasEnrolledStrongFactor) {
992
+ if (cred && cred.mfaEnrollmentState !== MfaEnrollmentState.ENROLLED) {
993
+ await this.credentialOps.updateById(ec, cred._id, { mfaEnrollmentState: MfaEnrollmentState.ENROLLED });
994
+ }
995
+ return this._completeRegistrationSession(session);
996
+ }
997
+ const gracePeriodDays = authPolicy.mfaPolicy?.enrollmentGracePeriodDays ?? 0;
998
+ if (gracePeriodDays > 0) {
999
+ const graceExpiresAt = new Date();
1000
+ graceExpiresAt.setDate(graceExpiresAt.getDate() + gracePeriodDays);
1001
+ if (cred) {
1002
+ await this.credentialOps.updateById(ec, cred._id, {
1003
+ mfaEnrollmentState: MfaEnrollmentState.GRACE,
1004
+ firstMfaPromptAt: cred.firstMfaPromptAt ?? new Date(),
1005
+ });
1006
+ }
1007
+ const updated = await this.updateSession(session.sessionId, {
1008
+ state: AuthenticationSessionState.MFA_ENROLLMENT_GRACE,
1009
+ nextStep: AuthNextStep.COMPLETE,
1010
+ mfaGraceExpiresAt: graceExpiresAt.toISOString(),
1011
+ requiresMFA: true,
1012
+ });
1013
+ return updated ?? session;
1014
+ }
1015
+ if (cred) {
1016
+ await this.credentialOps.updateById(ec, cred._id, { mfaEnrollmentState: MfaEnrollmentState.PENDING });
1017
+ }
1018
+ const secondFactorMethods = AuthUtils.getSecondFactorMethods();
1019
+ const availableEnrollment = secondFactorMethods.filter(m => authPolicy.authMethodsEnabled?.[m]);
1020
+ const updated = await this.updateSession(session.sessionId, {
1021
+ state: AuthenticationSessionState.MFA_ENROLLMENT_REQUIRED,
1022
+ nextStep: AuthNextStep.MFA_ENROLLMENT,
1023
+ requiresMFA: true,
1024
+ requireStrongMFA: authPolicy.mfaPolicy?.requireStrongMFA ?? false,
1025
+ availableEnrollmentMethods: availableEnrollment,
1026
+ });
1027
+ return updated ?? session;
1028
+ }
1029
+ if (cred && cred.mfaEnrollmentState !== MfaEnrollmentState.NOT_REQUIRED && cred.mfaEnrollmentState !== MfaEnrollmentState.ENROLLED) {
1030
+ await this.credentialOps.updateById(ec, cred._id, { mfaEnrollmentState: MfaEnrollmentState.NOT_REQUIRED });
1031
+ }
1032
+ return this._completeRegistrationSession(session);
1033
+ }
1034
+ /**
1035
+ * W4: Complete a registration session — transition to COMPLETED or ONBOARDING_PENDING state.
1036
+ * W5.7: When pendingOrgType is set, route to ONBOARDING_PENDING instead of COMPLETED.
1037
+ */
1038
+ async _completeRegistrationSession(session) {
1039
+ if (session.pendingOrgType) {
1040
+ const updated = await this.updateSession(session.sessionId, {
1041
+ state: AuthenticationSessionState.ONBOARDING_PENDING,
1042
+ nextStep: AuthNextStep.ONBOARDING,
1043
+ });
1044
+ return updated ?? session;
1045
+ }
1046
+ const updated = await this.updateSession(session.sessionId, {
1047
+ state: AuthenticationSessionState.COMPLETED,
1048
+ nextStep: AuthNextStep.COMPLETE,
1049
+ });
1050
+ return updated ?? session;
1051
+ }
1052
+ /**
1053
+ * W4.3: Complete MFA enrollment during registration pipeline.
1054
+ * Called after the user successfully enrolls an MFA method during registration.
1055
+ * Transitions from MFA_ENROLLMENT_REQUIRED → COMPLETED and issues tokens.
1056
+ */
1057
+ async completeRegistrationMfaEnrollment(ec, sessionId) {
1058
+ const session = await this.getSession(sessionId);
1059
+ if (!session) {
1060
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1061
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SESSION_EXPIRED,
1062
+ context: { message: 'Registration session not found or expired' },
1063
+ });
1064
+ }
1065
+ if (session.state !== AuthenticationSessionState.MFA_ENROLLMENT_REQUIRED &&
1066
+ session.state !== AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS) {
1067
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1068
+ context: { message: `Cannot complete MFA enrollment from state: ${session.state}` },
1069
+ });
1070
+ }
1071
+ // W4.9 SEC FIX: Verify that a strong MFA method was actually enrolled before completing
1072
+ if (!session.userId) {
1073
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1074
+ context: { message: 'Session missing userId — cannot complete MFA enrollment' },
1075
+ });
1076
+ }
1077
+ const cred = await this.credentialOps.readByUserId(ec, session.userId);
1078
+ const enrolledMethods = AuthUtils.getEnrolledSecondFactorMethods(cred);
1079
+ const hasStrongFactor = enrolledMethods.some(m => m !== AuthMethod.EMAIL_OTP);
1080
+ if (!hasStrongFactor) {
1081
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1082
+ context: { message: 'No MFA method has been enrolled yet. Complete MFA setup before continuing.' },
1083
+ });
1084
+ }
1085
+ if (cred && cred.mfaEnrollmentState !== MfaEnrollmentState.ENROLLED) {
1086
+ await this.credentialOps.updateById(ec, cred._id, { mfaEnrollmentState: MfaEnrollmentState.ENROLLED });
1087
+ }
1088
+ return this._completeRegistrationSession(session);
1089
+ }
1090
+ /**
1091
+ * W5.7: Complete org onboarding — create the deferred organization and transition to COMPLETED.
1092
+ * Called by the guidance/onboarding flow after collecting the org name from the user.
1093
+ */
1094
+ async completeOrgOnboarding(ec, sessionId, organizationName) {
1095
+ const session = await this.getSession(sessionId);
1096
+ if (!session) {
1097
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1098
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SESSION_EXPIRED,
1099
+ context: { message: 'Session not found or expired' },
1100
+ });
1101
+ }
1102
+ if (session.state !== AuthenticationSessionState.ONBOARDING_PENDING) {
1103
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1104
+ context: { message: `Cannot complete org onboarding from state: ${session.state}` },
1105
+ });
1106
+ }
1107
+ if (!session.pendingOrgType || !session.userId || !session.email) {
1108
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1109
+ context: { message: 'Session missing pendingOrgType, userId, or email' },
1110
+ });
1111
+ }
1112
+ const trimmedName = organizationName.trim();
1113
+ if (!trimmedName) {
1114
+ throw this.errorBuilder.buildError(ErrorType.VALIDATION, undefined, {
1115
+ context: { message: 'Organization name is required' },
1116
+ });
1117
+ }
1118
+ const orgTypeDef = this.appConfigService.config?.organizationTypes?.[session.pendingOrgType];
1119
+ const policy = orgTypeDef?.creationPolicy;
1120
+ const orgResult = await createOrgOnRegistration(ec, {
1121
+ userId: session.userId,
1122
+ userEmail: session.email,
1123
+ activeUserType: session.activeUserType ?? '',
1124
+ organizationName: trimmedName,
1125
+ organizationTypes: {
1126
+ [session.pendingOrgType]: {
1127
+ creationPolicy: {
1128
+ createOnUserTypeRegistration: [session.activeUserType ?? ''],
1129
+ orgNameSource: 'ask',
1130
+ defaultOwnerRole: policy?.defaultOwnerRole,
1131
+ },
1132
+ },
1133
+ },
1134
+ servicesRegistryHandler: this.servicesRegistryHandler,
1135
+ });
1136
+ if (orgResult.created && orgResult.organizationId) {
1137
+ const organizationTypes = this.appConfigService.config?.organizationTypes;
1138
+ await grantUserTypesOnOrgJoin(ec, {
1139
+ userId: session.userId,
1140
+ organizationId: orgResult.organizationId,
1141
+ organizationTypes,
1142
+ servicesRegistryHandler: this.servicesRegistryHandler,
1143
+ });
1144
+ }
1145
+ const updated = await this.updateSession(session.sessionId, {
1146
+ state: AuthenticationSessionState.COMPLETED,
1147
+ nextStep: AuthNextStep.COMPLETE,
1148
+ pendingOrgType: undefined,
1149
+ organizationId: orgResult.organizationId,
1150
+ });
1151
+ return updated ?? session;
1152
+ }
1153
+ // ===============================
1154
+ // MAIN AUTHENTICATE DISPATCH
1155
+ // ===============================
1156
+ async authenticate(ec, request) {
1157
+ this.logDebug('Main authenticate method called', {
1158
+ sessionId: request.sessionId,
1159
+ method: request.method,
1160
+ factorLevel: request.factorLevel,
1161
+ });
1162
+ let authResponse;
1163
+ // Step 1: Dispatch to the method-specific handler.
1164
+ // Capture discriminant before switch to preserve type information for error fallback.
1165
+ const method = request.method;
1166
+ switch (method) {
1167
+ case AuthMethod.PASSWORD: {
1168
+ const session = await this.getSession(request.sessionId);
1169
+ if (!session) {
1170
+ return this.__buildAuthenticationErrorMethod(request.sessionId, request.factorLevel, { retryAllowed: false });
1171
+ }
1172
+ const email = session.email;
1173
+ if (!email) {
1174
+ return this.__buildAuthenticationErrorMethod(request.sessionId, request.factorLevel, { retryAllowed: true });
1175
+ }
1176
+ try {
1177
+ authResponse = await this.authenticatePassword(ec, request);
1178
+ }
1179
+ catch (error) {
1180
+ throw error;
1181
+ }
1182
+ break;
1183
+ }
1184
+ case AuthMethod.EMAIL_OTP: {
1185
+ authResponse = await this.authenticateEmailOTP(ec, request);
1186
+ break;
1187
+ }
1188
+ case AuthMethod.TOTP: {
1189
+ authResponse = await this.authenticateTOTP(ec, request);
1190
+ break;
1191
+ }
1192
+ case AuthMethod.PASSKEY: {
1193
+ authResponse = await this.authenticatePasskey(ec, request);
1194
+ break;
1195
+ }
1196
+ case AuthMethod.SMS_OTP: {
1197
+ authResponse = await this.authenticateSMSOTP(ec, request);
1198
+ break;
1199
+ }
1200
+ default:
1201
+ // Unimplemented methods return a clean error.
1202
+ // sessionId and factorLevel exist on BaseAuthRequestSchema — shared by all union variants.
1203
+ return this.__buildAuthenticationErrorMethod(request.sessionId, request.factorLevel ?? AuthFactorLevel.FIRST, { retryAllowed: true });
1204
+ }
1205
+ this.logDebug('Authentication method result', {
1206
+ sessionId: request.sessionId,
1207
+ method: request.method,
1208
+ success: authResponse.success,
1209
+ });
1210
+ // Step 2: If method succeeded, check if overall authentication is complete.
1211
+ if (authResponse.success) {
1212
+ const session = await this.getSession(request.sessionId);
1213
+ if (!session) {
1214
+ return this.__buildAuthenticationErrorMethod(request.sessionId, request.factorLevel, { retryAllowed: false });
1215
+ }
1216
+ const isComplete = this._isAuthenticationComplete(session, request.factorLevel, request.method);
1217
+ if (isComplete) {
1218
+ this.logDebug('Authentication complete, issuing tokens', { sessionId: request.sessionId });
1219
+ // S0.7 Layer 1: Re-check user status before token issuance (catches race conditions and all auth paths)
1220
+ if (session.userId) {
1221
+ const currentUser = await this.userLookup.findUserById(ec, session.userId);
1222
+ if (!currentUser || currentUser.status !== UserStatus.ACTIVE) {
1223
+ await this.updateSession(request.sessionId, { state: AuthenticationSessionState.FAILED });
1224
+ this._enforceUserStatus(currentUser || { status: UserStatus.DELETED }, request.sessionId);
1225
+ }
1226
+ // W3.1b: Validate user-type membership — user's userTypes[] must include the session's activeUserType
1227
+ if (session.activeUserType && currentUser) {
1228
+ const userTypes = currentUser.userTypes ?? [];
1229
+ if (!userTypes.includes(session.activeUserType)) {
1230
+ await this.updateSession(request.sessionId, { state: AuthenticationSessionState.FAILED });
1231
+ throw this.errorBuilder.buildError(ErrorType.AUTHORIZATION, undefined, {
1232
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_USER_TYPE_MISMATCH,
1233
+ context: { message: 'Your account is not registered for this application.', activeUserType: session.activeUserType },
1234
+ });
1235
+ }
1236
+ }
1237
+ }
1238
+ // W2.2 + W3.1 + AUTH-14: Password expiry check with org overrides
1239
+ const sessionAuthPolicy = session.userId
1240
+ ? await this._resolveAuthPolicyWithOrgOverrides(ec, session.activeUserType, session.userId)
1241
+ : this._resolveAuthPolicyFromSession(session);
1242
+ const expiryDays = sessionAuthPolicy.passwordPolicy?.expiryDays ?? 0;
1243
+ if (expiryDays > 0 && session.userId) {
1244
+ const expired = await this.credentialOps.isPasswordExpired(ec, session.userId, expiryDays);
1245
+ if (expired) {
1246
+ await this.updateSession(request.sessionId, { state: AuthenticationSessionState.PASSWORD_EXPIRED });
1247
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1248
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_PASSWORD_EXPIRED,
1249
+ context: { sessionId: request.sessionId, reason: 'PASSWORD_EXPIRED' },
1250
+ });
1251
+ }
1252
+ }
1253
+ const tokens = await this.tokenIssuer.issueTokens(session, {
1254
+ includeRefreshToken: true,
1255
+ lastAuthenticatedAt: Math.floor(Date.now() / 1000),
1256
+ });
1257
+ // Update session to completed
1258
+ await this.updateSession(request.sessionId, { state: AuthenticationSessionState.COMPLETED });
1259
+ // Get final session for audit log
1260
+ const finalSession = await this.getSession(request.sessionId);
1261
+ const completedFactors = finalSession?.completedFactors || session.completedFactors || [];
1262
+ // Audit log successful authentication (TRAP 13)
1263
+ const deviceInfo = finalSession?.deviceInfo;
1264
+ if (finalSession?.userId) {
1265
+ await this.auditLogsService.logUserLogin({
1266
+ userId: finalSession.userId,
1267
+ email: finalSession.email || 'unknown',
1268
+ authMethod: request.method,
1269
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1270
+ userAgent: deviceInfo?.userAgent || 'unknown',
1271
+ sessionId: request.sessionId,
1272
+ organizationId: finalSession.organizationId,
1273
+ });
1274
+ }
1275
+ // Clean up session after successful authentication
1276
+ await this.removeSession(request.sessionId);
1277
+ return this._buildAuthenticationSuccessMethod(request.sessionId, request.factorLevel, request.method, tokens.accessToken, {
1278
+ refreshToken: tokens.refreshToken,
1279
+ completedFactors,
1280
+ });
1281
+ }
1282
+ else {
1283
+ // Method succeeded but overall auth is not complete (e.g., MFA required)
1284
+ return authResponse;
1285
+ }
1286
+ }
1287
+ return authResponse;
1288
+ }
1289
+ // ===============================
1290
+ // PUBLIC API: SESSION STATE
1291
+ // ===============================
1292
+ /**
1293
+ * Get the current state of an authentication session.
1294
+ *
1295
+ * TRAP 2 (async change): This method is now async because Redis lookups are Promise-based.
1296
+ * The controller must add `await` to this call — this is the one allowed controller modification.
1297
+ */
1298
+ async getAuthenticationSessionState(ec, sessionId) {
1299
+ const session = await this.getSession(sessionId);
1300
+ if (!session) {
1301
+ return null;
1302
+ }
1303
+ // Return a copy to avoid external modifications
1304
+ return { ...session };
1305
+ }
1306
+ // ===============================
1307
+ // EMAIL OTP AUTHENTICATION (Step 10)
1308
+ // ===============================
1309
+ /**
1310
+ * Send an Email OTP to the user's email address.
1311
+ *
1312
+ * Called from the auth controller (POST /auth/mfa/email-otp/send).
1313
+ * Generates a 6-digit OTP, stores it as a consumable token, and returns
1314
+ * the session state. The actual email sending is done by the controller.
1315
+ *
1316
+ * Rate limiting: Redis INCR with TTL. Values from config.auth.otpOperational.
1317
+ */
1318
+ async sendEmailOTP(ec, sessionId) {
1319
+ const session = await this.getSession(sessionId);
1320
+ if (!session) {
1321
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1322
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SESSION_INVALID,
1323
+ context: { sessionId },
1324
+ });
1325
+ }
1326
+ // Must have completed first factor before MFA
1327
+ if (session.state !== AuthenticationSessionState.FIRST_FACTOR_COMPLETED &&
1328
+ session.state !== AuthenticationSessionState.MFA_REQUIRED) {
1329
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1330
+ context: { message: 'First factor authentication must be completed before requesting Email OTP' },
1331
+ });
1332
+ }
1333
+ const email = session.email;
1334
+ if (!email) {
1335
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1336
+ context: { message: 'No email associated with this session' },
1337
+ });
1338
+ }
1339
+ const userId = session.userId;
1340
+ if (!userId) {
1341
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1342
+ context: { message: 'No user associated with this session' },
1343
+ });
1344
+ }
1345
+ // Rate limiting — Redis INCR with 60s window. Values from config.auth.otpOperational.
1346
+ const rateLimitKey = `${AUTH_REDIS_KEYS.EMAIL_OTP}${userId}:email_otp`;
1347
+ const currentCount = await this.redisService.incrementRateLimit(rateLimitKey, 60);
1348
+ if (currentCount > this.otpConfig.emailOtp.rateLimitPerMinute) {
1349
+ throw this.errorBuilder.buildError(ErrorType.RATE_LIMIT, undefined, {
1350
+ context: {
1351
+ message: 'Too many OTP requests. Please wait before requesting another code.',
1352
+ retryAfterSeconds: 60,
1353
+ },
1354
+ });
1355
+ }
1356
+ // Revoke any existing EMAIL_OTP tokens for this user to ensure only one valid OTP at a time
1357
+ await this.consumableTokenService.revokeTokensByRelatedId(userId, CoreConsumableTokenTypes.EMAIL_OTP);
1358
+ // Generate OTP — cryptographically random N-digit code
1359
+ const otpLength = this.otpConfig.emailOtp.otpLength;
1360
+ const otpCode = this._generateOTP(otpLength);
1361
+ // Store as consumable token (SINGLE_USE, configurable TTL)
1362
+ const expiryMinutes = this.otpConfig.emailOtp.expiryMinutes;
1363
+ await this.consumableTokenService.createToken({
1364
+ tokenType: CoreConsumableTokenTypes.EMAIL_OTP,
1365
+ consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,
1366
+ expiresIn: { value: expiryMinutes, unit: DurationUnit.MINUTES },
1367
+ userId: userId,
1368
+ resourceIdentifier: CoreResourceType.USERS,
1369
+ relatedId: userId,
1370
+ metadata: {
1371
+ otpCode,
1372
+ sessionId,
1373
+ email,
1374
+ },
1375
+ });
1376
+ // Update session to MFA_REQUIRED state
1377
+ await this.updateSession(sessionId, {
1378
+ state: AuthenticationSessionState.MFA_REQUIRED,
1379
+ currentFactor: AuthFactorLevel.SECOND,
1380
+ });
1381
+ this.logDebug('Email OTP generated and stored', { sessionId, userId });
1382
+ return { otpToken: otpCode, email, expiryMinutes };
1383
+ }
1384
+ /**
1385
+ * Verify an Email OTP code submitted by the user.
1386
+ *
1387
+ * Called from authenticate() dispatch when method=EMAIL_OTP,
1388
+ * or directly from the auth controller (POST /auth/mfa/email-otp/verify).
1389
+ */
1390
+ async authenticateEmailOTP(ec, request) {
1391
+ const { sessionId, token } = request;
1392
+ const session = await this.getSession(sessionId);
1393
+ if (!session) {
1394
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, { retryAllowed: false });
1395
+ }
1396
+ // Must be in MFA_REQUIRED, SECOND_FACTOR_IN_PROGRESS, or FIRST_FACTOR_COMPLETED state.
1397
+ // FIRST_FACTOR_COMPLETED is accepted because the MFA flow may not have explicitly
1398
+ // transitioned to MFA_REQUIRED yet (consistent with TOTP which has no "send" step).
1399
+ if (session.state !== AuthenticationSessionState.MFA_REQUIRED &&
1400
+ session.state !== AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS &&
1401
+ session.state !== AuthenticationSessionState.FIRST_FACTOR_COMPLETED) {
1402
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, {
1403
+ retryAllowed: true,
1404
+ });
1405
+ }
1406
+ if (!token) {
1407
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, {
1408
+ retryAllowed: true,
1409
+ authMethod: AuthMethod.EMAIL_OTP,
1410
+ });
1411
+ }
1412
+ // Update session to in-progress
1413
+ await this.updateSession(sessionId, {
1414
+ state: AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS,
1415
+ currentFactor: AuthFactorLevel.SECOND,
1416
+ });
1417
+ const userId = session.userId;
1418
+ if (!userId) {
1419
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, { retryAllowed: false });
1420
+ }
1421
+ // Find matching consumable token by looking up EMAIL_OTP tokens for this user.
1422
+ // We verify the OTP code matches the stored metadata.
1423
+ const isValid = await this._verifyEmailOTP(userId, sessionId, token);
1424
+ if (!isValid) {
1425
+ const { locked } = await this.incrementSessionAttempts(ec, sessionId);
1426
+ // Audit log MFA failure
1427
+ const deviceInfo = session.deviceInfo;
1428
+ await this.auditLogsService.logUserLoginFailed({
1429
+ email: session.email || 'unknown',
1430
+ authMethod: AuthMethod.EMAIL_OTP,
1431
+ failureReason: 'Invalid OTP code',
1432
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1433
+ userAgent: deviceInfo?.userAgent || 'unknown',
1434
+ attemptsRemaining: session.maxAttempts - session.attempts - 1,
1435
+ sessionId,
1436
+ });
1437
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, {
1438
+ authMethod: AuthMethod.EMAIL_OTP,
1439
+ retryAllowed: !locked,
1440
+ });
1441
+ }
1442
+ // OTP verified — update session
1443
+ await this._updateSessionAfterSuccessfulAuth(ec, sessionId, userId, AuthMethod.EMAIL_OTP);
1444
+ const updatedSession = await this.getSession(sessionId);
1445
+ return this._buildAuthenticationSuccessMethod(sessionId, AuthFactorLevel.SECOND, AuthMethod.EMAIL_OTP, '', // Tokens issued by authenticate() after completion check
1446
+ { completedFactors: updatedSession?.completedFactors || [] });
1447
+ }
1448
+ /**
1449
+ * Verify the OTP code against stored consumable tokens for this user and session.
1450
+ * Attempts to consume the token atomically to prevent replay.
1451
+ */
1452
+ async _verifyEmailOTP(userId, sessionId, code) {
1453
+ try {
1454
+ // Find unconsumed EMAIL_OTP tokens for this user
1455
+ const tokens = await this.consumableTokenService.findTokensByRelatedId(userId, CoreConsumableTokenTypes.EMAIL_OTP);
1456
+ for (const tokenDoc of tokens) {
1457
+ const metadata = tokenDoc.metadata;
1458
+ if (!metadata?.otpCode || !metadata?.sessionId)
1459
+ continue;
1460
+ // L1 fix: constant-time comparison to prevent timing side-channel on OTP
1461
+ const storedCode = String(metadata.otpCode);
1462
+ const storedSession = String(metadata.sessionId);
1463
+ if (storedCode.length !== code.length || storedSession.length !== sessionId.length)
1464
+ continue;
1465
+ const codeMatch = crypto.timingSafeEqual(Buffer.from(storedCode), Buffer.from(code));
1466
+ const sessionMatch = crypto.timingSafeEqual(Buffer.from(storedSession), Buffer.from(sessionId));
1467
+ if (codeMatch && sessionMatch) {
1468
+ // Consume the token atomically
1469
+ try {
1470
+ await this.consumableTokenService.consumeToken(tokenDoc.token);
1471
+ return true;
1472
+ }
1473
+ catch {
1474
+ // Token already consumed or expired — try next
1475
+ continue;
1476
+ }
1477
+ }
1478
+ }
1479
+ return false;
1480
+ }
1481
+ catch (error) {
1482
+ if (isWildoBackendError(error)) {
1483
+ throw error;
1484
+ }
1485
+ this.logger.error('Failed to verify Email OTP', {
1486
+ userId,
1487
+ sessionId,
1488
+ error: error instanceof Error ? error.message : String(error),
1489
+ });
1490
+ return false;
1491
+ }
1492
+ }
1493
+ // ===============================
1494
+ // TOTP AUTHENTICATION (Step 11)
1495
+ // ===============================
1496
+ /**
1497
+ * Verify a TOTP code submitted by the user.
1498
+ *
1499
+ * Called from authenticate() dispatch when method=TOTP.
1500
+ * Reads the user's verified TOTP secret from their credential record,
1501
+ * validates the code using the otpauth library.
1502
+ */
1503
+ async authenticateTOTP(ec, request) {
1504
+ const { sessionId, token } = request;
1505
+ const session = await this.getSession(sessionId);
1506
+ if (!session) {
1507
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, { retryAllowed: false });
1508
+ }
1509
+ // Must be in MFA_REQUIRED or SECOND_FACTOR_IN_PROGRESS state
1510
+ if (session.state !== AuthenticationSessionState.MFA_REQUIRED &&
1511
+ session.state !== AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS &&
1512
+ session.state !== AuthenticationSessionState.FIRST_FACTOR_COMPLETED) {
1513
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, {
1514
+ retryAllowed: true,
1515
+ });
1516
+ }
1517
+ // Update session to in-progress
1518
+ await this.updateSession(sessionId, {
1519
+ state: AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS,
1520
+ currentFactor: AuthFactorLevel.SECOND,
1521
+ });
1522
+ const userId = session.userId;
1523
+ if (!userId) {
1524
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, { retryAllowed: false });
1525
+ }
1526
+ const cred = await this.credentialOps.readByUserId(ec, userId);
1527
+ if (!cred || !cred.totpVerified || !cred.secretBase32) {
1528
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, {
1529
+ authMethod: AuthMethod.TOTP,
1530
+ retryAllowed: true,
1531
+ });
1532
+ }
1533
+ const { TOTP } = await import('otpauth');
1534
+ const { algorithm, digits, period, window } = this.totpConfig;
1535
+ const totp = new TOTP({
1536
+ secret: cred.secretBase32,
1537
+ algorithm,
1538
+ digits,
1539
+ period,
1540
+ });
1541
+ const delta = totp.validate({ token, window });
1542
+ let isValidTOTP = delta !== null;
1543
+ // M7 fix: TOTP anti-replay — reject codes at or before the last used time step (RFC 6238 §5.2)
1544
+ // Store the absolute time step counter (current period + delta) instead of relative delta,
1545
+ // so comparisons remain valid across time period boundaries.
1546
+ if (isValidTOTP) {
1547
+ const currentTimeStep = Math.floor(Date.now() / (period * 1000));
1548
+ const absoluteStep = currentTimeStep + delta;
1549
+ const replayKey = `${AUTH_REDIS_KEYS.TOTP_USED}${userId}`;
1550
+ const lastUsedStep = await this.redisService.get(replayKey);
1551
+ if (lastUsedStep !== null && absoluteStep <= parseInt(lastUsedStep, 10)) {
1552
+ isValidTOTP = false;
1553
+ }
1554
+ else {
1555
+ await this.redisService.set(replayKey, String(absoluteStep), { ttl: 90 });
1556
+ }
1557
+ }
1558
+ // If TOTP code fails, try backup codes
1559
+ let usedBackupCode = false;
1560
+ if (!isValidTOTP && cred.backupCodesHashed?.length > 0) {
1561
+ const inputHash = crypto.createHash('sha256').update(token).digest('hex');
1562
+ const inputBuf = Buffer.from(inputHash, 'hex');
1563
+ // L2 fix: constant-time comparison iterating ALL hashes to prevent timing leak
1564
+ let matchIndex = -1;
1565
+ for (let i = 0; i < cred.backupCodesHashed.length; i++) {
1566
+ const storedBuf = Buffer.from(cred.backupCodesHashed[i], 'hex');
1567
+ if (inputBuf.length === storedBuf.length && crypto.timingSafeEqual(inputBuf, storedBuf)) {
1568
+ matchIndex = i;
1569
+ // Don't break — always compare all to prevent timing leak
1570
+ }
1571
+ }
1572
+ if (matchIndex >= 0) {
1573
+ const updatedCodes = [...cred.backupCodesHashed];
1574
+ updatedCodes.splice(matchIndex, 1);
1575
+ await this.credentialOps.updateBackupCodes(ec, cred._id, updatedCodes);
1576
+ usedBackupCode = true;
1577
+ }
1578
+ }
1579
+ if (!isValidTOTP && !usedBackupCode) {
1580
+ const { locked } = await this.incrementSessionAttempts(ec, sessionId);
1581
+ // Audit log MFA failure
1582
+ const deviceInfo = session.deviceInfo;
1583
+ await this.auditLogsService.logUserLoginFailed({
1584
+ email: session.email || 'unknown',
1585
+ authMethod: AuthMethod.TOTP,
1586
+ failureReason: 'Invalid TOTP code',
1587
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1588
+ userAgent: deviceInfo?.userAgent || 'unknown',
1589
+ attemptsRemaining: session.maxAttempts - session.attempts - 1,
1590
+ sessionId,
1591
+ });
1592
+ return this.__buildAuthenticationErrorMethod(sessionId, AuthFactorLevel.SECOND, {
1593
+ authMethod: AuthMethod.TOTP,
1594
+ retryAllowed: !locked,
1595
+ });
1596
+ }
1597
+ // TOTP verified — update session
1598
+ await this._updateSessionAfterSuccessfulAuth(ec, sessionId, userId, AuthMethod.TOTP);
1599
+ const updatedSession = await this.getSession(sessionId);
1600
+ return this._buildAuthenticationSuccessMethod(sessionId, AuthFactorLevel.SECOND, AuthMethod.TOTP, '', // Tokens issued by authenticate() after completion check
1601
+ {
1602
+ completedFactors: updatedSession?.completedFactors || [],
1603
+ challengeData: usedBackupCode ? { usedBackupCode: true } : undefined,
1604
+ });
1605
+ }
1606
+ // ===============================
1607
+ // PASSKEY AUTHENTICATION (Phase G1)
1608
+ // ===============================
1609
+ /**
1610
+ * Verify a WebAuthn/Passkey authentication response.
1611
+ *
1612
+ * Called from authenticate() dispatch when method=PASSKEY.
1613
+ * Supports both first factor (passwordless) and second factor (MFA) usage.
1614
+ * Delegates to WebAuthnBackendService for cryptographic verification.
1615
+ */
1616
+ async authenticatePasskey(ec, request) {
1617
+ const { sessionId, factorLevel, response } = request;
1618
+ const session = await this.getSession(sessionId);
1619
+ if (!session) {
1620
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, { retryAllowed: false });
1621
+ }
1622
+ // State machine guard — valid states depend on factor level
1623
+ const validStates = factorLevel === AuthFactorLevel.FIRST
1624
+ ? new Set([AuthenticationSessionState.IDENTIFIED, AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS])
1625
+ : new Set([AuthenticationSessionState.MFA_REQUIRED, AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS, AuthenticationSessionState.FIRST_FACTOR_COMPLETED]);
1626
+ if (!validStates.has(session.state)) {
1627
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, {
1628
+ authMethod: AuthMethod.PASSKEY,
1629
+ retryAllowed: true,
1630
+ });
1631
+ }
1632
+ const userId = session.userId;
1633
+ if (!userId) {
1634
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, { retryAllowed: false });
1635
+ }
1636
+ // Update session to in-progress
1637
+ await this.updateSession(sessionId, {
1638
+ state: factorLevel === AuthFactorLevel.FIRST
1639
+ ? AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS
1640
+ : AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS,
1641
+ currentFactor: factorLevel,
1642
+ });
1643
+ // Delegate to WebAuthn service for cryptographic verification
1644
+ let verified = false;
1645
+ let credentialId = response.id;
1646
+ try {
1647
+ const result = await this.webAuthnService.verifyAuthenticationResponse(ec, userId, response);
1648
+ verified = result.verified;
1649
+ credentialId = result.credentialId;
1650
+ }
1651
+ catch (error) {
1652
+ this.logger.warn('WebAuthn verification threw an error', {
1653
+ userId,
1654
+ sessionId,
1655
+ error: error instanceof Error ? error.message : String(error),
1656
+ });
1657
+ verified = false;
1658
+ }
1659
+ if (!verified) {
1660
+ const { locked } = await this.incrementSessionAttempts(ec, sessionId);
1661
+ // Audit log passkey auth failure
1662
+ const deviceInfo = session.deviceInfo;
1663
+ await this.auditLogsService.logUserPasskeyAuthFailure({
1664
+ email: session.email || 'unknown',
1665
+ failureReason: 'WebAuthn verification failed',
1666
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1667
+ userAgent: deviceInfo?.userAgent || 'unknown',
1668
+ sessionId,
1669
+ });
1670
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, {
1671
+ authMethod: AuthMethod.PASSKEY,
1672
+ retryAllowed: !locked,
1673
+ });
1674
+ }
1675
+ // Passkey verified — audit log success
1676
+ const deviceInfo = session.deviceInfo;
1677
+ await this.auditLogsService.logUserPasskeyAuthSuccess({
1678
+ userId: userId,
1679
+ email: session.email || 'unknown',
1680
+ credentialId,
1681
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1682
+ userAgent: deviceInfo?.userAgent || 'unknown',
1683
+ sessionId,
1684
+ });
1685
+ // C1 fix: Reset global lockout counter on successful authentication
1686
+ if (session.email) {
1687
+ await this._resetGlobalAttempts(session.email);
1688
+ }
1689
+ // Update session state
1690
+ await this._updateSessionAfterSuccessfulAuth(ec, sessionId, userId, AuthMethod.PASSKEY);
1691
+ const updatedSession = await this.getSession(sessionId);
1692
+ return this._buildAuthenticationSuccessMethod(sessionId, factorLevel, AuthMethod.PASSKEY, '', // Tokens issued by authenticate() after completion check
1693
+ {
1694
+ completedFactors: updatedSession?.completedFactors || [],
1695
+ requiresMFA: updatedSession?.requiresMFA || false,
1696
+ availableMFAMethods: updatedSession?.availableSecondFactorMethods || [],
1697
+ mfaMethodsRequired: updatedSession?.mfaMethodsRequired,
1698
+ });
1699
+ }
1700
+ // ===============================
1701
+ // MFA HELPERS
1702
+ // ===============================
1703
+ /**
1704
+ * Determine if MFA is required for this user/session after first-factor success.
1705
+ *
1706
+ * M12+M13 fix: Now checks org-level auth policy in addition to app-level.
1707
+ * Effective policy = max(app_policy, org_policy) — org can only tighten, never weaken.
1708
+ *
1709
+ * Returns true if:
1710
+ * - The effective policy requires MFA for all users, OR
1711
+ * - The effective policy requires MFA for admins, OR
1712
+ * - The org's minimumAuthLevel is 'mfa' or 'sso', OR
1713
+ * - The user has enrolled a verified TOTP secret (user opted in to MFA)
1714
+ */
1715
+ async _shouldRequireMFA(ec, userId, organizationId, firstFactorMethod, authPolicy) {
1716
+ const policy = authPolicy ?? AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
1717
+ const mfaPolicy = policy.mfaPolicy;
1718
+ const NOT_REQUIRED = { required: false, enrolledMethods: [] };
1719
+ // G1 + W2.5: Passkey exemption — passkeys are multi-factor by nature (possession + biometric/PIN).
1720
+ if (firstFactorMethod === AuthMethod.PASSKEY) {
1721
+ const passkeyExemptFromMFA = mfaPolicy?.passkeyExemptFromMFA ?? true;
1722
+ if (passkeyExemptFromMFA) {
1723
+ return NOT_REQUIRED;
1724
+ }
1725
+ }
1726
+ const policyRequiresMFA = !!mfaPolicy?.requireMFA;
1727
+ try {
1728
+ const cred = await this.credentialOps.readByUserId(ec, userId);
1729
+ const enrolledMethods = AuthUtils.getEnrolledSecondFactorMethods(cred);
1730
+ if (policyRequiresMFA) {
1731
+ const hasStrongSecondFactor = enrolledMethods.some((m) => m !== AuthMethod.EMAIL_OTP);
1732
+ if (hasStrongSecondFactor) {
1733
+ if (cred && cred.mfaEnrollmentState !== MfaEnrollmentState.ENROLLED) {
1734
+ await this.credentialOps.updateById(ec, cred._id, { mfaEnrollmentState: MfaEnrollmentState.ENROLLED });
1735
+ }
1736
+ return { required: true, enrolledMethods };
1737
+ }
1738
+ const graceDays = mfaPolicy?.enrollmentGracePeriodDays ?? 0;
1739
+ if (graceDays > 0 && cred) {
1740
+ if (!cred.firstMfaPromptAt) {
1741
+ await this.credentialOps.updateById(ec, cred._id, { firstMfaPromptAt: new Date(), mfaEnrollmentState: MfaEnrollmentState.GRACE });
1742
+ }
1743
+ else if (cred.mfaEnrollmentState !== MfaEnrollmentState.GRACE) {
1744
+ await this.credentialOps.updateById(ec, cred._id, { mfaEnrollmentState: MfaEnrollmentState.GRACE });
1745
+ }
1746
+ const graceStart = cred.firstMfaPromptAt ?? new Date();
1747
+ const graceEnd = new Date(graceStart.getTime() + graceDays * 86_400_000);
1748
+ if (new Date() < graceEnd) {
1749
+ return NOT_REQUIRED;
1750
+ }
1751
+ await this.credentialOps.updateById(ec, cred._id, { mfaEnrollmentState: MfaEnrollmentState.PENDING });
1752
+ }
1753
+ return { required: true, enrolledMethods };
1754
+ }
1755
+ if (cred?.totpVerified) {
1756
+ return { required: true, enrolledMethods };
1757
+ }
1758
+ }
1759
+ catch {
1760
+ if (policyRequiresMFA) {
1761
+ return { required: true, enrolledMethods: [] };
1762
+ }
1763
+ }
1764
+ return NOT_REQUIRED;
1765
+ }
1766
+ // ===============================
1767
+ // AUTH POLICY MERGE (M13)
1768
+ // ===============================
1769
+ // W2.10: _mergeAuthPolicies removed — runtime AuthPolicyBase deprecated.
1770
+ // All MFA requirements now come solely from config (mfaPolicy).
1771
+ // ===============================
1772
+ // SSO GRACE LOGIN TRACKING (M14)
1773
+ // ===============================
1774
+ /** Redis key prefix for SSO grace login counters — scope-aware format: sso_grace_logins:{scopeType}:{scopeId}:{userId} */
1775
+ /**
1776
+ * M14: Check if password login is allowed under SSO grace policy.
1777
+ * If the scope requires SSO and grace logins are exhausted, throws AUTHENTICATION error.
1778
+ */
1779
+ async _checkSSOGraceLoginAllowed(ec, scopeType, scopeId, userId) {
1780
+ try {
1781
+ const ssoConfig = await this.orgConfigService.loadSSOConfig(ec, scopeType, scopeId);
1782
+ if (!ssoConfig)
1783
+ return;
1784
+ const { enforcement } = ssoConfig;
1785
+ if (!enforcement.requireSSO)
1786
+ return;
1787
+ if (!enforcement.allowPasswordFallback) {
1788
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1789
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SSO_REQUIRED,
1790
+ context: { message: 'SSO is required. Password login is not allowed.' },
1791
+ });
1792
+ }
1793
+ const maxGrace = enforcement.graceLoginAttempts;
1794
+ if (maxGrace <= 0) {
1795
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1796
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SSO_REQUIRED,
1797
+ context: { message: 'SSO is required. Password login grace period exhausted.' },
1798
+ });
1799
+ }
1800
+ if (!userId)
1801
+ return;
1802
+ const identifier = `${AUTH_REDIS_KEYS.SSO_GRACE_LOGINS}${scopeType}:${scopeId}:${userId}`;
1803
+ const currentCount = await this.redisService.getRateLimitCount(identifier);
1804
+ if (currentCount >= maxGrace) {
1805
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1806
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SSO_REQUIRED,
1807
+ context: {
1808
+ message: 'Password login grace period exhausted. Please use SSO.',
1809
+ graceLoginsUsed: currentCount,
1810
+ graceLoginsMax: maxGrace,
1811
+ },
1812
+ });
1813
+ }
1814
+ }
1815
+ catch (error) {
1816
+ if (isWildoBackendError(error))
1817
+ throw error;
1818
+ this.logDebug('SSO grace login check failed (non-fatal)', {
1819
+ scopeType,
1820
+ scopeId,
1821
+ userId,
1822
+ error: error instanceof Error ? error.message : String(error),
1823
+ });
1824
+ }
1825
+ }
1826
+ /** 1 year in seconds — effectively permanent for grace counter, but avoids orphaned keys */
1827
+ static SSO_GRACE_TTL_SECONDS = 365 * 24 * 60 * 60;
1828
+ /**
1829
+ * M14: Atomically increment SSO grace login counter after successful password auth.
1830
+ * Uses Redis INCR (via incrementRateLimit) for atomic increment — no TOCTOU race.
1831
+ * TTL is 1 year (effectively permanent but avoids orphaned keys if scope config changes).
1832
+ */
1833
+ async _incrementSSOGraceLogin(ec, scopeType, scopeId, userId) {
1834
+ try {
1835
+ const ssoConfig = await this.orgConfigService.loadSSOConfig(ec, scopeType, scopeId);
1836
+ if (!ssoConfig?.enforcement.requireSSO)
1837
+ return;
1838
+ const identifier = `${AUTH_REDIS_KEYS.SSO_GRACE_LOGINS}${scopeType}:${scopeId}:${userId}`;
1839
+ const newCount = await this.redisService.incrementRateLimit(identifier, AuthenticationOrchestratorBackendService_1.SSO_GRACE_TTL_SECONDS);
1840
+ this.logDebug('SSO grace login counter incremented', {
1841
+ scopeType,
1842
+ scopeId,
1843
+ userId,
1844
+ graceLoginsUsed: newCount,
1845
+ graceLoginsMax: ssoConfig.enforcement.graceLoginAttempts,
1846
+ });
1847
+ }
1848
+ catch {
1849
+ // Non-fatal — don't block auth if counter update fails
1850
+ }
1851
+ }
1852
+ // ===============================
1853
+ // MAGIC LINK (Phase G2)
1854
+ // ===============================
1855
+ /**
1856
+ * Send a magic link email to the user.
1857
+ * Anti-enumeration: always returns success regardless of whether the user exists.
1858
+ * Rate limited per email.
1859
+ */
1860
+ async sendMagicLink(ec, request, deviceInfo) {
1861
+ if (!this._isMethodEnabledGlobally(AuthMethod.MAGIC_LINK)) {
1862
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1863
+ context: { message: 'Magic link authentication is not enabled' },
1864
+ });
1865
+ }
1866
+ const { email } = request;
1867
+ // Rate limiting — dual window (per minute + per hour)
1868
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.MAGIC_LINK_MIN}${email}:min`, this.magicLinkConfig.rateLimitPerMinute, 60);
1869
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.MAGIC_LINK_MIN}${email}:hour`, this.magicLinkConfig.rateLimitPerHour, 3600);
1870
+ // Look up the user (same pattern as identify())
1871
+ let user = null;
1872
+ try {
1873
+ user = await this.userLookup.findUserByEmail(ec, email);
1874
+ }
1875
+ catch {
1876
+ // Suppress — anti-enumeration (also covers non-active users)
1877
+ }
1878
+ // Audit the send (even if user doesn't exist or is inactive)
1879
+ await this.auditLogsService.logMagicLinkSent({
1880
+ email,
1881
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1882
+ userAgent: deviceInfo?.userAgent || 'unknown',
1883
+ });
1884
+ // If user doesn't exist or is not active, return success silently (anti-enumeration)
1885
+ if (!user) {
1886
+ return { success: true };
1887
+ }
1888
+ const userId = user._id;
1889
+ // Revoke any existing MAGIC_LINK tokens for this user
1890
+ await this.consumableTokenService.revokeTokensByRelatedId(userId, CoreConsumableTokenTypes.MAGIC_LINK);
1891
+ // Store as consumable token (createToken auto-generates a crypto-random token value)
1892
+ const createdToken = await this.consumableTokenService.createToken({
1893
+ tokenType: CoreConsumableTokenTypes.MAGIC_LINK,
1894
+ consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,
1895
+ expiresIn: { value: this.magicLinkConfig.tokenExpiryMinutes, unit: DurationUnit.MINUTES },
1896
+ userId: userId,
1897
+ resourceIdentifier: CoreResourceType.USERS,
1898
+ relatedId: userId,
1899
+ metadata: { email },
1900
+ });
1901
+ this.logDebug('Magic link token created', { email, userId });
1902
+ return { success: true, token: createdToken.token, email, userId, expiresInMinutes: this.magicLinkConfig.tokenExpiryMinutes };
1903
+ }
1904
+ /**
1905
+ * Verify a magic link token.
1906
+ * Returns an auth response with tokens on success.
1907
+ */
1908
+ async verifyMagicLink(ec, request, deviceInfo, activeUserType) {
1909
+ if (!this._isMethodEnabledGlobally(AuthMethod.MAGIC_LINK)) {
1910
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
1911
+ context: { message: 'Magic link authentication is not enabled' },
1912
+ });
1913
+ }
1914
+ const { token } = request;
1915
+ // Validate the token (checks expiry, revocation, consumption)
1916
+ let validatedToken = null;
1917
+ try {
1918
+ validatedToken = await this.consumableTokenService.validateToken(token, [CoreConsumableTokenTypes.MAGIC_LINK]);
1919
+ }
1920
+ catch {
1921
+ // Token invalid, expired, or already consumed
1922
+ }
1923
+ if (!validatedToken) {
1924
+ await this.auditLogsService.logMagicLinkFailed({
1925
+ failureReason: 'Invalid or expired magic link token',
1926
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1927
+ userAgent: deviceInfo?.userAgent || 'unknown',
1928
+ });
1929
+ return {
1930
+ success: false,
1931
+ sessionId: '',
1932
+ userExists: false,
1933
+ factorLevel: AuthFactorLevel.FIRST,
1934
+ authMethod: AuthMethod.MAGIC_LINK,
1935
+ error: 'Invalid or expired magic link',
1936
+ errorCode: 'MAGIC_LINK_INVALID',
1937
+ retryAllowed: false,
1938
+ integrationTokens: [],
1939
+ requiresMFA: false,
1940
+ };
1941
+ }
1942
+ // Consume the token atomically — wrap in try/catch for concurrent double-click race
1943
+ try {
1944
+ await this.consumableTokenService.consumeToken(token);
1945
+ }
1946
+ catch {
1947
+ // Token already consumed by concurrent request — return same error as invalid token
1948
+ await this.auditLogsService.logMagicLinkFailed({
1949
+ failureReason: 'Magic link token already consumed (concurrent request)',
1950
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1951
+ userAgent: deviceInfo?.userAgent || 'unknown',
1952
+ });
1953
+ return {
1954
+ success: false,
1955
+ sessionId: '',
1956
+ userExists: false,
1957
+ factorLevel: AuthFactorLevel.FIRST,
1958
+ authMethod: AuthMethod.MAGIC_LINK,
1959
+ error: 'Invalid or expired magic link',
1960
+ errorCode: 'MAGIC_LINK_INVALID',
1961
+ retryAllowed: false,
1962
+ integrationTokens: [],
1963
+ requiresMFA: false,
1964
+ };
1965
+ }
1966
+ const userId = validatedToken.relatedId;
1967
+ if (!userId) {
1968
+ await this.auditLogsService.logMagicLinkFailed({
1969
+ failureReason: 'Magic link token has no associated user',
1970
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1971
+ userAgent: deviceInfo?.userAgent || 'unknown',
1972
+ });
1973
+ return {
1974
+ success: false,
1975
+ sessionId: '',
1976
+ userExists: false,
1977
+ factorLevel: AuthFactorLevel.FIRST,
1978
+ authMethod: AuthMethod.MAGIC_LINK,
1979
+ error: 'Invalid magic link token',
1980
+ errorCode: 'MAGIC_LINK_INVALID',
1981
+ retryAllowed: false,
1982
+ integrationTokens: [],
1983
+ requiresMFA: false,
1984
+ };
1985
+ }
1986
+ const tokenMetadata = validatedToken.metadata;
1987
+ const email = tokenMetadata?.email;
1988
+ // Defense-in-depth: constant-time compare request email vs token email.
1989
+ // Prevents URL-tampering attacks where an attacker changes the email in the
1990
+ // magic link URL while keeping a stolen/intercepted token value.
1991
+ if (!email) {
1992
+ this.logger.warn('Magic link token metadata missing email — token integrity issue', {
1993
+ userId,
1994
+ tokenType: CoreConsumableTokenTypes.MAGIC_LINK,
1995
+ });
1996
+ await this.auditLogsService.logMagicLinkFailed({
1997
+ failureReason: 'Token metadata missing email (data integrity issue)',
1998
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
1999
+ userAgent: deviceInfo?.userAgent || 'unknown',
2000
+ });
2001
+ return {
2002
+ success: false,
2003
+ sessionId: '',
2004
+ userExists: false,
2005
+ factorLevel: AuthFactorLevel.FIRST,
2006
+ authMethod: AuthMethod.MAGIC_LINK,
2007
+ error: 'Invalid or expired magic link',
2008
+ errorCode: 'MAGIC_LINK_INVALID',
2009
+ retryAllowed: false,
2010
+ integrationTokens: [],
2011
+ requiresMFA: false,
2012
+ };
2013
+ }
2014
+ const tokenEmailBuf = Buffer.from(email.toLowerCase());
2015
+ const requestEmailBuf = Buffer.from(request.email.toLowerCase());
2016
+ if (tokenEmailBuf.length !== requestEmailBuf.length || !crypto.timingSafeEqual(tokenEmailBuf, requestEmailBuf)) {
2017
+ this.logger.warn('Magic link email mismatch — possible URL tampering or token theft', {
2018
+ userId,
2019
+ requestEmail: request.email,
2020
+ });
2021
+ await this.auditLogsService.logMagicLinkFailed({
2022
+ failureReason: 'Email mismatch between request and token',
2023
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
2024
+ userAgent: deviceInfo?.userAgent || 'unknown',
2025
+ });
2026
+ return {
2027
+ success: false,
2028
+ sessionId: '',
2029
+ userExists: false,
2030
+ factorLevel: AuthFactorLevel.FIRST,
2031
+ authMethod: AuthMethod.MAGIC_LINK,
2032
+ error: 'Invalid or expired magic link',
2033
+ errorCode: 'MAGIC_LINK_INVALID',
2034
+ retryAllowed: false,
2035
+ integrationTokens: [],
2036
+ requiresMFA: false,
2037
+ };
2038
+ }
2039
+ // Load the user
2040
+ let user = null;
2041
+ try {
2042
+ user = await this.userLookup.findUserById(ec, userId);
2043
+ }
2044
+ catch {
2045
+ // Suppress
2046
+ }
2047
+ if (!user) {
2048
+ return {
2049
+ success: false,
2050
+ sessionId: '',
2051
+ userExists: false,
2052
+ factorLevel: AuthFactorLevel.FIRST,
2053
+ authMethod: AuthMethod.MAGIC_LINK,
2054
+ error: 'User not found',
2055
+ errorCode: 'USER_NOT_FOUND',
2056
+ retryAllowed: false,
2057
+ integrationTokens: [],
2058
+ requiresMFA: false,
2059
+ };
2060
+ }
2061
+ // Verify user is active — reject suspended/locked/pending users
2062
+ const userStatus = user.status;
2063
+ if (userStatus && userStatus !== UserStatus.ACTIVE) {
2064
+ await this.auditLogsService.logMagicLinkFailed({
2065
+ failureReason: `Account is not active (status: ${userStatus})`,
2066
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
2067
+ userAgent: deviceInfo?.userAgent || 'unknown',
2068
+ });
2069
+ return {
2070
+ success: false,
2071
+ sessionId: '',
2072
+ userExists: true,
2073
+ factorLevel: AuthFactorLevel.FIRST,
2074
+ authMethod: AuthMethod.MAGIC_LINK,
2075
+ error: 'Account is not active',
2076
+ errorCode: 'ACCOUNT_INACTIVE',
2077
+ retryAllowed: false,
2078
+ integrationTokens: [],
2079
+ requiresMFA: false,
2080
+ };
2081
+ }
2082
+ // Resolve scope via domain lookup (mirrors identify() pattern)
2083
+ let resolvedOrganizationId;
2084
+ if (email) {
2085
+ const emailDomain = email.split('@')[1]?.toLowerCase();
2086
+ if (emailDomain) {
2087
+ try {
2088
+ const domainOrgLookup = await this.domainToOrgLookup.findOrgByDomain(ec, emailDomain);
2089
+ resolvedOrganizationId = domainOrgLookup?.scopeId;
2090
+ }
2091
+ catch {
2092
+ this.logDebug('Domain-to-org lookup failed during magic link verify (non-fatal)', { emailDomain });
2093
+ }
2094
+ }
2095
+ }
2096
+ // Create a session for this auth flow
2097
+ const sessionId = this.sessionStore.generateSessionId();
2098
+ await this.createSession(sessionId, AuthenticationSessionState.FIRST_FACTOR_COMPLETED, {
2099
+ deviceInfo,
2100
+ activeUserType,
2101
+ });
2102
+ // Update session with user info (including organizationId for downstream MFA/SSO checks)
2103
+ await this.updateSession(sessionId, {
2104
+ email,
2105
+ userExists: true,
2106
+ userId: userId,
2107
+ completedFactors: [AuthMethod.MAGIC_LINK],
2108
+ currentFactor: AuthFactorLevel.FIRST,
2109
+ organizationId: resolvedOrganizationId,
2110
+ });
2111
+ // Audit success
2112
+ await this.auditLogsService.logMagicLinkVerified({
2113
+ userId: userId,
2114
+ email,
2115
+ sessionId,
2116
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
2117
+ userAgent: deviceInfo?.userAgent || 'unknown',
2118
+ });
2119
+ // Reset global lockout counter — magic link proves email ownership (high assurance)
2120
+ if (email) {
2121
+ await this._resetGlobalAttempts(email);
2122
+ }
2123
+ // AUTH-14: Use org-override-aware policy for magic link flows
2124
+ const magicLinkPolicy = await this._resolveAuthPolicyWithOrgOverrides(ec, activeUserType, userId);
2125
+ const mfaCheck = await this._shouldRequireMFA(ec, userId, resolvedOrganizationId, AuthMethod.MAGIC_LINK, magicLinkPolicy);
2126
+ if (mfaCheck.required) {
2127
+ const mfaResolution = await this._resolveUsableMfaMethods(mfaCheck.enrolledMethods, magicLinkPolicy);
2128
+ await this.updateSession(sessionId, {
2129
+ state: AuthenticationSessionState.MFA_REQUIRED,
2130
+ requiresMFA: true,
2131
+ requireStrongMFA: mfaResolution.requireStrongMFA,
2132
+ availableSecondFactorMethods: mfaResolution.availableMethods,
2133
+ enrolledSecondFactorMethods: mfaCheck.enrolledMethods,
2134
+ usableSecondFactorMethods: mfaResolution.usableMethods,
2135
+ });
2136
+ return {
2137
+ success: false,
2138
+ sessionId,
2139
+ userExists: true,
2140
+ factorLevel: AuthFactorLevel.FIRST,
2141
+ authMethod: AuthMethod.MAGIC_LINK,
2142
+ requiresMFA: true,
2143
+ availableMFAMethods: mfaResolution.availableMethods,
2144
+ mfaMethodsRequired: AuthenticationOrchestratorBackendService_1.DEFAULT_MFA_METHODS_REQUIRED,
2145
+ enrolledSecondFactorMethods: mfaCheck.enrolledMethods,
2146
+ usableSecondFactorMethods: mfaResolution.usableMethods,
2147
+ completedFactors: [AuthMethod.MAGIC_LINK],
2148
+ retryAllowed: true,
2149
+ integrationTokens: [],
2150
+ };
2151
+ }
2152
+ // Complete authentication — issue tokens
2153
+ await this.updateSession(sessionId, {
2154
+ state: AuthenticationSessionState.COMPLETED,
2155
+ });
2156
+ const updatedSession = await this.getSession(sessionId);
2157
+ if (!updatedSession) {
2158
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
2159
+ context: { message: 'Session lost after magic link verification' },
2160
+ });
2161
+ }
2162
+ const tokens = await this.tokenIssuer.issueTokens(updatedSession, {
2163
+ includeRefreshToken: true,
2164
+ lastAuthenticatedAt: Math.floor(Date.now() / 1000),
2165
+ });
2166
+ // Audit login
2167
+ await this.auditLogsService.logUserLogin({
2168
+ userId: userId,
2169
+ ipAddress: deviceInfo?.ipAddress || 'unknown',
2170
+ userAgent: deviceInfo?.userAgent || 'unknown',
2171
+ authMethod: AuthMethod.MAGIC_LINK,
2172
+ email,
2173
+ sessionId,
2174
+ });
2175
+ // Clean up session
2176
+ await this.removeSession(sessionId);
2177
+ return this._buildAuthenticationSuccessMethod(sessionId, AuthFactorLevel.FIRST, AuthMethod.MAGIC_LINK, tokens.accessToken, {
2178
+ refreshToken: tokens.refreshToken,
2179
+ completedFactors: [AuthMethod.MAGIC_LINK],
2180
+ });
2181
+ }
2182
+ // ===============================
2183
+ // SMS OTP (Phase G2)
2184
+ // ===============================
2185
+ /**
2186
+ * Send an SMS OTP code to the user's verified phone number.
2187
+ * Can be used as first factor or second factor depending on config.
2188
+ * Rate limited with dual-window (burst + hourly).
2189
+ */
2190
+ async sendSMSOTP(ec, sessionId, phoneNumber) {
2191
+ if (!this._isMethodEnabledGlobally(AuthMethod.SMS_OTP)) {
2192
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
2193
+ context: { message: 'SMS OTP authentication is not enabled' },
2194
+ });
2195
+ }
2196
+ const session = await this.getSession(sessionId);
2197
+ if (!session) {
2198
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
2199
+ customMessageReference: ErrorCustomMessageReference.AUTHENTICATION_SESSION_INVALID,
2200
+ context: { sessionId },
2201
+ });
2202
+ }
2203
+ // Validate session state — allow states valid for first-factor or second-factor OTP send
2204
+ const validSendStates = [
2205
+ AuthenticationSessionState.IDENTIFIED,
2206
+ AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS,
2207
+ AuthenticationSessionState.FIRST_FACTOR_COMPLETED,
2208
+ AuthenticationSessionState.MFA_REQUIRED,
2209
+ ];
2210
+ if (!validSendStates.includes(session.state)) {
2211
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
2212
+ context: { message: 'Session is not in a valid state for SMS OTP send' },
2213
+ });
2214
+ }
2215
+ // Determine the phone number to send to
2216
+ let targetPhone = phoneNumber;
2217
+ if (!targetPhone) {
2218
+ const userId = session.userId;
2219
+ if (userId) {
2220
+ try {
2221
+ targetPhone = await this.credentialOps.getVerifiedPhone(ec, userId);
2222
+ }
2223
+ catch {
2224
+ // Suppress
2225
+ }
2226
+ }
2227
+ }
2228
+ if (!targetPhone) {
2229
+ throw this.errorBuilder.buildError(ErrorType.VALIDATION, undefined, {
2230
+ context: { message: 'No verified phone number available for SMS OTP' },
2231
+ });
2232
+ }
2233
+ // Dual-window rate limiting
2234
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.SMS_OTP_BURST}${targetPhone}:burst`, this.otpConfig.smsOtp.rateLimitBurst, 60);
2235
+ await this.rateLimitService.checkRateLimit(`${AUTH_REDIS_KEYS.SMS_OTP_BURST}${targetPhone}:hourly`, this.otpConfig.smsOtp.rateLimitHourly, 3600);
2236
+ const userId = session.userId;
2237
+ if (userId) {
2238
+ // Revoke existing SMS_OTP tokens
2239
+ await this.consumableTokenService.revokeTokensByRelatedId(userId, CoreConsumableTokenTypes.SMS_OTP);
2240
+ }
2241
+ // Generate OTP code
2242
+ const otpCode = this._generateOTP(this.otpConfig.smsOtp.otpLength);
2243
+ // Store as consumable token
2244
+ await this.consumableTokenService.createToken({
2245
+ tokenType: CoreConsumableTokenTypes.SMS_OTP,
2246
+ consumptionMode: ConsumableToken_ConsumptionMode.SINGLE_USE,
2247
+ expiresIn: { value: this.otpConfig.smsOtp.expiryMinutes, unit: DurationUnit.MINUTES },
2248
+ userId: userId,
2249
+ resourceIdentifier: CoreResourceType.USERS,
2250
+ relatedId: userId || targetPhone,
2251
+ metadata: {
2252
+ otpCode,
2253
+ sessionId,
2254
+ phoneNumber: targetPhone,
2255
+ },
2256
+ });
2257
+ // Audit
2258
+ await this.auditLogsService.logSMSOTPSent({
2259
+ phoneNumber: targetPhone,
2260
+ factorLevel: session.currentFactor || AuthFactorLevel.FIRST,
2261
+ sessionId,
2262
+ ipAddress: session.deviceInfo?.ipAddress || 'unknown',
2263
+ userAgent: session.deviceInfo?.userAgent || 'unknown',
2264
+ });
2265
+ // Update session state to reflect pending OTP verification
2266
+ const isSecondFactor = session.state === AuthenticationSessionState.FIRST_FACTOR_COMPLETED
2267
+ || session.state === AuthenticationSessionState.MFA_REQUIRED;
2268
+ await this.updateSession(sessionId, {
2269
+ state: isSecondFactor
2270
+ ? AuthenticationSessionState.MFA_REQUIRED
2271
+ : AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS,
2272
+ currentFactor: isSecondFactor ? AuthFactorLevel.SECOND : AuthFactorLevel.FIRST,
2273
+ });
2274
+ this.logDebug('SMS OTP generated', { sessionId, phoneNumber: targetPhone });
2275
+ return { sent: true, otpCode, targetPhone };
2276
+ }
2277
+ /**
2278
+ * Verify an SMS OTP code. Supports both first and second factor.
2279
+ * Called from authenticate() dispatch — does NOT issue tokens (authenticate() handles completion).
2280
+ * Uses constant-time comparison for the OTP code.
2281
+ */
2282
+ async authenticateSMSOTP(ec, request) {
2283
+ if (!this._isMethodEnabledGlobally(AuthMethod.SMS_OTP)) {
2284
+ throw this.errorBuilder.buildError(ErrorType.AUTHENTICATION, undefined, {
2285
+ context: { message: 'SMS OTP authentication is not enabled' },
2286
+ });
2287
+ }
2288
+ const { sessionId, token, factorLevel } = request;
2289
+ const session = await this.getSession(sessionId);
2290
+ if (!session) {
2291
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, { retryAllowed: false });
2292
+ }
2293
+ // Allow-list: SMS OTP can be first or second factor, so accept states valid for either.
2294
+ // Reject unexpected states (COMPLETED, LOCKED, CREATED) to prevent replay or abuse.
2295
+ const validSMSOTPStates = [
2296
+ AuthenticationSessionState.IDENTIFIED,
2297
+ AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS,
2298
+ AuthenticationSessionState.FIRST_FACTOR_COMPLETED,
2299
+ AuthenticationSessionState.MFA_REQUIRED,
2300
+ AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS,
2301
+ ];
2302
+ if (!validSMSOTPStates.includes(session.state)) {
2303
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, {
2304
+ retryAllowed: false,
2305
+ authMethod: AuthMethod.SMS_OTP,
2306
+ });
2307
+ }
2308
+ if (!token) {
2309
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, {
2310
+ retryAllowed: true,
2311
+ authMethod: AuthMethod.SMS_OTP,
2312
+ });
2313
+ }
2314
+ // Update session to in-progress
2315
+ const inProgressState = factorLevel === AuthFactorLevel.SECOND
2316
+ ? AuthenticationSessionState.SECOND_FACTOR_IN_PROGRESS
2317
+ : AuthenticationSessionState.FIRST_FACTOR_IN_PROGRESS;
2318
+ await this.updateSession(sessionId, {
2319
+ state: inProgressState,
2320
+ currentFactor: factorLevel,
2321
+ });
2322
+ const userId = session.userId;
2323
+ if (!userId) {
2324
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, { retryAllowed: false });
2325
+ }
2326
+ // Find matching SMS_OTP token and verify with constant-time comparison
2327
+ const isValid = await this._verifySMSOTP(userId, sessionId, token);
2328
+ if (!isValid) {
2329
+ const { locked } = await this.incrementSessionAttempts(ec, sessionId);
2330
+ await this.auditLogsService.logSMSOTPFailed({
2331
+ phoneNumber: request.phoneNumber,
2332
+ factorLevel,
2333
+ failureReason: locked ? 'Account locked after too many attempts' : 'Invalid OTP code',
2334
+ sessionId,
2335
+ ipAddress: session.deviceInfo?.ipAddress || 'unknown',
2336
+ userAgent: session.deviceInfo?.userAgent || 'unknown',
2337
+ });
2338
+ return this.__buildAuthenticationErrorMethod(sessionId, factorLevel, {
2339
+ retryAllowed: !locked,
2340
+ authMethod: AuthMethod.SMS_OTP,
2341
+ });
2342
+ }
2343
+ // Audit success
2344
+ await this.auditLogsService.logSMSOTPVerified({
2345
+ userId: userId,
2346
+ phoneNumber: request.phoneNumber || 'unknown',
2347
+ factorLevel,
2348
+ sessionId,
2349
+ ipAddress: session.deviceInfo?.ipAddress || 'unknown',
2350
+ userAgent: session.deviceInfo?.userAgent || 'unknown',
2351
+ });
2352
+ // Update session (mirrors authenticateEmailOTP pattern)
2353
+ await this._updateSessionAfterSuccessfulAuth(ec, sessionId, userId, AuthMethod.SMS_OTP);
2354
+ const updatedSession = await this.getSession(sessionId);
2355
+ return this._buildAuthenticationSuccessMethod(sessionId, factorLevel, AuthMethod.SMS_OTP, '', // Tokens issued by authenticate() after completion check
2356
+ { completedFactors: updatedSession?.completedFactors || [] });
2357
+ }
2358
+ /**
2359
+ * Verify an SMS OTP code using constant-time comparison.
2360
+ * Mirrors the _verifyEmailOTP pattern.
2361
+ */
2362
+ async _verifySMSOTP(userId, sessionId, submittedCode) {
2363
+ try {
2364
+ const tokens = await this.consumableTokenService.findTokensByRelatedId(userId, CoreConsumableTokenTypes.SMS_OTP);
2365
+ for (const tokenDoc of tokens) {
2366
+ const metadata = tokenDoc.metadata;
2367
+ if (!metadata?.otpCode || !metadata?.sessionId)
2368
+ continue;
2369
+ const storedCode = String(metadata.otpCode);
2370
+ const storedSession = String(metadata.sessionId);
2371
+ if (storedCode.length !== submittedCode.length || storedSession.length !== sessionId.length)
2372
+ continue;
2373
+ const codeMatch = crypto.timingSafeEqual(Buffer.from(storedCode), Buffer.from(submittedCode));
2374
+ const sessionMatch = crypto.timingSafeEqual(Buffer.from(storedSession), Buffer.from(sessionId));
2375
+ if (codeMatch && sessionMatch) {
2376
+ try {
2377
+ await this.consumableTokenService.consumeToken(tokenDoc.token);
2378
+ return true;
2379
+ }
2380
+ catch {
2381
+ continue;
2382
+ }
2383
+ }
2384
+ }
2385
+ return false;
2386
+ }
2387
+ catch (error) {
2388
+ if (isWildoBackendError(error)) {
2389
+ throw error;
2390
+ }
2391
+ this.logger.error('Failed to verify SMS OTP', {
2392
+ userId,
2393
+ sessionId,
2394
+ error: error instanceof Error ? error.message : String(error),
2395
+ });
2396
+ return false;
2397
+ }
2398
+ }
2399
+ /**
2400
+ * Generate a cryptographically random N-digit numeric OTP.
2401
+ */
2402
+ _generateOTP(length) {
2403
+ const max = Math.pow(10, length);
2404
+ const min = Math.pow(10, length - 1);
2405
+ // Use crypto.randomInt for unbiased random number generation
2406
+ const { randomInt } = crypto;
2407
+ return String(randomInt(min, max));
2408
+ }
2409
+ // ===============================
2410
+ // COMPLETION LOGIC
2411
+ // ===============================
2412
+ _isAuthenticationComplete(session, currentFactorLevel, authMethod) {
2413
+ const completedFactors = session.completedFactors || [];
2414
+ const hasFirstFactor = completedFactors.some((factor) => AuthUtils.canBeFirstFactor(factor));
2415
+ const hasSecondFactor = completedFactors.some((factor) => AuthUtils.canBeSecondFactor(factor));
2416
+ switch (currentFactorLevel) {
2417
+ case AuthFactorLevel.FIRST:
2418
+ // If MFA is required for this session (set during first-factor success based on
2419
+ // app MFA policy + user's enrolled second-factor methods), first factor alone is not enough.
2420
+ if (session.requiresMFA) {
2421
+ return false;
2422
+ }
2423
+ return session.state === AuthenticationSessionState.FIRST_FACTOR_COMPLETED && hasFirstFactor;
2424
+ case AuthFactorLevel.SECOND:
2425
+ return hasFirstFactor && hasSecondFactor && completedFactors.length >= 2;
2426
+ default:
2427
+ return false;
2428
+ }
2429
+ }
2430
+ // ===============================
2431
+ // RESPONSE BUILDERS
2432
+ // ===============================
2433
+ _buildIdentificationErrorResponse(sessionId, factorLevel, retryAllowed = true, session) {
2434
+ return AuthenticationResponseSchema.parse({
2435
+ success: false,
2436
+ sessionId,
2437
+ userExists: session?.userExists ?? false,
2438
+ factorLevel,
2439
+ retryAllowed,
2440
+ remainingAttempts: session ? session.maxAttempts - session.attempts : undefined,
2441
+ lockoutUntil: session?.lockoutUntil,
2442
+ requiresMFA: false,
2443
+ integrationTokens: [],
2444
+ });
2445
+ }
2446
+ _buildAuthenticationSuccessMethod(sessionId, factorLevel, authMethod, accessToken, options = {}) {
2447
+ return AuthenticationResponseSchema.parse({
2448
+ success: !options.requiresMFA,
2449
+ sessionId,
2450
+ userExists: true,
2451
+ factorLevel,
2452
+ authMethod,
2453
+ accessToken,
2454
+ refreshToken: options.refreshToken,
2455
+ expiresIn: options.expiresIn,
2456
+ user: options.user,
2457
+ integrationTokens: options.integrationTokens || [],
2458
+ requiresMFA: options.requiresMFA || false,
2459
+ availableMFAMethods: options.availableMFAMethods,
2460
+ mfaMethodsRequired: options.mfaMethodsRequired,
2461
+ enrolledSecondFactorMethods: options.enrolledSecondFactorMethods || [],
2462
+ usableSecondFactorMethods: options.usableSecondFactorMethods || [],
2463
+ completedFactors: options.completedFactors || [authMethod],
2464
+ retryAllowed: true,
2465
+ challengeData: options.challengeData,
2466
+ redirectUrl: options.redirectUrl,
2467
+ nextStep: options.nextStep,
2468
+ availableEnrollmentMethods: options.availableEnrollmentMethods || [],
2469
+ });
2470
+ }
2471
+ __buildAuthenticationErrorMethod(sessionId, factorLevel, options = {}) {
2472
+ // Note: we don't call getSession here synchronously because this is used in sync error builders.
2473
+ // The session data is passed through options when available.
2474
+ return AuthenticationResponseSchema.parse({
2475
+ success: false,
2476
+ sessionId,
2477
+ userExists: false,
2478
+ factorLevel,
2479
+ authMethod: options.authMethod,
2480
+ retryAllowed: options.retryAllowed ?? true,
2481
+ remainingAttempts: options.remainingAttempts,
2482
+ lockoutUntil: options.lockoutUntil,
2483
+ requiresMFA: options.requiresMFA ?? false,
2484
+ availableMFAMethods: options.availableMFAMethods,
2485
+ mfaMethodsRequired: options.mfaMethodsRequired,
2486
+ completedFactors: options.completedFactors || [],
2487
+ integrationTokens: [],
2488
+ challengeData: options.challengeData,
2489
+ redirectUrl: options.redirectUrl,
2490
+ });
2491
+ }
2492
+ async _buildAvailableMethodObject(ec, method, domainOrgLookup, authPolicy) {
2493
+ const globalAuth = this.appConfigService.config.auth;
2494
+ const policy = authPolicy ?? AuthenticationOrchestratorBackendService_1.FALLBACK_AUTH_POLICY;
2495
+ const isEnabled = policy.authMethodsEnabled[method];
2496
+ if (!isEnabled) {
2497
+ return null;
2498
+ }
2499
+ const factorType = AuthUtils.getFactorType(method);
2500
+ const category = AuthUtils.getMethodCategory(method);
2501
+ const canBeFirstFactor = AuthUtils.canBeFirstFactor(method);
2502
+ const canBeSecondFactor = AuthUtils.canBeSecondFactor(method);
2503
+ const organizationRestricted = AuthUtils.isOrganizationRestricted(method);
2504
+ const supportsIntegrations = AuthUtils.supportsIntegrationAccess(method);
2505
+ let required = false;
2506
+ if (canBeSecondFactor && policy.mfaPolicy.requireMFA) {
2507
+ required = true;
2508
+ }
2509
+ let oauth2ProviderRefs = [];
2510
+ let ssoIds = [];
2511
+ let availableIntegrations = [];
2512
+ let config;
2513
+ switch (method) {
2514
+ case AuthMethod.EXTERNAL_OAUTH2: {
2515
+ let oauth2Providers = Object.keys(globalAuth.ssoProviders || {});
2516
+ if (domainOrgLookup && ec) {
2517
+ oauth2Providers = await this.oauth2Resolver.filterProviders(ec, domainOrgLookup.scopeType, domainOrgLookup.scopeId, oauth2Providers);
2518
+ }
2519
+ if (oauth2Providers.length === 0)
2520
+ return null;
2521
+ availableIntegrations = oauth2Providers;
2522
+ oauth2ProviderRefs = oauth2Providers;
2523
+ break;
2524
+ }
2525
+ case AuthMethod.MAGIC_LINK:
2526
+ case AuthMethod.SMS_OTP:
2527
+ break;
2528
+ case AuthMethod.PASSKEY:
2529
+ config = globalAuth.passkeyConfig
2530
+ ? { rpName: globalAuth.passkeyConfig.rpName, rpId: globalAuth.passkeyConfig.rpId }
2531
+ : undefined;
2532
+ break;
2533
+ case AuthMethod.ORG_OPENID_CONNECT: {
2534
+ if (!domainOrgLookup || domainOrgLookup.matchedProviderType !== 'oidc') {
2535
+ return null;
2536
+ }
2537
+ const providerInfo = this.domainToOrgLookup.getSSOProviderInfo(domainOrgLookup);
2538
+ if (!providerInfo)
2539
+ return null;
2540
+ ssoIds = [providerInfo.connectionId];
2541
+ config = {
2542
+ displayName: providerInfo.displayName,
2543
+ providerRef: providerInfo.providerRef,
2544
+ connectionId: providerInfo.connectionId,
2545
+ scopeType: domainOrgLookup.scopeType,
2546
+ scopeId: domainOrgLookup.scopeId,
2547
+ organizationId: domainOrgLookup.organizationId,
2548
+ };
2549
+ if (domainOrgLookup.enforcement?.requireSSO) {
2550
+ required = true;
2551
+ }
2552
+ break;
2553
+ }
2554
+ case AuthMethod.ORG_SAML: {
2555
+ if (!domainOrgLookup || domainOrgLookup.matchedProviderType !== 'saml') {
2556
+ return null;
2557
+ }
2558
+ const samlProviderInfo = this.domainToOrgLookup.getSSOProviderInfo(domainOrgLookup);
2559
+ if (!samlProviderInfo)
2560
+ return null;
2561
+ ssoIds = [samlProviderInfo.connectionId];
2562
+ config = {
2563
+ displayName: samlProviderInfo.displayName,
2564
+ providerRef: samlProviderInfo.providerRef,
2565
+ connectionId: samlProviderInfo.connectionId,
2566
+ loginUrl: `/auth/saml/login/${samlProviderInfo.connectionId}`,
2567
+ scopeType: domainOrgLookup.scopeType,
2568
+ scopeId: domainOrgLookup.scopeId,
2569
+ organizationId: domainOrgLookup.organizationId,
2570
+ };
2571
+ if (domainOrgLookup.enforcement?.requireSSO) {
2572
+ required = true;
2573
+ }
2574
+ break;
2575
+ }
2576
+ default:
2577
+ break;
2578
+ }
2579
+ return {
2580
+ method,
2581
+ factorType,
2582
+ category,
2583
+ canBeFirstFactor,
2584
+ canBeSecondFactor,
2585
+ required,
2586
+ oauth2ProviderRefs,
2587
+ ssoIds,
2588
+ organizationRestricted,
2589
+ supportsIntegrations,
2590
+ availableIntegrations,
2591
+ config,
2592
+ };
2593
+ }
2594
+ };
2595
+ AuthenticationOrchestratorBackendService = AuthenticationOrchestratorBackendService_1 = __decorate([
2596
+ injectable(),
2597
+ __param(0, inject(SAAS_SERVICE_TYPES.Logger)),
2598
+ __param(1, inject(SAAS_SERVICE_TYPES.AppConfigService)),
2599
+ __param(2, inject(SAAS_SERVICE_TYPES.ErrorBuilderService)),
2600
+ __param(3, inject(SAAS_SERVICE_TYPES.ServicesRegistryHandlerService)),
2601
+ __param(4, inject(SAAS_SERVICE_TYPES.AuditLogsService)),
2602
+ __param(5, inject(SAAS_SERVICE_TYPES.AuthSessionStore)),
2603
+ __param(6, inject(SAAS_SERVICE_TYPES.AuthCredentialVerifier)),
2604
+ __param(7, inject(SAAS_SERVICE_TYPES.AuthTokenIssuer)),
2605
+ __param(8, inject(SAAS_SERVICE_TYPES.ConsumableTokenService)),
2606
+ __param(9, inject(SAAS_SERVICE_TYPES.RedisService)),
2607
+ __param(10, inject(SAAS_SERVICE_TYPES.RateLimitBackendService)),
2608
+ __param(11, inject(SAAS_SERVICE_TYPES.DomainToOrgLookupService)),
2609
+ __param(12, inject(SAAS_SERVICE_TYPES.AuthOrganizationConfigurationService)),
2610
+ __param(13, inject(SAAS_SERVICE_TYPES.WebAuthnService)),
2611
+ __param(14, inject(SAAS_SERVICE_TYPES.OAuth2ConnectionResolverService)),
2612
+ __param(15, inject(SAAS_SERVICE_TYPES.AuthUserLookupService)),
2613
+ __param(16, inject(SAAS_SERVICE_TYPES.AuthCredentialOpsService)),
2614
+ __metadata("design:paramtypes", [LoggerService,
2615
+ AppConfigurationService,
2616
+ ErrorBuilderBackendService, Function, AuditLogsBackendService,
2617
+ AuthSessionStoreBackendService,
2618
+ AuthCredentialVerifierBackendService,
2619
+ AuthTokenIssuerBackendService,
2620
+ ConsumableTokenBackendService,
2621
+ RedisService,
2622
+ RateLimitBackendService,
2623
+ DomainToOrgLookupBackendService,
2624
+ AuthOrganizationConfigurationService,
2625
+ WebAuthnBackendService,
2626
+ OAuth2ConnectionResolverBackendService,
2627
+ AuthUserLookupBackendService,
2628
+ AuthCredentialOpsBackendService])
2629
+ ], AuthenticationOrchestratorBackendService);
2630
+ export { AuthenticationOrchestratorBackendService };
2631
+ //# sourceMappingURL=authentication-orchestrator.backend.service.js.map