@wildo-ai/saas-models 1.1.7 → 1.1.8

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 (861) hide show
  1. package/dist/esm/__tests__/setup.d.ts.map +1 -1
  2. package/dist/esm/__tests__/setup.js.map +1 -1
  3. package/dist/esm/_inspect.d.ts.map +1 -1
  4. package/dist/esm/_inspect.js.map +1 -1
  5. package/dist/esm/applications/application-metadata.shared.resources-config.schemas.d.ts.map +1 -1
  6. package/dist/esm/applications/application-metadata.shared.resources-config.schemas.js.map +1 -1
  7. package/dist/esm/applications/application-subject.shared.schemas.d.ts.map +1 -1
  8. package/dist/esm/applications/application-subject.shared.schemas.js.map +1 -1
  9. package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts.map +1 -1
  10. package/dist/esm/applications/application-versions.shared.resources-config.schemas.js.map +1 -1
  11. package/dist/esm/applications/applications-context.schemas.d.ts.map +1 -1
  12. package/dist/esm/applications/applications-context.schemas.js.map +1 -1
  13. package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts.map +1 -1
  14. package/dist/esm/applications/applications.shared.resources-config.schemas.js.map +1 -1
  15. package/dist/esm/applications/applications.shared.schemas.d.ts.map +1 -1
  16. package/dist/esm/applications/applications.shared.schemas.js.map +1 -1
  17. package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts.map +1 -1
  18. package/dist/esm/billing/billing-account.shared.resources-config.schemas.js.map +1 -1
  19. package/dist/esm/billing/billing-account.shared.schemas.d.ts.map +1 -1
  20. package/dist/esm/billing/billing-account.shared.schemas.js.map +1 -1
  21. package/dist/esm/billing/billing-configuration.shared.schemas.d.ts.map +1 -1
  22. package/dist/esm/billing/billing-configuration.shared.schemas.js.map +1 -1
  23. package/dist/esm/billing/billing-enums.shared.schemas.d.ts.map +1 -1
  24. package/dist/esm/billing/billing-enums.shared.schemas.js.map +1 -1
  25. package/dist/esm/billing/billing-types.shared.schemas.d.ts.map +1 -1
  26. package/dist/esm/billing/billing-types.shared.schemas.js.map +1 -1
  27. package/dist/esm/billing/credit-pool.shared.resources-config.schemas.d.ts.map +1 -1
  28. package/dist/esm/billing/credit-pool.shared.resources-config.schemas.js.map +1 -1
  29. package/dist/esm/billing/credit-pool.shared.schemas.d.ts.map +1 -1
  30. package/dist/esm/billing/credit-pool.shared.schemas.js.map +1 -1
  31. package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.d.ts.map +1 -1
  32. package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.js.map +1 -1
  33. package/dist/esm/billing/invoice-ref.shared.schemas.d.ts.map +1 -1
  34. package/dist/esm/billing/invoice-ref.shared.schemas.js.map +1 -1
  35. package/dist/esm/billing/price.shared.resources-config.schemas.d.ts.map +1 -1
  36. package/dist/esm/billing/price.shared.resources-config.schemas.js.map +1 -1
  37. package/dist/esm/billing/price.shared.schemas.d.ts.map +1 -1
  38. package/dist/esm/billing/price.shared.schemas.js.map +1 -1
  39. package/dist/esm/billing/product-behavior-policy.shared.schemas.d.ts.map +1 -1
  40. package/dist/esm/billing/product-behavior-policy.shared.schemas.js.map +1 -1
  41. package/dist/esm/billing/product-definition.shared.schemas.d.ts.map +1 -1
  42. package/dist/esm/billing/product-definition.shared.schemas.js.map +1 -1
  43. package/dist/esm/billing/product.shared.resources-config.schemas.d.ts.map +1 -1
  44. package/dist/esm/billing/product.shared.resources-config.schemas.js.map +1 -1
  45. package/dist/esm/billing/product.shared.schemas.d.ts.map +1 -1
  46. package/dist/esm/billing/product.shared.schemas.js.map +1 -1
  47. package/dist/esm/billing/promotions.shared.resources-config.schemas.d.ts.map +1 -1
  48. package/dist/esm/billing/promotions.shared.resources-config.schemas.js.map +1 -1
  49. package/dist/esm/billing/promotions.shared.schemas.d.ts.map +1 -1
  50. package/dist/esm/billing/promotions.shared.schemas.js.map +1 -1
  51. package/dist/esm/billing/public-pricing-catalog.shared.atoms.d.ts.map +1 -1
  52. package/dist/esm/billing/public-pricing-catalog.shared.atoms.js.map +1 -1
  53. package/dist/esm/billing/public-pricing-catalog.shared.d.ts.map +1 -1
  54. package/dist/esm/billing/public-pricing-catalog.shared.js.map +1 -1
  55. package/dist/esm/billing/referral-reward.shared.schemas.d.ts.map +1 -1
  56. package/dist/esm/billing/referral-reward.shared.schemas.js.map +1 -1
  57. package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts.map +1 -1
  58. package/dist/esm/billing/referral.shared.resources-config.schemas.js.map +1 -1
  59. package/dist/esm/billing/referral.shared.schemas.d.ts.map +1 -1
  60. package/dist/esm/billing/referral.shared.schemas.js.map +1 -1
  61. package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts.map +1 -1
  62. package/dist/esm/billing/subscription.shared.resources-config.schemas.js.map +1 -1
  63. package/dist/esm/billing/subscription.shared.schemas.d.ts.map +1 -1
  64. package/dist/esm/billing/subscription.shared.schemas.js.map +1 -1
  65. package/dist/esm/billing/usage-flush-evidence.shared.schemas.d.ts.map +1 -1
  66. package/dist/esm/billing/usage-flush-evidence.shared.schemas.js.map +1 -1
  67. package/dist/esm/billing/usage-record.shared.resources-config.schemas.d.ts.map +1 -1
  68. package/dist/esm/billing/usage-record.shared.resources-config.schemas.js.map +1 -1
  69. package/dist/esm/billing/usage-record.shared.schemas.d.ts.map +1 -1
  70. package/dist/esm/billing/usage-record.shared.schemas.js.map +1 -1
  71. package/dist/esm/charts/aggregation-query.shared.schemas.d.ts.map +1 -1
  72. package/dist/esm/charts/aggregation-query.shared.schemas.js.map +1 -1
  73. package/dist/esm/charts/aggregation.shared.definitions.d.ts.map +1 -1
  74. package/dist/esm/charts/aggregation.shared.definitions.js.map +1 -1
  75. package/dist/esm/charts/chart-definition-builder.shared.d.ts.map +1 -1
  76. package/dist/esm/charts/chart-definition-builder.shared.js.map +1 -1
  77. package/dist/esm/companion/artifact-placement.shared.definitions.d.ts.map +1 -1
  78. package/dist/esm/companion/artifact-placement.shared.definitions.js.map +1 -1
  79. package/dist/esm/companion/provider-discovery.shared.schemas.d.ts.map +1 -1
  80. package/dist/esm/companion/provider-discovery.shared.schemas.js.map +1 -1
  81. package/dist/esm/companion/shared-library-companion.shared.definitions.d.ts.map +1 -1
  82. package/dist/esm/companion/shared-library-companion.shared.definitions.js.map +1 -1
  83. package/dist/esm/companion-exports.d.ts.map +1 -1
  84. package/dist/esm/companion-exports.js.map +1 -1
  85. package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
  86. package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js.map +1 -1
  87. package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.d.ts.map +1 -1
  88. package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.js.map +1 -1
  89. package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.d.ts.map +1 -1
  90. package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.js.map +1 -1
  91. package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.d.ts.map +1 -1
  92. package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.js.map +1 -1
  93. package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
  94. package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.js.map +1 -1
  95. package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts.map +1 -1
  96. package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js.map +1 -1
  97. package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts.map +1 -1
  98. package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.js.map +1 -1
  99. package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.d.ts.map +1 -1
  100. package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js.map +1 -1
  101. package/dist/esm/compliance/data-classification/data-classification.shared.schemas.d.ts.map +1 -1
  102. package/dist/esm/compliance/data-classification/data-classification.shared.schemas.js.map +1 -1
  103. package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.d.ts.map +1 -1
  104. package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.js.map +1 -1
  105. package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts.map +1 -1
  106. package/dist/esm/compliance/documents/governed-documents.shared.schemas.js.map +1 -1
  107. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.d.ts.map +1 -1
  108. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.js.map +1 -1
  109. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.d.ts.map +1 -1
  110. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.js.map +1 -1
  111. package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts.map +1 -1
  112. package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js.map +1 -1
  113. package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.d.ts.map +1 -1
  114. package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.js.map +1 -1
  115. package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts.map +1 -1
  116. package/dist/esm/compliance/privacy/client-storage.shared.schemas.js.map +1 -1
  117. package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.d.ts.map +1 -1
  118. package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.js.map +1 -1
  119. package/dist/esm/compliance/privacy/consent-purposes.shared.d.ts.map +1 -1
  120. package/dist/esm/compliance/privacy/consent-purposes.shared.js.map +1 -1
  121. package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.d.ts.map +1 -1
  122. package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.js.map +1 -1
  123. package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.d.ts.map +1 -1
  124. package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.js.map +1 -1
  125. package/dist/esm/compliance/privacy/impersonalization.shared.schemas.d.ts.map +1 -1
  126. package/dist/esm/compliance/privacy/impersonalization.shared.schemas.js.map +1 -1
  127. package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.d.ts.map +1 -1
  128. package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.js.map +1 -1
  129. package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.d.ts.map +1 -1
  130. package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.js.map +1 -1
  131. package/dist/esm/compliance/privacy/legal-holds.shared.schemas.d.ts.map +1 -1
  132. package/dist/esm/compliance/privacy/legal-holds.shared.schemas.js.map +1 -1
  133. package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts.map +1 -1
  134. package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js.map +1 -1
  135. package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts.map +1 -1
  136. package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js.map +1 -1
  137. package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.d.ts.map +1 -1
  138. package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.js.map +1 -1
  139. package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.d.ts.map +1 -1
  140. package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.js.map +1 -1
  141. package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts.map +1 -1
  142. package/dist/esm/compliance/privacy/privacy.shared.schemas.js.map +1 -1
  143. package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.d.ts.map +1 -1
  144. package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.js.map +1 -1
  145. package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.d.ts.map +1 -1
  146. package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.js.map +1 -1
  147. package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts.map +1 -1
  148. package/dist/esm/compliance/privacy/redaction.shared.schemas.js.map +1 -1
  149. package/dist/esm/compliance/privacy/retention-binding.shared.utils.d.ts.map +1 -1
  150. package/dist/esm/compliance/privacy/retention-binding.shared.utils.js.map +1 -1
  151. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.d.ts.map +1 -1
  152. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.js.map +1 -1
  153. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.d.ts.map +1 -1
  154. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.js.map +1 -1
  155. package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.d.ts.map +1 -1
  156. package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.js.map +1 -1
  157. package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.d.ts.map +1 -1
  158. package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.js.map +1 -1
  159. package/dist/esm/compliance/privacy/sharing.shared.schemas.d.ts.map +1 -1
  160. package/dist/esm/compliance/privacy/sharing.shared.schemas.js.map +1 -1
  161. package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.d.ts.map +1 -1
  162. package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.js.map +1 -1
  163. package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.d.ts.map +1 -1
  164. package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.js.map +1 -1
  165. package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts.map +1 -1
  166. package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js.map +1 -1
  167. package/dist/esm/compliance/privacy/subject-export-render.shared.utils.d.ts.map +1 -1
  168. package/dist/esm/compliance/privacy/subject-export-render.shared.utils.js.map +1 -1
  169. package/dist/esm/compliance/privacy/subject-export.shared.schemas.d.ts.map +1 -1
  170. package/dist/esm/compliance/privacy/subject-export.shared.schemas.js.map +1 -1
  171. package/dist/esm/compliance/review-cadence.shared.schemas.d.ts.map +1 -1
  172. package/dist/esm/compliance/review-cadence.shared.schemas.js.map +1 -1
  173. package/dist/esm/compliance/risk-posture.shared.schemas.d.ts.map +1 -1
  174. package/dist/esm/compliance/risk-posture.shared.schemas.js.map +1 -1
  175. package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts.map +1 -1
  176. package/dist/esm/config/analytics-value-moments.shared.schemas.js.map +1 -1
  177. package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts.map +1 -1
  178. package/dist/esm/config/app-configuration-shared.shared.schemas.js.map +1 -1
  179. package/dist/esm/config/app-frontend-type.shared.schemas.d.ts.map +1 -1
  180. package/dist/esm/config/app-frontend-type.shared.schemas.js.map +1 -1
  181. package/dist/esm/config/auth-config-resolution.shared.utils.d.ts.map +1 -1
  182. package/dist/esm/config/auth-config-resolution.shared.utils.js.map +1 -1
  183. package/dist/esm/config/brand-assets.shared.schemas.d.ts.map +1 -1
  184. package/dist/esm/config/brand-assets.shared.schemas.js.map +1 -1
  185. package/dist/esm/config/configuration-validation.shared.schemas.d.ts.map +1 -1
  186. package/dist/esm/config/configuration-validation.shared.schemas.js.map +1 -1
  187. package/dist/esm/config/entity-identity-config.shared.schemas.d.ts.map +1 -1
  188. package/dist/esm/config/entity-identity-config.shared.schemas.js.map +1 -1
  189. package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts.map +1 -1
  190. package/dist/esm/config/frontend/chart-definition.shared.schemas.js.map +1 -1
  191. package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts.map +1 -1
  192. package/dist/esm/config/frontend/chart-registration-alignment.shared.js.map +1 -1
  193. package/dist/esm/config/frontend/navigation.shared.schemas.d.ts.map +1 -1
  194. package/dist/esm/config/frontend/navigation.shared.schemas.js.map +1 -1
  195. package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts.map +1 -1
  196. package/dist/esm/config/frontend/onboarding.shared.schemas.js.map +1 -1
  197. package/dist/esm/config/postgresql.shared.schemas.d.ts.map +1 -1
  198. package/dist/esm/config/postgresql.shared.schemas.js.map +1 -1
  199. package/dist/esm/config/registration-acquisition-policy.shared.utils.d.ts.map +1 -1
  200. package/dist/esm/config/registration-acquisition-policy.shared.utils.js.map +1 -1
  201. package/dist/esm/config-authoring.entry.d.ts.map +1 -1
  202. package/dist/esm/config-authoring.entry.js.map +1 -1
  203. package/dist/esm/crdt/crdt-merge.shared.utils.d.ts.map +1 -1
  204. package/dist/esm/crdt/crdt-merge.shared.utils.js.map +1 -1
  205. package/dist/esm/data-seeding/data-seeding-config.shared.schemas.d.ts.map +1 -1
  206. package/dist/esm/data-seeding/data-seeding-config.shared.schemas.js.map +1 -1
  207. package/dist/esm/errors/caught-error-description.shared.utils.d.ts.map +1 -1
  208. package/dist/esm/errors/caught-error-description.shared.utils.js.map +1 -1
  209. package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts.map +1 -1
  210. package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js.map +1 -1
  211. package/dist/esm/errors/errors.shared.definitions.d.ts.map +1 -1
  212. package/dist/esm/errors/errors.shared.definitions.js.map +1 -1
  213. package/dist/esm/errors/errors.shared.schemas.d.ts.map +1 -1
  214. package/dist/esm/errors/errors.shared.schemas.js.map +1 -1
  215. package/dist/esm/errors/errors.shared.utils.d.ts.map +1 -1
  216. package/dist/esm/errors/errors.shared.utils.js.map +1 -1
  217. package/dist/esm/errors/resource-access-forbidden.shared.error.d.ts.map +1 -1
  218. package/dist/esm/errors/resource-access-forbidden.shared.error.js.map +1 -1
  219. package/dist/esm/errors/thrown-value-description.shared.utils.d.ts.map +1 -1
  220. package/dist/esm/errors/thrown-value-description.shared.utils.js.map +1 -1
  221. package/dist/esm/errors/zod-issue-formatting.shared.utils.d.ts.map +1 -1
  222. package/dist/esm/errors/zod-issue-formatting.shared.utils.js.map +1 -1
  223. package/dist/esm/exports/tabular-csv.shared.utils.d.ts.map +1 -1
  224. package/dist/esm/exports/tabular-csv.shared.utils.js.map +1 -1
  225. package/dist/esm/external-data/external-data-pipeline-description.shared.d.ts.map +1 -1
  226. package/dist/esm/external-data/external-data-pipeline-description.shared.js.map +1 -1
  227. package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.d.ts.map +1 -1
  228. package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.js.map +1 -1
  229. package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts.map +1 -1
  230. package/dist/esm/external-data/external-data-pipeline.shared.schemas.js.map +1 -1
  231. package/dist/esm/external-data/external-data-provenance.shared.d.ts.map +1 -1
  232. package/dist/esm/external-data/external-data-provenance.shared.js.map +1 -1
  233. package/dist/esm/external-data.exports.d.ts.map +1 -1
  234. package/dist/esm/external-data.exports.js.map +1 -1
  235. package/dist/esm/external-providers/compose-provider-registry.shared.d.ts.map +1 -1
  236. package/dist/esm/external-providers/compose-provider-registry.shared.js.map +1 -1
  237. package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts.map +1 -1
  238. package/dist/esm/external-providers/engine-capabilities.shared.schemas.js.map +1 -1
  239. package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts.map +1 -1
  240. package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js.map +1 -1
  241. package/dist/esm/external-providers/engine-capability-surface.shared.d.ts.map +1 -1
  242. package/dist/esm/external-providers/engine-capability-surface.shared.js.map +1 -1
  243. package/dist/esm/external-providers/external-providers.shared.schemas.d.ts.map +1 -1
  244. package/dist/esm/external-providers/external-providers.shared.schemas.js.map +1 -1
  245. package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts.map +1 -1
  246. package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.js.map +1 -1
  247. package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.d.ts.map +1 -1
  248. package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js.map +1 -1
  249. package/dist/esm/external-providers/frontend-capability-runtime.shared.types.d.ts.map +1 -1
  250. package/dist/esm/external-providers/frontend-capability-runtime.shared.types.js.map +1 -1
  251. package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts.map +1 -1
  252. package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js.map +1 -1
  253. package/dist/esm/external-providers/frontend-provider-public-config.shared.d.ts.map +1 -1
  254. package/dist/esm/external-providers/frontend-provider-public-config.shared.js.map +1 -1
  255. package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.d.ts.map +1 -1
  256. package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.js.map +1 -1
  257. package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.d.ts.map +1 -1
  258. package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.js.map +1 -1
  259. package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.d.ts.map +1 -1
  260. package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.js.map +1 -1
  261. package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.d.ts.map +1 -1
  262. package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.js.map +1 -1
  263. package/dist/esm/external-providers/provider-browser-operations.shared.schemas.d.ts.map +1 -1
  264. package/dist/esm/external-providers/provider-browser-operations.shared.schemas.js.map +1 -1
  265. package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts.map +1 -1
  266. package/dist/esm/external-providers/provider-capability.shared.schemas.js.map +1 -1
  267. package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts.map +1 -1
  268. package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js.map +1 -1
  269. package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.d.ts.map +1 -1
  270. package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.js.map +1 -1
  271. package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.d.ts.map +1 -1
  272. package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js.map +1 -1
  273. package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts.map +1 -1
  274. package/dist/esm/external-providers/provider-metadata.shared.schemas.js.map +1 -1
  275. package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.d.ts.map +1 -1
  276. package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.js.map +1 -1
  277. package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts.map +1 -1
  278. package/dist/esm/external-providers/provider-protocol.shared.schemas.js.map +1 -1
  279. package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.d.ts.map +1 -1
  280. package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.js.map +1 -1
  281. package/dist/esm/external-providers/provider-shared-connections.shared.schemas.d.ts.map +1 -1
  282. package/dist/esm/external-providers/provider-shared-connections.shared.schemas.js.map +1 -1
  283. package/dist/esm/external-providers/provider-tier-rule.shared.utils.d.ts.map +1 -1
  284. package/dist/esm/external-providers/provider-tier-rule.shared.utils.js.map +1 -1
  285. package/dist/esm/external-providers/provider-usage-cost.shared.d.ts.map +1 -1
  286. package/dist/esm/external-providers/provider-usage-cost.shared.js.map +1 -1
  287. package/dist/esm/external-providers/provider-usage-pricing.example.d.ts.map +1 -1
  288. package/dist/esm/external-providers/provider-usage-pricing.example.js.map +1 -1
  289. package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.d.ts.map +1 -1
  290. package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.js.map +1 -1
  291. package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts.map +1 -1
  292. package/dist/esm/features/application-features.shared.resources-config.schemas.js.map +1 -1
  293. package/dist/esm/features/connected-feature.example.d.ts.map +1 -1
  294. package/dist/esm/features/connected-feature.example.js.map +1 -1
  295. package/dist/esm/features/core-feature-definitions.shared.d.ts.map +1 -1
  296. package/dist/esm/features/core-feature-definitions.shared.js.map +1 -1
  297. package/dist/esm/features/feature-builders.shared.d.ts.map +1 -1
  298. package/dist/esm/features/feature-builders.shared.js.map +1 -1
  299. package/dist/esm/features/feature-definition.shared.schemas.d.ts.map +1 -1
  300. package/dist/esm/features/feature-definition.shared.schemas.js.map +1 -1
  301. package/dist/esm/features/feature-registry.shared.d.ts.map +1 -1
  302. package/dist/esm/features/feature-registry.shared.js.map +1 -1
  303. package/dist/esm/features/feature-resolution.shared.schemas.d.ts.map +1 -1
  304. package/dist/esm/features/feature-resolution.shared.schemas.js.map +1 -1
  305. package/dist/esm/features/scope-features.shared.schemas.d.ts.map +1 -1
  306. package/dist/esm/features/scope-features.shared.schemas.js.map +1 -1
  307. package/dist/esm/features/user-features.shared.resources-config.schemas.d.ts.map +1 -1
  308. package/dist/esm/features/user-features.shared.resources-config.schemas.js.map +1 -1
  309. package/dist/esm/files/file-remote-reference-link.shared.schemas.d.ts.map +1 -1
  310. package/dist/esm/files/file-remote-reference-link.shared.schemas.js.map +1 -1
  311. package/dist/esm/files/file-upload-grant.shared.schemas.d.ts.map +1 -1
  312. package/dist/esm/files/file-upload-grant.shared.schemas.js.map +1 -1
  313. package/dist/esm/files/files.shared.resources-config.schemas.d.ts.map +1 -1
  314. package/dist/esm/files/files.shared.resources-config.schemas.js.map +1 -1
  315. package/dist/esm/files/files.shared.schemas.d.ts.map +1 -1
  316. package/dist/esm/files/files.shared.schemas.js.map +1 -1
  317. package/dist/esm/files/files.shared.utils.d.ts.map +1 -1
  318. package/dist/esm/files/files.shared.utils.js.map +1 -1
  319. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
  320. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.js.map +1 -1
  321. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.d.ts.map +1 -1
  322. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.js.map +1 -1
  323. package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.d.ts.map +1 -1
  324. package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.js.map +1 -1
  325. package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.d.ts.map +1 -1
  326. package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.js.map +1 -1
  327. package/dist/esm/flows-actors/actors.shared.schemas.d.ts.map +1 -1
  328. package/dist/esm/flows-actors/actors.shared.schemas.js.map +1 -1
  329. package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts.map +1 -1
  330. package/dist/esm/flows-actors/agent-traceability.shared.schemas.js.map +1 -1
  331. package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.d.ts.map +1 -1
  332. package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.js.map +1 -1
  333. package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.d.ts.map +1 -1
  334. package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.js.map +1 -1
  335. package/dist/esm/flows-actors/agents.shared.schemas.d.ts.map +1 -1
  336. package/dist/esm/flows-actors/agents.shared.schemas.js.map +1 -1
  337. package/dist/esm/flows-actors/autonomous-agents.shared.schemas.d.ts.map +1 -1
  338. package/dist/esm/flows-actors/autonomous-agents.shared.schemas.js.map +1 -1
  339. package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts.map +1 -1
  340. package/dist/esm/flows-actors/deliberation.shared.schemas.js.map +1 -1
  341. package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.d.ts.map +1 -1
  342. package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.js.map +1 -1
  343. package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.d.ts.map +1 -1
  344. package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.js.map +1 -1
  345. package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts.map +1 -1
  346. package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js.map +1 -1
  347. package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.d.ts.map +1 -1
  348. package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.js.map +1 -1
  349. package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts.map +1 -1
  350. package/dist/esm/flows-actors/flows-actors-task.shared.schemas.js.map +1 -1
  351. package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts.map +1 -1
  352. package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.js.map +1 -1
  353. package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.d.ts.map +1 -1
  354. package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.js.map +1 -1
  355. package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.d.ts.map +1 -1
  356. package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.js.map +1 -1
  357. package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts.map +1 -1
  358. package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js.map +1 -1
  359. package/dist/esm/flows-actors/flows-actors.system.shared.definitions.d.ts.map +1 -1
  360. package/dist/esm/flows-actors/flows-actors.system.shared.definitions.js.map +1 -1
  361. package/dist/esm/flows-actors/flows-actors.system.shared.schemas.d.ts.map +1 -1
  362. package/dist/esm/flows-actors/flows-actors.system.shared.schemas.js.map +1 -1
  363. package/dist/esm/flows-actors/flows.shared.schemas.d.ts.map +1 -1
  364. package/dist/esm/flows-actors/flows.shared.schemas.js.map +1 -1
  365. package/dist/esm/flows-actors/human-decision.shared.schemas.d.ts.map +1 -1
  366. package/dist/esm/flows-actors/human-decision.shared.schemas.js.map +1 -1
  367. package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts.map +1 -1
  368. package/dist/esm/flows-actors/mcp-servers.shared.schemas.js.map +1 -1
  369. package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.d.ts.map +1 -1
  370. package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.js.map +1 -1
  371. package/dist/esm/flows-actors/model-call-attributions.shared.schemas.d.ts.map +1 -1
  372. package/dist/esm/flows-actors/model-call-attributions.shared.schemas.js.map +1 -1
  373. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.d.ts.map +1 -1
  374. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.js.map +1 -1
  375. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.d.ts.map +1 -1
  376. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.js.map +1 -1
  377. package/dist/esm/flows-actors/model-cost-summary.shared.schemas.d.ts.map +1 -1
  378. package/dist/esm/flows-actors/model-cost-summary.shared.schemas.js.map +1 -1
  379. package/dist/esm/flows-actors/prompt-ir.shared.schemas.d.ts.map +1 -1
  380. package/dist/esm/flows-actors/prompt-ir.shared.schemas.js.map +1 -1
  381. package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.d.ts.map +1 -1
  382. package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.js.map +1 -1
  383. package/dist/esm/flows-actors/provider-call-records.shared.schemas.d.ts.map +1 -1
  384. package/dist/esm/flows-actors/provider-call-records.shared.schemas.js.map +1 -1
  385. package/dist/esm/flows-actors/review-deadlines.shared.schemas.d.ts.map +1 -1
  386. package/dist/esm/flows-actors/review-deadlines.shared.schemas.js.map +1 -1
  387. package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts.map +1 -1
  388. package/dist/esm/flows-actors/tasks.actors.shared.schemas.js.map +1 -1
  389. package/dist/esm/flows-actors/work-attribution.shared.schemas.d.ts.map +1 -1
  390. package/dist/esm/flows-actors/work-attribution.shared.schemas.js.map +1 -1
  391. package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.d.ts.map +1 -1
  392. package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.js.map +1 -1
  393. package/dist/esm/frontend-definitions/settings-destination-ref.definitions.d.ts.map +1 -1
  394. package/dist/esm/frontend-definitions/settings-destination-ref.definitions.js.map +1 -1
  395. package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts.map +1 -1
  396. package/dist/esm/guidance/guidance-flow.shared.schemas.js.map +1 -1
  397. package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.d.ts.map +1 -1
  398. package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.js.map +1 -1
  399. package/dist/esm/guidance/guidance-state.shared.schemas.d.ts.map +1 -1
  400. package/dist/esm/guidance/guidance-state.shared.schemas.js.map +1 -1
  401. package/dist/esm/guidance/guidance-state.shared.utils.d.ts.map +1 -1
  402. package/dist/esm/guidance/guidance-state.shared.utils.js.map +1 -1
  403. package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts.map +1 -1
  404. package/dist/esm/guidance/lifecycle-config.shared.schemas.js.map +1 -1
  405. package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.d.ts.map +1 -1
  406. package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.js.map +1 -1
  407. package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts.map +1 -1
  408. package/dist/esm/guidance/lifecycle-state.shared.schemas.js.map +1 -1
  409. package/dist/esm/guidance/milestone-builders.shared.d.ts.map +1 -1
  410. package/dist/esm/guidance/milestone-builders.shared.js.map +1 -1
  411. package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts.map +1 -1
  412. package/dist/esm/guidance/milestone-definition.shared.schemas.js.map +1 -1
  413. package/dist/esm/guidance/progression-presentation.shared.schemas.d.ts.map +1 -1
  414. package/dist/esm/guidance/progression-presentation.shared.schemas.js.map +1 -1
  415. package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts.map +1 -1
  416. package/dist/esm/guidance/progression-state.shared.resources-config.schemas.js.map +1 -1
  417. package/dist/esm/guidance/progression-state.shared.schemas.d.ts.map +1 -1
  418. package/dist/esm/guidance/progression-state.shared.schemas.js.map +1 -1
  419. package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.d.ts.map +1 -1
  420. package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.js.map +1 -1
  421. package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts.map +1 -1
  422. package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js.map +1 -1
  423. package/dist/esm/http-api-binding/http-api-erasure-stance.shared.d.ts.map +1 -1
  424. package/dist/esm/http-api-binding/http-api-erasure-stance.shared.js.map +1 -1
  425. package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.d.ts.map +1 -1
  426. package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.js.map +1 -1
  427. package/dist/esm/http-api-binding/http-api-transport-dialect.shared.d.ts.map +1 -1
  428. package/dist/esm/http-api-binding/http-api-transport-dialect.shared.js.map +1 -1
  429. package/dist/esm/http-api-binding/read-through-engine-anchors.shared.d.ts.map +1 -1
  430. package/dist/esm/http-api-binding/read-through-engine-anchors.shared.js.map +1 -1
  431. package/dist/esm/i18n/application-config-vocabulary.shared.d.ts.map +1 -1
  432. package/dist/esm/i18n/application-config-vocabulary.shared.js.map +1 -1
  433. package/dist/esm/i18n/engine-open-vocabulary-values.shared.d.ts.map +1 -1
  434. package/dist/esm/i18n/engine-open-vocabulary-values.shared.js.map +1 -1
  435. package/dist/esm/i18n/engine-open-vocabulary.shared.d.ts.map +1 -1
  436. package/dist/esm/i18n/engine-open-vocabulary.shared.js.map +1 -1
  437. package/dist/esm/i18n/interpolate-label-params.shared.utils.d.ts.map +1 -1
  438. package/dist/esm/i18n/interpolate-label-params.shared.utils.js.map +1 -1
  439. package/dist/esm/i18n/labelling.dto.shared.schemas.d.ts.map +1 -1
  440. package/dist/esm/i18n/labelling.dto.shared.schemas.js.map +1 -1
  441. package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.d.ts.map +1 -1
  442. package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.js.map +1 -1
  443. package/dist/esm/inbound/conversation-threads.shared.schemas.d.ts.map +1 -1
  444. package/dist/esm/inbound/conversation-threads.shared.schemas.js.map +1 -1
  445. package/dist/esm/inbound/inbound-channels.shared.schemas.d.ts.map +1 -1
  446. package/dist/esm/inbound/inbound-channels.shared.schemas.js.map +1 -1
  447. package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.d.ts.map +1 -1
  448. package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.js.map +1 -1
  449. package/dist/esm/inbound/inbound-delivery.shared.schemas.d.ts.map +1 -1
  450. package/dist/esm/inbound/inbound-delivery.shared.schemas.js.map +1 -1
  451. package/dist/esm/inbound/inbound-endpoint-env.shared.d.ts.map +1 -1
  452. package/dist/esm/inbound/inbound-endpoint-env.shared.js.map +1 -1
  453. package/dist/esm/index.d.ts.map +1 -1
  454. package/dist/esm/index.js.map +1 -1
  455. package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +1 -1
  456. package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.js.map +1 -1
  457. package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +1 -1
  458. package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.js.map +1 -1
  459. package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.d.ts.map +1 -1
  460. package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.js.map +1 -1
  461. package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +1 -1
  462. package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +1 -1
  463. package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +1 -1
  464. package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +1 -1
  465. package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.d.ts.map +1 -1
  466. package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.js.map +1 -1
  467. package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +1 -1
  468. package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js.map +1 -1
  469. package/dist/esm/meta-workflows.exports.d.ts.map +1 -1
  470. package/dist/esm/meta-workflows.exports.js.map +1 -1
  471. package/dist/esm/monitoring/monitoring.shared.schemas.d.ts.map +1 -1
  472. package/dist/esm/monitoring/monitoring.shared.schemas.js.map +1 -1
  473. package/dist/esm/notifications/email/email-context.shared.schemas.d.ts.map +1 -1
  474. package/dist/esm/notifications/email/email-context.shared.schemas.js.map +1 -1
  475. package/dist/esm/notifications/email/email-submission.shared.enums.d.ts.map +1 -1
  476. package/dist/esm/notifications/email/email-submission.shared.enums.js.map +1 -1
  477. package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts.map +1 -1
  478. package/dist/esm/notifications/email/email-template-registry.shared.schemas.js.map +1 -1
  479. package/dist/esm/notifications/email/email-template.shared.enums.d.ts.map +1 -1
  480. package/dist/esm/notifications/email/email-template.shared.enums.js.map +1 -1
  481. package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.d.ts.map +1 -1
  482. package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.js.map +1 -1
  483. package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.d.ts.map +1 -1
  484. package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.js.map +1 -1
  485. package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.d.ts.map +1 -1
  486. package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.js.map +1 -1
  487. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
  488. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.js.map +1 -1
  489. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts.map +1 -1
  490. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js.map +1 -1
  491. package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts.map +1 -1
  492. package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js.map +1 -1
  493. package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts.map +1 -1
  494. package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js.map +1 -1
  495. package/dist/esm/notifications/notification-badges.core.definitions.d.ts.map +1 -1
  496. package/dist/esm/notifications/notification-badges.core.definitions.js.map +1 -1
  497. package/dist/esm/notifications/notification-badges.schemas.d.ts.map +1 -1
  498. package/dist/esm/notifications/notification-badges.schemas.js.map +1 -1
  499. package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts.map +1 -1
  500. package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.js.map +1 -1
  501. package/dist/esm/notifications/notifications.shared.schemas.d.ts.map +1 -1
  502. package/dist/esm/notifications/notifications.shared.schemas.js.map +1 -1
  503. package/dist/esm/organizations/application-owner-organization.shared.schemas.d.ts.map +1 -1
  504. package/dist/esm/organizations/application-owner-organization.shared.schemas.js.map +1 -1
  505. package/dist/esm/organizations/organization-features.shared.resources-config.schemas.d.ts.map +1 -1
  506. package/dist/esm/organizations/organization-features.shared.resources-config.schemas.js.map +1 -1
  507. package/dist/esm/organizations/organization-features.shared.schemas.d.ts.map +1 -1
  508. package/dist/esm/organizations/organization-features.shared.schemas.js.map +1 -1
  509. package/dist/esm/organizations/organization-members.shared.resources-config.schemas.d.ts.map +1 -1
  510. package/dist/esm/organizations/organization-members.shared.resources-config.schemas.js.map +1 -1
  511. package/dist/esm/organizations/organization-members.shared.schemas.d.ts.map +1 -1
  512. package/dist/esm/organizations/organization-members.shared.schemas.js.map +1 -1
  513. package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.d.ts.map +1 -1
  514. package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.js.map +1 -1
  515. package/dist/esm/organizations/organization-notifications.shared.schemas.d.ts.map +1 -1
  516. package/dist/esm/organizations/organization-notifications.shared.schemas.js.map +1 -1
  517. package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts.map +1 -1
  518. package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.js.map +1 -1
  519. package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts.map +1 -1
  520. package/dist/esm/organizations/organization-preferences.shared.schemas.js.map +1 -1
  521. package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts.map +1 -1
  522. package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.js.map +1 -1
  523. package/dist/esm/organizations/organization-profile.shared.schemas.d.ts.map +1 -1
  524. package/dist/esm/organizations/organization-profile.shared.schemas.js.map +1 -1
  525. package/dist/esm/organizations/organization-unit-inheritance.shared.d.ts.map +1 -1
  526. package/dist/esm/organizations/organization-unit-inheritance.shared.js.map +1 -1
  527. package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts.map +1 -1
  528. package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.js.map +1 -1
  529. package/dist/esm/organizations/organization-unit-members.shared.schemas.d.ts.map +1 -1
  530. package/dist/esm/organizations/organization-unit-members.shared.schemas.js.map +1 -1
  531. package/dist/esm/organizations/organization-unit-narrowing-decision.shared.d.ts.map +1 -1
  532. package/dist/esm/organizations/organization-unit-narrowing-decision.shared.js.map +1 -1
  533. package/dist/esm/organizations/organization-unit-narrowing.example.d.ts.map +1 -1
  534. package/dist/esm/organizations/organization-unit-narrowing.example.js.map +1 -1
  535. package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts.map +1 -1
  536. package/dist/esm/organizations/organization-unit-narrowing.shared.js.map +1 -1
  537. package/dist/esm/organizations/organization-units.shared.path.d.ts.map +1 -1
  538. package/dist/esm/organizations/organization-units.shared.path.js.map +1 -1
  539. package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts.map +1 -1
  540. package/dist/esm/organizations/organization-units.shared.resources-config.schemas.js.map +1 -1
  541. package/dist/esm/organizations/organization-units.shared.schemas.d.ts.map +1 -1
  542. package/dist/esm/organizations/organization-units.shared.schemas.js.map +1 -1
  543. package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts.map +1 -1
  544. package/dist/esm/organizations/organizations.shared.resources-config.schemas.js.map +1 -1
  545. package/dist/esm/organizations/organizations.shared.schemas.d.ts.map +1 -1
  546. package/dist/esm/organizations/organizations.shared.schemas.js.map +1 -1
  547. package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.d.ts.map +1 -1
  548. package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.js.map +1 -1
  549. package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.d.ts.map +1 -1
  550. package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.js.map +1 -1
  551. package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.d.ts.map +1 -1
  552. package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.js.map +1 -1
  553. package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.d.ts.map +1 -1
  554. package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.js.map +1 -1
  555. package/dist/esm/organizations/service-provider-client-controls.shared.schemas.d.ts.map +1 -1
  556. package/dist/esm/organizations/service-provider-client-controls.shared.schemas.js.map +1 -1
  557. package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.d.ts.map +1 -1
  558. package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.js.map +1 -1
  559. package/dist/esm/organizations/service-provider-relationships.shared.schemas.d.ts.map +1 -1
  560. package/dist/esm/organizations/service-provider-relationships.shared.schemas.js.map +1 -1
  561. package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts.map +1 -1
  562. package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js.map +1 -1
  563. package/dist/esm/provider-registration-runtime.exports.d.ts.map +1 -1
  564. package/dist/esm/provider-registration-runtime.exports.js.map +1 -1
  565. package/dist/esm/public-runtime/index.d.ts.map +1 -1
  566. package/dist/esm/public-runtime/index.js.map +1 -1
  567. package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts.map +1 -1
  568. package/dist/esm/queue/jobs.shared.resources-config.schemas.js.map +1 -1
  569. package/dist/esm/queue/jobs.shared.schemas.d.ts.map +1 -1
  570. package/dist/esm/queue/jobs.shared.schemas.js.map +1 -1
  571. package/dist/esm/queue/jobs.shared.utils.d.ts.map +1 -1
  572. package/dist/esm/queue/jobs.shared.utils.js.map +1 -1
  573. package/dist/esm/queue/queues.shared.schemas.d.ts.map +1 -1
  574. package/dist/esm/queue/queues.shared.schemas.js.map +1 -1
  575. package/dist/esm/queue/queues.shared.utils.d.ts.map +1 -1
  576. package/dist/esm/queue/queues.shared.utils.js.map +1 -1
  577. package/dist/esm/queue/rabbitmq-queue-args.shared.d.ts.map +1 -1
  578. package/dist/esm/queue/rabbitmq-queue-args.shared.js.map +1 -1
  579. package/dist/esm/rag/rag-retrieval-health.shared.d.ts.map +1 -1
  580. package/dist/esm/rag/rag-retrieval-health.shared.js.map +1 -1
  581. package/dist/esm/requests/header-keys.shared.d.ts.map +1 -1
  582. package/dist/esm/requests/header-keys.shared.js.map +1 -1
  583. package/dist/esm/requests/http-requests.shared.d.ts.map +1 -1
  584. package/dist/esm/requests/http-requests.shared.js.map +1 -1
  585. package/dist/esm/requests/idempotency-key.shared.d.ts.map +1 -1
  586. package/dist/esm/requests/idempotency-key.shared.js.map +1 -1
  587. package/dist/esm/requests/manual-controllers-routes-documentation.d.ts.map +1 -1
  588. package/dist/esm/requests/manual-controllers-routes-documentation.js.map +1 -1
  589. package/dist/esm/requests/manual-controllers-routes-urls.d.ts.map +1 -1
  590. package/dist/esm/requests/manual-controllers-routes-urls.js.map +1 -1
  591. package/dist/esm/requests/rate-limits.shared.schemas.d.ts.map +1 -1
  592. package/dist/esm/requests/rate-limits.shared.schemas.js.map +1 -1
  593. package/dist/esm/requests/websocket.shared.schemas.d.ts.map +1 -1
  594. package/dist/esm/requests/websocket.shared.schemas.js.map +1 -1
  595. package/dist/esm/resources/child-operations.shared.schemas.d.ts.map +1 -1
  596. package/dist/esm/resources/child-operations.shared.schemas.js.map +1 -1
  597. package/dist/esm/resources/collection-query-parameters.shared.d.ts.map +1 -1
  598. package/dist/esm/resources/collection-query-parameters.shared.js.map +1 -1
  599. package/dist/esm/resources/context-policy.shared.schemas.d.ts.map +1 -1
  600. package/dist/esm/resources/context-policy.shared.schemas.js.map +1 -1
  601. package/dist/esm/resources/embedded-resource-mark.shared.utils.d.ts.map +1 -1
  602. package/dist/esm/resources/embedded-resource-mark.shared.utils.js.map +1 -1
  603. package/dist/esm/resources/relationship-display.shared.schemas.d.ts.map +1 -1
  604. package/dist/esm/resources/relationship-display.shared.schemas.js.map +1 -1
  605. package/dist/esm/resources/resources-config.shared.factory.d.ts.map +1 -1
  606. package/dist/esm/resources/resources-config.shared.factory.js.map +1 -1
  607. package/dist/esm/resources/resources-config.shared.schemas.d.ts.map +1 -1
  608. package/dist/esm/resources/resources-config.shared.schemas.js.map +1 -1
  609. package/dist/esm/resources/resources-registry.shared.core.definitions.d.ts.map +1 -1
  610. package/dist/esm/resources/resources-registry.shared.core.definitions.js.map +1 -1
  611. package/dist/esm/resources/resources-relationships.shared.factory.d.ts.map +1 -1
  612. package/dist/esm/resources/resources-relationships.shared.factory.js.map +1 -1
  613. package/dist/esm/resources/resources-serialization.shared.schemas.d.ts.map +1 -1
  614. package/dist/esm/resources/resources-serialization.shared.schemas.js.map +1 -1
  615. package/dist/esm/resources/resources.shared.core.definitions.d.ts.map +1 -1
  616. package/dist/esm/resources/resources.shared.core.definitions.js.map +1 -1
  617. package/dist/esm/resources/resources.shared.schemas.d.ts.map +1 -1
  618. package/dist/esm/resources/resources.shared.schemas.js.map +1 -1
  619. package/dist/esm/resources/resources.shared.utils.d.ts.map +1 -1
  620. package/dist/esm/resources/resources.shared.utils.js.map +1 -1
  621. package/dist/esm/resources/utils/collection-export.shared.utils.d.ts.map +1 -1
  622. package/dist/esm/resources/utils/collection-export.shared.utils.js.map +1 -1
  623. package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts.map +1 -1
  624. package/dist/esm/resources/utils/composition-cascade-deletability.validation.js.map +1 -1
  625. package/dist/esm/resources/utils/composition-seedability.validation.d.ts.map +1 -1
  626. package/dist/esm/resources/utils/composition-seedability.validation.js.map +1 -1
  627. package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.d.ts.map +1 -1
  628. package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.js.map +1 -1
  629. package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.d.ts.map +1 -1
  630. package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.js.map +1 -1
  631. package/dist/esm/resources/utils/duplicate-relationship-registration.validation.d.ts.map +1 -1
  632. package/dist/esm/resources/utils/duplicate-relationship-registration.validation.js.map +1 -1
  633. package/dist/esm/resources/utils/field-value-disclosure.utils.d.ts.map +1 -1
  634. package/dist/esm/resources/utils/field-value-disclosure.utils.js.map +1 -1
  635. package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.d.ts.map +1 -1
  636. package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.js.map +1 -1
  637. package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.d.ts.map +1 -1
  638. package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.js.map +1 -1
  639. package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.d.ts.map +1 -1
  640. package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.js.map +1 -1
  641. package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.d.ts.map +1 -1
  642. package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.js.map +1 -1
  643. package/dist/esm/resources/utils/populated-file-fields.shared.utils.d.ts.map +1 -1
  644. package/dist/esm/resources/utils/populated-file-fields.shared.utils.js.map +1 -1
  645. package/dist/esm/resources/utils/repository-dto-builder.utils.d.ts.map +1 -1
  646. package/dist/esm/resources/utils/repository-dto-builder.utils.js.map +1 -1
  647. package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.d.ts.map +1 -1
  648. package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.js.map +1 -1
  649. package/dist/esm/resources/utils/required-fk-fillability.validation.d.ts.map +1 -1
  650. package/dist/esm/resources/utils/required-fk-fillability.validation.js.map +1 -1
  651. package/dist/esm/resources/utils/resource-operation-type-guards.utils.d.ts.map +1 -1
  652. package/dist/esm/resources/utils/resource-operation-type-guards.utils.js.map +1 -1
  653. package/dist/esm/resources/utils/resource-polymorphism.factory.d.ts.map +1 -1
  654. package/dist/esm/resources/utils/resource-polymorphism.factory.js.map +1 -1
  655. package/dist/esm/resources/utils/resource-polymorphism.relationships.d.ts.map +1 -1
  656. package/dist/esm/resources/utils/resource-polymorphism.relationships.js.map +1 -1
  657. package/dist/esm/resources/utils/resource-polymorphism.schemas.d.ts.map +1 -1
  658. package/dist/esm/resources/utils/resource-polymorphism.schemas.js.map +1 -1
  659. package/dist/esm/resources/utils/resource-polymorphism.utils.d.ts.map +1 -1
  660. package/dist/esm/resources/utils/resource-polymorphism.utils.js.map +1 -1
  661. package/dist/esm/resources/utils/resource-subtree.utils.d.ts.map +1 -1
  662. package/dist/esm/resources/utils/resource-subtree.utils.js.map +1 -1
  663. package/dist/esm/resources/utils/resources-config-context-needs.utils.d.ts.map +1 -1
  664. package/dist/esm/resources/utils/resources-config-context-needs.utils.js.map +1 -1
  665. package/dist/esm/resources/utils/resources-config-naming.utils.d.ts.map +1 -1
  666. package/dist/esm/resources/utils/resources-config-naming.utils.js.map +1 -1
  667. package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.d.ts.map +1 -1
  668. package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.js.map +1 -1
  669. package/dist/esm/resources/utils/resources-config-operations.path.utils.d.ts.map +1 -1
  670. package/dist/esm/resources/utils/resources-config-operations.path.utils.js.map +1 -1
  671. package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts.map +1 -1
  672. package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.js.map +1 -1
  673. package/dist/esm/resources/utils/resources-config-operations.utils.d.ts.map +1 -1
  674. package/dist/esm/resources/utils/resources-config-operations.utils.js.map +1 -1
  675. package/dist/esm/resources/utils/resources-serialization.utils.d.ts.map +1 -1
  676. package/dist/esm/resources/utils/resources-serialization.utils.js.map +1 -1
  677. package/dist/esm/resources/utils/resources-summary.utils.d.ts.map +1 -1
  678. package/dist/esm/resources/utils/resources-summary.utils.js.map +1 -1
  679. package/dist/esm/resources/utils/schema-family-builder.utils.d.ts.map +1 -1
  680. package/dist/esm/resources/utils/schema-family-builder.utils.js.map +1 -1
  681. package/dist/esm/resources/utils/schema-type-inference.utils.d.ts.map +1 -1
  682. package/dist/esm/resources/utils/schema-type-inference.utils.js.map +1 -1
  683. package/dist/esm/resources/utils/schema-type-utils.d.ts.map +1 -1
  684. package/dist/esm/resources/utils/schema-type-utils.js.map +1 -1
  685. package/dist/esm/resources/utils/schema-variant-resolver.utils.d.ts.map +1 -1
  686. package/dist/esm/resources/utils/schema-variant-resolver.utils.js.map +1 -1
  687. package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts.map +1 -1
  688. package/dist/esm/resources/utils/shared-persistence-collection.utils.js.map +1 -1
  689. package/dist/esm/resources/utils/templatable-file-fields.shared.utils.d.ts.map +1 -1
  690. package/dist/esm/resources/utils/templatable-file-fields.shared.utils.js.map +1 -1
  691. package/dist/esm/resources/work-unit.shared.schemas.d.ts.map +1 -1
  692. package/dist/esm/resources/work-unit.shared.schemas.js.map +1 -1
  693. package/dist/esm/runtime/domain-module.shared.definitions.d.ts.map +1 -1
  694. package/dist/esm/runtime/domain-module.shared.definitions.js.map +1 -1
  695. package/dist/esm/runtime/execution-context.shared.schemas.d.ts.map +1 -1
  696. package/dist/esm/runtime/execution-context.shared.schemas.js.map +1 -1
  697. package/dist/esm/runtime/runtime.shared.schemas.d.ts.map +1 -1
  698. package/dist/esm/runtime/runtime.shared.schemas.js.map +1 -1
  699. package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.d.ts.map +1 -1
  700. package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.js.map +1 -1
  701. package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.d.ts.map +1 -1
  702. package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js.map +1 -1
  703. package/dist/esm/security/api-keys/api-keys.shared.schemas.d.ts.map +1 -1
  704. package/dist/esm/security/api-keys/api-keys.shared.schemas.js.map +1 -1
  705. package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.d.ts.map +1 -1
  706. package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.js.map +1 -1
  707. package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts.map +1 -1
  708. package/dist/esm/security/authentications/authentication.shared.dto.schemas.js.map +1 -1
  709. package/dist/esm/security/authentications/authentication.shared.schemas.d.ts.map +1 -1
  710. package/dist/esm/security/authentications/authentication.shared.schemas.js.map +1 -1
  711. package/dist/esm/security/authentications/authentication.shared.utils.d.ts.map +1 -1
  712. package/dist/esm/security/authentications/authentication.shared.utils.js.map +1 -1
  713. package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts.map +1 -1
  714. package/dist/esm/security/authentications/consumable-token.shared.schemas.js.map +1 -1
  715. package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.d.ts.map +1 -1
  716. package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js.map +1 -1
  717. package/dist/esm/security/authentications/mfa-backup-code-contract.shared.d.ts.map +1 -1
  718. package/dist/esm/security/authentications/mfa-backup-code-contract.shared.js.map +1 -1
  719. package/dist/esm/security/authentications/password-blocklist.shared.utils.d.ts.map +1 -1
  720. package/dist/esm/security/authentications/password-blocklist.shared.utils.js.map +1 -1
  721. package/dist/esm/security/authentications/password-reset.shared.dto.schemas.d.ts.map +1 -1
  722. package/dist/esm/security/authentications/password-reset.shared.dto.schemas.js.map +1 -1
  723. package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts.map +1 -1
  724. package/dist/esm/security/authentications/registration.shared.dto.schemas.js.map +1 -1
  725. package/dist/esm/security/authentications/same-origin-redirect-path.shared.d.ts.map +1 -1
  726. package/dist/esm/security/authentications/same-origin-redirect-path.shared.js.map +1 -1
  727. package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts.map +1 -1
  728. package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js.map +1 -1
  729. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.d.ts.map +1 -1
  730. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.js.map +1 -1
  731. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.d.ts.map +1 -1
  732. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.js.map +1 -1
  733. package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.d.ts.map +1 -1
  734. package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.js.map +1 -1
  735. package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.d.ts.map +1 -1
  736. package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.js.map +1 -1
  737. package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.d.ts.map +1 -1
  738. package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.js.map +1 -1
  739. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.d.ts.map +1 -1
  740. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.js.map +1 -1
  741. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.d.ts.map +1 -1
  742. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.js.map +1 -1
  743. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.d.ts.map +1 -1
  744. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.js.map +1 -1
  745. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.d.ts.map +1 -1
  746. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.js.map +1 -1
  747. package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.d.ts.map +1 -1
  748. package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.js.map +1 -1
  749. package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.d.ts.map +1 -1
  750. package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.js.map +1 -1
  751. package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.d.ts.map +1 -1
  752. package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.js.map +1 -1
  753. package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.d.ts.map +1 -1
  754. package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.js.map +1 -1
  755. package/dist/esm/security/authentications/sso/sso-config.shared.schemas.d.ts.map +1 -1
  756. package/dist/esm/security/authentications/sso/sso-config.shared.schemas.js.map +1 -1
  757. package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.d.ts.map +1 -1
  758. package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.js.map +1 -1
  759. package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.d.ts.map +1 -1
  760. package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.js.map +1 -1
  761. package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts.map +1 -1
  762. package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js.map +1 -1
  763. package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
  764. package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.js.map +1 -1
  765. package/dist/esm/security/authorizations/application-access-grants.shared.schemas.d.ts.map +1 -1
  766. package/dist/esm/security/authorizations/application-access-grants.shared.schemas.js.map +1 -1
  767. package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
  768. package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js.map +1 -1
  769. package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts.map +1 -1
  770. package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js.map +1 -1
  771. package/dist/esm/security/authorizations/roles.shared.defaults.d.ts.map +1 -1
  772. package/dist/esm/security/authorizations/roles.shared.defaults.js.map +1 -1
  773. package/dist/esm/security/authorizations/roles.shared.schemas.d.ts.map +1 -1
  774. package/dist/esm/security/authorizations/roles.shared.schemas.js.map +1 -1
  775. package/dist/esm/security/authorizations/roles.shared.utils.d.ts.map +1 -1
  776. package/dist/esm/security/authorizations/roles.shared.utils.js.map +1 -1
  777. package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.d.ts.map +1 -1
  778. package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.js.map +1 -1
  779. package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts.map +1 -1
  780. package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.js.map +1 -1
  781. package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts.map +1 -1
  782. package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js.map +1 -1
  783. package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts.map +1 -1
  784. package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js.map +1 -1
  785. package/dist/esm/security/credential-rotation-grace.shared.utils.d.ts.map +1 -1
  786. package/dist/esm/security/credential-rotation-grace.shared.utils.js.map +1 -1
  787. package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.d.ts.map +1 -1
  788. package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.js.map +1 -1
  789. package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts.map +1 -1
  790. package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js.map +1 -1
  791. package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts.map +1 -1
  792. package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js.map +1 -1
  793. package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts.map +1 -1
  794. package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js.map +1 -1
  795. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.d.ts.map +1 -1
  796. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.js.map +1 -1
  797. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts.map +1 -1
  798. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js.map +1 -1
  799. package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.d.ts.map +1 -1
  800. package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.js.map +1 -1
  801. package/dist/esm/security/outbound-target-control.shared.schemas.d.ts.map +1 -1
  802. package/dist/esm/security/outbound-target-control.shared.schemas.js.map +1 -1
  803. package/dist/esm/security/submission-challenge/submission-challenge.shared.d.ts.map +1 -1
  804. package/dist/esm/security/submission-challenge/submission-challenge.shared.js.map +1 -1
  805. package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.d.ts.map +1 -1
  806. package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.js.map +1 -1
  807. package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.d.ts.map +1 -1
  808. package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.js.map +1 -1
  809. package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.d.ts.map +1 -1
  810. package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.js.map +1 -1
  811. package/dist/esm/systems-of-record/system-of-record-env.shared.d.ts.map +1 -1
  812. package/dist/esm/systems-of-record/system-of-record-env.shared.js.map +1 -1
  813. package/dist/esm/systems-of-record/system-of-record-error-codes.shared.d.ts.map +1 -1
  814. package/dist/esm/systems-of-record/system-of-record-error-codes.shared.js.map +1 -1
  815. package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.d.ts.map +1 -1
  816. package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.js.map +1 -1
  817. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.d.ts.map +1 -1
  818. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.js.map +1 -1
  819. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.d.ts.map +1 -1
  820. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.js.map +1 -1
  821. package/dist/esm/testing/resource-config-builders.d.ts.map +1 -1
  822. package/dist/esm/testing/resource-config-builders.js.map +1 -1
  823. package/dist/esm/testing.d.ts.map +1 -1
  824. package/dist/esm/testing.js.map +1 -1
  825. package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts.map +1 -1
  826. package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js.map +1 -1
  827. package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts.map +1 -1
  828. package/dist/esm/users/anonymous-users.shared.resources-config.schemas.js.map +1 -1
  829. package/dist/esm/users/anonymous-users.shared.schema.d.ts.map +1 -1
  830. package/dist/esm/users/anonymous-users.shared.schema.js.map +1 -1
  831. package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts.map +1 -1
  832. package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js.map +1 -1
  833. package/dist/esm/users/inbound-contacts.shared.schemas.d.ts.map +1 -1
  834. package/dist/esm/users/inbound-contacts.shared.schemas.js.map +1 -1
  835. package/dist/esm/users/user-consent-decision.shared.utils.d.ts.map +1 -1
  836. package/dist/esm/users/user-consent-decision.shared.utils.js.map +1 -1
  837. package/dist/esm/users/user-credentials.shared.resources-config.schemas.d.ts.map +1 -1
  838. package/dist/esm/users/user-credentials.shared.resources-config.schemas.js.map +1 -1
  839. package/dist/esm/users/user-credentials.shared.schemas.d.ts.map +1 -1
  840. package/dist/esm/users/user-credentials.shared.schemas.js.map +1 -1
  841. package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts.map +1 -1
  842. package/dist/esm/users/user-identity-links.shared.resources-config.schemas.js.map +1 -1
  843. package/dist/esm/users/user-identity-links.shared.schemas.d.ts.map +1 -1
  844. package/dist/esm/users/user-identity-links.shared.schemas.js.map +1 -1
  845. package/dist/esm/users/user-preferences-reset.shared.utils.d.ts.map +1 -1
  846. package/dist/esm/users/user-preferences-reset.shared.utils.js.map +1 -1
  847. package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts.map +1 -1
  848. package/dist/esm/users/user-preferences.shared.resources-config.schemas.js.map +1 -1
  849. package/dist/esm/users/user-profiles.shared.resources-config.schemas.d.ts.map +1 -1
  850. package/dist/esm/users/user-profiles.shared.resources-config.schemas.js.map +1 -1
  851. package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.d.ts.map +1 -1
  852. package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.js.map +1 -1
  853. package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.d.ts.map +1 -1
  854. package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.js.map +1 -1
  855. package/dist/esm/users/user-self.shared.resources-config.schemas.d.ts.map +1 -1
  856. package/dist/esm/users/user-self.shared.resources-config.schemas.js.map +1 -1
  857. package/dist/esm/users/users.shared.resources-config.schemas.d.ts.map +1 -1
  858. package/dist/esm/users/users.shared.resources-config.schemas.js.map +1 -1
  859. package/dist/esm/users/users.shared.schemas.d.ts.map +1 -1
  860. package/dist/esm/users/users.shared.schemas.js.map +1 -1
  861. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"user-preferences.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../src/users/user-preferences.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Preferences Shared Resource Configuration\n *\n * Resource configuration for user preferences management operations.\n * Handles notifications, privacy, UI, regional, and language preferences.\n */\n\nimport { z } from 'zod';\n\nimport { UserPreferencesSchema } from './users.shared.schemas';\nimport { UserPrivacySchema } from '../compliance/privacy/privacy.shared.schemas';\nimport { buildAdministratorConsentDecisionPatch } from './user-consent-decision.shared.utils';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n/**\n * Custom operations on a person's preferences, from the ADMINISTRATIVE side.\n *\n * `CARRY_ANONYMOUS_CONSENT` exists because a consent decision has THREE authors, not two, and only\n * two had a door (#1258):\n *\n * | who decided | door | rule |\n * |---|---|---|\n * | the person, now | `USER_SELF_PREFERENCES.UPDATE` | `buildConsentDecisionPatch` — the server stamps the instant |\n * | an administrator, for them | `USER_PREFERENCES.UPDATE` | `buildAdministratorConsentDecisionPatch` — withdraw only, never grant |\n * | **the person, BEFORE they had an account** | this | the decision was already made and already timed; it is being MOVED |\n *\n * The third is not a variant of either. Routed through the administrator door it is REFUSED — that\n * door throws on any added purpose, which is exactly what a carry adds — and routed through the self\n * door the hook stamps the server's NOW over the instant the visitor actually decided at, and stamps\n * one in the case that must deliberately have none. Both are correct rules for their own author, and\n * neither is the rule for this one.\n *\n * So it is named rather than smuggled past a guard: `design-philosophy.md`, semantic distinction over\n * convenience.\n */\nexport enum UserPreferences_Operations {\n CARRY_ANONYMOUS_CONSENT = 'carry_anonymous_consent',\n}\n\n/**\n * The privacy block to store, ALREADY DECIDED.\n *\n * The whole block, not a delta, and never a partial: `buildAnonymousConsentCarryPatch` overlays the\n * account's current block before returning, so what arrives here is complete — a partial write would\n * silently reset any member it omits to that member's schema default.\n *\n * `consentDecidedAt` is ABSENT exactly when the visitor was shown less than this application asks.\n * That absence is the payload's most important property: it is what leaves the question open so the\n * application still prompts, with the grants the person already made pre-ticked. An operation that\n * defaulted it would collapse the carry into \"record a decision\", which is the defect the whole step\n * exists to avoid.\n */\nexport const UserPreferencesCarryAnonymousConsentRequestSchema = z.object({\n privacy: UserPrivacySchema,\n});\n\nexport type UserPreferencesCarryAnonymousConsentRequest = z.infer<typeof UserPreferencesCarryAnonymousConsentRequestSchema>;\n\ntype UserPreferencesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY\n | CoreResourceOperation.DELETE;\n\n/*\nUser Preferences Resource Configuration Factory\n*/\nexport const userPreferencesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserPreferences_Operations,\n UserPreferencesCoreOperations,\n typeof UserPreferencesSchema\n>({\n mainSchema: UserPreferencesSchema,\n resourceIdentifier: CoreResourceType.USER_PREFERENCES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_PREFERENCES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true,\n\n // Eager composition seeding: the USERS → USER_PREFERENCES relationship declares\n // `onParentCreate.enabled`, so a default preferences row is written via\n // `createAsSystem` on user creation. Registration (and OAuth/SCIM/SAML/enterprise)\n // create USERS; USER_SELF_PREFERENCES is a read-only view over the SAME collection\n // (`getCollectionNameForResource` maps USER_SELF_PREFERENCES → USER_PREFERENCES),\n // so the self-read finds this seeded row. Guard-1 is fail-closed by omission, so\n // the system seed requires this explicit CREATE opt-in.\n systemAccessPolicy: {\n exportSubject: ResourceSystemAccessMode.ALLOWED, create: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. Admin door onto the same preference rows.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n\n /**\n * Subject erasure RETAINS the preferences row and RESETS what it holds.\n *\n * `RETAIN_AND_IMPERSONALIZE`: notification routing, privacy choices, regional settings (which carry\n * LOCATION — a timezone and a locale narrow where a person is) and language preferences are all a\n * record of one person's choices. All four take `RESET`, returning the application's own defaults.\n *\n * RESET rather than REMOVE, and the distinction is why this resource could not be declared at all\n * until 2026-09-01: every one of these fields is non-nullable with a schema default, so a null fails\n * the strict re-parse and `maskValue` (typed `string`) cannot express an object. Neither mode was\n * authorable — `RETAIN_AND_IMPERSONALIZE` is refused when nothing would be scrubbed, and\n * `RETAIN_ONLY` would have asserted this resource holds no personal data, which is false.\n *\n * ⚠️ `USER_SELF_PREFERENCES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME schema, so both must inject the same marker and emit the same partial\n * index. Change the two together, as `USERS` / `USER_SELF` documents.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /** The subject is the person whose preferences these are, reached through `userId`. */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.CREATE,\n CoreResourceOperation.DELETE,\n // Route-less; required by `retentionPolicy` (the in-place scrub + audited see-through read).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserPreferences_Operations,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. INTERNAL_CALL registers NO route, and must not be\n * REPOSITORY_ONLY: the retention primitives resolve through `getServiceOperationPathDefault`,\n * which excludes it, so that spelling passes the boot guard and fails when an erasure runs.\n * LIST is LOW — a read-shaped operation may not claim the HIGH/CRITICAL band, which carries an\n * audit-emission obligation checked over the real engine catalogue.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_VIEWER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n // USER_PREFERENCES is the cross-subject administrative door onto the same rows exposed\n // to a subject by USER_SELF_PREFERENCES. This opt-in is what makes the addressed\n // `{userId}` an administrator-selected subject rather than forcing it to equal the\n // caller. The APP_ADMIN_VIEWER role remains the independent authorization gate.\n admitsCrossSubjectUserAdministration: true,\n }\n ]\n },\n\n [CoreResourceOperation.CREATE]: {\n variants: [\n {\n // Preferences are seeded by the USERS -> USER_PREFERENCES composition. CREATE remains\n // enabled only so the trusted lifecycle hook can call createAsSystem; it is not a public\n // recovery endpoint and does not belong in either API-reference section.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [],\n riskLevel: ResourceOperationRiskLevel.LOW,\n }\n ],\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n // Consent settings need before/after evidence even below the automatic risk floor.\n auditableEvent: { auditBelowRiskFloor: true },\n admitsCrossSubjectUserAdministration: true,\n // An administrator acting for the subject still makes a DECISION the server stamps (#534) —\n // the same hook as the self door, so the two doors onto one record cannot disagree.\n // Withdraw-only (#534): an administrator never grants consent on a person's behalf.\n basicPrefixOperation: ({ inputDto, currentObject }) => buildAdministratorConsentDecisionPatch(inputDto, currentObject),\n authoritativeFields: ['privacy'],\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.DELETE]: {\n variants: [\n {\n // The USERS composition cascade needs DELETE to exist, but no actor should delete an\n // eagerly seeded preferences row through HTTP. The self API has selective reset; the\n // administration API has UPDATE. Account deletion invokes this internal lifecycle edge.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n }\n ],\n },\n\n /**\n * Move a decision the person made BEFORE they had an account onto the account (#1258).\n *\n * See {@link UserPreferences_Operations} for why this is a third door rather than a use of\n * either existing one: the administrator door refuses a granted purpose, and the self door\n * stamps the server's clock over the instant the visitor actually decided at.\n *\n * ## No consent-decision prefix, and that is the point\n *\n * Every other write of this field carries one — `buildConsentDecisionPatch` on the self door,\n * `buildAdministratorConsentDecisionPatch` on the administrative one. This carries NONE, because\n * the rule was ALREADY applied, by `buildAnonymousConsentCarryPatch`, against the visitor's own\n * record: which grants were actually offered, whether the offered set covered what this\n * application asks, and therefore whether an instant may be stamped at all. Re-applying a hook\n * here would overwrite that answer with a worse one.\n *\n * So the payload is authored, not derived, and the operation's job is to store it faithfully.\n *\n * ## INTERNAL_CALL: there is no caller to expose this to\n *\n * It registers no route. Its only caller is the anonymous→authenticated conversion, which runs\n * inside authentication with no person at a keyboard. A person changing their own mind uses the\n * self door; an administrator uses theirs.\n *\n * MEDIUM sits below the automatic HIGH/CRITICAL audit floor, so `auditBelowRiskFloor` is what\n * makes the change leave a row — the same remedy, and the same reasoning, as the two sibling\n * doors and the lead's CREATE: buying the row by mis-declaring the verb's danger would corrupt\n * the risk vocabulary every other control reads. Only the marked decision leaves\n * (`consentedPurposes`) enter the evidence, so the row carries the choice and its\n * provenance rather than the whole block.\n *\n * assurance-control: WILDO.PRIVACY.CONSENT_RECORD — a decision taken before identity is recorded\n * against the person it belonged to, and the change leaves a trail naming what it moved.\n */\n [UserPreferences_Operations.CARRY_ANONYMOUS_CONSENT]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n requestDto: UserPreferencesCarryAnonymousConsentRequestSchema,\n auditableEvent: { auditBelowRiskFloor: true },\n }\n ],\n }\n },\n});\n"]}
