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

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 (972) hide show
  1. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
  2. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
  3. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
  4. package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
  5. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
  6. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
  7. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
  8. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
  9. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
  10. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
  11. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
  12. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
  13. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +199 -0
  14. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
  15. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
  16. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
  17. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
  18. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
  19. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts +14 -3
  20. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
  21. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +138 -24
  22. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
  23. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts +3 -1
  24. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
  25. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js +8 -3
  26. package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
  27. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts +11 -0
  28. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
  29. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js +11 -2
  30. package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js.map +1 -1
  31. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
  32. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
  33. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
  34. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
  35. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
  36. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
  37. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
  38. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
  39. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +48 -4
  40. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
  41. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +102 -30
  42. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
  43. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
  44. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
  45. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
  46. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
  47. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
  48. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
  49. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
  50. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
  51. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
  52. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js +16 -0
  53. package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js.map +1 -1
  54. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts +20 -6
  55. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
  56. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +96 -32
  57. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
  58. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts +3 -1
  59. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
  60. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js +32 -7
  61. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js.map +1 -1
  62. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts +8 -5
  63. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
  64. package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.js.map +1 -1
  65. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +80 -0
  66. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
  67. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +298 -23
  68. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
  69. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts +71 -1
  70. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
  71. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +85 -5
  72. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
  73. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +21 -0
  74. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
  75. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +146 -4
  76. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
  77. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
  78. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
  79. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
  80. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts +3 -26
  81. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
  82. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js +3 -68
  83. package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js.map +1 -1
  84. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
  85. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
  86. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
  87. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
  88. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
  89. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
  90. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
  91. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
  92. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
  93. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +533 -43
  94. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
  95. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
  96. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
  97. package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
  98. package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
  99. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
  100. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
  101. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
  102. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
  103. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
  104. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
  105. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
  106. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
  107. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
  108. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
  109. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
  110. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
  111. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
  112. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
  113. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
  114. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
  115. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
  116. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
  117. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
  118. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
  119. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
  120. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
  121. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
  122. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
  123. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
  124. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
  125. package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
  126. package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
  127. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
  128. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
  129. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
  130. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
  131. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
  132. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +54 -13
  133. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
  134. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
  135. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
  136. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
  137. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
  138. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
  139. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
  140. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
  141. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
  142. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
  143. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  144. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
  145. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
  146. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
  147. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
  148. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
  149. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
  150. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
  151. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
  152. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
  153. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
  154. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
  155. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
  156. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
  157. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
  158. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
  159. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
  160. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
  161. package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
  162. package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
  163. package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
  164. package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
  165. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
  166. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
  167. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +263 -13
  168. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
  169. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +376 -58
  170. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
  171. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +264 -7
  172. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
  173. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +414 -5
  174. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
  175. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
  176. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
  177. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
  178. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +16 -0
  179. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -0
  180. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +140 -0
  181. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -0
  182. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
  183. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
  184. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +65 -6
  185. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
  186. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
  187. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
  188. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
  189. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
  190. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
  191. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +45 -0
  192. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
  193. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
  194. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
  195. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
  196. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
  197. package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
  198. package/dist/esm/config/custom/application-config-controller.backend.service.js +7 -1
  199. package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -1
  200. package/dist/esm/config/models/app-config.backend.schemas.d.ts +146 -46
  201. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
  202. package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
  203. package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
  204. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
  205. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
  206. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
  207. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
  208. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
  209. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
  210. package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
  211. package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
  212. package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
  213. package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
  214. package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
  215. package/dist/esm/config/services/app-configuration.backend.utils.d.ts +43 -1
  216. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
  217. package/dist/esm/config/services/app-configuration.backend.utils.js +52 -3
  218. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
  219. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
  220. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
  221. package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
  222. package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
  223. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts +2 -2
  224. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js +2 -2
  225. package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js.map +1 -1
  226. package/dist/esm/databases/models/filter.backend.schemas.js +2 -2
  227. package/dist/esm/databases/models/filter.backend.schemas.js.map +1 -1
  228. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
  229. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js +20 -1
  230. package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js.map +1 -1
  231. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
  232. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
  233. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
  234. package/dist/esm/databases/services/redis.service.d.ts +27 -0
  235. package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
  236. package/dist/esm/databases/services/redis.service.js +29 -0
  237. package/dist/esm/databases/services/redis.service.js.map +1 -1
  238. package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
  239. package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
  240. package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
  241. package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
  242. package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
  243. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
  244. package/dist/esm/errors/services/error-handler.backend.service.js +134 -8
  245. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
  246. package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
  247. package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
  248. package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
  249. package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
  250. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
  251. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
  252. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
  253. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
  254. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
  255. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
  256. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
  257. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
  258. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts +41 -0
  259. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -0
  260. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js +40 -0
  261. package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js.map +1 -0
  262. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts +64 -0
  263. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -0
  264. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js +193 -0
  265. package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js.map +1 -0
  266. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +72 -4
  267. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
  268. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +60 -19
  269. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
  270. package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
  271. package/dist/esm/external-data/external-data-transform.backend.js +7 -1
  272. package/dist/esm/external-data/external-data-transform.backend.js.map +1 -1
  273. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts +2 -0
  274. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
  275. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js +13 -0
  276. package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js.map +1 -1
  277. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
  278. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
  279. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
  280. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
  281. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
  282. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
  283. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
  284. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
  285. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
  286. package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
  287. package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
  288. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
  289. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
  290. package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
  291. package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
  292. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
  293. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
  294. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
  295. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
  296. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
  297. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
  298. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
  299. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
  300. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
  301. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
  302. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
  303. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
  304. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
  305. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
  306. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
  307. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
  308. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
  309. package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
  310. package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
  311. package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
  312. package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
  313. package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
  314. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +306 -7
  315. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
  316. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +539 -45
  317. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
  318. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
  319. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
  320. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
  321. package/dist/esm/files/controllers/file.controller.d.ts +24 -1
  322. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
  323. package/dist/esm/files/controllers/file.controller.js +83 -11
  324. package/dist/esm/files/controllers/file.controller.js.map +1 -1
  325. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts +17 -0
  326. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -0
  327. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js +1 -0
  328. package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -0
  329. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +5 -1
  330. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
  331. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +76 -13
  332. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
  333. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +18 -0
  334. package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
  335. package/dist/esm/files/services/file-operation-handler.backend.service.js +36 -28
  336. package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
  337. package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
  338. package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
  339. package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
  340. package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
  341. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
  342. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
  343. package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
  344. package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
  345. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +214 -0
  346. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -0
  347. package/dist/esm/files/services/file-upload-grant.backend.service.js +566 -0
  348. package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -0
  349. package/dist/esm/files/services/files.backend.service.d.ts +87 -0
  350. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
  351. package/dist/esm/files/services/files.backend.service.js +252 -19
  352. package/dist/esm/files/services/files.backend.service.js.map +1 -1
  353. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
  354. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
  355. package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
  356. package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
  357. package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
  358. package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
  359. package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
  360. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
  361. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
  362. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
  363. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
  364. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
  365. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
  366. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
  367. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
  368. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
  369. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
  370. package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
  371. package/dist/esm/files/utils/file-uploader.utils.js +12 -0
  372. package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
  373. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
  374. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
  375. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
  376. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
  377. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
  378. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
  379. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
  380. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
  381. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
  382. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
  383. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
  384. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
  385. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
  386. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
  387. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
  388. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
  389. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
  390. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +200 -44
  391. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
  392. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
  393. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
  394. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
  395. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
  396. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
  397. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
  398. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
  399. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
  400. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
  401. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
  402. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
  403. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
  404. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
  405. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
  406. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
  407. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
  408. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
  409. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
  410. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
  411. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
  412. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
  413. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
  414. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
  415. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
  416. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
  417. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
  418. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
  419. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
  420. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
  421. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
  422. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
  423. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
  424. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
  425. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
  426. package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
  427. package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
  428. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +107 -1
  429. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
  430. package/dist/esm/flows-actors/services/agents.backend.service.js +519 -56
  431. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
  432. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
  433. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
  434. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
  435. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
  436. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
  437. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
  438. package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
  439. package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
  440. package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
  441. package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
  442. package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
  443. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
  444. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
  445. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
  446. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
  447. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
  448. package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
  449. package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
  450. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
  451. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
  452. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
  453. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
  454. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts +151 -41
  455. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
  456. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +308 -143
  457. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
  458. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
  459. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
  460. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
  461. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
  462. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
  463. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
  464. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
  465. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
  466. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
  467. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
  468. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
  469. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
  470. package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
  471. package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
  472. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
  473. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
  474. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
  475. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
  476. package/dist/esm/index.d.ts +15 -5
  477. package/dist/esm/index.d.ts.map +1 -1
  478. package/dist/esm/index.js +45 -5
  479. package/dist/esm/index.js.map +1 -1
  480. package/dist/esm/inject/models/container.d.ts.map +1 -1
  481. package/dist/esm/inject/models/container.js +82 -10
  482. package/dist/esm/inject/models/container.js.map +1 -1
  483. package/dist/esm/inject/models/service-types.d.ts +20 -3
  484. package/dist/esm/inject/models/service-types.d.ts.map +1 -1
  485. package/dist/esm/inject/models/service-types.js +21 -3
  486. package/dist/esm/inject/models/service-types.js.map +1 -1
  487. package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
  488. package/dist/esm/mcp/controllers/mcp.controller.js +32 -4
  489. package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
  490. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts +34 -0
  491. package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
  492. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js +42 -0
  493. package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
  494. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +84 -1
  495. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
  496. package/dist/esm/mcp/services/mcp-server.backend.service.js +235 -11
  497. package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
  498. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts +64 -2
  499. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
  500. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +152 -6
  501. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
  502. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
  503. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
  504. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
  505. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
  506. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
  507. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
  508. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
  509. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
  510. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
  511. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
  512. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
  513. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
  514. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
  515. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
  516. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
  517. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
  518. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
  519. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
  520. package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
  521. package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
  522. package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
  523. package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
  524. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
  525. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
  526. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
  527. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
  528. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
  529. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
  530. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
  531. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
  532. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
  533. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
  534. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
  535. package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
  536. package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
  537. package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
  538. package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
  539. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
  540. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
  541. package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
  542. package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
  543. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
  544. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
  545. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
  546. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
  547. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
  548. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
  549. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
  550. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
  551. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
  552. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
  553. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
  554. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
  555. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
  556. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
  557. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
  558. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
  559. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
  560. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
  561. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
  562. package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
  563. package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
  564. package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
  565. package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
  566. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
  567. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
  568. package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
  569. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
  570. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
  571. package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
  572. package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
  573. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +108 -13
  574. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
  575. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +432 -101
  576. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
  577. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
  578. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
  579. package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
  580. package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
  581. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
  582. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
  583. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
  584. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
  585. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
  586. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  587. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +54 -7
  588. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
  589. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts +5 -5
  590. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
  591. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js +14 -13
  592. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js.map +1 -1
  593. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts +2 -1
  594. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
  595. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +18 -8
  596. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
  597. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
  598. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +20 -18
  599. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
  600. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
  601. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
  602. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
  603. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
  604. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
  605. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
  606. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
  607. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
  608. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
  609. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
  610. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
  611. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js +4 -1
  612. package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js.map +1 -1
  613. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
  614. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
  615. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
  616. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
  617. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
  618. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
  619. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
  620. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
  621. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
  622. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
  623. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
  624. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
  625. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
  626. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
  627. package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
  628. package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
  629. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
  630. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
  631. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
  632. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
  633. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
  634. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
  635. package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
  636. package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
  637. package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
  638. package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
  639. package/dist/esm/queue/job-consumer.backend.service.js +1 -4
  640. package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
  641. package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
  642. package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
  643. package/dist/esm/queue/job-executor.backend.service.js +1 -4
  644. package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
  645. package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
  646. package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
  647. package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
  648. package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
  649. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
  650. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
  651. package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
  652. package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
  653. package/dist/esm/queue/queue.backend.service.d.ts +3 -3
  654. package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
  655. package/dist/esm/queue/queue.backend.service.js +26 -4
  656. package/dist/esm/queue/queue.backend.service.js.map +1 -1
  657. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
  658. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
  659. package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
  660. package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
  661. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
  662. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
  663. package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
  664. package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
  665. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
  666. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
  667. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
  668. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
  669. package/dist/esm/requests/service/websocket.service.d.ts +9 -0
  670. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
  671. package/dist/esm/requests/service/websocket.service.js +88 -15
  672. package/dist/esm/requests/service/websocket.service.js.map +1 -1
  673. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
  674. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +16 -2
  675. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
  676. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
  677. package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
  678. package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
  679. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
  680. package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
  681. package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
  682. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
  683. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
  684. package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
  685. package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
  686. package/dist/esm/resources/services/resource-id.backend.service.js +3 -3
  687. package/dist/esm/resources/services/resource-id.backend.service.js.map +1 -1
  688. package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
  689. package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
  690. package/dist/esm/resources/services/resources-registry.backend.service.js +91 -7
  691. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
  692. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
  693. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
  694. package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
  695. package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
  696. package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
  697. package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
  698. package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
  699. package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
  700. package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
  701. package/dist/esm/runtime/services/execution-context-creator.backend.service.js +13 -7
  702. package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
  703. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
  704. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
  705. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
  706. package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
  707. package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
  708. package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
  709. package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
  710. package/dist/esm/runtime/services/start-application.backend.service.d.ts +47 -1
  711. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
  712. package/dist/esm/runtime/services/start-application.backend.service.js +343 -77
  713. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
  714. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
  715. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
  716. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
  717. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
  718. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
  719. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
  720. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
  721. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
  722. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
  723. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
  724. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
  725. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
  726. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
  727. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
  728. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
  729. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
  730. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
  731. package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
  732. package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
  733. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts +3 -23
  734. package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
  735. package/dist/esm/security/authentications/models/jwt.backend.schemas.js +20 -45
  736. package/dist/esm/security/authentications/models/jwt.backend.schemas.js.map +1 -1
  737. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
  738. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
  739. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
  740. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
  741. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
  742. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
  743. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
  744. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
  745. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
  746. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
  747. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
  748. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
  749. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
  750. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
  751. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
  752. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
  753. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
  754. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
  755. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
  756. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
  757. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
  758. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
  759. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
  760. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts +9 -1
  761. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
  762. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +77 -2
  763. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
  764. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
  765. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js +5 -3
  766. package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js.map +1 -1
  767. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
  768. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
  769. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
  770. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
  771. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
  772. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
  773. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
  774. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
  775. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
  776. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
  777. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
  778. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
  779. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
  780. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
  781. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +41 -1
  782. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
  783. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +87 -4
  784. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
  785. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
  786. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
  787. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
  788. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
  789. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
  790. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
  791. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
  792. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
  793. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
  794. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
  795. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
  796. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
  797. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
  798. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
  799. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
  800. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
  801. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
  802. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
  803. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
  804. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
  805. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
  806. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
  807. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
  808. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
  809. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
  810. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
  811. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
  812. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
  813. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
  814. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
  815. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
  816. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
  817. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
  818. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
  819. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
  820. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
  821. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
  822. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
  823. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
  824. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
  825. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
  826. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
  827. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
  828. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
  829. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
  830. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
  831. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js +24 -1
  832. package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js.map +1 -1
  833. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
  834. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
  835. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
  836. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
  837. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
  838. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
  839. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
  840. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts +117 -0
  841. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -0
  842. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js +104 -0
  843. package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js.map +1 -0
  844. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
  845. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
  846. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
  847. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
  848. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
  849. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
  850. package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
  851. package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
  852. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
  853. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
  854. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
  855. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
  856. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +175 -14
  857. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
  858. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +385 -49
  859. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
  860. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
  861. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
  862. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
  863. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
  864. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
  865. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
  866. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
  867. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
  868. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
  869. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
  870. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
  871. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
  872. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
  873. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
  874. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
  875. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
  876. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
  877. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
  878. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
  879. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
  880. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
  881. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
  882. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
  883. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
  884. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
  885. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  886. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
  887. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
  888. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
  889. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
  890. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
  891. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
  892. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
  893. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
  894. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
  895. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
  896. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
  897. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
  898. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
  899. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
  900. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
  901. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
  902. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
  903. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
  904. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
  905. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  906. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
  907. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
  908. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
  909. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
  910. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
  911. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
  912. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
  913. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
  914. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
  915. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
  916. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
  917. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
  918. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
  919. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
  920. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +18 -1
  921. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
  922. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +110 -74
  923. package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -1
  924. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts +22 -0
  925. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -0
  926. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js +22 -0
  927. package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js.map +1 -0
  928. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +17 -3
  929. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
  930. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js +12 -0
  931. package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -1
  932. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +41 -3
  933. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
  934. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +83 -20
  935. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
  936. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
  937. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
  938. package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
  939. package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
  940. package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
  941. package/dist/esm/security/jwt/services/jwt.backend.service.js +1 -18
  942. package/dist/esm/security/jwt/services/jwt.backend.service.js.map +1 -1
  943. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
  944. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
  945. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
  946. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
  947. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
  948. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
  949. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
  950. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
  951. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
  952. package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
  953. package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
  954. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
  955. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
  956. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
  957. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
  958. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
  959. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
  960. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
  961. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
  962. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
  963. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
  964. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
  965. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
  966. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
  967. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
  968. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
  969. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
  970. package/dist/tsconfig.build.tsbuildinfo +1 -1
  971. package/package.json +17 -9
  972. package/dist/esm/.builder.pid +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"scim.backend.controller.js","sourceRoot":"","sources":["../../../../../../src/security/scim/controllers/scim.backend.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SCIM 2.0 User Provisioning Controller — Step 20\n *\n * Receives user lifecycle events from identity providers (Okta, Azure AD, OneLogin)\n * via SCIM 2.0 protocol (RFC 7643 Core Schema, RFC 7644 Protocol).\n *\n * Decision 13: Lean SCIM — Users only in v1, no Groups, no generic adapter.\n * Critical Note #8: One controller, Users only, future extensions documented in code comments.\n * Critical Note #9: Follows billing's ManualControllersOptions pattern for conditional mounting.\n *\n * Bearer token auth: extracts token from Authorization header, hashes it,\n * looks up ScimTokenBase, validates isActive/expiresAt,\n * creates ExecutionContext with executionType: ORG_API_KEY.\n *\n * Reuses EnterpriseUserProvisioningService from Step 15 for:\n * - provisionEnterpriseUser() — user + profile + org member + identity link creation\n * - updateOrgUser() — profile attribute updates\n * - deactivateOrgUser() — set user status to INACTIVE\n */\n\nimport 'reflect-metadata';\nimport { injectable, inject } from 'inversify';\nimport { createHash } from 'crypto';\nimport type { Request, Response, NextFunction } from 'express';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { ErrorHandlerService } from '~wildo-backend-lib/errors/services/error-handler.backend.service';\nimport type { ServicesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/services/services-registry-handler.backend.service';\nimport type { Resources_PaginatedResult } from '@wildo-ai/saas-models';\nimport { AuthExecutionContextFactoryBackendService } from '~wildo-backend-lib/security/authentications/services/auth-execution-context-factory.backend.service';\nimport { EnterpriseUserProvisioningBackendService } from '~wildo-backend-lib/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service';\nimport { buildEnterpriseConnectionScope } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport type { EnterpriseProvisioningConfig } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport type { NormalizedUserProfile, ProvisioningConnectionContext } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport { AuditLogsBackendService } from '~wildo-backend-lib/compliance/audit-trails/services/audit-logs.backend.service';\nimport { AbstractControllerBackendService } from '~wildo-backend-lib/base-classes/services/controllers/abstract-controller.backend.service';\nimport {\n CoreResourceType,\n UserStatus,\n ErrorType,\n isWildoBackendError,\n AuthScopeType,\n ExternalIdentitySource,\n SsoConnectionType,\n WildoHeaderKeys,\n} from '@wildo-ai/saas-models';\nimport type { User, ScimProvisioningConfigBase, ScimAttributeMapping } from '@wildo-ai/saas-models';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport type { ScimTokenBase } from '@wildo-ai/saas-models';\nimport { resolveScimAttributePath } from '~wildo-backend-lib/security/scim/utils/scim-attribute-path-resolver.backend.utils';\nimport {\n SCIM_USER_ATTRIBUTE_MAP,\n SCIM_SCHEMAS,\n SCIM_CONTENT_TYPE,\n SCIM_SERVICE_PROVIDER_CONFIG,\n SCIM_USER_SCHEMA_DEFINITION,\n SCIM_RESOURCE_TYPES,\n extractScimDirectoryUnitValue,\n type SCIMPatchOperation,\n type SCIMBulkRequest,\n type SCIMBulkOperationResponse,\n} from '~wildo-backend-lib/security/scim/models/scim-protocol.backend.schemas';\nimport {\n isScimOrganizationUnitManagementEnabled,\n resolveScimOrganizationUnitId,\n resolveScimOrganizationUnitReconciliation,\n} from '@wildo-ai/saas-models';\nimport type {\n ScimOrganizationUnitAssignment,\n ScimOrganizationUnitManagementSignal,\n} from '@wildo-ai/saas-models';\nimport { parseSCIMFilter } from '~wildo-backend-lib/security/scim/utils/scim-filter-parser';\nimport { formatUserAsSCIM, formatListAsSCIM, formatSCIMError } from '~wildo-backend-lib/security/scim/utils/scim-response-formatter';\nimport { AuthOrganizationConfigurationService } from '~wildo-backend-lib/security/authentications/services/admin-config/auth-organization-configuration.service';\nimport { RateLimitBackendService } from '~wildo-backend-lib/errors/services/rate-limit.backend.service';\nimport type { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { isScimProvisioningEnabledForOrg } from '~wildo-backend-lib/organizations/services/scim-provisioning-gate.backend.utils';\nimport type { SystemAccessBackendService } from '~wildo-backend-lib/base-classes/services/services/system-access.backend.service';\n\n@injectable()\nexport class SCIMControllerBackendService extends AbstractControllerBackendService {\n // (Per-token rate-limit constants — 300/min/token — were removed in PR 5\n // of the rate-limit unification: the policy is now declared inline in\n // `_scimBearerAuthMiddleware` via `RateLimitBackendService.checkPolicy`\n // with `clientIdOverride: token._id` for per-token bucketing. Same\n // semantic — no IP, no organizationId — different surface.)\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.ErrorHandlerService) errorHandler: ErrorHandlerService,\n @inject(SAAS_SERVICE_TYPES.ServicesRegistryHandlerService) private readonly servicesRegistryHandler: ServicesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.AuthExecutionContextFactory) private readonly authEcFactory: AuthExecutionContextFactoryBackendService,\n @inject(SAAS_SERVICE_TYPES.EnterpriseUserProvisioningService) private readonly provisioningService: EnterpriseUserProvisioningBackendService,\n @inject(SAAS_SERVICE_TYPES.AuditLogsService) private readonly auditLogsService: AuditLogsBackendService,\n @inject(SAAS_SERVICE_TYPES.AuthOrganizationConfigurationService) private readonly orgConfigService: AuthOrganizationConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RateLimitBackendService) private readonly rateLimitService: RateLimitBackendService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService) private readonly appConfigService: AppConfigurationService,\n // Directory-driven re-activation writes `User.status`, which is `.excludeFromUpdate()` — the\n // client-facing contract cannot carry it, so the write goes through the trusted system door.\n // Appended LAST to keep positional construction in existing tests stable.\n @inject(SAAS_SERVICE_TYPES.SystemAccessService) private readonly systemAccessService: SystemAccessBackendService,\n ) {\n super(logger, errorBuilder, errorHandler, 'SCIMController');\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Route Setup\n // ═══════════════════════════════════════════════════════════════\n\n protected setupRoutes(): void {\n // SCIM Discovery endpoints (no auth required for ServiceProviderConfig per RFC 7644 §4)\n this.router.get('/scim/v2/ServiceProviderConfig', this.asyncHandler(this._handleServiceProviderConfig.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/ServiceProviderConfig', 'SCIM ServiceProviderConfig');\n\n this.router.get('/scim/v2/Schemas', this.asyncHandler(this._handleSchemas.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/Schemas', 'SCIM Schemas');\n\n this.router.get('/scim/v2/ResourceTypes', this.asyncHandler(this._handleResourceTypes.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/ResourceTypes', 'SCIM ResourceTypes');\n\n // All /Users endpoints require bearer token auth\n const authMiddleware = this._scimBearerAuthMiddleware.bind(this);\n\n this.router.post('/scim/v2/Users', authMiddleware, this.asyncHandler(this._handleCreateUser.bind(this)));\n this.logRouteRegistration('POST', '/scim/v2/Users', 'SCIM Create User');\n\n this.router.get('/scim/v2/Users', authMiddleware, this.asyncHandler(this._handleListUsers.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/Users', 'SCIM List Users');\n\n this.router.get('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handleGetUser.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/Users/:id', 'SCIM Get User');\n\n this.router.put('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handleReplaceUser.bind(this)));\n this.logRouteRegistration('PUT', '/scim/v2/Users/:id', 'SCIM Replace User');\n\n this.router.patch('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handlePatchUser.bind(this)));\n this.logRouteRegistration('PATCH', '/scim/v2/Users/:id', 'SCIM Patch User');\n\n this.router.delete('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handleDeleteUser.bind(this)));\n this.logRouteRegistration('DELETE', '/scim/v2/Users/:id', 'SCIM Delete User');\n\n // Bulk operations (Step 21)\n this.router.post('/scim/v2/Bulk', authMiddleware, this.asyncHandler(this._handleBulk.bind(this)));\n this.logRouteRegistration('POST', '/scim/v2/Bulk', 'SCIM Bulk Operations');\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Bearer Token Auth Middleware\n // ═══════════════════════════════════════════════════════════════\n\n private async _scimBearerAuthMiddleware(req: Request, res: Response, next: NextFunction): Promise<void> {\n const authHeader = req.headers[WildoHeaderKeys.AUTHORIZATION];\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Bearer token required', 'invalidValue')\n );\n return;\n }\n\n const plainToken = authHeader.substring(7);\n if (!plainToken) {\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Bearer token is empty', 'invalidValue')\n );\n return;\n }\n\n const tokenHash = this._hashToken(plainToken);\n\n try {\n const ec = await this._getInternalExecutionContext();\n const token = await this.servicesRegistryHandler.read<ScimTokenBase & { organizationId: string }>(CoreResourceType.ORGANIZATION_SCIM_TOKENS, ec, { tokenHash });\n\n if (!token) {\n this._logSCIMOperation('auth_failed', { reason: 'token_not_found' });\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Invalid bearer token')\n );\n return;\n }\n\n if (!token.isActive) {\n this._logSCIMOperation('auth_failed', { reason: 'token_inactive', tokenId: token._id });\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Token has been revoked')\n );\n return;\n }\n\n if (token.expiresAt && new Date(token.expiresAt) < new Date()) {\n this._logSCIMOperation('auth_failed', { reason: 'token_expired', tokenId: token._id });\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Token has expired')\n );\n return;\n }\n\n // Per-token rate limiting (PR 5 of the rate-limit unification, Step 5\n // — second imperative-to-declarative migration wave). 300/min/token,\n // keyed on the token id (NOT the IP — IP rotation must not let an\n // attacker sidestep a per-token quota; the token IS the subject of\n // the quota). Standard `X-RateLimit-*` and `Retry-After` headers\n // are now written by `checkPolicy` BEFORE the throw, so they're\n // preserved on the SCIM 429 response below (previously absent at\n // this seam — IdP retry logic had to guess backoff). The\n // try/catch stays because SCIM has its own RFC 7644 error format\n // (the underlying `RATE_LIMIT` error type is unchanged).\n try {\n await this.rateLimitService.checkPolicy(\n req,\n res,\n { requestsPerMinute: 300 },\n 'scim:token',\n undefined,\n token._id,\n );\n } catch (e) {\n if (isWildoBackendError(e) && (e as { type?: string }).type === ErrorType.RATE_LIMIT) {\n this._logSCIMOperation('rate_limited', { tokenId: token._id, organizationId: token.organizationId });\n res.status(429).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(429, 'Rate limit exceeded. Try again later.', 'tooMany')\n );\n return;\n }\n throw e;\n }\n\n // Attach org + scope context and EC to request for downstream handlers\n (req as SCIMAuthenticatedRequest).scimContext = {\n organizationId: token.organizationId,\n scopeType: AuthScopeType.ORGANIZATION,\n scopeId: token.organizationId,\n tokenId: token._id,\n tokenDisplayName: token.displayName,\n };\n (req as SCIMAuthenticatedRequest).scimEc = ec;\n\n // W5.10: Check if SCIM provisioning is enabled for this org's type\n const scimEnabled = await this._isScimProvisioningEnabledForOrg(ec, token.organizationId);\n if (!scimEnabled) {\n this._logSCIMOperation('scim_disabled_for_org_type', { organizationId: token.organizationId });\n res.status(403).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(403, 'SCIM provisioning is not enabled for this organization type', 'invalidValue')\n );\n return;\n }\n\n // Update lastUsedAt asynchronously (fire-and-forget)\n this.servicesRegistryHandler.update(CoreResourceType.ORGANIZATION_SCIM_TOKENS, ec, token._id, { lastUsedAt: new Date() }).catch(() => {\n // Non-fatal — don't fail the request if lastUsedAt update fails\n });\n\n const scimCtx = (req as SCIMAuthenticatedRequest).scimContext;\n this._logSCIMOperation('auth_success', {\n tokenId: token._id,\n organizationId: token.organizationId,\n scopeType: scimCtx.scopeType,\n scopeId: scimCtx.scopeId,\n method: req.method,\n path: req.path,\n });\n\n next();\n } catch (error) {\n if (isWildoBackendError(error)) {\n res.status(500).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(500, 'Internal authentication error')\n );\n return;\n }\n res.status(500).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(500, 'Internal server error')\n );\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Discovery Endpoints\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleServiceProviderConfig(_req: Request, res: Response): Promise<void> {\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(SCIM_SERVICE_PROVIDER_CONFIG);\n }\n\n private async _handleSchemas(_req: Request, res: Response): Promise<void> {\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json({\n schemas: [SCIM_SCHEMAS.LIST_RESPONSE],\n totalResults: 1,\n startIndex: 1,\n itemsPerPage: 1,\n Resources: [SCIM_USER_SCHEMA_DEFINITION],\n });\n }\n\n private async _handleResourceTypes(_req: Request, res: Response): Promise<void> {\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json({\n schemas: [SCIM_SCHEMAS.LIST_RESPONSE],\n totalResults: SCIM_RESOURCE_TYPES.length,\n startIndex: 1,\n itemsPerPage: SCIM_RESOURCE_TYPES.length,\n Resources: SCIM_RESOURCE_TYPES,\n });\n }\n\n // ═══════════════════════════════════════════════════════════════\n // POST /scim/v2/Users — Create User\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleCreateUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const body = req.body;\n\n this._logSCIMOperation('create_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, tokenId: ctx.tokenId });\n\n // Config first — its `attributeMapping` drives how the body is normalised into a profile.\n // `_getProvisioningConfig` is resilient (never throws), so this is safe before the try.\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const profile = this._mapSCIMBodyToProfile(body, orgConfig.attributeMapping);\n if (!profile.email) {\n res.status(400).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(400, 'userName (email) is required', 'invalidValue')\n );\n return;\n }\n\n try {\n const connection = this._buildSCIMConnection(ctx);\n\n const result = await this.provisioningService.provisionEnterpriseUser(profile, connection, orgConfig);\n\n // WS-C: bind the directory's department to an organization unit. Runs BEFORE the response so a\n // failure surfaces as a SCIM error the IdP retries, rather than a 201 hiding diverged grants.\n await this._syncOrganizationUnitAssignments(ec, result.user._id, ctx.organizationId, body, orgConfig);\n\n const userProfile = await this._getUserProfile(ec, result.user._id);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(result.user, userProfile, baseUrl, body.externalId);\n\n this._logSCIMOperation('user_created', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n userId: result.user._id,\n isNew: result.isNew,\n tokenId: ctx.tokenId,\n });\n\n // H8: Audit SCIM user provisioned\n this.auditLogsService.logSCIMUserProvisioned({\n organizationId: ctx.organizationId,\n userId: result.user._id,\n email: profile.email,\n isNewUser: result.isNew,\n provisionedVia: `scim:${ctx.tokenDisplayName}`,\n authSource: 'scim',\n }, ec).catch(() => {});\n\n res.status(201).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).set(WildoHeaderKeys.LOCATION, scimUser.meta.location).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'create_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // GET /scim/v2/Users/:id — Get User\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleGetUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const profile = await this._getUserProfile(ec, userId);\n const identityLink = await this._getUserIdentityLink(ec, userId, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(user, profile, baseUrl, identityLink?.providerUserId);\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'get_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // GET /scim/v2/Users — List Users (with filter + pagination)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleListUsers(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const filter = req.query.filter as string | undefined;\n const startIndex = Math.max(1, parseInt(req.query.startIndex as string) || 1);\n const count = Math.min(200, Math.max(1, parseInt(req.query.count as string) || 100));\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const mongoFilter = parseSCIMFilter(filter);\n\n // Scope to organization via org member lookup\n const orgMembers = await this.servicesRegistryHandler.list<{ userId: string }>(\n CoreResourceType.ORGANIZATION_MEMBERS, ec, { organizationId: ctx.organizationId },\n undefined, { paginated: false },\n ) as { userId: string }[];\n const memberUserIds = orgMembers.map((m) => m.userId);\n\n if (memberUserIds.length === 0) {\n const baseUrl = this._getBaseUrl(req);\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(formatListAsSCIM([], 0, startIndex, baseUrl));\n return;\n }\n\n // Combine SCIM filter with org scope\n const combinedFilter = {\n ...mongoFilter,\n _id: { $in: memberUserIds },\n };\n\n const page = Math.max(1, Math.floor((startIndex - 1) / count) + 1);\n const usersResult = await this.servicesRegistryHandler.list<User>(\n CoreResourceType.USERS, ec, combinedFilter,\n { page, limit: count },\n { paginated: true },\n ) as Resources_PaginatedResult<User>;\n\n const users = (usersResult.data || []) as User[];\n const totalCount = usersResult.pagination?.total ?? users.length;\n\n // Hydrate profiles\n const usersWithProfiles = await Promise.all(\n users.map(async (user) => {\n const profile = await this._getUserProfile(ec, user._id);\n const identityLink = await this._getUserIdentityLink(ec, user._id, ctx.organizationId);\n return { user, profile, externalId: identityLink?.providerUserId };\n })\n );\n\n const baseUrl = this._getBaseUrl(req);\n const response = formatListAsSCIM(usersWithProfiles, totalCount, startIndex, baseUrl);\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(response);\n } catch (error) {\n this._handleSCIMError(res, error, 'list_users');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // PUT /scim/v2/Users/:id — Replace User (full update)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleReplaceUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n const body = req.body;\n\n this._logSCIMOperation('replace_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const profile = this._mapSCIMBodyToProfile(body, orgConfig.attributeMapping);\n\n // Update profile attributes\n await this.provisioningService.updateOrgUser(userId, {\n firstName: profile.firstName,\n lastName: profile.lastName,\n displayName: profile.displayName,\n }, orgConfig);\n\n // Handle active status change\n if (body.active === false && user.status !== UserStatus.INACTIVE) {\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n } else if (body.active === true && user.status !== UserStatus.ACTIVE) {\n // `status` is `.excludeFromUpdate()`, so the ordinary handler write is stripped by the\n // repository's strict re-parse and the user would silently stay deactivated. The system\n // door re-attaches it. Not a lifecycle VERB: re-activation here is a consequence of the\n // directory's state, not an operator decision carrying a reason.\n await this.systemAccessService.updateAsSystem(CoreResourceType.USERS, userId, { status: UserStatus.ACTIVE });\n }\n\n // WS-C: a PUT carries the directory's full current state, so this is where a department CHANGE\n // (and therefore the revocation of the previous unit's access) actually lands.\n await this._syncOrganizationUnitAssignments(ec, userId, ctx.organizationId, body, orgConfig);\n\n const updatedUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n const updatedProfile = await this._getUserProfile(ec, userId);\n const identityLink = await this._getUserIdentityLink(ec, userId, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(updatedUser || user, updatedProfile, baseUrl, identityLink?.providerUserId);\n\n this._logSCIMOperation('user_replaced', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n // H8: Audit SCIM user updated (replace)\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'replace',\n updatedAttributes: ['profile', body.active !== undefined ? 'active' : undefined].filter(Boolean) as string[],\n }, ec).catch(() => {});\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'replace_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // PATCH /scim/v2/Users/:id — Partial Update (RFC 7644 §3.5.2)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handlePatchUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n const body = req.body;\n\n this._logSCIMOperation('patch_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n if (!body.Operations || !Array.isArray(body.Operations)) {\n res.status(400).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(400, 'PATCH requires Operations array', 'invalidSyntax')\n );\n return;\n }\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const profileUpdates: Record<string, string> = {};\n let statusChange: 'activate' | 'deactivate' | null = null;\n\n for (const op of body.Operations as SCIMPatchOperation[]) {\n const normalizedOp = op.op?.toLowerCase() as 'add' | 'remove' | 'replace';\n\n if (normalizedOp === 'add' || normalizedOp === 'replace') {\n if (op.path) {\n // Single attribute update\n this._applyPatchAttribute(op.path, op.value, profileUpdates, (s) => { statusChange = s; });\n } else if (op.value && typeof op.value === 'object') {\n // Bulk attribute update (no path — value is an object of attributes)\n const valueObj = op.value as Record<string, unknown>;\n for (const [key, val] of Object.entries(valueObj)) {\n this._applyPatchAttribute(key, val, profileUpdates, (s) => { statusChange = s; });\n }\n }\n } else if (normalizedOp === 'remove' && op.path) {\n const scimAttr = op.path;\n const dbField = (SCIM_USER_ATTRIBUTE_MAP as Record<string, string>)[scimAttr];\n if (dbField && dbField !== '_active' && dbField !== 'email') {\n profileUpdates[dbField] = '';\n }\n }\n }\n\n // Apply profile updates\n if (Object.keys(profileUpdates).length > 0) {\n await this.provisioningService.updateOrgUser(userId, profileUpdates as Record<string, string>, orgConfig);\n }\n\n // Apply status change\n if (statusChange === 'deactivate') {\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n } else if (statusChange === 'activate') {\n // Same system door as the PUT path above, for the same reason: `status` is\n // `.excludeFromUpdate()` and a handler write would be silently discarded.\n await this.systemAccessService.updateAsSystem(CoreResourceType.USERS, userId, { status: UserStatus.ACTIVE });\n }\n\n // Return updated user\n const updatedUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n const updatedProfile = await this._getUserProfile(ec, userId);\n const identityLink = await this._getUserIdentityLink(ec, userId, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(updatedUser || user, updatedProfile, baseUrl, identityLink?.providerUserId);\n\n this._logSCIMOperation('user_patched', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n userId,\n operations: body.Operations.length,\n tokenId: ctx.tokenId,\n });\n\n // H8: Audit SCIM user updated (patch)\n const patchedAttrs = Object.keys(profileUpdates);\n if (statusChange) patchedAttrs.push('active');\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'patch',\n updatedAttributes: patchedAttrs,\n }, ec).catch(() => {});\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'patch_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // DELETE /scim/v2/Users/:id — Deactivate User\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleDeleteUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n\n this._logSCIMOperation('delete_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n\n this._logSCIMOperation('user_deactivated', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n // H8: Audit SCIM user deactivated\n this.auditLogsService.logSCIMUserDeactivated({\n organizationId: ctx.organizationId,\n userId,\n email: user.email,\n }, ec).catch(() => {});\n\n res.status(204).end();\n } catch (error) {\n this._handleSCIMError(res, error, 'delete_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // POST /scim/v2/Bulk — Bulk Operations (Step 21)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleBulk(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const body = req.body as SCIMBulkRequest;\n\n if (!body.Operations || !Array.isArray(body.Operations)) {\n res.status(400).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(400, 'Bulk request requires Operations array', 'invalidSyntax')\n );\n return;\n }\n\n if (body.Operations.length > 100) {\n res.status(413).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(413, 'Bulk request exceeds maximum of 100 operations', 'tooMany')\n );\n return;\n }\n\n this._logSCIMOperation('bulk_start', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n operationCount: body.Operations.length,\n tokenId: ctx.tokenId,\n });\n\n const results: SCIMBulkOperationResponse[] = [];\n let errorCount = 0;\n const failOnErrors = body.failOnErrors || 0;\n\n for (const op of body.Operations) {\n if (failOnErrors > 0 && errorCount >= failOnErrors) {\n results.push({\n method: op.method,\n bulkId: op.bulkId,\n status: '412',\n response: formatSCIMError(412, 'Processing stopped due to failOnErrors threshold'),\n });\n continue;\n }\n\n try {\n const result = await this._executeBulkOperation(op, ctx, req);\n results.push(result);\n if (parseInt(result.status) >= 400) {\n errorCount++;\n }\n } catch {\n errorCount++;\n results.push({\n method: op.method,\n bulkId: op.bulkId,\n status: '500',\n response: formatSCIMError(500, 'Internal error processing bulk operation'),\n });\n }\n }\n\n this._logSCIMOperation('bulk_complete', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n totalOperations: body.Operations.length,\n errors: errorCount,\n tokenId: ctx.tokenId,\n });\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json({\n schemas: [SCIM_SCHEMAS.BULK_RESPONSE],\n Operations: results,\n });\n }\n\n private async _executeBulkOperation(\n op: SCIMBulkRequest['Operations'][0],\n ctx: SCIMRequestContext,\n req: Request,\n ): Promise<SCIMBulkOperationResponse> {\n const pathMatch = op.path?.match(/\\/Users(?:\\/(.+))?$/);\n if (!pathMatch) {\n return { method: op.method, bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'Invalid path') };\n }\n const userId = pathMatch[1];\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n\n switch (op.method) {\n case 'POST': {\n if (!op.data) {\n return { method: 'POST', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'Missing data for POST') };\n }\n const profile = this._mapSCIMBodyToProfile(op.data, orgConfig.attributeMapping);\n if (!profile.email) {\n return { method: 'POST', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'userName required') };\n }\n const connection = this._buildSCIMConnection(ctx);\n const result = await this.provisioningService.provisionEnterpriseUser(profile, connection, orgConfig);\n\n // H8: Audit bulk SCIM user provisioned\n this.auditLogsService.logSCIMUserProvisioned({\n organizationId: ctx.organizationId,\n userId: result.user._id,\n email: profile.email,\n isNewUser: result.isNew,\n provisionedVia: `scim:bulk:${ctx.tokenDisplayName}`,\n authSource: 'scim',\n }, ec).catch(() => {});\n\n return {\n method: 'POST',\n bulkId: op.bulkId,\n location: `${baseUrl}/Users/${result.user._id}`,\n status: '201',\n };\n }\n\n case 'PUT': {\n if (!userId || !op.data) {\n return { method: 'PUT', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'User ID and data required') };\n }\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n if (!user) {\n return { method: 'PUT', bulkId: op.bulkId, status: '404', response: formatSCIMError(404, `User ${userId} not found`) };\n }\n const putProfile = this._mapSCIMBodyToProfile(op.data, orgConfig.attributeMapping);\n await this.provisioningService.updateOrgUser(userId, {\n firstName: putProfile.firstName,\n lastName: putProfile.lastName,\n displayName: putProfile.displayName,\n }, orgConfig);\n\n // H8: Audit bulk SCIM user updated (replace)\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'replace',\n updatedAttributes: ['profile'],\n }, ec).catch(() => {});\n\n return { method: 'PUT', bulkId: op.bulkId, location: `${baseUrl}/Users/${userId}`, status: '200' };\n }\n\n case 'PATCH': {\n if (!userId || !op.data) {\n return { method: 'PATCH', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'User ID and data required') };\n }\n const patchUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n if (!patchUser) {\n return { method: 'PATCH', bulkId: op.bulkId, status: '404', response: formatSCIMError(404, `User ${userId} not found`) };\n }\n // Simplified: apply operations from data\n const operations = (op.data as Record<string, unknown>).Operations as SCIMPatchOperation[] | undefined;\n const bulkPatchedAttrs: string[] = [];\n if (operations) {\n const patchProfileUpdates: Record<string, string> = {};\n let patchStatusChange: 'activate' | 'deactivate' | null = null;\n for (const patchOp of operations) {\n const normalizedOp = patchOp.op?.toLowerCase() as 'add' | 'remove' | 'replace';\n if (normalizedOp === 'add' || normalizedOp === 'replace') {\n if (patchOp.path) {\n this._applyPatchAttribute(patchOp.path, patchOp.value, patchProfileUpdates, (s) => { patchStatusChange = s; });\n }\n }\n }\n if (Object.keys(patchProfileUpdates).length > 0) {\n await this.provisioningService.updateOrgUser(userId, patchProfileUpdates, orgConfig);\n }\n if (patchStatusChange === 'deactivate') {\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n }\n bulkPatchedAttrs.push(...Object.keys(patchProfileUpdates));\n if (patchStatusChange) bulkPatchedAttrs.push('active');\n }\n\n // H8: Audit bulk SCIM user updated (patch)\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'patch',\n updatedAttributes: bulkPatchedAttrs,\n }, ec).catch(() => {});\n\n return { method: 'PATCH', bulkId: op.bulkId, location: `${baseUrl}/Users/${userId}`, status: '200' };\n }\n\n case 'DELETE': {\n if (!userId) {\n return { method: 'DELETE', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'User ID required') };\n }\n const deleteUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n if (!deleteUser) {\n return { method: 'DELETE', bulkId: op.bulkId, status: '404', response: formatSCIMError(404, `User ${userId} not found`) };\n }\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n\n // H8: Audit bulk SCIM user deactivated\n this.auditLogsService.logSCIMUserDeactivated({\n organizationId: ctx.organizationId,\n userId,\n email: deleteUser.email,\n }, ec).catch(() => {});\n\n return { method: 'DELETE', bulkId: op.bulkId, status: '204' };\n }\n\n default:\n return { method: op.method, bulkId: op.bulkId, status: '400', response: formatSCIMError(400, `Unsupported method: ${op.method}`) };\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // PATCH Helpers\n // ═══════════════════════════════════════════════════════════════\n\n private _applyPatchAttribute(\n path: string,\n value: unknown,\n profileUpdates: Record<string, string>,\n onStatusChange: (change: 'activate' | 'deactivate') => void,\n ): void {\n const attrMap = SCIM_USER_ATTRIBUTE_MAP as Record<string, string>;\n const dbField = attrMap[path];\n\n if (path === 'active' || dbField === '_active') {\n const isActive = value === true || value === 'true';\n onStatusChange(isActive ? 'activate' : 'deactivate');\n return;\n }\n\n if (dbField && dbField !== 'email') {\n profileUpdates[dbField] = String(value ?? '');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // SCIM Body → NormalizedUserProfile\n // ═══════════════════════════════════════════════════════════════\n\n private _mapSCIMBodyToProfile(body: Record<string, unknown>, mapping?: ScimAttributeMapping): NormalizedUserProfile {\n const userName = body.userName as string | undefined;\n const name = body.name as Record<string, string> | undefined;\n const emails = body.emails as Array<{ value: string; primary?: boolean }> | undefined;\n\n // An authored `attributeMapping` (set only via `saveScimProvisioningConfig`, which no surface\n // calls yet — so every current row leaves `mapping` undefined and the legacy normalisation\n // below runs verbatim) routes each field through its configured path via\n // `resolveScimAttributePath`. Email additionally falls back to the legacy chain (userName →\n // primary email → first email) whenever the mapped path yields nothing, so a directory that\n // omits the mapped email attribute still provisions.\n let email = mapping?.email ? (resolveScimAttributePath(body, mapping.email) ?? '') : '';\n if (!email) {\n email = userName || '';\n if (!email && emails?.length) {\n const primary = emails.find(e => e.primary);\n email = primary?.value || emails[0]?.value || '';\n }\n }\n\n const firstName = mapping?.firstName ? resolveScimAttributePath(body, mapping.firstName) : name?.givenName;\n const lastName = mapping?.lastName ? resolveScimAttributePath(body, mapping.lastName) : name?.familyName;\n const displayName = mapping?.displayName\n ? resolveScimAttributePath(body, mapping.displayName)\n : (body.displayName as string | undefined);\n\n return {\n // SCIM robustness: `externalId` is OPTIONAL per RFC 7643 §4.1.1, but the identity link keys on\n // `providerUserId` (`USER_IDENTITY_LINKS.providerUserId` is `.min(1)`), so a directory that omits\n // `externalId` used to fail `createIdentityLink`'s validation and 400 the WHOLE provision (opaque\n // \"Server error\"). Fall back to the (already-resolved, D8-unique) email — the identifier the\n // directory DID send as `userName` — so an externalId-less SCIM client still provisions cleanly\n // and the link keeps a stable, idempotent key. If neither `externalId` nor an email is present\n // this stays empty, but the caller (`_handleCreateUser`) rejects that earlier with a precise\n // \"userName (email) is required\" 400, so `createIdentityLink` never sees an empty key.\n providerUserId: (body.externalId as string) || email.toLowerCase(),\n email: email.toLowerCase(),\n // SCIM-provisioned users are IdP-trusted, so their email is treated as verified. Honoring\n // `autoVerifyEmail=false` (create PENDING_VERIFICATION + drive email verification) needs the\n // verification-completion flow wired for IdP-pushed users — tracked as AUTH-21, deliberately\n // not half-shipped here (a PENDING_VERIFICATION SCIM user with no verification email is stuck).\n emailVerified: true,\n firstName,\n lastName,\n displayName: displayName || undefined,\n rawClaims: body,\n };\n }\n\n private _buildSCIMConnection(ctx: SCIMRequestContext): ProvisioningConnectionContext {\n // Identity only. Provisioning settings are deliberately omitted: SCIM's config is assembled\n // independently by `_getProvisioningConfig` (SCIM config row + SSO-derived domains) and passed\n // to `provisionEnterpriseUser` as a separate argument. Hardcoding hints here would be inert, misleading\n // duplication (a stub `allowedDomains: []` in particular reads as \"unrestricted\").\n return {\n source: ExternalIdentitySource.SCIM,\n providerRef: 'scim',\n displayName: 'SCIM Directory Provisioning',\n scope: buildEnterpriseConnectionScope(\n AuthScopeType.ORGANIZATION,\n ctx.organizationId,\n `scim:${ctx.tokenId}`,\n ),\n };\n }\n\n // ═══════════════════════════════════════════════════════════════\n // User Lookup Helpers\n // ═══════════════════════════════════════════════════════════════\n\n private async _findUserInOrg(ec: ExecutionContext<any>, userId: string, organizationId: string): Promise<User | null> {\n try {\n // Verify user exists\n const user = await this.servicesRegistryHandler.read<User>(CoreResourceType.USERS, ec, { _id: userId });\n if (!user) return null;\n\n const membership = await this.servicesRegistryHandler.read(CoreResourceType.ORGANIZATION_MEMBERS, ec, { userId, organizationId });\n if (!membership) return null;\n\n return user;\n } catch {\n return null;\n }\n }\n\n private async _getUserProfile(ec: ExecutionContext<any>, userId: string): Promise<{ firstName?: string; lastName?: string; displayName?: string; avatarUrl?: string } | null> {\n try {\n const profile = await this.servicesRegistryHandler.read(CoreResourceType.USER_PROFILES, ec, { userId });\n return profile as { firstName?: string; lastName?: string; displayName?: string; avatarUrl?: string } | null;\n } catch {\n return null;\n }\n }\n\n private async _getUserIdentityLink(ec: ExecutionContext<any>, userId: string, organizationId: string): Promise<{ providerUserId?: string } | null> {\n try {\n const link = await this.servicesRegistryHandler.read(CoreResourceType.USER_IDENTITY_LINKS, ec, {\n userId,\n connectionType: SsoConnectionType.ENTERPRISE,\n organizationId,\n });\n return link as { providerUserId?: string } | null;\n } catch {\n return null;\n }\n }\n\n /**\n * Assemble the per-org provisioning config the SCIM push path runs against, reading each field\n * from the resource that OWNS it — no duplication, no hardcoded assumptions:\n * - `allowedDomains` from the scope's SSO config (`SsoConfig.domains`, which owns DNS\n * verification) — the DNS-verified subset only (H4). Read live, never copied.\n * - the SCIM channel behaviour (`autoCreateUsers`, `autoVerifyEmail`, `autoDeactivateUsers`,\n * `defaultRole`, `attributeMapping`) from the `ScimProvisioningConfig` row.\n *\n * Both loads are resilient: a read failure falls back to the historical hardcoded defaults\n * (`autoCreateUsers`/`autoVerifyEmail`/`autoDeactivateUsers` = true, no domain restriction) so a\n * transient config-store blip degrades to \"provision with safe defaults\", never a failed push.\n * Every default here equals the value this method previously hardcoded, so an org that has not\n * customised its SCIM config behaves exactly as before.\n */\n /**\n * Load the organization's provisioning settings.\n *\n * Returns the shared `EnterpriseProvisioningConfig` (which SSO JIT also consumes) INTERSECTED with\n * the SCIM-only organization-unit fields, rather than widening the shared type: unit provisioning is\n * a SCIM channel concern, and adding it to the type SSO JIT reads would advertise a capability that\n * path does not implement.\n */\n private async _getProvisioningConfig(\n ec: ExecutionContext<any>,\n organizationId: string,\n ): Promise<EnterpriseProvisioningConfig & ScimOrganizationUnitManagementSignal> {\n let allowedDomains: string[] = [];\n try {\n const ssoConfig = await this.orgConfigService.loadSSOConfig(ec, AuthScopeType.ORGANIZATION, organizationId);\n if (ssoConfig) {\n // Only include domains that have passed DNS verification (H4)\n allowedDomains = ssoConfig.domains.verifiedDomains.filter(\n d => ssoConfig.domains.domainVerificationStatus[d] === 'verified',\n );\n }\n } catch {\n this.logDebug('Failed to load org SSO config for SCIM provisioning (non-fatal)', { organizationId });\n }\n\n let scimConfig: ScimProvisioningConfigBase | null = null;\n try {\n scimConfig = await this.orgConfigService.loadScimProvisioningConfig(ec, AuthScopeType.ORGANIZATION, organizationId);\n } catch {\n this.logDebug('Failed to load SCIM provisioning config (non-fatal — using defaults)', { organizationId });\n }\n\n return {\n autoCreateUsers: scimConfig?.autoCreateUsers ?? true,\n autoVerifyEmail: scimConfig?.autoVerifyEmail ?? true,\n autoDeactivateUsers: scimConfig?.autoDeactivateUsers ?? true,\n defaultRole: scimConfig?.defaultRole,\n attributeMapping: scimConfig?.attributeMapping,\n allowedDomains,\n // Organization-unit provisioning (WS-C). Carried on the SAME config read rather than fetched\n // separately, so a push that manages units costs no extra round-trip. Undefined on both fields\n // means the organization never opted in, which `_syncOrganizationUnitAssignments` treats as\n // \"SCIM does not manage units here\" — and therefore never deletes anything.\n organizationUnitMapping: scimConfig?.organizationUnitMapping,\n defaultUnitRole: scimConfig?.defaultUnitRole,\n };\n }\n\n /**\n * Make the member's organization-unit assignments match what the directory just pushed.\n *\n * assurance-control: WILDO.IDENTITY.DIRECTORY_PROVISIONING — the directory is the authority for unit\n * membership, and unit membership is an authorization grant.\n *\n * ## Opt-in, and what \"authoritative\" costs\n *\n * Runs ONLY when the organization declared both a `organizationUnitMapping` and a `defaultUnitRole`.\n * That gate is load-bearing: reconciliation REPLACES the member's assignments with exactly what the\n * directory says, so without it a push from an organization that never configured units would delete\n * every assignment an admin had made by hand.\n *\n * Within an opted-in organization that replacement is the point — a user who moves from Sales to\n * Legal LOSES Sales. Access that only ever accumulates is how an offboarded department is never\n * actually left.\n *\n * ## Failure PROPAGATES\n *\n * A sync failure fails the SCIM request rather than being swallowed. The alternative leaves the\n * directory and the live grants diverged with no signal — and since assignments are authorization,\n * that divergence is silent over- or under-privilege. Failing loudly makes the IdP retry, and the\n * reconciliation is idempotent so a retry converges.\n */\n private async _syncOrganizationUnitAssignments(\n ec: ExecutionContext<any>,\n userId: string,\n organizationId: string,\n body: unknown,\n config: EnterpriseProvisioningConfig & ScimOrganizationUnitManagementSignal,\n ): Promise<void> {\n if (!isScimOrganizationUnitManagementEnabled(config)) return;\n\n const membership = await this.servicesRegistryHandler.read<{ _id: string }>(\n CoreResourceType.ORGANIZATION_MEMBERS, ec, { userId, organizationId },\n );\n if (!membership?._id) return;\n\n const directoryValue = extractScimDirectoryUnitValue(body);\n const desiredUnitId = resolveScimOrganizationUnitId(directoryValue, config.organizationUnitMapping);\n\n const currentAssignments = await this.servicesRegistryHandler.list<ScimOrganizationUnitAssignment>(\n CoreResourceType.ORGANIZATION_UNIT_MEMBERS, ec, { organizationMemberId: membership._id },\n undefined, { paginated: false },\n ) as ScimOrganizationUnitAssignment[];\n\n const { unitIdsToCreate, assignmentIdsToRemove } = resolveScimOrganizationUnitReconciliation(\n desiredUnitId ? [desiredUnitId] : [],\n currentAssignments ?? [],\n );\n\n if (unitIdsToCreate.length === 0 && assignmentIdsToRemove.length === 0) return;\n\n for (const assignmentId of assignmentIdsToRemove) {\n await this.servicesRegistryHandler.delete(CoreResourceType.ORGANIZATION_UNIT_MEMBERS, ec, assignmentId);\n }\n for (const organizationUnitId of unitIdsToCreate) {\n await this.servicesRegistryHandler.create(CoreResourceType.ORGANIZATION_UNIT_MEMBERS, ec, {\n organizationId,\n organizationUnitId,\n organizationMemberId: membership._id,\n role: config.defaultUnitRole,\n });\n }\n\n this._logSCIMOperation('organization_units_synced', {\n organizationId,\n userId,\n directoryValue,\n // An unmapped directory value is reported explicitly: it is the difference between \"the\n // directory said nothing\" and \"the directory said something nobody bound to a unit\", and only\n // the second is a configuration gap worth chasing.\n resolvedToUnit: desiredUnitId ?? null,\n unitsAssigned: unitIdsToCreate.length,\n assignmentsRemoved: assignmentIdsToRemove.length,\n });\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Structured Logging (Step 21)\n // ═══════════════════════════════════════════════════════════════\n\n private _logSCIMOperation(operation: string, context: Record<string, unknown>): void {\n this.logDebug(`SCIM: ${operation}`, {\n scimOperation: operation,\n ...context,\n });\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Error Handling\n // ═══════════════════════════════════════════════════════════════\n\n private _handleSCIMError(res: Response, error: unknown, operation: string): void {\n this._logSCIMOperation(`${operation}_error`, { error: describeCaughtError(error) });\n\n if (isWildoBackendError(error)) {\n const wildoError = error as { statusCode?: number; type?: string; message?: string };\n const status = wildoError.statusCode || 500;\n\n // Map common errors to SCIM-specific responses\n if (status === 409 || wildoError.type === 'uniqueness') {\n res.status(409).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(409, 'User already exists', 'uniqueness')\n );\n return;\n }\n if (status === 404) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, wildoError.message || 'Resource not found')\n );\n return;\n }\n\n res.status(status).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(status, wildoError.message || 'Server error')\n );\n return;\n }\n\n res.status(500).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(500, 'Internal server error')\n );\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Utilities\n // ═══════════════════════════════════════════════════════════════\n\n private _hashToken(plainToken: string): string {\n return createHash('sha256').update(plainToken).digest('hex');\n }\n\n private async _isScimProvisioningEnabledForOrg(ec: ExecutionContext<any>, organizationId: string): Promise<boolean> {\n if (!this.appConfigService.isInitialized()) return true;\n\n type OrgTypeWithScim = { scimProvisioning?: { enabled: boolean; syncFrequencyHours?: number } };\n const organizationTypes = (this.appConfigService.config as { organizationTypes?: Record<string, OrgTypeWithScim> })?.organizationTypes;\n\n try {\n return await isScimProvisioningEnabledForOrg(ec, {\n organizationId,\n organizationTypes,\n servicesRegistryHandler: this.servicesRegistryHandler,\n });\n } catch {\n return true;\n }\n }\n\n private _getSCIMContext(req: Request): SCIMRequestContext {\n return (req as SCIMAuthenticatedRequest).scimContext;\n }\n\n private _getBaseUrl(req: Request): string {\n const proto = req.headers[WildoHeaderKeys.FORWARDED_PROTO];\n const protocol = (Array.isArray(proto) ? proto[0] : proto) || req.protocol || 'https';\n const h = req.headers[WildoHeaderKeys.FORWARDED_HOST] || req.headers.host;\n const host = (Array.isArray(h) ? h[0] : h) || 'localhost';\n return `${protocol}://${host}/api/v1/scim/v2`;\n }\n\n private async _getInternalExecutionContext(): Promise<ExecutionContext<any>> {\n return this.authEcFactory.createForSystemAuthOperation(this.authEcFactory.getUsersCreateOperationPath());\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Request Context Types\n// ═══════════════════════════════════════════════════════════════\n\ninterface SCIMRequestContext {\n organizationId: string;\n scopeType: AuthScopeType;\n scopeId: string;\n tokenId: string;\n tokenDisplayName: string;\n}\n\ninterface SCIMAuthenticatedRequest extends Request {\n scimContext: SCIMRequestContext;\n scimEc: ExecutionContext<any>;\n}\n"]}