1
+ {"version":3,"file":"user-preferences.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../../src/users/user-preferences.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Preferences Shared Resource Configuration\n *\n * Resource configuration for user preferences management operations.\n * Handles notifications, privacy, UI, regional, and language preferences.\n */\n\nimport { z } from 'zod';\n\nimport { UserPreferencesSchema } from './users.shared.schemas';\nimport { UserPrivacySchema } from '../compliance/privacy/privacy.shared.schemas';\nimport { buildAdministratorConsentDecisionPatch } from './user-consent-decision.shared.utils';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n/**\n * Custom operations on a person's preferences, from the ADMINISTRATIVE side.\n *\n * `CARRY_ANONYMOUS_CONSENT` exists because a consent decision has THREE authors, not two, and only\n * two had a door (#1258):\n *\n * | who decided | door | rule |\n * |---|---|---|\n * | the person, now | `USER_SELF_PREFERENCES.UPDATE` | `buildConsentDecisionPatch` — the server stamps the instant |\n * | an administrator, for them | `USER_PREFERENCES.UPDATE` | `buildAdministratorConsentDecisionPatch` — withdraw only, never grant |\n * | **the person, BEFORE they had an account** | this | the decision was already made and already timed; it is being MOVED |\n *\n * The third is not a variant of either. Routed through the administrator door it is REFUSED — that\n * door throws on any added purpose, which is exactly what a carry adds — and routed through the self\n * door the hook stamps the server's NOW over the instant the visitor actually decided at, and stamps\n * one in the case that must deliberately have none. Both are correct rules for their own author, and\n * neither is the rule for this one.\n *\n * So it is named rather than smuggled past a guard: `design-philosophy.md`, semantic distinction over\n * convenience.\n */\nexport enum UserPreferences_Operations {\n CARRY_ANONYMOUS_CONSENT = 'carry_anonymous_consent',\n}\n\n/**\n * The privacy block to store, ALREADY DECIDED.\n *\n * The whole block, not a delta, and never a partial: `buildAnonymousConsentCarryPatch` overlays the\n * account's current block before returning, so what arrives here is complete — a partial write would\n * silently reset any member it omits to that member's schema default.\n *\n * `consentDecidedAt` is ABSENT exactly when the visitor was shown less than this application asks.\n * That absence is the payload's most important property: it is what leaves the question open so the\n * application still prompts, with the grants the person already made pre-ticked. An operation that\n * defaulted it would collapse the carry into \"record a decision\", which is the defect the whole step\n * exists to avoid.\n */\nexport const UserPreferencesCarryAnonymousConsentRequestSchema = z.object({\n privacy: UserPrivacySchema,\n});\n\nexport type UserPreferencesCarryAnonymousConsentRequest = z.infer<typeof UserPreferencesCarryAnonymousConsentRequestSchema>;\n\ntype UserPreferencesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY\n | CoreResourceOperation.DELETE;\n\n/*\nUser Preferences Resource Configuration Factory\n*/\nexport const userPreferencesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserPreferences_Operations,\n UserPreferencesCoreOperations,\n typeof UserPreferencesSchema\n>({\n mainSchema: UserPreferencesSchema,\n resourceIdentifier: CoreResourceType.USER_PREFERENCES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_PREFERENCES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true,\n\n // Eager composition seeding: the USERS → USER_PREFERENCES relationship declares\n // `onParentCreate.enabled`, so a default preferences row is written via\n // `createAsSystem` on user creation. Registration (and OAuth/SCIM/SAML/enterprise)\n // create USERS; USER_SELF_PREFERENCES is a read-only view over the SAME collection\n // (`getCollectionNameForResource` maps USER_SELF_PREFERENCES → USER_PREFERENCES),\n // so the self-read finds this seeded row. Guard-1 is fail-closed by omission, so\n // the system seed requires this explicit CREATE opt-in.\n systemAccessPolicy: {\n exportSubject: ResourceSystemAccessMode.ALLOWED, create: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. Admin door onto the same preference rows.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n\n /**\n * Subject erasure RETAINS the preferences row and RESETS what it holds.\n *\n * `RETAIN_AND_IMPERSONALIZE`: notification routing, privacy choices, regional settings (which carry\n * LOCATION — a timezone and a locale narrow where a person is) and language preferences are all a\n * record of one person's choices. All four take `RESET`, returning the application's own defaults.\n *\n * RESET rather than REMOVE, and the distinction is why this resource could not be declared at all\n * until 2026-09-01: every one of these fields is non-nullable with a schema default, so a null fails\n * the strict re-parse and `maskValue` (typed `string`) cannot express an object. Neither mode was\n * authorable — `RETAIN_AND_IMPERSONALIZE` is refused when nothing would be scrubbed, and\n * `RETAIN_ONLY` would have asserted this resource holds no personal data, which is false.\n *\n * ⚠️ `USER_SELF_PREFERENCES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME schema, so both must inject the same marker and emit the same partial\n * index. Change the two together, as `USERS` / `USER_SELF` documents.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /** The subject is the person whose preferences these are, reached through `userId`. */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.CREATE,\n CoreResourceOperation.DELETE,\n // Route-less; required by `retentionPolicy` (the in-place scrub + audited see-through read).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserPreferences_Operations,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. INTERNAL_CALL registers NO route, and must not be\n * REPOSITORY_ONLY: the retention primitives resolve through `getServiceOperationPathDefault`,\n * which excludes it, so that spelling passes the boot guard and fails when an erasure runs.\n * LIST is LOW — a read-shaped operation may not claim the HIGH/CRITICAL band, which carries an\n * audit-emission obligation checked over the real engine catalogue.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_VIEWER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n // USER_PREFERENCES is the cross-subject administrative door onto the same rows exposed\n // to a subject by USER_SELF_PREFERENCES. This opt-in is what makes the addressed\n // `{userId}` an administrator-selected subject rather than forcing it to equal the\n // caller. The APP_ADMIN_VIEWER role remains the independent authorization gate.\n admitsCrossSubjectUserAdministration: true,\n }\n ]\n },\n\n [CoreResourceOperation.CREATE]: {\n variants: [\n {\n // Preferences are seeded by the USERS -> USER_PREFERENCES composition. CREATE remains\n // enabled only so the trusted lifecycle hook can call createAsSystem; it is not a public\n // recovery endpoint and does not belong in either API-reference section.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [],\n riskLevel: ResourceOperationRiskLevel.LOW,\n }\n ],\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n // Consent settings need before/after evidence even below the automatic risk floor.\n auditableEvent: { auditBelowRiskFloor: true },\n admitsCrossSubjectUserAdministration: true,\n // An administrator acting for the subject still makes a DECISION the server stamps (#534) —\n // the same hook as the self door, so the two doors onto one record cannot disagree.\n // Withdraw-only (#534): an administrator never grants consent on a person's behalf.\n basicPrefixOperation: ({ inputDto, currentObject }) => buildAdministratorConsentDecisionPatch(inputDto, currentObject),\n authoritativeFields: ['privacy'],\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.DELETE]: {\n variants: [\n {\n // The USERS composition cascade needs DELETE to exist, but no actor should delete an\n // eagerly seeded preferences row through HTTP. The self API has selective reset; the\n // administration API has UPDATE. Account deletion invokes this internal lifecycle edge.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n }\n ],\n },\n\n /**\n * Move a decision the person made BEFORE they had an account onto the account (#1258).\n *\n * See {@link UserPreferences_Operations} for why this is a third door rather than a use of\n * either existing one: the administrator door refuses a granted purpose, and the self door\n * stamps the server's clock over the instant the visitor actually decided at.\n *\n * ## No consent-decision prefix, and that is the point\n *\n * Every other write of this field carries one — `buildConsentDecisionPatch` on the self door,\n * `buildAdministratorConsentDecisionPatch` on the administrative one. This carries NONE, because\n * the rule was ALREADY applied, by `buildAnonymousConsentCarryPatch`, against the visitor's own\n * record: which grants were actually offered, whether the offered set covered what this\n * application asks, and therefore whether an instant may be stamped at all. Re-applying a hook\n * here would overwrite that answer with a worse one.\n *\n * So the payload is authored, not derived, and the operation's job is to store it faithfully.\n *\n * ## INTERNAL_CALL: there is no caller to expose this to\n *\n * It registers no route. Its only caller is the anonymous→authenticated conversion, which runs\n * inside authentication with no person at a keyboard. A person changing their own mind uses the\n * self door; an administrator uses theirs.\n *\n * MEDIUM sits below the automatic HIGH/CRITICAL audit floor, so `auditBelowRiskFloor` is what\n * makes the change leave a row — the same remedy, and the same reasoning, as the two sibling\n * doors and the lead's CREATE: buying the row by mis-declaring the verb's danger would corrupt\n * the risk vocabulary every other control reads. Only the marked decision leaves\n * (`consentedPurposes`) enter the evidence, so the row carries the choice and its\n * provenance rather than the whole block.\n *\n * assurance-control: WILDO.PRIVACY.CONSENT_RECORD — a decision taken before identity is recorded\n * against the person it belonged to, and the change leaves a trail naming what it moved.\n */\n [UserPreferences_Operations.CARRY_ANONYMOUS_CONSENT]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n requestDto: UserPreferencesCarryAnonymousConsentRequestSchema,\n auditableEvent: { auditBelowRiskFloor: true },\n }\n ],\n }\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"user-profiles.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/users/user-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAyBzG,oBAAY,uBAAuB;IACjC,aAAa,kBAAkB,CAAE,qBAAqB;IACtD,aAAa,kBAAkB,CAAE,qBAAqB;IACtD,mBAAmB,wBAAwB;CAC5C;AAED,KAAK,0BAA0B,GAC3B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,WAAW,CAAC;AAKtC,eAAO,MAAM,uDAAuD,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;kBAgVpH,CAAC"}
1
+ {"version":3,"file":"user-profiles.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/users/user-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAyBzG,oBAAY,uBAAuB;IACjC,aAAa,kBAAkB,CAAE,qBAAqB;IACtD,aAAa,kBAAkB,CAAE,qBAAqB;IACtD,mBAAmB,wBAAwB;CAC5C;AAED,KAAK,0BAA0B,GAC3B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,WAAW,CAAC;AAKtC,eAAO,MAAM,uDAAuD,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;kBAgVpH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-profiles.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../src/users/user-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Profiles Shared Resource Configuration\n *\n * Resource configuration for user profile management operations.\n * Handles profile information like name, avatar, bio, contact details.\n */\n\nimport { z } from 'zod';\nimport { UserProfileSchema } from './users.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\nimport { ResourceSystemAccessMode, acknowledgeUnimplementedEngineOperation } from '../resources/resources-config.shared.schemas';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// Custom operations enum for user profile management.\n//\n// There is deliberately no `verify_phone` here. Proving possession of a phone number is a\n// challenge/response against an issued code, and the framework already implements exactly that in\n// `AuthPhoneVerificationBackendService`: `CoreConsumableTokenTypes.PHONE_VERIFICATION` tokens\n// (single-use, 10-minute expiry, revoke-then-issue), a constant-time `timingSafeEqual` comparison,\n// an audit event on BOTH the success and the failure path, and the verified state persisted via\n// `setVerifiedPhone`. `AuthMethod.SMS_OTP` covers the same proof as a first-or-second auth factor\n// with its own rate limits and audit events. `USER_SELF_PROFILES` — the resource where a subject\n// edits their OWN profile — dropped its equivalent op for the same reason. A `verify_phone` on\n// THIS resource would be worse still: `USER_PROFILES` is the admin/directory surface, and an SMS\n// code proves possession by the phone's OWNER, not by the admin submitting it. Route phone-factor\n// work to the auth service, not to a second challenge store hanging off the profile row.\nexport enum UserProfiles_Operations {\n UPDATE_AVATAR = 'update_avatar', // Update user avatar\n REMOVE_AVATAR = 'remove_avatar', // Remove user avatar\n UPDATE_CONTACT_INFO = 'update_contact_info', // Update contact information\n}\n\ntype UserProfilesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.SEARCH\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.DELETE\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY;\n\n/*\nUser Profiles Resource Configuration Factory\n*/\nexport const userProfilesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserProfiles_Operations,\n UserProfilesCoreOperations,\n typeof UserProfileSchema\n>({\n mainSchema: UserProfileSchema,\n resourceIdentifier: CoreResourceType.USER_PROFILES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_PROFILES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true,\n\n // Registration / invitation / SSO-JIT flows create a profile in-process with an\n // explicit `userId` FK on a request-context-less EC, which the client-shaped\n // CREATE DTO strips by name. Opt CREATE into the trusted `createAsSystem` path\n // so `userId` is re-attached after the strict parse.\n //\n // UPDATE is opted into the same trust class: enterprise SSO + SCIM directory sync\n // update profile attributes (EnterpriseUserProvisioningService.updateOrgUser) on a\n // synthesised super-admin EC. Routing them through `updateAsSystem` keeps every\n // trusted profile mutation on one fail-closed, policy-gated path and records the\n // ACL-bypassing write in the SYSTEM_CONTEXT_WRITE audit trail (parity with reads).\n //\n // LIST is opted in for ONE reader: the onboarding names check (#1374,\n // `isProfileNamesObligationOwed`). A user type that collects the names at\n // onboarding owes them exactly while no profile row exists, and that question is\n // asked on the authentication path — at email verification and at sign-in — where\n // there is no session to read under. The caller has already authorized the\n // subject by other means (a consumed verification token, a verified credential),\n // reads only the subject's own row by `userId`, and asks existence only.\n // Without this grant the check failed closed at verification, AFTER the token was\n // consumed, so every such registrant was stranded unverified (found live,\n // 2026-09-21). READ stays forbidden: nothing needs a system read by id.\n systemAccessPolicy: {\n exportSubject: ResourceSystemAccessMode.ALLOWED,\n create: ResourceSystemAccessMode.ALLOWED,\n list: ResourceSystemAccessMode.ALLOWED,\n update: ResourceSystemAccessMode.ALLOWED,\n },\n\n /**\n * Subject-export disclosure. Admin door onto the same profile rows.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n /**\n * Subject erasure scrubs-and-RETAINS the profile row rather than deleting it.\n *\n * `RETAIN_AND_IMPERSONALIZE` because this row holds personal data of its OWN — names, avatar, bio,\n * phone, title — which the treatments on the shared `UserProfileSchema` mask or remove. The two\n * required name fields MASK to `ERASED_USER_NAME` rather than REMOVE: they are `min(1)`, so nulling\n * them would leave a row the schema rejects on the next read.\n *\n * RETAIN rather than delete, to match the identity row. `USERS` is retained so the financial records\n * whose foreign keys point at it stay resolvable; a profile deleted out from under a retained user\n * would leave that user's 1:1 composition dangling. Retaining and scrubbing keeps the collection's\n * contract coherent and removes the personal data, which is what the obligation actually asks.\n *\n * ⚠️ `USER_SELF_PROFILES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME `UserProfileSchema`. Both must inject the same marker and emit the same\n * partial index, exactly as `USERS` / `USER_SELF` do. Change the two together.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /**\n * The subject IS the person this profile describes, reached through its `userId` composition parent.\n */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.SEARCH,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.CREATE,\n CoreResourceOperation.DELETE,\n // LIST + UPDATE_MANY exist for the retention capability ONLY, as INTERNAL_CALL variants that\n // register no route. `retentionPolicy` requires UPDATE_MANY (the in-place scrub via\n // `updateManyAsSystem`) plus READ + LIST (the audited see-through read of retained rows).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserProfiles_Operations,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. Both are INTERNAL_CALL, *not* REPOSITORY_ONLY: the retention\n * primitives resolve through `getServiceOperationPathDefault`, which matches INTERNAL_CALL /\n * API_CALL / API_CALL_WITH_CALLBACK and deliberately excludes REPOSITORY_ONLY — so a\n * REPOSITORY_ONLY variant satisfies the factory's boot-time \"operation exists\" guard and then\n * FAILS TO RESOLVE when an erasure actually runs. `roles` is inert on a non-URL-bearing variant;\n * the real gate is the derived `systemAccessPolicy` grant the trusted writer fails closed on.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n // LOW, matching `USER_SELF`'s retention LIST. A read-shaped operation may not be declared\n // HIGH/CRITICAL — the audit contract pairs that band with an emission obligation, and it is\n // checked over the real engine catalogue. Declaring HIGH here failed both halves of that\n // check at once: an unemitted HIGH, and a read at a write's risk band.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can read their own and others' profiles\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_VIEWER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n // The default variant remains self-only. This explicit admission lets\n // the separately role-gated administration variant address another\n // user's profile without weakening the APP_USER route.\n admitsCrossSubjectUserAdministration: true,\n }\n ]\n },\n\n [CoreResourceOperation.SEARCH]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n isSearchable: true,\n searchableFields: ['firstName', 'lastName', 'displayName'],\n searchableOptions: { caseSensitive: false, fullMatchOnly: false },\n filterFields: {},\n sortFields: ['firstName', 'lastName'],\n maxPaginatedResultPerPageLimit: 50,\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_VIEWER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n admitsCrossSubjectUserAdministration: true,\n isSearchable: true,\n searchableFields: ['firstName', 'lastName', 'displayName', 'phoneNumber'],\n searchableOptions: { caseSensitive: false, fullMatchOnly: false },\n filterFields: {},\n sortFields: ['firstName', 'lastName'],\n maxPaginatedResultPerPageLimit: 200,\n }\n ],\n },\n\n [CoreResourceOperation.CREATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can create their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n admitsCrossSubjectUserAdministration: true,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can update their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n admitsCrossSubjectUserAdministration: true,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.DELETE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can delete their own profile\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.HIGH,\n admitsCrossSubjectUserAdministration: true,\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserProfiles_Operations.UPDATE_AVATAR]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // The profile schema owns the upload-only file reference contract.\n // Reusing it prevents this convenience route from accepting an\n // external URL that persistence cannot store as an avatar.\n requestDto: z.object({\n avatar: UserProfileSchema.shape.avatar.unwrap(),\n }),\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserProfiles_Operations.REMOVE_AVATAR]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // A verb whose entire job is to clear ONE field must not accept the whole profile.\n // Omitting `requestDto` auto-derived the FULL profile update DTO\n // (`{firstName, lastName, displayName, avatar, bio, phoneNumber, title}`), so\n // \"remove_avatar\" was an unconstrained profile rewrite that never had to touch the\n // avatar at all.\n requestDto: z.object({}),\n // The clearing IS implemented (#1275), and the implementation is only this patch:\n // `user-profile-avatar.custom-impl.backend.service.ts` returns `{ avatar: null }` and every\n // other layer was already wired. A wire null on an `.optional()` file field is classified\n // by `partitionNullClearedFields` as a CLEAR — persisted as removed, read back ABSENT on\n // both adapters — and the service tier's `processFileFieldsForUpdate` unlinks the file it\n // no longer points at, exactly as it has always done for an avatar REPLACEMENT. The\n // detached file is deleted by the hourly files-cleanup batch after 24 hours.\n //\n // This carried an `unimplementedAcknowledgement` until 2026-09-17 claiming a `.nullish()`\n // reshape and a file-deletion path were needed first. Both were false and both mechanisms\n // already existed; the acknowledgement had been written from this field's JSDoc rather\n // than from the code.\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserProfiles_Operations.UPDATE_CONTACT_INFO]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // A named \"update contact info\" call must perform a change; an empty\n // body was previously accepted as a successful no-op. The same\n // canonical phone schema now governs both the main update and this\n // focused route.\n requestDto: z.object({\n phoneNumber: UserProfileSchema.shape.phoneNumber.unwrap(),\n }),\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n },\n});\n"]}
1
+ {"version":3,"file":"user-profiles.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../../src/users/user-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Profiles Shared Resource Configuration\n *\n * Resource configuration for user profile management operations.\n * Handles profile information like name, avatar, bio, contact details.\n */\n\nimport { z } from 'zod';\nimport { UserProfileSchema } from './users.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\nimport { ResourceSystemAccessMode, acknowledgeUnimplementedEngineOperation } from '../resources/resources-config.shared.schemas';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// Custom operations enum for user profile management.\n//\n// There is deliberately no `verify_phone` here. Proving possession of a phone number is a\n// challenge/response against an issued code, and the framework already implements exactly that in\n// `AuthPhoneVerificationBackendService`: `CoreConsumableTokenTypes.PHONE_VERIFICATION` tokens\n// (single-use, 10-minute expiry, revoke-then-issue), a constant-time `timingSafeEqual` comparison,\n// an audit event on BOTH the success and the failure path, and the verified state persisted via\n// `setVerifiedPhone`. `AuthMethod.SMS_OTP` covers the same proof as a first-or-second auth factor\n// with its own rate limits and audit events. `USER_SELF_PROFILES` — the resource where a subject\n// edits their OWN profile — dropped its equivalent op for the same reason. A `verify_phone` on\n// THIS resource would be worse still: `USER_PROFILES` is the admin/directory surface, and an SMS\n// code proves possession by the phone's OWNER, not by the admin submitting it. Route phone-factor\n// work to the auth service, not to a second challenge store hanging off the profile row.\nexport enum UserProfiles_Operations {\n UPDATE_AVATAR = 'update_avatar', // Update user avatar\n REMOVE_AVATAR = 'remove_avatar', // Remove user avatar\n UPDATE_CONTACT_INFO = 'update_contact_info', // Update contact information\n}\n\ntype UserProfilesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.SEARCH\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.DELETE\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY;\n\n/*\nUser Profiles Resource Configuration Factory\n*/\nexport const userProfilesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserProfiles_Operations,\n UserProfilesCoreOperations,\n typeof UserProfileSchema\n>({\n mainSchema: UserProfileSchema,\n resourceIdentifier: CoreResourceType.USER_PROFILES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_PROFILES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true,\n\n // Registration / invitation / SSO-JIT flows create a profile in-process with an\n // explicit `userId` FK on a request-context-less EC, which the client-shaped\n // CREATE DTO strips by name. Opt CREATE into the trusted `createAsSystem` path\n // so `userId` is re-attached after the strict parse.\n //\n // UPDATE is opted into the same trust class: enterprise SSO + SCIM directory sync\n // update profile attributes (EnterpriseUserProvisioningService.updateOrgUser) on a\n // synthesised super-admin EC. Routing them through `updateAsSystem` keeps every\n // trusted profile mutation on one fail-closed, policy-gated path and records the\n // ACL-bypassing write in the SYSTEM_CONTEXT_WRITE audit trail (parity with reads).\n //\n // LIST is opted in for ONE reader: the onboarding names check (#1374,\n // `isProfileNamesObligationOwed`). A user type that collects the names at\n // onboarding owes them exactly while no profile row exists, and that question is\n // asked on the authentication path — at email verification and at sign-in — where\n // there is no session to read under. The caller has already authorized the\n // subject by other means (a consumed verification token, a verified credential),\n // reads only the subject's own row by `userId`, and asks existence only.\n // Without this grant the check failed closed at verification, AFTER the token was\n // consumed, so every such registrant was stranded unverified (found live,\n // 2026-09-21). READ stays forbidden: nothing needs a system read by id.\n systemAccessPolicy: {\n exportSubject: ResourceSystemAccessMode.ALLOWED,\n create: ResourceSystemAccessMode.ALLOWED,\n list: ResourceSystemAccessMode.ALLOWED,\n update: ResourceSystemAccessMode.ALLOWED,\n },\n\n /**\n * Subject-export disclosure. Admin door onto the same profile rows.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n /**\n * Subject erasure scrubs-and-RETAINS the profile row rather than deleting it.\n *\n * `RETAIN_AND_IMPERSONALIZE` because this row holds personal data of its OWN — names, avatar, bio,\n * phone, title — which the treatments on the shared `UserProfileSchema` mask or remove. The two\n * required name fields MASK to `ERASED_USER_NAME` rather than REMOVE: they are `min(1)`, so nulling\n * them would leave a row the schema rejects on the next read.\n *\n * RETAIN rather than delete, to match the identity row. `USERS` is retained so the financial records\n * whose foreign keys point at it stay resolvable; a profile deleted out from under a retained user\n * would leave that user's 1:1 composition dangling. Retaining and scrubbing keeps the collection's\n * contract coherent and removes the personal data, which is what the obligation actually asks.\n *\n * ⚠️ `USER_SELF_PROFILES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME `UserProfileSchema`. Both must inject the same marker and emit the same\n * partial index, exactly as `USERS` / `USER_SELF` do. Change the two together.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /**\n * The subject IS the person this profile describes, reached through its `userId` composition parent.\n */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.SEARCH,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.CREATE,\n CoreResourceOperation.DELETE,\n // LIST + UPDATE_MANY exist for the retention capability ONLY, as INTERNAL_CALL variants that\n // register no route. `retentionPolicy` requires UPDATE_MANY (the in-place scrub via\n // `updateManyAsSystem`) plus READ + LIST (the audited see-through read of retained rows).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserProfiles_Operations,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. Both are INTERNAL_CALL, *not* REPOSITORY_ONLY: the retention\n * primitives resolve through `getServiceOperationPathDefault`, which matches INTERNAL_CALL /\n * API_CALL / API_CALL_WITH_CALLBACK and deliberately excludes REPOSITORY_ONLY — so a\n * REPOSITORY_ONLY variant satisfies the factory's boot-time \"operation exists\" guard and then\n * FAILS TO RESOLVE when an erasure actually runs. `roles` is inert on a non-URL-bearing variant;\n * the real gate is the derived `systemAccessPolicy` grant the trusted writer fails closed on.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n // LOW, matching `USER_SELF`'s retention LIST. A read-shaped operation may not be declared\n // HIGH/CRITICAL — the audit contract pairs that band with an emission obligation, and it is\n // checked over the real engine catalogue. Declaring HIGH here failed both halves of that\n // check at once: an unemitted HIGH, and a read at a write's risk band.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can read their own and others' profiles\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_VIEWER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n // The default variant remains self-only. This explicit admission lets\n // the separately role-gated administration variant address another\n // user's profile without weakening the APP_USER route.\n admitsCrossSubjectUserAdministration: true,\n }\n ]\n },\n\n [CoreResourceOperation.SEARCH]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n isSearchable: true,\n searchableFields: ['firstName', 'lastName', 'displayName'],\n searchableOptions: { caseSensitive: false, fullMatchOnly: false },\n filterFields: {},\n sortFields: ['firstName', 'lastName'],\n maxPaginatedResultPerPageLimit: 50,\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_VIEWER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n admitsCrossSubjectUserAdministration: true,\n isSearchable: true,\n searchableFields: ['firstName', 'lastName', 'displayName', 'phoneNumber'],\n searchableOptions: { caseSensitive: false, fullMatchOnly: false },\n filterFields: {},\n sortFields: ['firstName', 'lastName'],\n maxPaginatedResultPerPageLimit: 200,\n }\n ],\n },\n\n [CoreResourceOperation.CREATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can create their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n admitsCrossSubjectUserAdministration: true,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can update their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n admitsCrossSubjectUserAdministration: true,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.DELETE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Users can delete their own profile\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n },\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: false,\n variantKey: \"admin\",\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.HIGH,\n admitsCrossSubjectUserAdministration: true,\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserProfiles_Operations.UPDATE_AVATAR]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // The profile schema owns the upload-only file reference contract.\n // Reusing it prevents this convenience route from accepting an\n // external URL that persistence cannot store as an avatar.\n requestDto: z.object({\n avatar: UserProfileSchema.shape.avatar.unwrap(),\n }),\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserProfiles_Operations.REMOVE_AVATAR]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // A verb whose entire job is to clear ONE field must not accept the whole profile.\n // Omitting `requestDto` auto-derived the FULL profile update DTO\n // (`{firstName, lastName, displayName, avatar, bio, phoneNumber, title}`), so\n // \"remove_avatar\" was an unconstrained profile rewrite that never had to touch the\n // avatar at all.\n requestDto: z.object({}),\n // The clearing IS implemented (#1275), and the implementation is only this patch:\n // `user-profile-avatar.custom-impl.backend.service.ts` returns `{ avatar: null }` and every\n // other layer was already wired. A wire null on an `.optional()` file field is classified\n // by `partitionNullClearedFields` as a CLEAR — persisted as removed, read back ABSENT on\n // both adapters — and the service tier's `processFileFieldsForUpdate` unlinks the file it\n // no longer points at, exactly as it has always done for an avatar REPLACEMENT. The\n // detached file is deleted by the hourly files-cleanup batch after 24 hours.\n //\n // This carried an `unimplementedAcknowledgement` until 2026-09-17 claiming a `.nullish()`\n // reshape and a file-deletion path were needed first. Both were false and both mechanisms\n // already existed; the acknowledgement had been written from this field's JSDoc rather\n // than from the code.\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserProfiles_Operations.UPDATE_CONTACT_INFO]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // A named \"update contact info\" call must perform a change; an empty\n // body was previously accepted as a successful no-op. The same\n // canonical phone schema now governs both the main update and this\n // focused route.\n requestDto: z.object({\n phoneNumber: UserProfileSchema.shape.phoneNumber.unwrap(),\n }),\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"user-self-preferences.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/users/user-self-preferences.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8D,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAgBzI,oBAAY,8BAA8B;IACxC,iBAAiB,sBAAsB;CACxC;AAED,KAAK,iCAAiC,GAClC,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,WAAW,GACjC,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,8DAA8D,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;iCA8K3H,CAAC"}
1
+ {"version":3,"file":"user-self-preferences.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/users/user-self-preferences.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8D,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAgBzI,oBAAY,8BAA8B;IACxC,iBAAiB,sBAAsB;CACxC;AAED,KAAK,iCAAiC,GAClC,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,WAAW,GACjC,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,8DAA8D,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;iCA8K3H,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-self-preferences.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../src/users/user-self-preferences.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Self Preferences Shared Resource Configuration\n *\n * Resource configuration for user self preferences management operations.\n * Handles preferences that users can manage for themselves only.\n * Separated from USER_PREFERENCES for strict access control.\n */\n\nimport {\n UserPreferencesSchema,\n} from './users.shared.schemas';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { buildUserPreferencesResetPatch, UserPreferencesResetRequestSchema } from './user-preferences-reset.shared.utils';\nimport { buildConsentDecisionPatch } from './user-consent-decision.shared.utils';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceOperationReversibility, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// Custom operations enum for user self preferences management.\n// Granular per-section update ops (notifications / privacy / ui-theme / regional /\n// language / dark-mode toggle) were removed: editing happens through the generic\n// UPDATE form, and theme/dark-mode live in the Appearance panel — not as resource\n// operations. Only the genuinely-distinct action remains.\nexport enum UserSelfPreferences_Operations {\n RESET_TO_DEFAULTS = 'reset_to_defaults', // Reset all preferences to defaults\n}\n\ntype UserSelfPreferencesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY\n | CoreResourceOperation.UPDATE;\n\n/*\nUser Self Preferences Resource Configuration Factory\n*/\nexport const userSelfPreferencesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserSelfPreferences_Operations,\n UserSelfPreferencesCoreOperations,\n typeof UserPreferencesSchema\n>({\n mainSchema: UserPreferencesSchema,\n resourceIdentifier: CoreResourceType.USER_SELF_PREFERENCES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_SELF_PREFERENCES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true, // Self-scoped resource - same user context\n\n /**\n * Subject-export disclosure. Settings the user chose.\n */\n systemAccessPolicy: { exportSubject: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. Settings the user chose.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n\n /**\n * Subject erasure RETAINS the preferences row and RESETS what it holds.\n *\n * `RETAIN_AND_IMPERSONALIZE`: notification routing, privacy choices, regional settings (which carry\n * LOCATION — a timezone and a locale narrow where a person is) and language preferences are all a\n * record of one person's choices. All four take `RESET`, returning the application's own defaults.\n *\n * RESET rather than REMOVE, and the distinction is why this resource could not be declared at all\n * until 2026-09-01: every one of these fields is non-nullable with a schema default, so a null fails\n * the strict re-parse and `maskValue` (typed `string`) cannot express an object. Neither mode was\n * authorable — `RETAIN_AND_IMPERSONALIZE` is refused when nothing would be scrubbed, and\n * `RETAIN_ONLY` would have asserted this resource holds no personal data, which is false.\n *\n * ⚠️ `USER_SELF_PREFERENCES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME schema, so both must inject the same marker and emit the same partial\n * index. Change the two together, as `USERS` / `USER_SELF` documents.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /** The subject is the person whose preferences these are, reached through `userId`. */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.UPDATE,\n // Route-less; required by `retentionPolicy` (the in-place scrub + audited see-through read).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserSelfPreferences_Operations,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. INTERNAL_CALL registers NO route, and must not be\n * REPOSITORY_ONLY: the retention primitives resolve through `getServiceOperationPathDefault`,\n * which excludes it, so that spelling passes the boot guard and fails when an erasure runs.\n * LIST is LOW — a read-shaped operation may not claim the HIGH/CRITICAL band, which carries an\n * audit-emission obligation checked over the real engine catalogue.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can read their own preferences\n riskLevel: ResourceOperationRiskLevel.LOW,\n // MCP: exposed to a USER-DELEGATED agent caller only. A machine principal carries no\n // `userId`, so this USER_SELF operation is not in its reachable scope set and is never\n // advertised to it. The record resolves to the CALLER's own preferences (the execution\n // context is scoped by the authenticated `userId`), so an agent can read the preferences\n // of the user who consented — never another user's.\n mcp: {\n exposed: true,\n description: 'Read the preferences of the user you are acting for (locale, timezone, theme, notification settings). Returns only that user\\'s own preferences.',\n },\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can update their own preferences\n riskLevel: ResourceOperationRiskLevel.LOW,\n // Consent settings need before/after evidence even below the automatic risk floor.\n auditableEvent: { auditBelowRiskFloor: true },\n // A write to `privacy.consentedPurposes` is a consent DECISION: the server stamps its instant\n // (#534). `privacy` is authoritative for the hook so the stamped value survives a caller that\n // supplied the block — which the consent gate and the preferences form both do.\n basicPrefixOperation: ({ inputDto, currentObject }) => buildConsentDecisionPatch(inputDto, currentObject),\n authoritativeFields: ['privacy'],\n // requestDto auto-derived from decorators\n // MCP: same USER-DELEGATED-only exposure as READ above. The write targets the CALLER's own\n // preferences record; a machine principal never sees this tool.\n mcp: {\n exposed: true,\n description: 'Update the preferences of the user you are acting for (e.g. locale, timezone, theme, notification settings). Only supply the fields being changed; affects only that user\\'s own preferences.',\n },\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserSelfPreferences_Operations.RESET_TO_DEFAULTS]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n // CRITICAL: a full/selective reset wipes the user's preferences — it must\n // require an explicit double-validation confirmation (see the framework\n // topics plan: settings-hub-framework-topics.md).\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n // IRREVERSIBLE: The person’s previous preference values are overwritten and nothing retains them.\n // This is what admits it to the danger zone; risk alone no longer does.\n reversibility: ResourceOperationReversibility.IRREVERSIBLE,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // The caller names WHICH blocks to reset, from the closed `UserPreferenceGroup`\n // vocabulary whose values ARE the persisted field names. It previously declared six\n // booleans (`resetNotifications`, `resetAll`, …) which name no schema path, so the\n // whole request was stripped — by the controller DTO parse, the repository re-parse,\n // and Mongoose strict — and the route answered 200 having reset nothing.\n requestDto: UserPreferencesResetRequestSchema,\n basicPrefixOperation: ({ inputDto, currentObject }) =>\n buildUserPreferencesResetPatch(\n // `inputDto` is typed as the resource main schema while the runtime value is this\n // operation's request DTO, so re-parse rather than cast — the same idiom the\n // Wonder Todos `set_as_recurring` prefix uses. Doubles as a fail-closed guard on\n // any non-HTTP path that reached dispatch without the controller's parse.\n UserPreferencesResetRequestSchema.parse(inputDto),\n currentObject,\n ),\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n }\n },\n});\n"]}
1
+ {"version":3,"file":"user-self-preferences.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../../src/users/user-self-preferences.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Self Preferences Shared Resource Configuration\n *\n * Resource configuration for user self preferences management operations.\n * Handles preferences that users can manage for themselves only.\n * Separated from USER_PREFERENCES for strict access control.\n */\n\nimport {\n UserPreferencesSchema,\n} from './users.shared.schemas';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { buildUserPreferencesResetPatch, UserPreferencesResetRequestSchema } from './user-preferences-reset.shared.utils';\nimport { buildConsentDecisionPatch } from './user-consent-decision.shared.utils';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceOperationReversibility, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// Custom operations enum for user self preferences management.\n// Granular per-section update ops (notifications / privacy / ui-theme / regional /\n// language / dark-mode toggle) were removed: editing happens through the generic\n// UPDATE form, and theme/dark-mode live in the Appearance panel — not as resource\n// operations. Only the genuinely-distinct action remains.\nexport enum UserSelfPreferences_Operations {\n RESET_TO_DEFAULTS = 'reset_to_defaults', // Reset all preferences to defaults\n}\n\ntype UserSelfPreferencesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY\n | CoreResourceOperation.UPDATE;\n\n/*\nUser Self Preferences Resource Configuration Factory\n*/\nexport const userSelfPreferencesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserSelfPreferences_Operations,\n UserSelfPreferencesCoreOperations,\n typeof UserPreferencesSchema\n>({\n mainSchema: UserPreferencesSchema,\n resourceIdentifier: CoreResourceType.USER_SELF_PREFERENCES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_SELF_PREFERENCES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true, // Self-scoped resource - same user context\n\n /**\n * Subject-export disclosure. Settings the user chose.\n */\n systemAccessPolicy: { exportSubject: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. Settings the user chose.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n\n /**\n * Subject erasure RETAINS the preferences row and RESETS what it holds.\n *\n * `RETAIN_AND_IMPERSONALIZE`: notification routing, privacy choices, regional settings (which carry\n * LOCATION — a timezone and a locale narrow where a person is) and language preferences are all a\n * record of one person's choices. All four take `RESET`, returning the application's own defaults.\n *\n * RESET rather than REMOVE, and the distinction is why this resource could not be declared at all\n * until 2026-09-01: every one of these fields is non-nullable with a schema default, so a null fails\n * the strict re-parse and `maskValue` (typed `string`) cannot express an object. Neither mode was\n * authorable — `RETAIN_AND_IMPERSONALIZE` is refused when nothing would be scrubbed, and\n * `RETAIN_ONLY` would have asserted this resource holds no personal data, which is false.\n *\n * ⚠️ `USER_SELF_PREFERENCES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME schema, so both must inject the same marker and emit the same partial\n * index. Change the two together, as `USERS` / `USER_SELF` documents.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /** The subject is the person whose preferences these are, reached through `userId`. */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.UPDATE,\n // Route-less; required by `retentionPolicy` (the in-place scrub + audited see-through read).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserSelfPreferences_Operations,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. INTERNAL_CALL registers NO route, and must not be\n * REPOSITORY_ONLY: the retention primitives resolve through `getServiceOperationPathDefault`,\n * which excludes it, so that spelling passes the boot guard and fails when an erasure runs.\n * LIST is LOW — a read-shaped operation may not claim the HIGH/CRITICAL band, which carries an\n * audit-emission obligation checked over the real engine catalogue.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can read their own preferences\n riskLevel: ResourceOperationRiskLevel.LOW,\n // MCP: exposed to a USER-DELEGATED agent caller only. A machine principal carries no\n // `userId`, so this USER_SELF operation is not in its reachable scope set and is never\n // advertised to it. The record resolves to the CALLER's own preferences (the execution\n // context is scoped by the authenticated `userId`), so an agent can read the preferences\n // of the user who consented — never another user's.\n mcp: {\n exposed: true,\n description: 'Read the preferences of the user you are acting for (locale, timezone, theme, notification settings). Returns only that user\\'s own preferences.',\n },\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can update their own preferences\n riskLevel: ResourceOperationRiskLevel.LOW,\n // Consent settings need before/after evidence even below the automatic risk floor.\n auditableEvent: { auditBelowRiskFloor: true },\n // A write to `privacy.consentedPurposes` is a consent DECISION: the server stamps its instant\n // (#534). `privacy` is authoritative for the hook so the stamped value survives a caller that\n // supplied the block — which the consent gate and the preferences form both do.\n basicPrefixOperation: ({ inputDto, currentObject }) => buildConsentDecisionPatch(inputDto, currentObject),\n authoritativeFields: ['privacy'],\n // requestDto auto-derived from decorators\n // MCP: same USER-DELEGATED-only exposure as READ above. The write targets the CALLER's own\n // preferences record; a machine principal never sees this tool.\n mcp: {\n exposed: true,\n description: 'Update the preferences of the user you are acting for (e.g. locale, timezone, theme, notification settings). Only supply the fields being changed; affects only that user\\'s own preferences.',\n },\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [UserSelfPreferences_Operations.RESET_TO_DEFAULTS]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n // CRITICAL: a full/selective reset wipes the user's preferences — it must\n // require an explicit double-validation confirmation (see the framework\n // topics plan: settings-hub-framework-topics.md).\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n // IRREVERSIBLE: The person’s previous preference values are overwritten and nothing retains them.\n // This is what admits it to the danger zone; risk alone no longer does.\n reversibility: ResourceOperationReversibility.IRREVERSIBLE,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // The caller names WHICH blocks to reset, from the closed `UserPreferenceGroup`\n // vocabulary whose values ARE the persisted field names. It previously declared six\n // booleans (`resetNotifications`, `resetAll`, …) which name no schema path, so the\n // whole request was stripped — by the controller DTO parse, the repository re-parse,\n // and Mongoose strict — and the route answered 200 having reset nothing.\n requestDto: UserPreferencesResetRequestSchema,\n basicPrefixOperation: ({ inputDto, currentObject }) =>\n buildUserPreferencesResetPatch(\n // `inputDto` is typed as the resource main schema while the runtime value is this\n // operation's request DTO, so re-parse rather than cast — the same idiom the\n // Wonder Todos `set_as_recurring` prefix uses. Doubles as a fail-closed guard on\n // any non-HTTP path that reached dispatch without the controller's parse.\n UserPreferencesResetRequestSchema.parse(inputDto),\n currentObject,\n ),\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n }\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"user-self-profiles.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/users/user-self-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAgBzG,KAAK,8BAA8B,GAC/B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,WAAW,CAAC;AAKtC,eAAO,MAAM,2DAA2D,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;iCA6IxH,CAAC"}
1
+ {"version":3,"file":"user-self-profiles.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/users/user-self-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAgBzG,KAAK,8BAA8B,GAC/B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,WAAW,CAAC;AAKtC,eAAO,MAAM,2DAA2D,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;iCA6IxH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-self-profiles.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../src/users/user-self-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Self Profiles Shared Resource Configuration\n *\n * Resource configuration for user self profile management operations.\n * Handles profile information that users can manage for themselves only.\n * Separated from USER_PROFILES for strict access control.\n */\n\nimport { UserProfileSchema } from './users.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// USER_SELF_PROFILES has NO custom operations — profile fields are edited through\n// the generic UPDATE form. The former granular update ops (avatar / contact info /\n// phone verify / personal info) were removed as redundant with UPDATE; phone-factor\n// MFA lives in the Security panel's enrollment flow, not on this resource.\ntype UserSelfProfilesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY;\n\n/*\nUser Self Profiles Resource Configuration Factory\n*/\nexport const userSelfProfilesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n Record<string, never>,\n UserSelfProfilesCoreOperations,\n typeof UserProfileSchema\n>({\n mainSchema: UserProfileSchema,\n resourceIdentifier: CoreResourceType.USER_SELF_PROFILES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_SELF_PROFILES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true, // Self-scoped resource - same user context\n\n /**\n * Subject-export disclosure. Name, bio, avatar — supplied by the user.\n */\n systemAccessPolicy: { exportSubject: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. Name, bio, avatar — supplied by the user.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n /**\n * Subject erasure scrubs-and-RETAINS the profile row rather than deleting it.\n *\n * `RETAIN_AND_IMPERSONALIZE` because this row holds personal data of its OWN — names, avatar, bio,\n * phone, title — which the treatments on the shared `UserProfileSchema` mask or remove. The two\n * required name fields MASK to `ERASED_USER_NAME` rather than REMOVE: they are `min(1)`, so nulling\n * them would leave a row the schema rejects on the next read.\n *\n * RETAIN rather than delete, to match the identity row. `USERS` is retained so the financial records\n * whose foreign keys point at it stay resolvable; a profile deleted out from under a retained user\n * would leave that user's 1:1 composition dangling. Retaining and scrubbing keeps the collection's\n * contract coherent and removes the personal data, which is what the obligation actually asks.\n *\n * ⚠️ `USER_SELF_PROFILES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME `UserProfileSchema`. Both must inject the same marker and emit the same\n * partial index, exactly as `USERS` / `USER_SELF` do. Change the two together.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /**\n * The subject IS the person this profile describes, reached through its `userId` composition parent.\n */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.CREATE,\n // LIST + UPDATE_MANY exist for the retention capability ONLY, as INTERNAL_CALL variants that\n // register no route. `retentionPolicy` requires UPDATE_MANY (the in-place scrub via\n // `updateManyAsSystem`) plus READ + LIST (the audited see-through read of retained rows).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: {} as Record<string, never>,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. Both are INTERNAL_CALL, *not* REPOSITORY_ONLY: the retention\n * primitives resolve through `getServiceOperationPathDefault`, which matches INTERNAL_CALL /\n * API_CALL / API_CALL_WITH_CALLBACK and deliberately excludes REPOSITORY_ONLY — so a\n * REPOSITORY_ONLY variant satisfies the factory's boot-time \"operation exists\" guard and then\n * FAILS TO RESOLVE when an erasure actually runs. `roles` is inert on a non-URL-bearing variant;\n * the real gate is the derived `systemAccessPolicy` grant the trusted writer fails closed on.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n // LOW, matching `USER_SELF`'s retention LIST. A read-shaped operation may not be declared\n // HIGH/CRITICAL — the audit contract pairs that band with an emission obligation, and it is\n // checked over the real engine catalogue. Declaring HIGH here failed both halves of that\n // check at once: an unemitted HIGH, and a read at a write's risk band.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can read their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n }\n ]\n },\n\n [CoreResourceOperation.CREATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can create their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can update their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n },\n});\n"]}
1
+ {"version":3,"file":"user-self-profiles.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../../src/users/user-self-profiles.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Self Profiles Shared Resource Configuration\n *\n * Resource configuration for user self profile management operations.\n * Handles profile information that users can manage for themselves only.\n * Separated from USER_PROFILES for strict access control.\n */\n\nimport { UserProfileSchema } from './users.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// USER_SELF_PROFILES has NO custom operations — profile fields are edited through\n// the generic UPDATE form. The former granular update ops (avatar / contact info /\n// phone verify / personal info) were removed as redundant with UPDATE; phone-factor\n// MFA lives in the Security panel's enrollment flow, not on this resource.\ntype UserSelfProfilesCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.CREATE\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE_MANY;\n\n/*\nUser Self Profiles Resource Configuration Factory\n*/\nexport const userSelfProfilesResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n Record<string, never>,\n UserSelfProfilesCoreOperations,\n typeof UserProfileSchema\n>({\n mainSchema: UserProfileSchema,\n resourceIdentifier: CoreResourceType.USER_SELF_PROFILES,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_SELF_PROFILES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true, // Self-scoped resource - same user context\n\n /**\n * Subject-export disclosure. Name, bio, avatar — supplied by the user.\n */\n systemAccessPolicy: { exportSubject: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. Name, bio, avatar — supplied by the user.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n /**\n * Subject erasure scrubs-and-RETAINS the profile row rather than deleting it.\n *\n * `RETAIN_AND_IMPERSONALIZE` because this row holds personal data of its OWN — names, avatar, bio,\n * phone, title — which the treatments on the shared `UserProfileSchema` mask or remove. The two\n * required name fields MASK to `ERASED_USER_NAME` rather than REMOVE: they are `min(1)`, so nulling\n * them would leave a row the schema rejects on the next read.\n *\n * RETAIN rather than delete, to match the identity row. `USERS` is retained so the financial records\n * whose foreign keys point at it stay resolvable; a profile deleted out from under a retained user\n * would leave that user's 1:1 composition dangling. Retaining and scrubbing keeps the collection's\n * contract coherent and removes the personal data, which is what the obligation actually asks.\n *\n * ⚠️ `USER_SELF_PROFILES` declares the SAME policy on purpose — a second config over the SAME\n * collection and the SAME `UserProfileSchema`. Both must inject the same marker and emit the same\n * partial index, exactly as `USERS` / `USER_SELF` do. Change the two together.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /**\n * The subject IS the person this profile describes, reached through its `userId` composition parent.\n */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n\n coreOperations: [\n CoreResourceOperation.READ,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.CREATE,\n // LIST + UPDATE_MANY exist for the retention capability ONLY, as INTERNAL_CALL variants that\n // register no route. `retentionPolicy` requires UPDATE_MANY (the in-place scrub via\n // `updateManyAsSystem`) plus READ + LIST (the audited see-through read of retained rows).\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: {} as Record<string, never>,\n\n operationsConfiguration: {\n /*\n * Route-less retention plumbing. Both are INTERNAL_CALL, *not* REPOSITORY_ONLY: the retention\n * primitives resolve through `getServiceOperationPathDefault`, which matches INTERNAL_CALL /\n * API_CALL / API_CALL_WITH_CALLBACK and deliberately excludes REPOSITORY_ONLY — so a\n * REPOSITORY_ONLY variant satisfies the factory's boot-time \"operation exists\" guard and then\n * FAILS TO RESOLVE when an erasure actually runs. `roles` is inert on a non-URL-bearing variant;\n * the real gate is the derived `systemAccessPolicy` grant the trusted writer fails closed on.\n */\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n // LOW, matching `USER_SELF`'s retention LIST. A read-shaped operation may not be declared\n // HIGH/CRITICAL — the audit contract pairs that band with an emission obligation, and it is\n // checked over the real engine catalogue. Declaring HIGH here failed both halves of that\n // check at once: an unemitted HIGH, and a read at a write's risk band.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.LOW,\n },\n ],\n },\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_ADMIN_SUPER_ADMIN],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n },\n ],\n },\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can read their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n }\n ]\n },\n\n [CoreResourceOperation.CREATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can create their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // Only self can update their own profile\n riskLevel: ResourceOperationRiskLevel.LOW,\n // requestDto auto-derived from decorators\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"user-self.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/users/user-self.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAc,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAQzG,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AA2FjF,oBAAY,mBAAmB;IAC7B,kBAAkB,uBAAuB,CAAE,iCAAiC;IAC5E,kBAAkB,uBAAuB;CAC1C;AAED,KAAK,sBAAsB,GACvB,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,WAAW,CAAC;AAKtC,eAAO,MAAM,mDAAmD,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;kBAyThH,CAAC"}
1
+ {"version":3,"file":"user-self.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/users/user-self.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAc,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAQzG,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AA2FjF,oBAAY,mBAAmB;IAC7B,kBAAkB,uBAAuB,CAAE,iCAAiC;IAC5E,kBAAkB,uBAAuB;CAC1C;AAED,KAAK,sBAAsB,GACvB,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,WAAW,CAAC;AAKtC,eAAO,MAAM,mDAAmD,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;kBAyThH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-self.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../src/users/user-self.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Self Shared Resource Configuration\n *\n * Resource configuration for user self-management operations.\n * Handles profile management, preferences, and personal data operations.\n */\n\nimport { z } from 'zod';\nimport { UserSchema, UserStatus } from './users.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// Custom operations enum for user self management\n//\n// PASSWORD CHANGE IS NOT A RESOURCE OPERATION — IT IS AN AUTH ROUTE. `CHANGE_PASSWORD` was\n// declared here as an `APP_USER`-gated `riskLevel: HIGH` operation taking\n// `{ currentPassword, newPassword, confirmPassword }`, and was removed on 2026-08-01: it was\n// ROUTED but never implemented, so the request fell through to the generic core UPDATE, which\n// persists only fields the resource schema declares. A password verifier is not one of them\n// (credentials are a separate store), so every call answered **HTTP 200 having changed nothing**\n// — the caller is told their password rotated while the old one still works.\n//\n// The real implementation already exists and is the ONLY correct home for it:\n// `POST /auth/password/change` → `AuthMethodManagementBackendService.changePassword`, which\n// verifies the current-password proof, applies the per-user-type password policy, hashes,\n// invalidates every refresh token for the user, and writes a `USER_PASSWORD_CHANGED` audit\n// record. It is rate-limited (5/min/IP) and parses its body with `z.strictObject` so an\n// identity field smuggled into the payload is rejected loudly rather than silently ignored.\n// The frontend already calls exactly that route (`AppPage_SecuritySettings` →\n// `getManualCallsHttpClient().passwordChange(...)`).\n//\n// Do NOT re-declare this as a resource operation. Beyond duplicating a solved problem, it would\n// route a plaintext credential through the generic resource-write pipeline (DTO parse, repository\n// projection, notification fan-out) that the auth route deliberately bypasses.\n// See the 2026-08-01 routed-but-unimplemented operation sweep (#1275).\n//\n// NOR ARE PROFILE / PREFERENCES WRITES — THEY BELONG TO THEIR OWN RESOURCES. `UPDATE_PROFILE` and\n// `UPDATE_PREFERENCES` were removed on 2026-08-01. Both ran `resourceOperationLike: UPDATE` against\n// THIS resource — whose `mainSchema` is the USER — while declaring the request DTO of a DIFFERENT\n// resource (`UserProfileSchema.partial()` / `UserPreferencesSchema.partial()`). A core UPDATE writes\n// only its own resource's row, so every declared field was dropped; the single intersecting key was\n// `_id`, which `ResourceOperationsHelper.cleanInputData` force-deletes before validation. The write\n// was therefore empty and the route answered **HTTP 200 having persisted nothing**.\n//\n// The persisted documents already have dedicated self-scoped resources, and they are already the\n// wired path: `USER_SELF_PROFILES` exposes READ/CREATE/UPDATE over its own `mainSchema`, while\n// `USER_SELF_PREFERENCES` exposes READ/UPDATE plus its selective reset operation over the eagerly\n// seeded preferences row. Both are embedded as child resources of this one in the frontend preset,\n// carry their own resource specifications, and — for preferences — are the MCP-exposed read/update\n// tools.\n// This resource's own specification already directed engineers there for \"the persisted documents\".\n//\n// Do NOT re-declare either verb here. A single `user_self`-rooted write across child resources\n// cannot be a core UPDATE at all; it would need a custom multi-resource implementation declaring\n// `transactionParticipants` — new machinery duplicating a path that already exists. Route clients\n// to `userSelfProfiles` / `userSelfPreferences` instead.\n//\n// NOR IS SELF-SERVICE ACCOUNT DELETION — DATA-SUBJECT ERASURE IS A SYSTEM-LEVEL API WITH NO ROUTE.\n// `DELETE_ACCOUNT` was removed on 2026-08-01. It was an `APP_USER`-gated `riskLevel: CRITICAL`\n// operation taking `{ password, reason }` and declaring a scheduled-deletion\n// `customResponseDto: { scheduledDeletionDate, recoveryPeriodDays, dataExportUrl }`. It was broken\n// in four independent ways, each verified against the built configuration:\n//\n// - **The password was never verified.** Neither declared field is a persisted `UserSchema` path\n// and no custom implementation was bound to the operation path, so the built `repositoryDto`\n// was EMPTY: the controller strict-parsed the body, the repository re-parsed it, and both\n// fields were discarded. A UI collecting the password as a confirmation gate was providing\n// false assurance.\n// - **It could never answer successfully.** `transformOutput` skips default-envelope composition\n// for an op declaring a `customResponseDto` and validates the raw service output against it.\n// A core DELETE returns the deleted `_id` as a bare string, so every call threw\n// `service_resource_transformation_failed` → HTTP 500. Retries too: a second call returns `''`,\n// which is not `null`, so it fails the same parse.\n// - **Its destructive effect was NONDETERMINISTIC.** `resourceOperationLike: DELETE` reaches\n// `_doDelete` through the repository's operations map (which holds custom ops), bypassing the\n// `coreOperations` gate this config never opened — and fires `onParentDelete`. Neither\n// `USER_SELF_PROFILES` nor `USER_SELF_PREFERENCES` declares a DELETE, so a user WITH either row\n// hit `ErrorType.CONFIGURATION` inside the delete transaction and was rolled back, while a user\n// with NEITHER row was destroyed. Same 500, opposite persistence outcomes.\n// - **It contradicted this resource's own retention contract.** `retentionPolicy` below declares\n// `RETAIN_AND_IMPERSONALIZE`: user rows are RETAINED and scrubbed in place, never hard-deleted.\n//\n// The erasure capability already exists and is the only correct home: `eraseSubjectAsSystem` /\n// `eraseSubjectInPlace` walk every dependent edge, derive delete-vs-retain from each edge's own\n// `onParentDelete` declaration, fail closed on unclassified edges, and return a\n// `SubjectErasureReport`. Like the four export/portability verbs removed the same day, they\n// **deliberately ship with NO ROUTE** — data-subject rights are a system-level API, not a\n// self-service HTTP verb. `dataExportUrl` compounded this: it named the portability artifact that\n// removal established does not exist.\n//\n// Do NOT re-declare this as a resource operation. Voluntary self-service closure is\n// `DEACTIVATE_ACCOUNT` below; actual erasure runs through the compliance capability. If a product\n// ever needs a user-initiated erasure REQUEST, it is a scheduling verb over a persisted\n// request state (with its own cancel path and a batch that calls `eraseSubjectAsSystem`) — not a\n// routed DELETE, and not something the generic core delete can express.\n// See the 2026-08-01 routed-but-unimplemented operation sweep (#1275).\n//\n// assurance-control: WILDO.DATA.SECURE_LIFECYCLE — a destructive identity operation\n// must verify the principal and leave evidence; erasure must honour the declared retention mode.\nexport enum UserSelf_Operations {\n DEACTIVATE_ACCOUNT = 'deactivate_account', // Temporarily deactivate account\n REACTIVATE_ACCOUNT = 'reactivate_account', // Reactivate account\n}\n\ntype UserSelfCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.UPDATE_MANY;\n\n/*\nUser Self Resource Configuration Factory\n*/\nexport const userSelfResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserSelf_Operations,\n UserSelfCoreOperations,\n typeof UserSchema\n>({\n mainSchema: UserSchema,\n resourceIdentifier: CoreResourceType.USER_SELF,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_SELF],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true, // Self-scoped\n\n /**\n * `/user-self/{userId}` names the CALLER. Declared EXPLICITLY even though `true` is the default,\n * because the sibling `USERS` configuration — over the SAME collection, with the SAME\n * `resourceFieldIdentifier` — declares `false`, and a reader comparing the two must be able to see\n * that the difference is intentional rather than an omission.\n *\n * This is the value that keeps the horizontal-IDOR refusal alive: user A addressing user B's\n * self row is refused `403 authorization_user_id_mismatch` by the identity-coherence guard. Pinned\n * by `external-access-auth.e2e.ts` (M4) and `users-administration.e2e.ts` (U-11). Flipping this to\n * `false` would open that hole silently — nothing downstream would catch it, because the addressed\n * id still reaches the contextual filter and would scope the read to B.\n */\n primaryKeyIdentifiesInitiator: true,\n\n /**\n * ⚠️ MUST MIRROR `USERS`. This config and `USERS` are two doors onto the SAME rows: they share\n * `UserSchema` above and, per `getCollectionNameForResource` in the zod→mongoose convertor,\n * `USER_SELF` builds a SEPARATE Mongoose model over the `USERS` COLLECTION.\n *\n * Retention governance is per-resource-config, so a `USERS`-only opt-in would leave two holes on\n * these shared rows:\n * - an ERASED user's row would stay READABLE and UPDATABLE through this door, whose READ/UPDATE\n * are open to `APP_USER` and would carry neither the retention hide filter nor the freeze;\n * - this model would emit a PLAIN unique index on `email` next to the `USERS` model's\n * retention-scoped one, so the SECOND erased user would collide (E11000) on the shared mask\n * address and abort the erasure.\n *\n * Declaring the same mode makes both models inject the same marker and emit the identical partial\n * index, so the collection has one coherent retention contract. Change the two configs together.\n * The scrub treatment needs no restating — it lives on the shared `UserSchema`.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /**\n * Same subject as `USERS` over the same collection — the self-service door onto the identity row.\n * Mirrors that config's `SELF_PRINCIPAL` declaration; the two must be changed together.\n */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n /**\n * Subject-export disclosure. The self-service export subject. The identity row is what the user signed up with.\n */\n systemAccessPolicy: { exportSubject: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. The self-service export subject. The identity row is what the user signed up with.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n coreOperations: [\n CoreResourceOperation.READ,\n // LIST + UPDATE_MANY exist for the retention capability ONLY, as INTERNAL_CALL variants that\n // register no route: `retentionPolicy` requires UPDATE_MANY (the in-place scrub via\n // `updateManyAsSystem`) plus READ + LIST (the audited see-through read of retained rows). There\n // is deliberately no HTTP \"list my selves\" — see the variants below.\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserSelf_Operations,\n\n\n operationsConfiguration: {\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // v1: app-only, user reading their own data\n riskLevel: ResourceOperationRiskLevel.LOW,\n // Default variant returns basic User data only\n }\n ]\n },\n\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n // Retention capability only — INTERNAL_CALL registers NO HTTP route. A user-facing\n // \"list my selves\" would be meaningless (this resource is addressed as the caller's own\n // row); the op exists solely so `listRetainedAsSystem` has a read path through which a\n // compliance auditor can see-through to retained rows on this collection.\n //\n // ⚠️ INTERNAL_CALL, *not* REPOSITORY_ONLY — see the UPDATE_MANY note below for why the\n // distinction is load-bearing. `roles` is inert on a non-URL-bearing variant.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n // ⚠️ INTERNAL_CALL — registers NO HTTP route. This was an `API_CALL` open to\n // `APP_USER` with an auto-derived request DTO, and on THIS resource the auto-derived\n // user update DTO is `{status, appRoles, userTypes}`: every writable field on the\n // `USER_SELF` row is server-owned. `email` is `.excludeFromUpdate()` and the editable\n // self data (names, avatar, bio, phone / notification + UI preferences) lives on the\n // `USER_SELF_PROFILES` and `USER_SELF_PREFERENCES` child resources, which is where the\n // UI actually writes it. So the route offered a self-service caller nothing legitimate\n // and three things it must never set:\n //\n // - `appRoles` — the app-level authorization axis. No ceiling gate exists on this\n // path (`assertRequestedRolesWithinCallerCeiling` is wired into org-member CREATE,\n // org-unit-members, oauth-clients and api-keys only, and no custom implementation is\n // registered for `USERS` / `USER_SELF`), so a plain authenticated user could grant\n // themselves any role, up to `APP_ADMIN_SUPER_ADMIN`.\n // - `userTypes` — selects auth policy and registration context.\n // - `status` — the account lifecycle axis, which belongs to the dedicated\n // DEACTIVATE_ACCOUNT / REACTIVATE_ACCOUNT transitions below (and to the admin\n // SUSPEND_USER / UNSUSPEND_USER verbs on the `USERS` door). A self-service caller\n // flipping it directly bypasses every state gate those verbs declare.\n //\n // Narrowing `requestDto` would have left the route in place answering an empty write;\n // removing the HTTP surface is the honest fix, because no caller wants it. Verified\n // before the change: the engine presets surface no `UPDATE` action for `USER_SELF`\n // (self edits go to the child resources), and no backend caller invokes `USER_SELF`\n // update — the trusted internal door for user rows is `USERS`.\n //\n // The operation itself is KEPT (not dropped from `coreOperations`) because the custom\n // self verbs borrow it through `resourceOperationLike: UPDATE`, and INTERNAL_CALL is\n // the resource's established idiom for a route-less operation — see `LIST` and\n // `UPDATE_MANY` above/below, and the note there on why INTERNAL_CALL rather than\n // REPOSITORY_ONLY. `roles` is inert on a non-URL-bearing variant.\n //\n // assurance-control: WILDO.ACCESS.LEAST_PRIVILEGE — a self-service surface\n // must not be a privilege-assignment or lifecycle-override surface.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n // Retention capability only — INTERNAL_CALL registers NO HTTP route. Required by\n // `retentionPolicy` because the impersonalize writer scrubs in place through\n // `updateManyAsSystem`. A user bulk-updating rows through the self door would be\n // nonsensical AND dangerous, so the only caller is the trusted system writer.\n //\n // ⚠️ INTERNAL_CALL, *not* REPOSITORY_ONLY. Both are route-less, but the three retention\n // primitives (`updateManyAsSystem`, `readRetainedAsSystem`, `listRetainedAsSystem`) resolve\n // through `getServiceOperationPathDefault`, which matches only INTERNAL_CALL / API_CALL /\n // API_CALL_WITH_CALLBACK — REPOSITORY_ONLY is excluded there and served by the separate\n // `getRepositoryOperationPathDefault` transport. A REPOSITORY_ONLY variant would satisfy the\n // factory's boot guard and then FAIL TO RESOLVE when an erasure actually runs. `roles` is inert\n // on a non-URL-bearing variant; the real gate is the derived `systemAccessPolicy` grant.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n }\n ],\n },\n\n // Profile / preferences writes ride the dedicated `USER_SELF_PROFILES` and\n // `USER_SELF_PREFERENCES` resources — the `UPDATE_PROFILE` / `UPDATE_PREFERENCES` verbs were\n // removed on 2026-08-01 (they declared another resource's schema, so they answered 200 having\n // persisted nothing). Self-service account DELETION was removed the same day: erasure is a\n // system-level API with no route, and a hard delete contradicted the `retentionPolicy` above.\n // Both removals are explained in the enum comment.\n [UserSelf_Operations.DEACTIVATE_ACCOUNT]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // v1: app-only, high risk - affects access\n riskLevel: ResourceOperationRiskLevel.HIGH,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // Implemented by the shared status-transition factory (ACTIVE → INACTIVE). INACTIVE, not\n // SUSPENDED: the distinction is the point — SUSPENDED is imposed and only an admin lifts\n // it, while INACTIVE is chosen and the user lifts it themselves via REACTIVATE_ACCOUNT.\n // NO `reactivationDate`. It was declared here and persisted to\n // `User.scheduledReactivationAt`, but nothing could ever honour it: the reactivation sweep\n // dispatches each resource's own lifecycle verb, and the only verb that lifts `INACTIVE`\n // is REACTIVATE_ACCOUNT below — self-scoped and `APP_USER`-gated, so a system principal\n // cannot address another person's row through it.\n //\n // The two ways to make it work were both worse than the gap. Widening\n // `users | unsuspend_user` to accept `INACTIVE` merges an IMPOSED suspension with a CHOSEN\n // deactivation into one verb — two states whose whole distinction is who may lift them.\n // And `admitsCrossSubjectUserAdministration` (the framework's per-variant \"this verb\n // administers another person\" opt-in) relaxes WHOSE row may be addressed but never WHO may\n // call, so putting it on an `APP_USER` verb would let any authenticated user reactivate\n // anyone's account.\n //\n // Minting a new admin-tier reactivation verb purely to give the sweep a door would\n // manufacture a routed surface nobody asked for — the exact pattern this workstream\n // removed six times over.\n //\n // CORRECTED 2026-09-08 (#430). This paragraph used to end \"Voluntary deactivation is\n // reversible by its subject at any time through REACTIVATE_ACCOUNT, so a scheduled\n // auto-return was a convenience, not a promise\". That is FALSE, and it was load-bearing:\n // it is the stated reason the auto-return was rejected. REACTIVATE_ACCOUNT needs a\n // SESSION, and `_enforceUserStatus` (authentication-orchestrator.backend.service.ts:709-716)\n // refuses every non-ACTIVE status at sign-in — so a self-deactivated person cannot reach\n // the verb that would reverse it.\n //\n // RESOLVED, and the answer is that reversal is an ADMINISTRATIVE act: `users |\n // reactivate_user` (INACTIVE → ACTIVE, `APP_ADMIN_SUPER_ADMIN`, mandatory `reason`,\n // audited) is the door. So deactivation is NOT reversible by its subject, and the\n // operation's own SPECIFICATION says so — that is where the words a person reads come\n // from (`.claude/rules/display-text-comes-from-i18n.md`: display text is authored in the\n // spec and generated into the label tree, never invented at the call site).\n //\n // The two alternatives rejected above are still rejected for the reasons given, which is\n // why they are kept: widening `unsuspend_user` conflates an imposed suspension with a\n // chosen departure, and `admitsCrossSubjectUserAdministration` on an `APP_USER` verb\n // would let any authenticated user reactivate anyone. The third — admitting INACTIVE at\n // sign-in with a session scoped to one verb — was rejected on #430 for widening what a\n // sign-in returns.\n //\n // Note the ADMIN time-boxing is unaffected and IS honoured: `users | suspend_user` takes\n // `suspensionDuration` and the hourly sweep lifts it, because `unsuspend_user` is a door a\n // system principal can dispatch. That is the case that actually matters — an operator who\n // said \"seven days\" must get seven days.\n requestDto: z.object({\n reason: z.string().max(500).optional().describe('Why you are deactivating your account, if you want to say. Recorded on the audit trail, not on the account.'),\n }),\n enabledCondition: ({ currentObject }) => {\n return currentObject.status === UserStatus.ACTIVE;\n }\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.EMAIL,\n // Delivered even to a person who switched email notifications off (#409). An account\n // lifecycle change is the alert that matters most precisely when the account holder did\n // NOT perform it, and this email is how they find out. A preference about routine\n // notifications must not be able to silence it.\n alwaysDeliver: true,\n }\n ]\n },\n\n [UserSelf_Operations.REACTIVATE_ACCOUNT]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // v1: app-only, medium risk\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // Self-service reactivation FORCES the one transition it names. Omitting\n // `requestDto` would auto-derive the FULL user update DTO — which on this resource\n // is `{status, appRoles, userTypes}` — so an end-user-facing verb would accept its\n // own `appRoles` and `userTypes`, with no ceiling gate anywhere on the path\n // (`assertRequestedRolesWithinCallerCeiling` is not called here). Narrowing to an\n // empty contract removes the role surface entirely, which is why this needs no\n // ceiling call.\n // assurance-control: WILDO.ACCESS.LEAST_PRIVILEGE — a self-service verb must not be a\n // role-assignment surface.\n requestDto: z.object({}),\n // The transition itself is implemented by the SHARED status-transition factory, like its\n // inverse DEACTIVATE_ACCOUNT above — not by a `basicPrefixOperation` here.\n //\n // It used to be the hook, and the asymmetry cost three things: the pending\n // `scheduledReactivationAt` was never cleared (leaving a date on an ACTIVE row that no\n // longer described anything), no transition audit row was emitted (so the self-service\n // pair was half-trailed — the departure recorded, the return not), and the\n // administrative-continuity floors did not run. Harmless individually, but it made the\n // one lifecycle verb in the family that bypassed the shared authority the one nobody\n // would think to check.\n //\n // The factory's registration declares `authoritativeFields: ['status',\n // 'scheduledReactivationAt']`, which is what carries the patch past the repository's\n // strict re-parse — the protection the hook's own declaration used to provide.\n enabledCondition: ({ currentObject }) => {\n return currentObject.status === UserStatus.INACTIVE;\n }\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.EMAIL,\n // Delivered even to a person who switched email notifications off (#409). An account\n // lifecycle change is the alert that matters most precisely when the account holder did\n // NOT perform it, and this email is how they find out. A preference about routine\n // notifications must not be able to silence it.\n alwaysDeliver: true,\n }\n ]\n }\n },\n});\n"]}
1
+ {"version":3,"file":"user-self.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../../src/users/user-self.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * User Self Shared Resource Configuration\n *\n * Resource configuration for user self-management operations.\n * Handles profile management, preferences, and personal data operations.\n */\n\nimport { z } from 'zod';\nimport { UserSchema, UserStatus } from './users.shared.schemas';\nimport { CoreResourceOperation } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationRiskLevel, ResourceRelationship } from '../resources/resources.shared.schemas';\nimport { CoreResourceType, coreResourceShared_FieldIdentifier } from '../resources/resources.shared.core.definitions';\nimport { ResourceOperationVariantType } from '../resources/resources.shared.schemas';\nimport { CoreUserNotificationTarget, CoreUserNotificationChannel } from '../notifications/notifications.shared.schemas';\n\nimport { createResourceConfiguration_Initialization } from '../resources/resources-config.shared.factory';\nimport { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';\n\nimport { CORE_APP_ROLES } from '../security/authorizations/roles.shared.schemas';\nimport { ResourceSystemAccessMode } from '../resources/resources-config.shared.schemas';\nimport { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';\n\n// Custom operations enum for user self management\n//\n// PASSWORD CHANGE IS NOT A RESOURCE OPERATION — IT IS AN AUTH ROUTE. `CHANGE_PASSWORD` was\n// declared here as an `APP_USER`-gated `riskLevel: HIGH` operation taking\n// `{ currentPassword, newPassword, confirmPassword }`, and was removed on 2026-08-01: it was\n// ROUTED but never implemented, so the request fell through to the generic core UPDATE, which\n// persists only fields the resource schema declares. A password verifier is not one of them\n// (credentials are a separate store), so every call answered **HTTP 200 having changed nothing**\n// — the caller is told their password rotated while the old one still works.\n//\n// The real implementation already exists and is the ONLY correct home for it:\n// `POST /auth/password/change` → `AuthMethodManagementBackendService.changePassword`, which\n// verifies the current-password proof, applies the per-user-type password policy, hashes,\n// invalidates every refresh token for the user, and writes a `USER_PASSWORD_CHANGED` audit\n// record. It is rate-limited (5/min/IP) and parses its body with `z.strictObject` so an\n// identity field smuggled into the payload is rejected loudly rather than silently ignored.\n// The frontend already calls exactly that route (`AppPage_SecuritySettings` →\n// `getManualCallsHttpClient().passwordChange(...)`).\n//\n// Do NOT re-declare this as a resource operation. Beyond duplicating a solved problem, it would\n// route a plaintext credential through the generic resource-write pipeline (DTO parse, repository\n// projection, notification fan-out) that the auth route deliberately bypasses.\n// See the 2026-08-01 routed-but-unimplemented operation sweep (#1275).\n//\n// NOR ARE PROFILE / PREFERENCES WRITES — THEY BELONG TO THEIR OWN RESOURCES. `UPDATE_PROFILE` and\n// `UPDATE_PREFERENCES` were removed on 2026-08-01. Both ran `resourceOperationLike: UPDATE` against\n// THIS resource — whose `mainSchema` is the USER — while declaring the request DTO of a DIFFERENT\n// resource (`UserProfileSchema.partial()` / `UserPreferencesSchema.partial()`). A core UPDATE writes\n// only its own resource's row, so every declared field was dropped; the single intersecting key was\n// `_id`, which `ResourceOperationsHelper.cleanInputData` force-deletes before validation. The write\n// was therefore empty and the route answered **HTTP 200 having persisted nothing**.\n//\n// The persisted documents already have dedicated self-scoped resources, and they are already the\n// wired path: `USER_SELF_PROFILES` exposes READ/CREATE/UPDATE over its own `mainSchema`, while\n// `USER_SELF_PREFERENCES` exposes READ/UPDATE plus its selective reset operation over the eagerly\n// seeded preferences row. Both are embedded as child resources of this one in the frontend preset,\n// carry their own resource specifications, and — for preferences — are the MCP-exposed read/update\n// tools.\n// This resource's own specification already directed engineers there for \"the persisted documents\".\n//\n// Do NOT re-declare either verb here. A single `user_self`-rooted write across child resources\n// cannot be a core UPDATE at all; it would need a custom multi-resource implementation declaring\n// `transactionParticipants` — new machinery duplicating a path that already exists. Route clients\n// to `userSelfProfiles` / `userSelfPreferences` instead.\n//\n// NOR IS SELF-SERVICE ACCOUNT DELETION — DATA-SUBJECT ERASURE IS A SYSTEM-LEVEL API WITH NO ROUTE.\n// `DELETE_ACCOUNT` was removed on 2026-08-01. It was an `APP_USER`-gated `riskLevel: CRITICAL`\n// operation taking `{ password, reason }` and declaring a scheduled-deletion\n// `customResponseDto: { scheduledDeletionDate, recoveryPeriodDays, dataExportUrl }`. It was broken\n// in four independent ways, each verified against the built configuration:\n//\n// - **The password was never verified.** Neither declared field is a persisted `UserSchema` path\n// and no custom implementation was bound to the operation path, so the built `repositoryDto`\n// was EMPTY: the controller strict-parsed the body, the repository re-parsed it, and both\n// fields were discarded. A UI collecting the password as a confirmation gate was providing\n// false assurance.\n// - **It could never answer successfully.** `transformOutput` skips default-envelope composition\n// for an op declaring a `customResponseDto` and validates the raw service output against it.\n// A core DELETE returns the deleted `_id` as a bare string, so every call threw\n// `service_resource_transformation_failed` → HTTP 500. Retries too: a second call returns `''`,\n// which is not `null`, so it fails the same parse.\n// - **Its destructive effect was NONDETERMINISTIC.** `resourceOperationLike: DELETE` reaches\n// `_doDelete` through the repository's operations map (which holds custom ops), bypassing the\n// `coreOperations` gate this config never opened — and fires `onParentDelete`. Neither\n// `USER_SELF_PROFILES` nor `USER_SELF_PREFERENCES` declares a DELETE, so a user WITH either row\n// hit `ErrorType.CONFIGURATION` inside the delete transaction and was rolled back, while a user\n// with NEITHER row was destroyed. Same 500, opposite persistence outcomes.\n// - **It contradicted this resource's own retention contract.** `retentionPolicy` below declares\n// `RETAIN_AND_IMPERSONALIZE`: user rows are RETAINED and scrubbed in place, never hard-deleted.\n//\n// The erasure capability already exists and is the only correct home: `eraseSubjectAsSystem` /\n// `eraseSubjectInPlace` walk every dependent edge, derive delete-vs-retain from each edge's own\n// `onParentDelete` declaration, fail closed on unclassified edges, and return a\n// `SubjectErasureReport`. Like the four export/portability verbs removed the same day, they\n// **deliberately ship with NO ROUTE** — data-subject rights are a system-level API, not a\n// self-service HTTP verb. `dataExportUrl` compounded this: it named the portability artifact that\n// removal established does not exist.\n//\n// Do NOT re-declare this as a resource operation. Voluntary self-service closure is\n// `DEACTIVATE_ACCOUNT` below; actual erasure runs through the compliance capability. If a product\n// ever needs a user-initiated erasure REQUEST, it is a scheduling verb over a persisted\n// request state (with its own cancel path and a batch that calls `eraseSubjectAsSystem`) — not a\n// routed DELETE, and not something the generic core delete can express.\n// See the 2026-08-01 routed-but-unimplemented operation sweep (#1275).\n//\n// assurance-control: WILDO.DATA.SECURE_LIFECYCLE — a destructive identity operation\n// must verify the principal and leave evidence; erasure must honour the declared retention mode.\nexport enum UserSelf_Operations {\n DEACTIVATE_ACCOUNT = 'deactivate_account', // Temporarily deactivate account\n REACTIVATE_ACCOUNT = 'reactivate_account', // Reactivate account\n}\n\ntype UserSelfCoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST\n | CoreResourceOperation.UPDATE\n | CoreResourceOperation.UPDATE_MANY;\n\n/*\nUser Self Resource Configuration Factory\n*/\nexport const userSelfResourceConfiguration_InitializationFactory = (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof UserSelf_Operations,\n UserSelfCoreOperations,\n typeof UserSchema\n>({\n mainSchema: UserSchema,\n resourceIdentifier: CoreResourceType.USER_SELF,\n resourceFieldIdentifier: coreResourceShared_FieldIdentifier[CoreResourceType.USER_SELF],\n resourceRelationships: resourcesRelationships,\n isSystemResource: true, // Self-scoped\n\n /**\n * `/user-self/{userId}` names the CALLER. Declared EXPLICITLY even though `true` is the default,\n * because the sibling `USERS` configuration — over the SAME collection, with the SAME\n * `resourceFieldIdentifier` — declares `false`, and a reader comparing the two must be able to see\n * that the difference is intentional rather than an omission.\n *\n * This is the value that keeps the horizontal-IDOR refusal alive: user A addressing user B's\n * self row is refused `403 authorization_user_id_mismatch` by the identity-coherence guard. Pinned\n * by `external-access-auth.e2e.ts` (M4) and `users-administration.e2e.ts` (U-11). Flipping this to\n * `false` would open that hole silently — nothing downstream would catch it, because the addressed\n * id still reaches the contextual filter and would scope the read to B.\n */\n primaryKeyIdentifiesInitiator: true,\n\n /**\n * ⚠️ MUST MIRROR `USERS`. This config and `USERS` are two doors onto the SAME rows: they share\n * `UserSchema` above and, per `getCollectionNameForResource` in the zod→mongoose convertor,\n * `USER_SELF` builds a SEPARATE Mongoose model over the `USERS` COLLECTION.\n *\n * Retention governance is per-resource-config, so a `USERS`-only opt-in would leave two holes on\n * these shared rows:\n * - an ERASED user's row would stay READABLE and UPDATABLE through this door, whose READ/UPDATE\n * are open to `APP_USER` and would carry neither the retention hide filter nor the freeze;\n * - this model would emit a PLAIN unique index on `email` next to the `USERS` model's\n * retention-scoped one, so the SECOND erased user would collide (E11000) on the shared mask\n * address and abort the erasure.\n *\n * Declaring the same mode makes both models inject the same marker and emit the identical partial\n * index, so the collection has one coherent retention contract. Change the two configs together.\n * The scrub treatment needs no restating — it lives on the shared `UserSchema`.\n */\n retentionPolicy: {\n mode: ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE,\n },\n\n /**\n * Same subject as `USERS` over the same collection — the self-service door onto the identity row.\n * Mirrors that config's `SELF_PRINCIPAL` declaration; the two must be changed together.\n */\n dataSubjectPolicy: { kind: ResourceDataSubjectKind.SELF_PRINCIPAL },\n\n /**\n * Subject-export disclosure. The self-service export subject. The identity row is what the user signed up with.\n */\n systemAccessPolicy: { exportSubject: ResourceSystemAccessMode.ALLOWED },\n\n /**\n * Subject-export disclosure. The self-service export subject. The identity row is what the user signed up with.\n */\n portabilityPolicy: { defaultProvenance: DataPortabilityProvenance.SUBJECT_PROVIDED },\n\n coreOperations: [\n CoreResourceOperation.READ,\n // LIST + UPDATE_MANY exist for the retention capability ONLY, as INTERNAL_CALL variants that\n // register no route: `retentionPolicy` requires UPDATE_MANY (the in-place scrub via\n // `updateManyAsSystem`) plus READ + LIST (the audited see-through read of retained rows). There\n // is deliberately no HTTP \"list my selves\" — see the variants below.\n CoreResourceOperation.LIST,\n CoreResourceOperation.UPDATE,\n CoreResourceOperation.UPDATE_MANY,\n ],\n\n customOperation: UserSelf_Operations,\n\n\n operationsConfiguration: {\n [CoreResourceOperation.READ]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // v1: app-only, user reading their own data\n riskLevel: ResourceOperationRiskLevel.LOW,\n // Default variant returns basic User data only\n }\n ]\n },\n\n [CoreResourceOperation.LIST]: {\n variants: [\n {\n // Retention capability only — INTERNAL_CALL registers NO HTTP route. A user-facing\n // \"list my selves\" would be meaningless (this resource is addressed as the caller's own\n // row); the op exists solely so `listRetainedAsSystem` has a read path through which a\n // compliance auditor can see-through to retained rows on this collection.\n //\n // ⚠️ INTERNAL_CALL, *not* REPOSITORY_ONLY — see the UPDATE_MANY note below for why the\n // distinction is load-bearing. `roles` is inert on a non-URL-bearing variant.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.LOW,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE]: {\n variants: [\n {\n // ⚠️ INTERNAL_CALL — registers NO HTTP route. This was an `API_CALL` open to\n // `APP_USER` with an auto-derived request DTO, and on THIS resource the auto-derived\n // user update DTO is `{status, appRoles, userTypes}`: every writable field on the\n // `USER_SELF` row is server-owned. `email` is `.excludeFromUpdate()` and the editable\n // self data (names, avatar, bio, phone / notification + UI preferences) lives on the\n // `USER_SELF_PROFILES` and `USER_SELF_PREFERENCES` child resources, which is where the\n // UI actually writes it. So the route offered a self-service caller nothing legitimate\n // and three things it must never set:\n //\n // - `appRoles` — the app-level authorization axis. No ceiling gate exists on this\n // path (`assertRequestedRolesWithinCallerCeiling` is wired into org-member CREATE,\n // org-unit-members, oauth-clients and api-keys only, and no custom implementation is\n // registered for `USERS` / `USER_SELF`), so a plain authenticated user could grant\n // themselves any role, up to `APP_ADMIN_SUPER_ADMIN`.\n // - `userTypes` — selects auth policy and registration context.\n // - `status` — the account lifecycle axis, which belongs to the dedicated\n // DEACTIVATE_ACCOUNT / REACTIVATE_ACCOUNT transitions below (and to the admin\n // SUSPEND_USER / UNSUSPEND_USER verbs on the `USERS` door). A self-service caller\n // flipping it directly bypasses every state gate those verbs declare.\n //\n // Narrowing `requestDto` would have left the route in place answering an empty write;\n // removing the HTTP surface is the honest fix, because no caller wants it. Verified\n // before the change: the engine presets surface no `UPDATE` action for `USER_SELF`\n // (self edits go to the child resources), and no backend caller invokes `USER_SELF`\n // update — the trusted internal door for user rows is `USERS`.\n //\n // The operation itself is KEPT (not dropped from `coreOperations`) because the custom\n // self verbs borrow it through `resourceOperationLike: UPDATE`, and INTERNAL_CALL is\n // the resource's established idiom for a route-less operation — see `LIST` and\n // `UPDATE_MANY` above/below, and the note there on why INTERNAL_CALL rather than\n // REPOSITORY_ONLY. `roles` is inert on a non-URL-bearing variant.\n //\n // assurance-control: WILDO.ACCESS.LEAST_PRIVILEGE — a self-service surface\n // must not be a privilege-assignment or lifecycle-override surface.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.FRONT_END_SUCCESS,\n }\n ]\n },\n\n [CoreResourceOperation.UPDATE_MANY]: {\n variants: [\n {\n // Retention capability only — INTERNAL_CALL registers NO HTTP route. Required by\n // `retentionPolicy` because the impersonalize writer scrubs in place through\n // `updateManyAsSystem`. A user bulk-updating rows through the self door would be\n // nonsensical AND dangerous, so the only caller is the trusted system writer.\n //\n // ⚠️ INTERNAL_CALL, *not* REPOSITORY_ONLY. Both are route-less, but the three retention\n // primitives (`updateManyAsSystem`, `readRetainedAsSystem`, `listRetainedAsSystem`) resolve\n // through `getServiceOperationPathDefault`, which matches only INTERNAL_CALL / API_CALL /\n // API_CALL_WITH_CALLBACK — REPOSITORY_ONLY is excluded there and served by the separate\n // `getRepositoryOperationPathDefault` transport. A REPOSITORY_ONLY variant would satisfy the\n // factory's boot guard and then FAIL TO RESOLVE when an erasure actually runs. `roles` is inert\n // on a non-URL-bearing variant; the real gate is the derived `systemAccessPolicy` grant.\n variantType: ResourceOperationVariantType.INTERNAL_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER],\n riskLevel: ResourceOperationRiskLevel.CRITICAL,\n }\n ],\n },\n\n // Profile / preferences writes ride the dedicated `USER_SELF_PROFILES` and\n // `USER_SELF_PREFERENCES` resources — the `UPDATE_PROFILE` / `UPDATE_PREFERENCES` verbs were\n // removed on 2026-08-01 (they declared another resource's schema, so they answered 200 having\n // persisted nothing). Self-service account DELETION was removed the same day: erasure is a\n // system-level API with no route, and a hard delete contradicted the `retentionPolicy` above.\n // Both removals are explained in the enum comment.\n [UserSelf_Operations.DEACTIVATE_ACCOUNT]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // v1: app-only, high risk - affects access\n riskLevel: ResourceOperationRiskLevel.HIGH,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // Implemented by the shared status-transition factory (ACTIVE → INACTIVE). INACTIVE, not\n // SUSPENDED: the distinction is the point — SUSPENDED is imposed and only an admin lifts\n // it, while INACTIVE is chosen and the user lifts it themselves via REACTIVATE_ACCOUNT.\n // NO `reactivationDate`. It was declared here and persisted to\n // `User.scheduledReactivationAt`, but nothing could ever honour it: the reactivation sweep\n // dispatches each resource's own lifecycle verb, and the only verb that lifts `INACTIVE`\n // is REACTIVATE_ACCOUNT below — self-scoped and `APP_USER`-gated, so a system principal\n // cannot address another person's row through it.\n //\n // The two ways to make it work were both worse than the gap. Widening\n // `users | unsuspend_user` to accept `INACTIVE` merges an IMPOSED suspension with a CHOSEN\n // deactivation into one verb — two states whose whole distinction is who may lift them.\n // And `admitsCrossSubjectUserAdministration` (the framework's per-variant \"this verb\n // administers another person\" opt-in) relaxes WHOSE row may be addressed but never WHO may\n // call, so putting it on an `APP_USER` verb would let any authenticated user reactivate\n // anyone's account.\n //\n // Minting a new admin-tier reactivation verb purely to give the sweep a door would\n // manufacture a routed surface nobody asked for — the exact pattern this workstream\n // removed six times over.\n //\n // CORRECTED 2026-09-08 (#430). This paragraph used to end \"Voluntary deactivation is\n // reversible by its subject at any time through REACTIVATE_ACCOUNT, so a scheduled\n // auto-return was a convenience, not a promise\". That is FALSE, and it was load-bearing:\n // it is the stated reason the auto-return was rejected. REACTIVATE_ACCOUNT needs a\n // SESSION, and `_enforceUserStatus` (authentication-orchestrator.backend.service.ts:709-716)\n // refuses every non-ACTIVE status at sign-in — so a self-deactivated person cannot reach\n // the verb that would reverse it.\n //\n // RESOLVED, and the answer is that reversal is an ADMINISTRATIVE act: `users |\n // reactivate_user` (INACTIVE → ACTIVE, `APP_ADMIN_SUPER_ADMIN`, mandatory `reason`,\n // audited) is the door. So deactivation is NOT reversible by its subject, and the\n // operation's own SPECIFICATION says so — that is where the words a person reads come\n // from (`.claude/rules/display-text-comes-from-i18n.md`: display text is authored in the\n // spec and generated into the label tree, never invented at the call site).\n //\n // The two alternatives rejected above are still rejected for the reasons given, which is\n // why they are kept: widening `unsuspend_user` conflates an imposed suspension with a\n // chosen departure, and `admitsCrossSubjectUserAdministration` on an `APP_USER` verb\n // would let any authenticated user reactivate anyone. The third — admitting INACTIVE at\n // sign-in with a session scoped to one verb — was rejected on #430 for widening what a\n // sign-in returns.\n //\n // Note the ADMIN time-boxing is unaffected and IS honoured: `users | suspend_user` takes\n // `suspensionDuration` and the hourly sweep lifts it, because `unsuspend_user` is a door a\n // system principal can dispatch. That is the case that actually matters — an operator who\n // said \"seven days\" must get seven days.\n requestDto: z.object({\n reason: z.string().max(500).optional().describe('Why you are deactivating your account, if you want to say. Recorded on the audit trail, not on the account.'),\n }),\n enabledCondition: ({ currentObject }) => {\n return currentObject.status === UserStatus.ACTIVE;\n }\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.EMAIL,\n // Delivered even to a person who switched email notifications off (#409). An account\n // lifecycle change is the alert that matters most precisely when the account holder did\n // NOT perform it, and this email is how they find out. A preference about routine\n // notifications must not be able to silence it.\n alwaysDeliver: true,\n }\n ]\n },\n\n [UserSelf_Operations.REACTIVATE_ACCOUNT]: {\n variants: [\n {\n variantType: ResourceOperationVariantType.API_CALL,\n isDefault: true,\n roles: [CORE_APP_ROLES.APP_USER], // v1: app-only, medium risk\n riskLevel: ResourceOperationRiskLevel.MEDIUM,\n resourceOperationLike: CoreResourceOperation.UPDATE,\n // Self-service reactivation FORCES the one transition it names. Omitting\n // `requestDto` would auto-derive the FULL user update DTO — which on this resource\n // is `{status, appRoles, userTypes}` — so an end-user-facing verb would accept its\n // own `appRoles` and `userTypes`, with no ceiling gate anywhere on the path\n // (`assertRequestedRolesWithinCallerCeiling` is not called here). Narrowing to an\n // empty contract removes the role surface entirely, which is why this needs no\n // ceiling call.\n // assurance-control: WILDO.ACCESS.LEAST_PRIVILEGE — a self-service verb must not be a\n // role-assignment surface.\n requestDto: z.object({}),\n // The transition itself is implemented by the SHARED status-transition factory, like its\n // inverse DEACTIVATE_ACCOUNT above — not by a `basicPrefixOperation` here.\n //\n // It used to be the hook, and the asymmetry cost three things: the pending\n // `scheduledReactivationAt` was never cleared (leaving a date on an ACTIVE row that no\n // longer described anything), no transition audit row was emitted (so the self-service\n // pair was half-trailed — the departure recorded, the return not), and the\n // administrative-continuity floors did not run. Harmless individually, but it made the\n // one lifecycle verb in the family that bypassed the shared authority the one nobody\n // would think to check.\n //\n // The factory's registration declares `authoritativeFields: ['status',\n // 'scheduledReactivationAt']`, which is what carries the patch past the repository's\n // strict re-parse — the protection the hook's own declaration used to provide.\n enabledCondition: ({ currentObject }) => {\n return currentObject.status === UserStatus.INACTIVE;\n }\n }\n ],\n userNotifications: [\n {\n target: CoreUserNotificationTarget.USER_SELF,\n channel: CoreUserNotificationChannel.EMAIL,\n // Delivered even to a person who switched email notifications off (#409). An account\n // lifecycle change is the alert that matters most precisely when the account holder did\n // NOT perform it, and this email is how they find out. A preference about routine\n // notifications must not be able to silence it.\n alwaysDeliver: true,\n }\n ]\n }\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"users.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/users/users.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,UAAU,EAEX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAoD,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAS/H,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AA6JjF,oBAAY,gBAAgB;IAC1B,YAAY,iBAAiB,CAAE,2BAA2B;IAC1D,YAAY,iBAAiB,CAAE,2BAA2B;IAC1D,YAAY,iBAAiB,CAAE,uBAAuB;IACtD,cAAc,mBAAmB,CAAE,yBAAyB;IAC5D,eAAe,oBAAoB,CAAE,4DAA4D;IACjG,oBAAoB,yBAAyB,CAAE,uBAAuB;IACtE;;;;;;;;;;;;;OAaG;IACH,aAAa,kBAAkB;CAChC;AAED,KAAK,mBAAmB,GACpB,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,WAAW,GACjC,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,gDAAgD,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;kBAkqB7G,CAAC"}
1
+ {"version":3,"file":"users.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/users/users.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,UAAU,EAEX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAoD,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAS/H,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AA6JjF,oBAAY,gBAAgB;IAC1B,YAAY,iBAAiB,CAAE,2BAA2B;IAC1D,YAAY,iBAAiB,CAAE,2BAA2B;IAC1D,YAAY,iBAAiB,CAAE,uBAAuB;IACtD,cAAc,mBAAmB,CAAE,yBAAyB;IAC5D,eAAe,oBAAoB,CAAE,4DAA4D;IACjG,oBAAoB,yBAAyB,CAAE,uBAAuB;IACtE;;;;;;;;;;;;;OAaG;IACH,aAAa,kBAAkB;CAChC;AAED,KAAK,mBAAmB,GACpB,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,WAAW,GACjC,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,gDAAgD,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;kBAkqB7G,CAAC"}