1
+ {"version":3,"file":"scim.backend.controller.js","sourceRoot":"","sources":["../../../../../../src/security/scim/controllers/scim.backend.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;;;;;;;;;;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,8EAA8E,CAAC;AACnH,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AAGvG,OAAO,EAAE,yCAAyC,EAAE,MAAM,qGAAqG,CAAC;AAChK,OAAO,EAAE,wCAAwC,EAAE,MAAM,gHAAgH,CAAC;AAC1K,OAAO,EAAE,8BAA8B,EAAE,MAAM,mFAAmF,CAAC;AAGnI,OAAO,EAAE,uBAAuB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,EAAE,gCAAgC,EAAE,MAAM,0FAA0F,CAAC;AAC5I,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mFAAmF,CAAC;AAC7H,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,8BAA8B,EAC9B,2BAA2B,EAC3B,mBAAmB,EACnB,6BAA6B,GAI9B,MAAM,uEAAuE,CAAC;AAC/E,OAAO,EACL,uCAAuC,EACvC,6BAA6B,EAC7B,yCAAyC,GAC1C,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,eAAe,EAAE,MAAM,2DAA2D,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gEAAgE,CAAC;AACrI,OAAO,EAAE,oCAAoC,EAAE,MAAM,2GAA2G,CAAC;AACjK,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AAExG,OAAO,EAAE,+BAA+B,EAAE,MAAM,gFAAgF,CAAC;AAI1H,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gCAAgC;IAWF;IACH;IACM;IACjB;IACoB;IACb;IACP;IAIG;IApBnE,yEAAyE;IACzE,sEAAsE;IACtE,wEAAwE;IACxE,mEAAmE;IACnE,4DAA4D;IAE5D,YACqC,MAAqB,EACR,YAAwC,EACxC,YAAiC,EACL,uBAA8D,EACjE,aAAwD,EAClD,mBAA6D,EAC9E,gBAAyC,EACrB,gBAAsD,EACnE,gBAAyC,EAChD,gBAAyC,EAItC,mBAA+C;QAEhH,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAZgB,4BAAuB,GAAvB,uBAAuB,CAAuC;QACjE,kBAAa,GAAb,aAAa,CAA2C;QAClD,wBAAmB,GAAnB,mBAAmB,CAA0C;QAC9E,qBAAgB,GAAhB,gBAAgB,CAAyB;QACrB,qBAAgB,GAAhB,gBAAgB,CAAsC;QACnE,qBAAgB,GAAhB,gBAAgB,CAAyB;QAChD,qBAAgB,GAAhB,gBAAgB,CAAyB;QAItC,wBAAmB,GAAnB,mBAAmB,CAA4B;IAGlH,CAAC;IAED,kEAAkE;IAClE,cAAc;IACd,kEAAkE;IAExD,WAAW;QACnB,wFAAwF;QACxF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnH,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,gCAAgC,EAAE,4BAA4B,CAAC,CAAC;QAEjG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAErE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;QAEjF,iDAAiD;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAExE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,EAAE,eAAe,CAAC,CAAC;QAExE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QAE5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;QAE5E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/G,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;QAE9E,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,sBAAsB,CAAC,CAAC;IAC7E,CAAC;IAED,kEAAkE;IAClE,+BAA+B;IAC/B,kEAAkE;IAE1D,KAAK,CAAC,yBAAyB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;QACrF,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAC9D,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAC9D,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAA6C,gBAAgB,CAAC,wBAAwB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAEhK,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBACrE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAC7C,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAC/C,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAC1C,CAAC;gBACF,OAAO;YACT,CAAC;YAED,sEAAsE;YACtE,qEAAqE;YACrE,kEAAkE;YAClE,mEAAmE;YACnE,iEAAiE;YACjE,gEAAgE;YAChE,iEAAiE;YACjE,yDAAyD;YACzD,iEAAiE;YACjE,yDAAyD;YACzD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CACrC,GAAG,EACH,GAAG,EACH,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAC1B,YAAY,EACZ,SAAS,EACT,KAAK,CAAC,GAAG,CACV,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,mBAAmB,CAAC,CAAC,CAAC,IAAK,CAAuB,CAAC,IAAI,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;oBACrF,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;oBACrG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,uCAAuC,EAAE,SAAS,CAAC,CACzE,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,CAAC;YACV,CAAC;YAED,uEAAuE;YACtE,GAAgC,CAAC,WAAW,GAAG;gBAC9C,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,SAAS,EAAE,aAAa,CAAC,YAAY;gBACrC,OAAO,EAAE,KAAK,CAAC,cAAc;gBAC7B,OAAO,EAAE,KAAK,CAAC,GAAG;gBAClB,gBAAgB,EAAE,KAAK,CAAC,WAAW;aACpC,CAAC;YACD,GAAgC,CAAC,MAAM,GAAG,EAAE,CAAC;YAE9C,mEAAmE;YACnE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YAC1F,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC/F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,6DAA6D,EAAE,cAAc,CAAC,CACpG,CAAC;gBACF,OAAO;YACT,CAAC;YAED,qDAAqD;YACrD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACnI,gEAAgE;YAClE,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAI,GAAgC,CAAC,WAAW,CAAC;YAC9D,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE;gBACrC,OAAO,EAAE,KAAK,CAAC,GAAG;gBAClB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAC;YAEH,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,+BAA+B,CAAC,CACtD,CAAC;gBACF,OAAO;YACT,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,sBAAsB;IACtB,kEAAkE;IAE1D,KAAK,CAAC,4BAA4B,CAAC,IAAa,EAAE,GAAa;QACrE;;;;;;WAMG;QACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;YAC7D,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB;YACtD,CAAC,CAAC,SAAS,CAAC;QAEd,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC;aACrD,IAAI,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAa,EAAE,GAAa;QACvD,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC;YAC5D,OAAO,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC;YACrC,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC,2BAA2B,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,IAAa,EAAE,GAAa;QAC7D,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC;YAC5D,OAAO,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC;YACrC,YAAY,EAAE,mBAAmB,CAAC,MAAM;YACxC,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,mBAAmB,CAAC,MAAM;YACxC,SAAS,EAAE,mBAAmB;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,oCAAoC;IACpC,kEAAkE;IAE1D,KAAK,CAAC,iBAAiB,CAAC,GAAY,EAAE,GAAa;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAEtB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpJ,0FAA0F;QAC1F,wFAAwF;QACxF,MAAM,EAAE,GAAI,GAAgC,CAAC,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,8BAA8B,EAAE,cAAc,CAAC,CACrE,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAElD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAEtG,+FAA+F;YAC/F,8FAA8F;YAC9F,MAAM,IAAI,CAAC,gCAAgC,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAEtG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtF,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE;gBACrC,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,CAAC;YAEH,kCAAkC;YAClC,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;gBAC3C,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;gBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,MAAM,CAAC,KAAK;gBACvB,cAAc,EAAE,QAAQ,GAAG,CAAC,gBAAgB,EAAE;gBAC9C,UAAU,EAAE,MAAM;aACnB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5I,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,oCAAoC;IACpC,kEAAkE;IAE1D,KAAK,CAAC,cAAc,CAAC,GAAY,EAAE,GAAa;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,GAAgC,CAAC,MAAM,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAEvE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,QAAQ,MAAM,YAAY,CAAC,CACjD,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;YAExF,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,6DAA6D;IAC7D,kEAAkE;IAE1D,KAAK,CAAC,gBAAgB,CAAC,GAAY,EAAE,GAAa;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAA4B,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAErF,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,GAAgC,CAAC,MAAM,CAAC;YACpD,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAE5C,8CAA8C;YAC9C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CACxD,gBAAgB,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,EACjF,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACR,CAAC;YAC1B,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAEtD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5G,OAAO;YACT,CAAC;YAED,qCAAqC;YACrC,MAAM,cAAc,GAAG;gBACrB,GAAG,WAAW;gBACd,GAAG,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE;aAC5B,CAAC;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CACzD,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,cAAc,EAC1C,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EACtB,EAAE,SAAS,EAAE,IAAI,EAAE,CACe,CAAC;YAErC,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC;YACjD,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YAEjE,mBAAmB;YACnB,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CACzC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;gBACvF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;YACrE,CAAC,CAAC,CACH,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAEtF,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,sDAAsD;IACtD,kEAAkE;IAE1D,KAAK,CAAC,kBAAkB,CAAC,GAAY,EAAE,GAAa;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QACvC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAEtB,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAE7J,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,GAAgC,CAAC,MAAM,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAEvE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,QAAQ,MAAM,YAAY,CAAC,CACjD,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAE7E,4BAA4B;YAC5B,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,EAAE;gBACnD,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,EAAE,SAAS,CAAC,CAAC;YAEd,8BAA8B;YAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACjE,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAC1F,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;gBACrE,uFAAuF;gBACvF,wFAAwF;gBACxF,wFAAwF;gBACxF,iEAAiE;gBACjE,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/G,CAAC;YAED,+FAA+F;YAC/F,+EAA+E;YAC/E,MAAM,IAAI,CAAC,gCAAgC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAE7F,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAC9E,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,IAAI,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;YAE9G,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAE9J,wCAAwC;YACxC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;gBACvC,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,MAAM;gBACN,SAAS,EAAE,SAAS;gBACpB,iBAAiB,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa;aAC7G,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEvB,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,8DAA8D;IAC9D,kEAAkE;IAE1D,KAAK,CAAC,gBAAgB,CAAC,GAAY,EAAE,GAAa;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QACvC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAEtB,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3J,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,iCAAiC,EAAE,eAAe,CAAC,CACzE,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,GAAgC,CAAC,MAAM,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAEvE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,QAAQ,MAAM,YAAY,CAAC,CACjD,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5E,MAAM,cAAc,GAA2B,EAAE,CAAC;YAClD,IAAI,YAAY,GAAqC,IAAI,CAAC;YAE1D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAkC,EAAE,CAAC;gBACzD,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,EAAkC,CAAC;gBAE1E,IAAI,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBACzD,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;wBACZ,0BAA0B;wBAC1B,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7F,CAAC;yBAAM,IAAI,EAAE,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACpD,qEAAqE;wBACrE,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAgC,CAAC;wBACrD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAClD,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpF,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,YAAY,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;oBAChD,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;oBACzB,MAAM,OAAO,GAAI,uBAAkD,CAAC,QAAQ,CAAC,CAAC;oBAC9E,IAAI,OAAO,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;wBAC5D,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,EAAE,cAAwC,EAAE,SAAS,CAAC,CAAC;YAC5G,CAAC;YAED,sBAAsB;YACtB,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAC1F,CAAC;iBAAM,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;gBACvC,2EAA2E;gBAC3E,0EAA0E;gBAC1E,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/G,CAAC;YAED,sBAAsB;YACtB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAC9E,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,IAAI,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;YAE9G,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE;gBACrC,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM;gBACN,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAClC,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,CAAC;YAEH,sCAAsC;YACtC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjD,IAAI,YAAY;gBAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;gBACvC,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,MAAM;gBACN,SAAS,EAAE,OAAO;gBAClB,iBAAiB,EAAE,YAAY;aAChC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEvB,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,8CAA8C;IAC9C,kEAAkE;IAE1D,KAAK,CAAC,iBAAiB,CAAC,GAAY,EAAE,GAAa;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QAEvC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAE5J,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,GAAgC,CAAC,MAAM,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAEvE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,QAAQ,MAAM,YAAY,CAAC,CACjD,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAExF,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAEjK,kCAAkC;YAClC,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;gBAC3C,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,MAAM;gBACN,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,iDAAiD;IACjD,kEAAkE;IAE1D,KAAK,CAAC,WAAW,CAAC,GAAY,EAAE,GAAa;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAuB,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,wCAAwC,EAAE,eAAe,CAAC,CAChF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,gDAAgD,EAAE,SAAS,CAAC,CAClF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;YACnC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YACtC,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAgC,EAAE,CAAC;QAChD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QAE5C,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,YAAY,GAAG,CAAC,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,MAAM,EAAE,KAAK;oBACb,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,kDAAkD,CAAC;iBACnF,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;oBACnC,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,MAAM,EAAE,KAAK;oBACb,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,0CAA0C,CAAC;iBAC3E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE;YACtC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YACvC,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC;YAC5D,OAAO,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC;YACrC,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,EAAoC,EACpC,GAAuB,EACvB,GAAY;QAEZ,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;QACjH,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAI,GAAgC,CAAC,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEtC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;oBACb,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,uBAAuB,CAAC,EAAE,CAAC;gBACvH,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBAChF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,mBAAmB,CAAC,EAAE,CAAC;gBACnH,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAEtG,uCAAuC;gBACvC,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;oBAC3C,cAAc,EAAE,GAAG,CAAC,cAAc;oBAClC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,MAAM,CAAC,KAAK;oBACvB,cAAc,EAAE,aAAa,GAAG,CAAC,gBAAgB,EAAE;oBACnD,UAAU,EAAE,MAAM;iBACnB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAEvB,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,QAAQ,EAAE,GAAG,OAAO,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC/C,MAAM,EAAE,KAAK;iBACd,CAAC;YACJ,CAAC;YAED,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,2BAA2B,CAAC,EAAE,CAAC;gBAC1H,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;gBACvE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,QAAQ,MAAM,YAAY,CAAC,EAAE,CAAC;gBACzH,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBACnF,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,EAAE;oBACnD,SAAS,EAAE,UAAU,CAAC,SAAS;oBAC/B,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;iBACpC,EAAE,SAAS,CAAC,CAAC;gBAEd,6CAA6C;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;oBACvC,cAAc,EAAE,GAAG,CAAC,cAAc;oBAClC,MAAM;oBACN,SAAS,EAAE,SAAS;oBACpB,iBAAiB,EAAE,CAAC,SAAS,CAAC;iBAC/B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,UAAU,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACrG,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,2BAA2B,CAAC,EAAE,CAAC;gBAC5H,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC5E,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,QAAQ,MAAM,YAAY,CAAC,EAAE,CAAC;gBAC3H,CAAC;gBACD,yCAAyC;gBACzC,MAAM,UAAU,GAAI,EAAE,CAAC,IAAgC,CAAC,UAA8C,CAAC;gBACvG,MAAM,gBAAgB,GAAa,EAAE,CAAC;gBACtC,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,mBAAmB,GAA2B,EAAE,CAAC;oBACvD,IAAI,iBAAiB,GAAqC,IAAI,CAAC;oBAC/D,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;wBACjC,MAAM,YAAY,GAAG,OAAO,CAAC,EAAE,EAAE,WAAW,EAAkC,CAAC;wBAC/E,IAAI,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;4BACzD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gCACjB,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACjH,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChD,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;oBACvF,CAAC;oBACD,IAAI,iBAAiB,KAAK,YAAY,EAAE,CAAC;wBACvC,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;oBAC1F,CAAC;oBACD,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBAC3D,IAAI,iBAAiB;wBAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzD,CAAC;gBAED,2CAA2C;gBAC3C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;oBACvC,cAAc,EAAE,GAAG,CAAC,cAAc;oBAClC,MAAM;oBACN,SAAS,EAAE,OAAO;oBAClB,iBAAiB,EAAE,gBAAgB;iBACpC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,UAAU,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACvG,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBACpH,CAAC;gBACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC7E,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,QAAQ,MAAM,YAAY,CAAC,EAAE,CAAC;gBAC5H,CAAC;gBACD,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;gBAExF,uCAAuC;gBACvC,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;oBAC3C,cAAc,EAAE,GAAG,CAAC,cAAc;oBAClC,MAAM;oBACN,KAAK,EAAE,UAAU,CAAC,KAAK;iBACxB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAChE,CAAC;YAED;gBACE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,uBAAuB,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QACvI,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,gBAAgB;IAChB,kEAAkE;IAE1D,oBAAoB,CAC1B,IAAY,EACZ,KAAc,EACd,cAAsC,EACtC,cAA2D;QAE3D,MAAM,OAAO,GAAG,uBAAiD,CAAC;QAClE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;YACpD,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,IAAI,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACnC,cAAc,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,oCAAoC;IACpC,kEAAkE;IAE1D,qBAAqB,CAAC,IAA6B,EAAE,OAA8B;QACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0C,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAiE,CAAC;QAEtF,8FAA8F;QAC9F,2FAA2F;QAC3F,yEAAyE;QACzE,4FAA4F;QAC5F,4FAA4F;QAC5F,qDAAqD;QACrD,IAAI,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,QAAQ,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC5C,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC;QAC3G,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC;QACzG,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW;YACtC,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC;YACrD,CAAC,CAAE,IAAI,CAAC,WAAkC,CAAC;QAE7C,OAAO;YACL,+FAA+F;YAC/F,kGAAkG;YAClG,kGAAkG;YAClG,6FAA6F;YAC7F,gGAAgG;YAChG,+FAA+F;YAC/F,6FAA6F;YAC7F,uFAAuF;YACvF,cAAc,EAAG,IAAI,CAAC,UAAqB,IAAI,KAAK,CAAC,WAAW,EAAE;YAClE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;YAC1B,0FAA0F;YAC1F,6FAA6F;YAC7F,6FAA6F;YAC7F,gGAAgG;YAChG,aAAa,EAAE,IAAI;YACnB,SAAS;YACT,QAAQ;YACR,WAAW,EAAE,WAAW,IAAI,SAAS;YACrC,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,GAAuB;QAClD,4FAA4F;QAC5F,+FAA+F;QAC/F,wGAAwG;QACxG,mFAAmF;QACnF,OAAO;YACL,MAAM,EAAE,sBAAsB,CAAC,IAAI;YACnC,WAAW,EAAE,MAAM;YACnB,WAAW,EAAE,6BAA6B;YAC1C,KAAK,EAAE,8BAA8B,CACnC,aAAa,CAAC,YAAY,EAC1B,GAAG,CAAC,cAAc,EAClB,QAAQ,GAAG,CAAC,OAAO,EAAE,CACtB;SACF,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,sBAAsB;IACtB,kEAAkE;IAE1D,KAAK,CAAC,cAAc,CAAC,EAAyB,EAAE,MAAc,EAAE,cAAsB;QAC5F,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAO,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACxG,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAClI,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC;YAE7B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,EAAyB,EAAE,MAAc;QACrE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACxG,OAAO,OAAqG,CAAC;QAC/G,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,EAAyB,EAAE,MAAc,EAAE,cAAsB;QAClG,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,EAAE,EAAE;gBAC7F,MAAM;gBACN,cAAc,EAAE,iBAAiB,CAAC,UAAU;gBAC5C,cAAc;aACf,CAAC,CAAC;YACH,OAAO,IAA0C,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH;;;;;;;OAOG;IACK,KAAK,CAAC,sBAAsB,CAClC,EAAyB,EACzB,cAAsB;QAEtB,IAAI,cAAc,GAAa,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAC5G,IAAI,SAAS,EAAE,CAAC;gBACd,0FAA0F;gBAC1F,wFAAwF;gBACxF,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,iEAAiE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,UAAU,GAAsC,IAAI,CAAC;QACzD,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,EAAE,EAAE,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACtH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,sEAAsE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,OAAO;YACL,eAAe,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI;YACpD,eAAe,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI;YACpD,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,IAAI,IAAI;YAC5D,WAAW,EAAE,UAAU,EAAE,WAAW;YACpC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB;YAC9C,cAAc;YACd,6FAA6F;YAC7F,+FAA+F;YAC/F,4FAA4F;YAC5F,4EAA4E;YAC5E,uBAAuB,EAAE,UAAU,EAAE,uBAAuB;YAC5D,eAAe,EAAE,UAAU,EAAE,eAAe;SAC7C,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACK,KAAK,CAAC,gCAAgC,CAC5C,EAAyB,EACzB,MAAc,EACd,cAAsB,EACtB,IAAa,EACb,MAA2E;QAE3E,IAAI,CAAC,uCAAuC,CAAC,MAAM,CAAC;YAAE,OAAO;QAE7D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CACxD,gBAAgB,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CACtE,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,GAAG;YAAE,OAAO;QAE7B,MAAM,cAAc,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,6BAA6B,CAAC,cAAc,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEpG,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAChE,gBAAgB,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,UAAU,CAAC,GAAG,EAAE,EACxF,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACI,CAAC;QAEtC,MAAM,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,yCAAyC,CAC1F,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EACpC,kBAAkB,IAAI,EAAE,CACzB,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/E,KAAK,MAAM,YAAY,IAAI,qBAAqB,EAAE,CAAC;YACjD,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QAC1G,CAAC;QACD,KAAK,MAAM,kBAAkB,IAAI,eAAe,EAAE,CAAC;YACjD,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,EAAE,EAAE;gBACxF,cAAc;gBACd,kBAAkB;gBAClB,oBAAoB,EAAE,UAAU,CAAC,GAAG;gBACpC,IAAI,EAAE,MAAM,CAAC,eAAe;aAC7B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,EAAE;YAClD,cAAc;YACd,MAAM;YACN,cAAc;YACd,wFAAwF;YACxF,8FAA8F;YAC9F,mDAAmD;YACnD,cAAc,EAAE,aAAa,IAAI,IAAI;YACrC,aAAa,EAAE,eAAe,CAAC,MAAM;YACrC,kBAAkB,EAAE,qBAAqB,CAAC,MAAM;SACjD,CAAC,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,+BAA+B;IAC/B,kEAAkE;IAE1D,iBAAiB,CAAC,SAAiB,EAAE,OAAgC;QAC3E,IAAI,CAAC,QAAQ,CAAC,SAAS,SAAS,EAAE,EAAE;YAClC,aAAa,EAAE,SAAS;YACxB,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,iBAAiB;IACjB,kEAAkE;IAE1D,gBAAgB,CAAC,GAAa,EAAE,KAAc,EAAE,SAAiB;QACvE,IAAI,CAAC,iBAAiB,CAAC,GAAG,SAAS,QAAQ,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEpF,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,KAAiE,CAAC;YACrF,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,IAAI,GAAG,CAAC;YAE5C,+CAA+C;YAC/C,IAAI,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACvD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAC1D,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,IAAI,oBAAoB,CAAC,CACjE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAC1E,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,cAAc,CAAC,CAC9D,CAAC;YACF,OAAO;QACT,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvE,eAAe,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAC9C,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,YAAY;IACZ,kEAAkE;IAE1D,UAAU,CAAC,UAAkB;QACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,gCAAgC,CAAC,EAAyB,EAAE,cAAsB;QAC9F,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;YAAE,OAAO,IAAI,CAAC;QAGxD,MAAM,iBAAiB,GAAI,IAAI,CAAC,gBAAgB,CAAC,MAAkE,EAAE,iBAAiB,CAAC;QAEvI,IAAI,CAAC;YACH,OAAO,MAAM,+BAA+B,CAAC,EAAE,EAAE;gBAC/C,cAAc;gBACd,iBAAiB;gBACjB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;aACtD,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,GAAY;QAClC,OAAQ,GAAgC,CAAC,WAAW,CAAC;IACvD,CAAC;IAEO,WAAW,CAAC,GAAY;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC;QACtF,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1E,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;QAC1D,OAAO,GAAG,QAAQ,MAAM,IAAI,iBAAiB,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,4BAA4B;QACxC,OAAO,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAC3G,CAAC;CACF,CAAA;AAtpCY,4BAA4B;IADxC,UAAU,EAAE;IASR,WAAA,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACjC,WAAA,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;IAC9C,WAAA,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;IAC9C,WAAA,MAAM,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,CAAA;IACzD,WAAA,MAAM,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAA;IACtD,WAAA,MAAM,CAAC,kBAAkB,CAAC,iCAAiC,CAAC,CAAA;IAC5D,WAAA,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAC3C,WAAA,MAAM,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,CAAA;IAC/D,WAAA,MAAM,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAA;IAClD,WAAA,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAI3C,YAAA,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;qCAbJ,aAAa;QACM,0BAA0B;QAC1B,mBAAmB,YAEO,yCAAyC;QAC7B,wCAAwC;QAC5D,uBAAuB;QACH,oCAAoC;QACjD,uBAAuB;GAhBrG,4BAA4B,CAspCxC","sourcesContent":["/**\n * SCIM 2.0 User Provisioning Controller — Step 20\n *\n * Receives user lifecycle events from identity providers (Okta, Azure AD, OneLogin)\n * via SCIM 2.0 protocol (RFC 7643 Core Schema, RFC 7644 Protocol).\n *\n * Decision 13: Lean SCIM — Users only in v1, no Groups, no generic adapter.\n * Critical Note #8: One controller, Users only, future extensions documented in code comments.\n * Critical Note #9: Follows billing's ManualControllersOptions pattern for conditional mounting.\n *\n * Bearer token auth: extracts token from Authorization header, hashes it,\n * looks up ScimTokenBase, validates isActive/expiresAt,\n * creates ExecutionContext with executionType: ORG_API_KEY.\n *\n * Reuses EnterpriseUserProvisioningService from Step 15 for:\n * - provisionEnterpriseUser() — user + profile + org member + identity link creation\n * - updateOrgUser() — profile attribute updates\n * - deactivateOrgUser() — set user status to INACTIVE\n */\n\nimport 'reflect-metadata';\nimport { injectable, inject } from 'inversify';\nimport { createHash } from 'crypto';\nimport type { Request, Response, NextFunction } from 'express';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { ErrorHandlerService } from '~wildo-backend-lib/errors/services/error-handler.backend.service';\nimport type { ServicesRegistryHandlerBackendService } from '~wildo-backend-lib/base-classes/services/services/services-registry-handler.backend.service';\nimport type { Resources_PaginatedResult } from '@wildo-ai/saas-models';\nimport { AuthExecutionContextFactoryBackendService } from '~wildo-backend-lib/security/authentications/services/auth-execution-context-factory.backend.service';\nimport { EnterpriseUserProvisioningBackendService } from '~wildo-backend-lib/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service';\nimport { buildEnterpriseConnectionScope } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport type { EnterpriseProvisioningConfig } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport type { NormalizedUserProfile, ProvisioningConnectionContext } from '~wildo-backend-lib/security/authentications/models/sso-connection.backend.schemas';\nimport { AuditLogsBackendService } from '~wildo-backend-lib/compliance/audit-trails/services/audit-logs.backend.service';\nimport { AbstractControllerBackendService } from '~wildo-backend-lib/base-classes/services/controllers/abstract-controller.backend.service';\nimport {\n resolveVerifiedDomains,\n CoreResourceType,\n UserStatus,\n ErrorType,\n isWildoBackendError,\n AuthScopeType,\n ExternalIdentitySource,\n SsoConnectionType,\n WildoHeaderKeys,\n} from '@wildo-ai/saas-models';\nimport type { User, ScimProvisioningConfigBase, ScimAttributeMapping } from '@wildo-ai/saas-models';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport type { ScimTokenBase } from '@wildo-ai/saas-models';\nimport { resolveScimAttributePath } from '~wildo-backend-lib/security/scim/utils/scim-attribute-path-resolver.backend.utils';\nimport {\n SCIM_USER_ATTRIBUTE_MAP,\n SCIM_SCHEMAS,\n SCIM_CONTENT_TYPE,\n buildScimServiceProviderConfig,\n SCIM_USER_SCHEMA_DEFINITION,\n SCIM_RESOURCE_TYPES,\n extractScimDirectoryUnitValue,\n type SCIMPatchOperation,\n type SCIMBulkRequest,\n type SCIMBulkOperationResponse,\n} from '~wildo-backend-lib/security/scim/models/scim-protocol.backend.schemas';\nimport {\n isScimOrganizationUnitManagementEnabled,\n resolveScimOrganizationUnitId,\n resolveScimOrganizationUnitReconciliation,\n} from '@wildo-ai/saas-models';\nimport type {\n ScimOrganizationUnitAssignment,\n ScimOrganizationUnitManagementSignal,\n} from '@wildo-ai/saas-models';\nimport { parseSCIMFilter } from '~wildo-backend-lib/security/scim/utils/scim-filter-parser';\nimport { formatUserAsSCIM, formatListAsSCIM, formatSCIMError } from '~wildo-backend-lib/security/scim/utils/scim-response-formatter';\nimport { AuthOrganizationConfigurationService } from '~wildo-backend-lib/security/authentications/services/admin-config/auth-organization-configuration.service';\nimport { RateLimitBackendService } from '~wildo-backend-lib/errors/services/rate-limit.backend.service';\nimport type { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport { isScimProvisioningEnabledForOrg } from '~wildo-backend-lib/organizations/services/scim-provisioning-gate.backend.utils';\nimport type { SystemAccessBackendService } from '~wildo-backend-lib/base-classes/services/services/system-access.backend.service';\n\n@injectable()\nexport class SCIMControllerBackendService extends AbstractControllerBackendService {\n // (Per-token rate-limit constants — 300/min/token — were removed in PR 5\n // of the rate-limit unification: the policy is now declared inline in\n // `_scimBearerAuthMiddleware` via `RateLimitBackendService.checkPolicy`\n // with `clientIdOverride: token._id` for per-token bucketing. Same\n // semantic — no IP, no organizationId — different surface.)\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger) logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService) errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.ErrorHandlerService) errorHandler: ErrorHandlerService,\n @inject(SAAS_SERVICE_TYPES.ServicesRegistryHandlerService) private readonly servicesRegistryHandler: ServicesRegistryHandlerBackendService,\n @inject(SAAS_SERVICE_TYPES.AuthExecutionContextFactory) private readonly authEcFactory: AuthExecutionContextFactoryBackendService,\n @inject(SAAS_SERVICE_TYPES.EnterpriseUserProvisioningService) private readonly provisioningService: EnterpriseUserProvisioningBackendService,\n @inject(SAAS_SERVICE_TYPES.AuditLogsService) private readonly auditLogsService: AuditLogsBackendService,\n @inject(SAAS_SERVICE_TYPES.AuthOrganizationConfigurationService) private readonly orgConfigService: AuthOrganizationConfigurationService,\n @inject(SAAS_SERVICE_TYPES.RateLimitBackendService) private readonly rateLimitService: RateLimitBackendService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService) private readonly appConfigService: AppConfigurationService,\n // Directory-driven re-activation writes `User.status`, which is `.excludeFromUpdate()` — the\n // client-facing contract cannot carry it, so the write goes through the trusted system door.\n // Appended LAST to keep positional construction in existing tests stable.\n @inject(SAAS_SERVICE_TYPES.SystemAccessService) private readonly systemAccessService: SystemAccessBackendService,\n ) {\n super(logger, errorBuilder, errorHandler, 'SCIMController');\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Route Setup\n // ═══════════════════════════════════════════════════════════════\n\n protected setupRoutes(): void {\n // SCIM Discovery endpoints (no auth required for ServiceProviderConfig per RFC 7644 §4)\n this.router.get('/scim/v2/ServiceProviderConfig', this.asyncHandler(this._handleServiceProviderConfig.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/ServiceProviderConfig', 'SCIM ServiceProviderConfig');\n\n this.router.get('/scim/v2/Schemas', this.asyncHandler(this._handleSchemas.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/Schemas', 'SCIM Schemas');\n\n this.router.get('/scim/v2/ResourceTypes', this.asyncHandler(this._handleResourceTypes.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/ResourceTypes', 'SCIM ResourceTypes');\n\n // All /Users endpoints require bearer token auth\n const authMiddleware = this._scimBearerAuthMiddleware.bind(this);\n\n this.router.post('/scim/v2/Users', authMiddleware, this.asyncHandler(this._handleCreateUser.bind(this)));\n this.logRouteRegistration('POST', '/scim/v2/Users', 'SCIM Create User');\n\n this.router.get('/scim/v2/Users', authMiddleware, this.asyncHandler(this._handleListUsers.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/Users', 'SCIM List Users');\n\n this.router.get('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handleGetUser.bind(this)));\n this.logRouteRegistration('GET', '/scim/v2/Users/:id', 'SCIM Get User');\n\n this.router.put('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handleReplaceUser.bind(this)));\n this.logRouteRegistration('PUT', '/scim/v2/Users/:id', 'SCIM Replace User');\n\n this.router.patch('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handlePatchUser.bind(this)));\n this.logRouteRegistration('PATCH', '/scim/v2/Users/:id', 'SCIM Patch User');\n\n this.router.delete('/scim/v2/Users/:id', authMiddleware, this.asyncHandler(this._handleDeleteUser.bind(this)));\n this.logRouteRegistration('DELETE', '/scim/v2/Users/:id', 'SCIM Delete User');\n\n // Bulk operations (Step 21)\n this.router.post('/scim/v2/Bulk', authMiddleware, this.asyncHandler(this._handleBulk.bind(this)));\n this.logRouteRegistration('POST', '/scim/v2/Bulk', 'SCIM Bulk Operations');\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Bearer Token Auth Middleware\n // ═══════════════════════════════════════════════════════════════\n\n private async _scimBearerAuthMiddleware(req: Request, res: Response, next: NextFunction): Promise<void> {\n const authHeader = req.headers[WildoHeaderKeys.AUTHORIZATION];\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Bearer token required', 'invalidValue')\n );\n return;\n }\n\n const plainToken = authHeader.substring(7);\n if (!plainToken) {\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Bearer token is empty', 'invalidValue')\n );\n return;\n }\n\n const tokenHash = this._hashToken(plainToken);\n\n try {\n const ec = await this._getInternalExecutionContext();\n const token = await this.servicesRegistryHandler.read<ScimTokenBase & { organizationId: string }>(CoreResourceType.ORGANIZATION_SCIM_TOKENS, ec, { tokenHash });\n\n if (!token) {\n this._logSCIMOperation('auth_failed', { reason: 'token_not_found' });\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Invalid bearer token')\n );\n return;\n }\n\n if (!token.isActive) {\n this._logSCIMOperation('auth_failed', { reason: 'token_inactive', tokenId: token._id });\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Token has been revoked')\n );\n return;\n }\n\n if (token.expiresAt && new Date(token.expiresAt) < new Date()) {\n this._logSCIMOperation('auth_failed', { reason: 'token_expired', tokenId: token._id });\n res.status(401).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(401, 'Token has expired')\n );\n return;\n }\n\n // Per-token rate limiting (PR 5 of the rate-limit unification, Step 5\n // — second imperative-to-declarative migration wave). 300/min/token,\n // keyed on the token id (NOT the IP — IP rotation must not let an\n // attacker sidestep a per-token quota; the token IS the subject of\n // the quota). Standard `X-RateLimit-*` and `Retry-After` headers\n // are now written by `checkPolicy` BEFORE the throw, so they're\n // preserved on the SCIM 429 response below (previously absent at\n // this seam — IdP retry logic had to guess backoff). The\n // try/catch stays because SCIM has its own RFC 7644 error format\n // (the underlying `RATE_LIMIT` error type is unchanged).\n try {\n await this.rateLimitService.checkPolicy(\n req,\n res,\n { requestsPerMinute: 300 },\n 'scim:token',\n undefined,\n token._id,\n );\n } catch (e) {\n if (isWildoBackendError(e) && (e as { type?: string }).type === ErrorType.RATE_LIMIT) {\n this._logSCIMOperation('rate_limited', { tokenId: token._id, organizationId: token.organizationId });\n res.status(429).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(429, 'Rate limit exceeded. Try again later.', 'tooMany')\n );\n return;\n }\n throw e;\n }\n\n // Attach org + scope context and EC to request for downstream handlers\n (req as SCIMAuthenticatedRequest).scimContext = {\n organizationId: token.organizationId,\n scopeType: AuthScopeType.ORGANIZATION,\n scopeId: token.organizationId,\n tokenId: token._id,\n tokenDisplayName: token.displayName,\n };\n (req as SCIMAuthenticatedRequest).scimEc = ec;\n\n // W5.10: Check if SCIM provisioning is enabled for this org's type\n const scimEnabled = await this._isScimProvisioningEnabledForOrg(ec, token.organizationId);\n if (!scimEnabled) {\n this._logSCIMOperation('scim_disabled_for_org_type', { organizationId: token.organizationId });\n res.status(403).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(403, 'SCIM provisioning is not enabled for this organization type', 'invalidValue')\n );\n return;\n }\n\n // Update lastUsedAt asynchronously (fire-and-forget)\n this.servicesRegistryHandler.update(CoreResourceType.ORGANIZATION_SCIM_TOKENS, ec, token._id, { lastUsedAt: new Date() }).catch(() => {\n // Non-fatal — don't fail the request if lastUsedAt update fails\n });\n\n const scimCtx = (req as SCIMAuthenticatedRequest).scimContext;\n this._logSCIMOperation('auth_success', {\n tokenId: token._id,\n organizationId: token.organizationId,\n scopeType: scimCtx.scopeType,\n scopeId: scimCtx.scopeId,\n method: req.method,\n path: req.path,\n });\n\n next();\n } catch (error) {\n if (isWildoBackendError(error)) {\n res.status(500).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(500, 'Internal authentication error')\n );\n return;\n }\n res.status(500).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(500, 'Internal server error')\n );\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Discovery Endpoints\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleServiceProviderConfig(_req: Request, res: Response): Promise<void> {\n /*\n * The two documentation URLs come from the application (`auth.scimDocumentation`) and are\n * OMITTED when it declares none — see `buildScimServiceProviderConfig`. Read through\n * `isInitialized()` because this is a public discovery endpoint: it must answer with the\n * implementation's own facts even on a runtime whose configuration has not landed, rather than\n * throw and leave a directory administrator with a 500 where the RFC promises a document.\n */\n const scimDocumentation = this.appConfigService.isInitialized()\n ? this.appConfigService.config.auth?.scimDocumentation\n : undefined;\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE)\n .json(buildScimServiceProviderConfig(scimDocumentation));\n }\n\n private async _handleSchemas(_req: Request, res: Response): Promise<void> {\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json({\n schemas: [SCIM_SCHEMAS.LIST_RESPONSE],\n totalResults: 1,\n startIndex: 1,\n itemsPerPage: 1,\n Resources: [SCIM_USER_SCHEMA_DEFINITION],\n });\n }\n\n private async _handleResourceTypes(_req: Request, res: Response): Promise<void> {\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json({\n schemas: [SCIM_SCHEMAS.LIST_RESPONSE],\n totalResults: SCIM_RESOURCE_TYPES.length,\n startIndex: 1,\n itemsPerPage: SCIM_RESOURCE_TYPES.length,\n Resources: SCIM_RESOURCE_TYPES,\n });\n }\n\n // ═══════════════════════════════════════════════════════════════\n // POST /scim/v2/Users — Create User\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleCreateUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const body = req.body;\n\n this._logSCIMOperation('create_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, tokenId: ctx.tokenId });\n\n // Config first — its `attributeMapping` drives how the body is normalised into a profile.\n // `_getProvisioningConfig` is resilient (never throws), so this is safe before the try.\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const profile = this._mapSCIMBodyToProfile(body, orgConfig.attributeMapping);\n if (!profile.email) {\n res.status(400).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(400, 'userName (email) is required', 'invalidValue')\n );\n return;\n }\n\n try {\n const connection = this._buildSCIMConnection(ctx);\n\n const result = await this.provisioningService.provisionEnterpriseUser(profile, connection, orgConfig);\n\n // WS-C: bind the directory's department to an organization unit. Runs BEFORE the response so a\n // failure surfaces as a SCIM error the IdP retries, rather than a 201 hiding diverged grants.\n await this._syncOrganizationUnitAssignments(ec, result.user._id, ctx.organizationId, body, orgConfig);\n\n const userProfile = await this._getUserProfile(ec, result.user._id);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(result.user, userProfile, baseUrl, body.externalId);\n\n this._logSCIMOperation('user_created', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n userId: result.user._id,\n isNew: result.isNew,\n tokenId: ctx.tokenId,\n });\n\n // H8: Audit SCIM user provisioned\n this.auditLogsService.logSCIMUserProvisioned({\n organizationId: ctx.organizationId,\n userId: result.user._id,\n email: profile.email,\n isNewUser: result.isNew,\n provisionedVia: `scim:${ctx.tokenDisplayName}`,\n authSource: 'scim',\n }, ec).catch(() => {});\n\n res.status(201).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).set(WildoHeaderKeys.LOCATION, scimUser.meta.location).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'create_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // GET /scim/v2/Users/:id — Get User\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleGetUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const profile = await this._getUserProfile(ec, userId);\n const identityLink = await this._getUserIdentityLink(ec, userId, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(user, profile, baseUrl, identityLink?.providerUserId);\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'get_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // GET /scim/v2/Users — List Users (with filter + pagination)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleListUsers(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const filter = req.query.filter as string | undefined;\n const startIndex = Math.max(1, parseInt(req.query.startIndex as string) || 1);\n const count = Math.min(200, Math.max(1, parseInt(req.query.count as string) || 100));\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const mongoFilter = parseSCIMFilter(filter);\n\n // Scope to organization via org member lookup\n const orgMembers = await this.servicesRegistryHandler.list<{ userId: string }>(\n CoreResourceType.ORGANIZATION_MEMBERS, ec, { organizationId: ctx.organizationId },\n undefined, { paginated: false },\n ) as { userId: string }[];\n const memberUserIds = orgMembers.map((m) => m.userId);\n\n if (memberUserIds.length === 0) {\n const baseUrl = this._getBaseUrl(req);\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(formatListAsSCIM([], 0, startIndex, baseUrl));\n return;\n }\n\n // Combine SCIM filter with org scope\n const combinedFilter = {\n ...mongoFilter,\n _id: { $in: memberUserIds },\n };\n\n const page = Math.max(1, Math.floor((startIndex - 1) / count) + 1);\n const usersResult = await this.servicesRegistryHandler.list<User>(\n CoreResourceType.USERS, ec, combinedFilter,\n { page, limit: count },\n { paginated: true },\n ) as Resources_PaginatedResult<User>;\n\n const users = (usersResult.data || []) as User[];\n const totalCount = usersResult.pagination?.total ?? users.length;\n\n // Hydrate profiles\n const usersWithProfiles = await Promise.all(\n users.map(async (user) => {\n const profile = await this._getUserProfile(ec, user._id);\n const identityLink = await this._getUserIdentityLink(ec, user._id, ctx.organizationId);\n return { user, profile, externalId: identityLink?.providerUserId };\n })\n );\n\n const baseUrl = this._getBaseUrl(req);\n const response = formatListAsSCIM(usersWithProfiles, totalCount, startIndex, baseUrl);\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(response);\n } catch (error) {\n this._handleSCIMError(res, error, 'list_users');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // PUT /scim/v2/Users/:id — Replace User (full update)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleReplaceUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n const body = req.body;\n\n this._logSCIMOperation('replace_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const profile = this._mapSCIMBodyToProfile(body, orgConfig.attributeMapping);\n\n // Update profile attributes\n await this.provisioningService.updateOrgUser(userId, {\n firstName: profile.firstName,\n lastName: profile.lastName,\n displayName: profile.displayName,\n }, orgConfig);\n\n // Handle active status change\n if (body.active === false && user.status !== UserStatus.INACTIVE) {\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n } else if (body.active === true && user.status !== UserStatus.ACTIVE) {\n // `status` is `.excludeFromUpdate()`, so the ordinary handler write is stripped by the\n // repository's strict re-parse and the user would silently stay deactivated. The system\n // door re-attaches it. Not a lifecycle VERB: re-activation here is a consequence of the\n // directory's state, not an operator decision carrying a reason.\n await this.systemAccessService.updateAsSystem(CoreResourceType.USERS, userId, { status: UserStatus.ACTIVE });\n }\n\n // WS-C: a PUT carries the directory's full current state, so this is where a department CHANGE\n // (and therefore the revocation of the previous unit's access) actually lands.\n await this._syncOrganizationUnitAssignments(ec, userId, ctx.organizationId, body, orgConfig);\n\n const updatedUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n const updatedProfile = await this._getUserProfile(ec, userId);\n const identityLink = await this._getUserIdentityLink(ec, userId, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(updatedUser || user, updatedProfile, baseUrl, identityLink?.providerUserId);\n\n this._logSCIMOperation('user_replaced', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n // H8: Audit SCIM user updated (replace)\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'replace',\n updatedAttributes: ['profile', body.active !== undefined ? 'active' : undefined].filter(Boolean) as string[],\n }, ec).catch(() => {});\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'replace_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // PATCH /scim/v2/Users/:id — Partial Update (RFC 7644 §3.5.2)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handlePatchUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n const body = req.body;\n\n this._logSCIMOperation('patch_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n if (!body.Operations || !Array.isArray(body.Operations)) {\n res.status(400).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(400, 'PATCH requires Operations array', 'invalidSyntax')\n );\n return;\n }\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const profileUpdates: Record<string, string> = {};\n let statusChange: 'activate' | 'deactivate' | null = null;\n\n for (const op of body.Operations as SCIMPatchOperation[]) {\n const normalizedOp = op.op?.toLowerCase() as 'add' | 'remove' | 'replace';\n\n if (normalizedOp === 'add' || normalizedOp === 'replace') {\n if (op.path) {\n // Single attribute update\n this._applyPatchAttribute(op.path, op.value, profileUpdates, (s) => { statusChange = s; });\n } else if (op.value && typeof op.value === 'object') {\n // Bulk attribute update (no path — value is an object of attributes)\n const valueObj = op.value as Record<string, unknown>;\n for (const [key, val] of Object.entries(valueObj)) {\n this._applyPatchAttribute(key, val, profileUpdates, (s) => { statusChange = s; });\n }\n }\n } else if (normalizedOp === 'remove' && op.path) {\n const scimAttr = op.path;\n const dbField = (SCIM_USER_ATTRIBUTE_MAP as Record<string, string>)[scimAttr];\n if (dbField && dbField !== '_active' && dbField !== 'email') {\n profileUpdates[dbField] = '';\n }\n }\n }\n\n // Apply profile updates\n if (Object.keys(profileUpdates).length > 0) {\n await this.provisioningService.updateOrgUser(userId, profileUpdates as Record<string, string>, orgConfig);\n }\n\n // Apply status change\n if (statusChange === 'deactivate') {\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n } else if (statusChange === 'activate') {\n // Same system door as the PUT path above, for the same reason: `status` is\n // `.excludeFromUpdate()` and a handler write would be silently discarded.\n await this.systemAccessService.updateAsSystem(CoreResourceType.USERS, userId, { status: UserStatus.ACTIVE });\n }\n\n // Return updated user\n const updatedUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n const updatedProfile = await this._getUserProfile(ec, userId);\n const identityLink = await this._getUserIdentityLink(ec, userId, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n const scimUser = formatUserAsSCIM(updatedUser || user, updatedProfile, baseUrl, identityLink?.providerUserId);\n\n this._logSCIMOperation('user_patched', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n userId,\n operations: body.Operations.length,\n tokenId: ctx.tokenId,\n });\n\n // H8: Audit SCIM user updated (patch)\n const patchedAttrs = Object.keys(profileUpdates);\n if (statusChange) patchedAttrs.push('active');\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'patch',\n updatedAttributes: patchedAttrs,\n }, ec).catch(() => {});\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(scimUser);\n } catch (error) {\n this._handleSCIMError(res, error, 'patch_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // DELETE /scim/v2/Users/:id — Deactivate User\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleDeleteUser(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const userId = req.params.id as string;\n\n this._logSCIMOperation('delete_user', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n try {\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n\n if (!user) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, `User ${userId} not found`)\n );\n return;\n }\n\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n\n this._logSCIMOperation('user_deactivated', { organizationId: ctx.organizationId, scopeType: ctx.scopeType, scopeId: ctx.scopeId, userId, tokenId: ctx.tokenId });\n\n // H8: Audit SCIM user deactivated\n this.auditLogsService.logSCIMUserDeactivated({\n organizationId: ctx.organizationId,\n userId,\n email: user.email,\n }, ec).catch(() => {});\n\n res.status(204).end();\n } catch (error) {\n this._handleSCIMError(res, error, 'delete_user');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // POST /scim/v2/Bulk — Bulk Operations (Step 21)\n // ═══════════════════════════════════════════════════════════════\n\n private async _handleBulk(req: Request, res: Response): Promise<void> {\n const ctx = this._getSCIMContext(req);\n const body = req.body as SCIMBulkRequest;\n\n if (!body.Operations || !Array.isArray(body.Operations)) {\n res.status(400).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(400, 'Bulk request requires Operations array', 'invalidSyntax')\n );\n return;\n }\n\n if (body.Operations.length > 100) {\n res.status(413).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(413, 'Bulk request exceeds maximum of 100 operations', 'tooMany')\n );\n return;\n }\n\n this._logSCIMOperation('bulk_start', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n operationCount: body.Operations.length,\n tokenId: ctx.tokenId,\n });\n\n const results: SCIMBulkOperationResponse[] = [];\n let errorCount = 0;\n const failOnErrors = body.failOnErrors || 0;\n\n for (const op of body.Operations) {\n if (failOnErrors > 0 && errorCount >= failOnErrors) {\n results.push({\n method: op.method,\n bulkId: op.bulkId,\n status: '412',\n response: formatSCIMError(412, 'Processing stopped due to failOnErrors threshold'),\n });\n continue;\n }\n\n try {\n const result = await this._executeBulkOperation(op, ctx, req);\n results.push(result);\n if (parseInt(result.status) >= 400) {\n errorCount++;\n }\n } catch {\n errorCount++;\n results.push({\n method: op.method,\n bulkId: op.bulkId,\n status: '500',\n response: formatSCIMError(500, 'Internal error processing bulk operation'),\n });\n }\n }\n\n this._logSCIMOperation('bulk_complete', {\n organizationId: ctx.organizationId,\n scopeType: ctx.scopeType,\n scopeId: ctx.scopeId,\n totalOperations: body.Operations.length,\n errors: errorCount,\n tokenId: ctx.tokenId,\n });\n\n res.set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json({\n schemas: [SCIM_SCHEMAS.BULK_RESPONSE],\n Operations: results,\n });\n }\n\n private async _executeBulkOperation(\n op: SCIMBulkRequest['Operations'][0],\n ctx: SCIMRequestContext,\n req: Request,\n ): Promise<SCIMBulkOperationResponse> {\n const pathMatch = op.path?.match(/\\/Users(?:\\/(.+))?$/);\n if (!pathMatch) {\n return { method: op.method, bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'Invalid path') };\n }\n const userId = pathMatch[1];\n const ec = (req as SCIMAuthenticatedRequest).scimEc;\n const orgConfig = await this._getProvisioningConfig(ec, ctx.organizationId);\n const baseUrl = this._getBaseUrl(req);\n\n switch (op.method) {\n case 'POST': {\n if (!op.data) {\n return { method: 'POST', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'Missing data for POST') };\n }\n const profile = this._mapSCIMBodyToProfile(op.data, orgConfig.attributeMapping);\n if (!profile.email) {\n return { method: 'POST', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'userName required') };\n }\n const connection = this._buildSCIMConnection(ctx);\n const result = await this.provisioningService.provisionEnterpriseUser(profile, connection, orgConfig);\n\n // H8: Audit bulk SCIM user provisioned\n this.auditLogsService.logSCIMUserProvisioned({\n organizationId: ctx.organizationId,\n userId: result.user._id,\n email: profile.email,\n isNewUser: result.isNew,\n provisionedVia: `scim:bulk:${ctx.tokenDisplayName}`,\n authSource: 'scim',\n }, ec).catch(() => {});\n\n return {\n method: 'POST',\n bulkId: op.bulkId,\n location: `${baseUrl}/Users/${result.user._id}`,\n status: '201',\n };\n }\n\n case 'PUT': {\n if (!userId || !op.data) {\n return { method: 'PUT', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'User ID and data required') };\n }\n const user = await this._findUserInOrg(ec, userId, ctx.organizationId);\n if (!user) {\n return { method: 'PUT', bulkId: op.bulkId, status: '404', response: formatSCIMError(404, `User ${userId} not found`) };\n }\n const putProfile = this._mapSCIMBodyToProfile(op.data, orgConfig.attributeMapping);\n await this.provisioningService.updateOrgUser(userId, {\n firstName: putProfile.firstName,\n lastName: putProfile.lastName,\n displayName: putProfile.displayName,\n }, orgConfig);\n\n // H8: Audit bulk SCIM user updated (replace)\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'replace',\n updatedAttributes: ['profile'],\n }, ec).catch(() => {});\n\n return { method: 'PUT', bulkId: op.bulkId, location: `${baseUrl}/Users/${userId}`, status: '200' };\n }\n\n case 'PATCH': {\n if (!userId || !op.data) {\n return { method: 'PATCH', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'User ID and data required') };\n }\n const patchUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n if (!patchUser) {\n return { method: 'PATCH', bulkId: op.bulkId, status: '404', response: formatSCIMError(404, `User ${userId} not found`) };\n }\n // Simplified: apply operations from data\n const operations = (op.data as Record<string, unknown>).Operations as SCIMPatchOperation[] | undefined;\n const bulkPatchedAttrs: string[] = [];\n if (operations) {\n const patchProfileUpdates: Record<string, string> = {};\n let patchStatusChange: 'activate' | 'deactivate' | null = null;\n for (const patchOp of operations) {\n const normalizedOp = patchOp.op?.toLowerCase() as 'add' | 'remove' | 'replace';\n if (normalizedOp === 'add' || normalizedOp === 'replace') {\n if (patchOp.path) {\n this._applyPatchAttribute(patchOp.path, patchOp.value, patchProfileUpdates, (s) => { patchStatusChange = s; });\n }\n }\n }\n if (Object.keys(patchProfileUpdates).length > 0) {\n await this.provisioningService.updateOrgUser(userId, patchProfileUpdates, orgConfig);\n }\n if (patchStatusChange === 'deactivate') {\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n }\n bulkPatchedAttrs.push(...Object.keys(patchProfileUpdates));\n if (patchStatusChange) bulkPatchedAttrs.push('active');\n }\n\n // H8: Audit bulk SCIM user updated (patch)\n this.auditLogsService.logSCIMUserUpdated({\n organizationId: ctx.organizationId,\n userId,\n operation: 'patch',\n updatedAttributes: bulkPatchedAttrs,\n }, ec).catch(() => {});\n\n return { method: 'PATCH', bulkId: op.bulkId, location: `${baseUrl}/Users/${userId}`, status: '200' };\n }\n\n case 'DELETE': {\n if (!userId) {\n return { method: 'DELETE', bulkId: op.bulkId, status: '400', response: formatSCIMError(400, 'User ID required') };\n }\n const deleteUser = await this._findUserInOrg(ec, userId, ctx.organizationId);\n if (!deleteUser) {\n return { method: 'DELETE', bulkId: op.bulkId, status: '404', response: formatSCIMError(404, `User ${userId} not found`) };\n }\n await this.provisioningService.deactivateOrgUser(userId, ctx.organizationId, orgConfig);\n\n // H8: Audit bulk SCIM user deactivated\n this.auditLogsService.logSCIMUserDeactivated({\n organizationId: ctx.organizationId,\n userId,\n email: deleteUser.email,\n }, ec).catch(() => {});\n\n return { method: 'DELETE', bulkId: op.bulkId, status: '204' };\n }\n\n default:\n return { method: op.method, bulkId: op.bulkId, status: '400', response: formatSCIMError(400, `Unsupported method: ${op.method}`) };\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // PATCH Helpers\n // ═══════════════════════════════════════════════════════════════\n\n private _applyPatchAttribute(\n path: string,\n value: unknown,\n profileUpdates: Record<string, string>,\n onStatusChange: (change: 'activate' | 'deactivate') => void,\n ): void {\n const attrMap = SCIM_USER_ATTRIBUTE_MAP as Record<string, string>;\n const dbField = attrMap[path];\n\n if (path === 'active' || dbField === '_active') {\n const isActive = value === true || value === 'true';\n onStatusChange(isActive ? 'activate' : 'deactivate');\n return;\n }\n\n if (dbField && dbField !== 'email') {\n profileUpdates[dbField] = String(value ?? '');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // SCIM Body → NormalizedUserProfile\n // ═══════════════════════════════════════════════════════════════\n\n private _mapSCIMBodyToProfile(body: Record<string, unknown>, mapping?: ScimAttributeMapping): NormalizedUserProfile {\n const userName = body.userName as string | undefined;\n const name = body.name as Record<string, string> | undefined;\n const emails = body.emails as Array<{ value: string; primary?: boolean }> | undefined;\n\n // An authored `attributeMapping` (set only via `saveScimProvisioningConfig`, which no surface\n // calls yet — so every current row leaves `mapping` undefined and the legacy normalisation\n // below runs verbatim) routes each field through its configured path via\n // `resolveScimAttributePath`. Email additionally falls back to the legacy chain (userName →\n // primary email → first email) whenever the mapped path yields nothing, so a directory that\n // omits the mapped email attribute still provisions.\n let email = mapping?.email ? (resolveScimAttributePath(body, mapping.email) ?? '') : '';\n if (!email) {\n email = userName || '';\n if (!email && emails?.length) {\n const primary = emails.find(e => e.primary);\n email = primary?.value || emails[0]?.value || '';\n }\n }\n\n const firstName = mapping?.firstName ? resolveScimAttributePath(body, mapping.firstName) : name?.givenName;\n const lastName = mapping?.lastName ? resolveScimAttributePath(body, mapping.lastName) : name?.familyName;\n const displayName = mapping?.displayName\n ? resolveScimAttributePath(body, mapping.displayName)\n : (body.displayName as string | undefined);\n\n return {\n // SCIM robustness: `externalId` is OPTIONAL per RFC 7643 §4.1.1, but the identity link keys on\n // `providerUserId` (`USER_IDENTITY_LINKS.providerUserId` is `.min(1)`), so a directory that omits\n // `externalId` used to fail `createIdentityLink`'s validation and 400 the WHOLE provision (opaque\n // \"Server error\"). Fall back to the (already-resolved, D8-unique) email — the identifier the\n // directory DID send as `userName` — so an externalId-less SCIM client still provisions cleanly\n // and the link keeps a stable, idempotent key. If neither `externalId` nor an email is present\n // this stays empty, but the caller (`_handleCreateUser`) rejects that earlier with a precise\n // \"userName (email) is required\" 400, so `createIdentityLink` never sees an empty key.\n providerUserId: (body.externalId as string) || email.toLowerCase(),\n email: email.toLowerCase(),\n // SCIM-provisioned users are IdP-trusted, so their email is treated as verified. Honoring\n // `autoVerifyEmail=false` (create PENDING_VERIFICATION + drive email verification) needs the\n // verification-completion flow wired for IdP-pushed users — tracked as AUTH-21, deliberately\n // not half-shipped here (a PENDING_VERIFICATION SCIM user with no verification email is stuck).\n emailVerified: true,\n firstName,\n lastName,\n displayName: displayName || undefined,\n rawClaims: body,\n };\n }\n\n private _buildSCIMConnection(ctx: SCIMRequestContext): ProvisioningConnectionContext {\n // Identity only. Provisioning settings are deliberately omitted: SCIM's config is assembled\n // independently by `_getProvisioningConfig` (SCIM config row + SSO-derived domains) and passed\n // to `provisionEnterpriseUser` as a separate argument. Hardcoding hints here would be inert, misleading\n // duplication (a stub `allowedDomains: []` in particular reads as \"unrestricted\").\n return {\n source: ExternalIdentitySource.SCIM,\n providerRef: 'scim',\n displayName: 'SCIM Directory Provisioning',\n scope: buildEnterpriseConnectionScope(\n AuthScopeType.ORGANIZATION,\n ctx.organizationId,\n `scim:${ctx.tokenId}`,\n ),\n };\n }\n\n // ═══════════════════════════════════════════════════════════════\n // User Lookup Helpers\n // ═══════════════════════════════════════════════════════════════\n\n private async _findUserInOrg(ec: ExecutionContext<any>, userId: string, organizationId: string): Promise<User | null> {\n try {\n // Verify user exists\n const user = await this.servicesRegistryHandler.read<User>(CoreResourceType.USERS, ec, { _id: userId });\n if (!user) return null;\n\n const membership = await this.servicesRegistryHandler.read(CoreResourceType.ORGANIZATION_MEMBERS, ec, { userId, organizationId });\n if (!membership) return null;\n\n return user;\n } catch {\n return null;\n }\n }\n\n private async _getUserProfile(ec: ExecutionContext<any>, userId: string): Promise<{ firstName?: string; lastName?: string; displayName?: string; avatarUrl?: string } | null> {\n try {\n const profile = await this.servicesRegistryHandler.read(CoreResourceType.USER_PROFILES, ec, { userId });\n return profile as { firstName?: string; lastName?: string; displayName?: string; avatarUrl?: string } | null;\n } catch {\n return null;\n }\n }\n\n private async _getUserIdentityLink(ec: ExecutionContext<any>, userId: string, organizationId: string): Promise<{ providerUserId?: string } | null> {\n try {\n const link = await this.servicesRegistryHandler.read(CoreResourceType.USER_IDENTITY_LINKS, ec, {\n userId,\n connectionType: SsoConnectionType.ENTERPRISE,\n organizationId,\n });\n return link as { providerUserId?: string } | null;\n } catch {\n return null;\n }\n }\n\n /**\n * Assemble the per-org provisioning config the SCIM push path runs against, reading each field\n * from the resource that OWNS it — no duplication, no hardcoded assumptions:\n * - `allowedDomains` from the scope's SSO config (`SsoConfig.domains`, which owns DNS\n * verification) — the DNS-verified subset only (H4). Read live, never copied.\n * - the SCIM channel behaviour (`autoCreateUsers`, `autoVerifyEmail`, `autoDeactivateUsers`,\n * `defaultRole`, `attributeMapping`) from the `ScimProvisioningConfig` row.\n *\n * Both loads are resilient: a read failure falls back to the historical hardcoded defaults\n * (`autoCreateUsers`/`autoVerifyEmail`/`autoDeactivateUsers` = true, no domain restriction) so a\n * transient config-store blip degrades to \"provision with safe defaults\", never a failed push.\n * Every default here equals the value this method previously hardcoded, so an org that has not\n * customised its SCIM config behaves exactly as before.\n */\n /**\n * Load the organization's provisioning settings.\n *\n * Returns the shared `EnterpriseProvisioningConfig` (which SSO JIT also consumes) INTERSECTED with\n * the SCIM-only organization-unit fields, rather than widening the shared type: unit provisioning is\n * a SCIM channel concern, and adding it to the type SSO JIT reads would advertise a capability that\n * path does not implement.\n */\n private async _getProvisioningConfig(\n ec: ExecutionContext<any>,\n organizationId: string,\n ): Promise<EnterpriseProvisioningConfig & ScimOrganizationUnitManagementSignal> {\n let allowedDomains: string[] = [];\n try {\n const ssoConfig = await this.orgConfigService.loadSSOConfig(ec, AuthScopeType.ORGANIZATION, organizationId);\n if (ssoConfig) {\n // Only include domains that have passed DNS verification (H4). Through the one derivation\n // (#457) rather than a fifth hand-written join — the stored list holds CLAIMED domains.\n allowedDomains = resolveVerifiedDomains(ssoConfig.domains);\n }\n } catch {\n this.logDebug('Failed to load org SSO config for SCIM provisioning (non-fatal)', { organizationId });\n }\n\n let scimConfig: ScimProvisioningConfigBase | null = null;\n try {\n scimConfig = await this.orgConfigService.loadScimProvisioningConfig(ec, AuthScopeType.ORGANIZATION, organizationId);\n } catch {\n this.logDebug('Failed to load SCIM provisioning config (non-fatal — using defaults)', { organizationId });\n }\n\n return {\n autoCreateUsers: scimConfig?.autoCreateUsers ?? true,\n autoVerifyEmail: scimConfig?.autoVerifyEmail ?? true,\n autoDeactivateUsers: scimConfig?.autoDeactivateUsers ?? true,\n defaultRole: scimConfig?.defaultRole,\n attributeMapping: scimConfig?.attributeMapping,\n allowedDomains,\n // Organization-unit provisioning (WS-C). Carried on the SAME config read rather than fetched\n // separately, so a push that manages units costs no extra round-trip. Undefined on both fields\n // means the organization never opted in, which `_syncOrganizationUnitAssignments` treats as\n // \"SCIM does not manage units here\" — and therefore never deletes anything.\n organizationUnitMapping: scimConfig?.organizationUnitMapping,\n defaultUnitRole: scimConfig?.defaultUnitRole,\n };\n }\n\n /**\n * Make the member's organization-unit assignments match what the directory just pushed.\n *\n * assurance-control: WILDO.IDENTITY.DIRECTORY_PROVISIONING — the directory is the authority for unit\n * membership, and unit membership is an authorization grant.\n *\n * ## Opt-in, and what \"authoritative\" costs\n *\n * Runs ONLY when the organization declared both a `organizationUnitMapping` and a `defaultUnitRole`.\n * That gate is load-bearing: reconciliation REPLACES the member's assignments with exactly what the\n * directory says, so without it a push from an organization that never configured units would delete\n * every assignment an admin had made by hand.\n *\n * Within an opted-in organization that replacement is the point — a user who moves from Sales to\n * Legal LOSES Sales. Access that only ever accumulates is how an offboarded department is never\n * actually left.\n *\n * ## Failure PROPAGATES\n *\n * A sync failure fails the SCIM request rather than being swallowed. The alternative leaves the\n * directory and the live grants diverged with no signal — and since assignments are authorization,\n * that divergence is silent over- or under-privilege. Failing loudly makes the IdP retry, and the\n * reconciliation is idempotent so a retry converges.\n */\n private async _syncOrganizationUnitAssignments(\n ec: ExecutionContext<any>,\n userId: string,\n organizationId: string,\n body: unknown,\n config: EnterpriseProvisioningConfig & ScimOrganizationUnitManagementSignal,\n ): Promise<void> {\n if (!isScimOrganizationUnitManagementEnabled(config)) return;\n\n const membership = await this.servicesRegistryHandler.read<{ _id: string }>(\n CoreResourceType.ORGANIZATION_MEMBERS, ec, { userId, organizationId },\n );\n if (!membership?._id) return;\n\n const directoryValue = extractScimDirectoryUnitValue(body);\n const desiredUnitId = resolveScimOrganizationUnitId(directoryValue, config.organizationUnitMapping);\n\n const currentAssignments = await this.servicesRegistryHandler.list<ScimOrganizationUnitAssignment>(\n CoreResourceType.ORGANIZATION_UNIT_MEMBERS, ec, { organizationMemberId: membership._id },\n undefined, { paginated: false },\n ) as ScimOrganizationUnitAssignment[];\n\n const { unitIdsToCreate, assignmentIdsToRemove } = resolveScimOrganizationUnitReconciliation(\n desiredUnitId ? [desiredUnitId] : [],\n currentAssignments ?? [],\n );\n\n if (unitIdsToCreate.length === 0 && assignmentIdsToRemove.length === 0) return;\n\n for (const assignmentId of assignmentIdsToRemove) {\n await this.servicesRegistryHandler.delete(CoreResourceType.ORGANIZATION_UNIT_MEMBERS, ec, assignmentId);\n }\n for (const organizationUnitId of unitIdsToCreate) {\n await this.servicesRegistryHandler.create(CoreResourceType.ORGANIZATION_UNIT_MEMBERS, ec, {\n organizationId,\n organizationUnitId,\n organizationMemberId: membership._id,\n role: config.defaultUnitRole,\n });\n }\n\n this._logSCIMOperation('organization_units_synced', {\n organizationId,\n userId,\n directoryValue,\n // An unmapped directory value is reported explicitly: it is the difference between \"the\n // directory said nothing\" and \"the directory said something nobody bound to a unit\", and only\n // the second is a configuration gap worth chasing.\n resolvedToUnit: desiredUnitId ?? null,\n unitsAssigned: unitIdsToCreate.length,\n assignmentsRemoved: assignmentIdsToRemove.length,\n });\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Structured Logging (Step 21)\n // ═══════════════════════════════════════════════════════════════\n\n private _logSCIMOperation(operation: string, context: Record<string, unknown>): void {\n this.logDebug(`SCIM: ${operation}`, {\n scimOperation: operation,\n ...context,\n });\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Error Handling\n // ═══════════════════════════════════════════════════════════════\n\n private _handleSCIMError(res: Response, error: unknown, operation: string): void {\n this._logSCIMOperation(`${operation}_error`, { error: describeCaughtError(error) });\n\n if (isWildoBackendError(error)) {\n const wildoError = error as { statusCode?: number; type?: string; message?: string };\n const status = wildoError.statusCode || 500;\n\n // Map common errors to SCIM-specific responses\n if (status === 409 || wildoError.type === 'uniqueness') {\n res.status(409).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(409, 'User already exists', 'uniqueness')\n );\n return;\n }\n if (status === 404) {\n res.status(404).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(404, wildoError.message || 'Resource not found')\n );\n return;\n }\n\n res.status(status).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(status, wildoError.message || 'Server error')\n );\n return;\n }\n\n res.status(500).set(WildoHeaderKeys.CONTENT_TYPE, SCIM_CONTENT_TYPE).json(\n formatSCIMError(500, 'Internal server error')\n );\n }\n\n // ═══════════════════════════════════════════════════════════════\n // Utilities\n // ═══════════════════════════════════════════════════════════════\n\n private _hashToken(plainToken: string): string {\n return createHash('sha256').update(plainToken).digest('hex');\n }\n\n private async _isScimProvisioningEnabledForOrg(ec: ExecutionContext<any>, organizationId: string): Promise<boolean> {\n if (!this.appConfigService.isInitialized()) return true;\n\n type OrgTypeWithScim = { scimProvisioning?: { enabled: boolean; syncFrequencyHours?: number } };\n const organizationTypes = (this.appConfigService.config as { organizationTypes?: Record<string, OrgTypeWithScim> })?.organizationTypes;\n\n try {\n return await isScimProvisioningEnabledForOrg(ec, {\n organizationId,\n organizationTypes,\n servicesRegistryHandler: this.servicesRegistryHandler,\n });\n } catch {\n return true;\n }\n }\n\n private _getSCIMContext(req: Request): SCIMRequestContext {\n return (req as SCIMAuthenticatedRequest).scimContext;\n }\n\n private _getBaseUrl(req: Request): string {\n const proto = req.headers[WildoHeaderKeys.FORWARDED_PROTO];\n const protocol = (Array.isArray(proto) ? proto[0] : proto) || req.protocol || 'https';\n const h = req.headers[WildoHeaderKeys.FORWARDED_HOST] || req.headers.host;\n const host = (Array.isArray(h) ? h[0] : h) || 'localhost';\n return `${protocol}://${host}/api/v1/scim/v2`;\n }\n\n private async _getInternalExecutionContext(): Promise<ExecutionContext<any>> {\n return this.authEcFactory.createForSystemAuthOperation(this.authEcFactory.getUsersCreateOperationPath());\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Request Context Types\n// ═══════════════════════════════════════════════════════════════\n\ninterface SCIMRequestContext {\n organizationId: string;\n scopeType: AuthScopeType;\n scopeId: string;\n tokenId: string;\n tokenDisplayName: string;\n}\n\ninterface SCIMAuthenticatedRequest extends Request {\n scimContext: SCIMRequestContext;\n scimEc: ExecutionContext<any>;\n}\n"]}