@strapi/admin 5.56.0 → 5.58.0

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 (465) hide show
  1. package/dist/admin/admin/src/components/Filters.js +1 -1
  2. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  3. package/dist/admin/admin/src/components/Filters.mjs +1 -1
  4. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
  6. package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
  8. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -2
  10. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  11. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -2
  12. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MediaLibraryBanner.js +38 -2
  14. package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -1
  15. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +18 -2
  16. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/RelativeTime.js +9 -0
  18. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  19. package/dist/admin/admin/src/components/RelativeTime.mjs +10 -1
  20. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/TopBanners.js +52 -0
  22. package/dist/admin/admin/src/components/TopBanners.js.map +1 -0
  23. package/dist/admin/admin/src/components/TopBanners.mjs +30 -0
  24. package/dist/admin/admin/src/components/TopBanners.mjs.map +1 -0
  25. package/dist/admin/admin/src/constants.js +14 -0
  26. package/dist/admin/admin/src/constants.js.map +1 -1
  27. package/dist/admin/admin/src/constants.mjs +14 -0
  28. package/dist/admin/admin/src/constants.mjs.map +1 -1
  29. package/dist/admin/admin/src/features/Tracking.js +28 -8
  30. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  31. package/dist/admin/admin/src/features/Tracking.mjs +29 -10
  32. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  33. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
  34. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  35. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
  36. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  37. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
  38. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
  39. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
  40. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
  41. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +6 -12
  42. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
  44. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
  46. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  47. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
  48. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  49. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +6 -56
  50. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  51. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +6 -56
  52. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  53. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
  54. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
  55. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
  56. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +1 -0
  57. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
  58. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
  59. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
  60. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
  61. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
  62. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
  63. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
  64. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
  65. package/dist/admin/admin/src/services/admin.js +11 -1
  66. package/dist/admin/admin/src/services/admin.js.map +1 -1
  67. package/dist/admin/admin/src/services/admin.mjs +11 -2
  68. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  69. package/dist/admin/admin/src/translations/en.json.js +76 -4
  70. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  71. package/dist/admin/admin/src/translations/en.json.mjs +76 -4
  72. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  73. package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
  74. package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
  75. package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
  76. package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
  77. package/dist/admin/admin/src/utils/getFetchClient.js +27 -3
  78. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  79. package/dist/admin/admin/src/utils/getFetchClient.mjs +26 -3
  80. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  81. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
  82. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  83. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +53 -23
  84. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  85. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
  86. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
  87. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
  88. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
  89. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
  90. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
  91. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
  92. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
  93. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +8 -1
  94. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  95. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +8 -1
  96. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  97. package/dist/admin/index.js +1 -0
  98. package/dist/admin/index.js.map +1 -1
  99. package/dist/admin/index.mjs +1 -1
  100. package/dist/admin/shared/utils/get-project-type.js +49 -0
  101. package/dist/admin/shared/utils/get-project-type.js.map +1 -0
  102. package/dist/admin/shared/utils/get-project-type.mjs +46 -0
  103. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
  104. package/dist/admin/src/components/MediaLibraryBanner.d.ts +10 -1
  105. package/dist/admin/src/components/TopBanners.d.ts +8 -0
  106. package/dist/admin/src/constants.d.ts +10 -0
  107. package/dist/admin/src/features/Tracking.d.ts +12 -1
  108. package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
  109. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
  110. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
  111. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
  112. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
  113. package/dist/admin/src/services/admin.d.ts +2 -2
  114. package/dist/admin/src/types/permissions.d.ts +1 -0
  115. package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
  116. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
  117. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
  118. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
  119. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +7 -0
  120. package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
  121. package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
  122. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
  123. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  124. package/dist/ee/server/src/controllers/admin.d.ts +36 -10
  125. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  126. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  127. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +8 -2
  128. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
  129. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -1
  130. package/dist/ee/server/src/controllers/index.d.ts +36 -10
  131. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  132. package/dist/ee/server/src/controllers/user.d.ts.map +1 -1
  133. package/dist/ee/server/src/index.d.ts +40 -11
  134. package/dist/ee/server/src/index.d.ts.map +1 -1
  135. package/dist/ee/server/src/services/index.d.ts +4 -1
  136. package/dist/ee/server/src/services/index.d.ts.map +1 -1
  137. package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
  138. package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
  139. package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
  140. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  141. package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
  142. package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
  143. package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
  144. package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
  145. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
  146. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  147. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
  148. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  149. package/dist/server/ee/server/src/controllers/admin.js +79 -7
  150. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  151. package/dist/server/ee/server/src/controllers/admin.mjs +79 -7
  152. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  153. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
  154. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  155. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
  156. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  157. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js +2 -2
  158. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
  159. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +2 -2
  160. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
  161. package/dist/server/ee/server/src/controllers/authentication.js +11 -11
  162. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  163. package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
  164. package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
  165. package/dist/server/ee/server/src/controllers/user.js +7 -8
  166. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  167. package/dist/server/ee/server/src/controllers/user.mjs +8 -9
  168. package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
  169. package/dist/server/ee/server/src/index.js +2 -0
  170. package/dist/server/ee/server/src/index.js.map +1 -1
  171. package/dist/server/ee/server/src/index.mjs +2 -0
  172. package/dist/server/ee/server/src/index.mjs.map +1 -1
  173. package/dist/server/ee/server/src/services/metrics.js +9 -7
  174. package/dist/server/ee/server/src/services/metrics.js.map +1 -1
  175. package/dist/server/ee/server/src/services/metrics.mjs +9 -7
  176. package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
  177. package/dist/server/ee/server/src/services/persist-tables.js +3 -4
  178. package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
  179. package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
  180. package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
  181. package/dist/server/ee/server/src/services/role.js +2 -2
  182. package/dist/server/ee/server/src/services/role.js.map +1 -1
  183. package/dist/server/ee/server/src/services/role.mjs +1 -1
  184. package/dist/server/ee/server/src/services/role.mjs.map +1 -1
  185. package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
  186. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  187. package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
  188. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  189. package/dist/server/ee/server/src/services/user.js +1 -2
  190. package/dist/server/ee/server/src/services/user.js.map +1 -1
  191. package/dist/server/ee/server/src/services/user.mjs +2 -3
  192. package/dist/server/ee/server/src/services/user.mjs.map +1 -1
  193. package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
  194. package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
  195. package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
  196. package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
  197. package/dist/server/server/src/audit-logs/admin-users.js +3 -3
  198. package/dist/server/server/src/audit-logs/admin-users.js.map +1 -1
  199. package/dist/server/server/src/audit-logs/admin-users.mjs +2 -2
  200. package/dist/server/server/src/audit-logs/admin-users.mjs.map +1 -1
  201. package/dist/server/server/src/audit-logs/auth.js +72 -0
  202. package/dist/server/server/src/audit-logs/auth.js.map +1 -0
  203. package/dist/server/server/src/audit-logs/auth.mjs +67 -0
  204. package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
  205. package/dist/server/server/src/audit-logs/tokens.js +3 -3
  206. package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
  207. package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
  208. package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
  209. package/dist/server/server/src/audit-logs/webhooks.js +2 -2
  210. package/dist/server/server/src/audit-logs/webhooks.js.map +1 -1
  211. package/dist/server/server/src/audit-logs/webhooks.mjs +1 -1
  212. package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -1
  213. package/dist/server/server/src/bootstrap.js +6 -4
  214. package/dist/server/server/src/bootstrap.js.map +1 -1
  215. package/dist/server/server/src/bootstrap.mjs +6 -4
  216. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  217. package/dist/server/server/src/config/admin-actions.js +7 -0
  218. package/dist/server/server/src/config/admin-actions.js.map +1 -1
  219. package/dist/server/server/src/config/admin-actions.mjs +7 -0
  220. package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
  221. package/dist/server/server/src/controllers/admin-token.js +8 -8
  222. package/dist/server/server/src/controllers/admin-token.js.map +1 -1
  223. package/dist/server/server/src/controllers/admin-token.mjs +4 -4
  224. package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
  225. package/dist/server/server/src/controllers/admin.js +9 -5
  226. package/dist/server/server/src/controllers/admin.js.map +1 -1
  227. package/dist/server/server/src/controllers/admin.mjs +8 -4
  228. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  229. package/dist/server/server/src/controllers/api-token.js +8 -8
  230. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  231. package/dist/server/server/src/controllers/api-token.mjs +4 -4
  232. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  233. package/dist/server/server/src/controllers/authentication.js +34 -8
  234. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  235. package/dist/server/server/src/controllers/authentication.mjs +34 -8
  236. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  237. package/dist/server/server/src/controllers/formatters/conditions.js +2 -2
  238. package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
  239. package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
  240. package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
  241. package/dist/server/server/src/controllers/transfer/index.js +2 -2
  242. package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
  243. package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
  244. package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
  245. package/dist/server/server/src/controllers/transfer/token.js +8 -8
  246. package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
  247. package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
  248. package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
  249. package/dist/server/server/src/domain/action/index.js +18 -16
  250. package/dist/server/server/src/domain/action/index.js.map +1 -1
  251. package/dist/server/server/src/domain/action/index.mjs +16 -14
  252. package/dist/server/server/src/domain/action/index.mjs.map +1 -1
  253. package/dist/server/server/src/domain/action/provider.mjs +4 -4
  254. package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
  255. package/dist/server/server/src/domain/condition/index.js +7 -4
  256. package/dist/server/server/src/domain/condition/index.js.map +1 -1
  257. package/dist/server/server/src/domain/condition/index.mjs +7 -4
  258. package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
  259. package/dist/server/server/src/domain/permission/index.js +24 -15
  260. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  261. package/dist/server/server/src/domain/permission/index.mjs +21 -12
  262. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  263. package/dist/server/server/src/middlewares/rateLimit.js +5 -5
  264. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  265. package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
  266. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  267. package/dist/server/server/src/register.js +10 -0
  268. package/dist/server/server/src/register.js.map +1 -1
  269. package/dist/server/server/src/register.mjs +10 -0
  270. package/dist/server/server/src/register.mjs.map +1 -1
  271. package/dist/server/server/src/routes/admin.js +18 -0
  272. package/dist/server/server/src/routes/admin.js.map +1 -1
  273. package/dist/server/server/src/routes/admin.mjs +18 -0
  274. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  275. package/dist/server/server/src/services/action.js +1 -2
  276. package/dist/server/server/src/services/action.js.map +1 -1
  277. package/dist/server/server/src/services/action.mjs +1 -2
  278. package/dist/server/server/src/services/action.mjs.map +1 -1
  279. package/dist/server/server/src/services/api-token.js +61 -49
  280. package/dist/server/server/src/services/api-token.js.map +1 -1
  281. package/dist/server/server/src/services/api-token.mjs +53 -41
  282. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  283. package/dist/server/server/src/services/auth.js +4 -2
  284. package/dist/server/server/src/services/auth.js.map +1 -1
  285. package/dist/server/server/src/services/auth.mjs +4 -3
  286. package/dist/server/server/src/services/auth.mjs.map +1 -1
  287. package/dist/server/server/src/services/condition.js +2 -2
  288. package/dist/server/server/src/services/condition.js.map +1 -1
  289. package/dist/server/server/src/services/condition.mjs +1 -1
  290. package/dist/server/server/src/services/condition.mjs.map +1 -1
  291. package/dist/server/server/src/services/content-type.js +5 -4
  292. package/dist/server/server/src/services/content-type.js.map +1 -1
  293. package/dist/server/server/src/services/content-type.mjs +8 -7
  294. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  295. package/dist/server/server/src/services/debug-dump.js +173 -0
  296. package/dist/server/server/src/services/debug-dump.js.map +1 -0
  297. package/dist/server/server/src/services/debug-dump.mjs +166 -0
  298. package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
  299. package/dist/server/server/src/services/homepage.js +2 -1
  300. package/dist/server/server/src/services/homepage.js.map +1 -1
  301. package/dist/server/server/src/services/homepage.mjs +2 -1
  302. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  303. package/dist/server/server/src/services/index.js +3 -1
  304. package/dist/server/server/src/services/index.js.map +1 -1
  305. package/dist/server/server/src/services/index.mjs +3 -1
  306. package/dist/server/server/src/services/index.mjs.map +1 -1
  307. package/dist/server/server/src/services/passport/local-strategy.js +2 -2
  308. package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
  309. package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
  310. package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
  311. package/dist/server/server/src/services/passport.js +1 -2
  312. package/dist/server/server/src/services/passport.js.map +1 -1
  313. package/dist/server/server/src/services/passport.mjs +1 -2
  314. package/dist/server/server/src/services/passport.mjs.map +1 -1
  315. package/dist/server/server/src/services/permission/engine.js +4 -4
  316. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  317. package/dist/server/server/src/services/permission/engine.mjs +2 -2
  318. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  319. package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
  320. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  321. package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
  322. package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
  323. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
  324. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
  325. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
  326. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
  327. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
  328. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  329. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +44 -38
  330. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  331. package/dist/server/server/src/services/permission/permissions-manager/validate.js +30 -26
  332. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  333. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +28 -24
  334. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  335. package/dist/server/server/src/services/permission/queries.js +9 -9
  336. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  337. package/dist/server/server/src/services/permission/queries.mjs +9 -9
  338. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  339. package/dist/server/server/src/services/permission/rename-fields.js +118 -0
  340. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
  341. package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
  342. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
  343. package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
  344. package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
  345. package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
  346. package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
  347. package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
  348. package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
  349. package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
  350. package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
  351. package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
  352. package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
  353. package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
  354. package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
  355. package/dist/server/server/src/services/role.js +20 -19
  356. package/dist/server/server/src/services/role.js.map +1 -1
  357. package/dist/server/server/src/services/role.mjs +20 -19
  358. package/dist/server/server/src/services/role.mjs.map +1 -1
  359. package/dist/server/server/src/services/transfer/token.js +20 -16
  360. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  361. package/dist/server/server/src/services/transfer/token.mjs +14 -10
  362. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  363. package/dist/server/server/src/services/user.js +2 -3
  364. package/dist/server/server/src/services/user.js.map +1 -1
  365. package/dist/server/server/src/services/user.mjs +3 -4
  366. package/dist/server/server/src/services/user.mjs.map +1 -1
  367. package/dist/server/server/src/strategies/api-token-utils.js +2 -3
  368. package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
  369. package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
  370. package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
  371. package/dist/server/server/src/strategies/content-api-token.js +3 -3
  372. package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
  373. package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
  374. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
  375. package/dist/server/server/src/strategies/data-transfer.js +4 -4
  376. package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
  377. package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
  378. package/dist/server/server/src/strategies/data-transfer.mjs.map +1 -1
  379. package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
  380. package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
  381. package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
  382. package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
  383. package/dist/server/server/src/validation/common-validators.js +9 -10
  384. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  385. package/dist/server/server/src/validation/common-validators.mjs +13 -14
  386. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  387. package/dist/server/server/src/validation/user.js +1 -2
  388. package/dist/server/server/src/validation/user.js.map +1 -1
  389. package/dist/server/server/src/validation/user.mjs +1 -2
  390. package/dist/server/server/src/validation/user.mjs.map +1 -1
  391. package/dist/server/shared/utils/get-project-type.js +49 -0
  392. package/dist/server/shared/utils/get-project-type.js.map +1 -0
  393. package/dist/server/shared/utils/get-project-type.mjs +46 -0
  394. package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
  395. package/dist/server/src/audit-logs/auth.d.ts +72 -0
  396. package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
  397. package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
  398. package/dist/server/src/bootstrap.d.ts.map +1 -1
  399. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  400. package/dist/server/src/controllers/admin-token.d.ts.map +1 -1
  401. package/dist/server/src/controllers/admin.d.ts +3 -0
  402. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  403. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  404. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  405. package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
  406. package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
  407. package/dist/server/src/controllers/homepage.d.ts +1 -1
  408. package/dist/server/src/controllers/index.d.ts +4 -1
  409. package/dist/server/src/controllers/index.d.ts.map +1 -1
  410. package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
  411. package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
  412. package/dist/server/src/domain/action/index.d.ts +1 -0
  413. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  414. package/dist/server/src/domain/condition/index.d.ts +2 -2
  415. package/dist/server/src/domain/condition/index.d.ts.map +1 -1
  416. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  417. package/dist/server/src/index.d.ts +11 -3
  418. package/dist/server/src/index.d.ts.map +1 -1
  419. package/dist/server/src/middlewares/index.d.ts.map +1 -1
  420. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  421. package/dist/server/src/register.d.ts.map +1 -1
  422. package/dist/server/src/routes/admin.d.ts.map +1 -1
  423. package/dist/server/src/services/action.d.ts.map +1 -1
  424. package/dist/server/src/services/api-token.d.ts.map +1 -1
  425. package/dist/server/src/services/auth.d.ts +6 -0
  426. package/dist/server/src/services/auth.d.ts.map +1 -1
  427. package/dist/server/src/services/condition.d.ts.map +1 -1
  428. package/dist/server/src/services/content-type.d.ts.map +1 -1
  429. package/dist/server/src/services/debug-dump.d.ts +9 -0
  430. package/dist/server/src/services/debug-dump.d.ts.map +1 -0
  431. package/dist/server/src/services/homepage.d.ts +1 -1
  432. package/dist/server/src/services/homepage.d.ts.map +1 -1
  433. package/dist/server/src/services/index.d.ts +7 -2
  434. package/dist/server/src/services/index.d.ts.map +1 -1
  435. package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
  436. package/dist/server/src/services/passport.d.ts.map +1 -1
  437. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  438. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
  439. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  440. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  441. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  442. package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
  443. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
  444. package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
  445. package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
  446. package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
  447. package/dist/server/src/services/role.d.ts +1 -1
  448. package/dist/server/src/services/role.d.ts.map +1 -1
  449. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  450. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
  451. package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
  452. package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
  453. package/dist/server/src/validation/user.d.ts.map +1 -1
  454. package/dist/shared/contracts/admin.d.ts +106 -0
  455. package/dist/shared/contracts/admin.d.ts.map +1 -1
  456. package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
  457. package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
  458. package/dist/shared/utils/get-project-type.d.ts +37 -0
  459. package/dist/shared/utils/get-project-type.d.ts.map +1 -0
  460. package/package.json +10 -10
  461. package/dist/admin/admin/src/utils/getProjectType.js +0 -22
  462. package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
  463. package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
  464. package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
  465. package/dist/admin/src/utils/getProjectType.d.ts +0 -16
@@ -4,7 +4,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var utils = require('@strapi/utils');
6
6
  var _ = require('lodash');
7
- var fp = require('lodash/fp');
8
7
  var index$1 = require('../utils/index.js');
9
8
  var index = require('../domain/action/index.js');
10
9
  var checkFieldsAreCorrectlyNested = require('./common-functions/check-fields-are-correctly-nested.js');
@@ -53,10 +52,10 @@ const permissionsAreEquals = (a, b)=>a.action === b.action && (a.subject === b.s
53
52
  const checkNoDuplicatedPermissions = (permissions)=>!Array.isArray(permissions) || permissions.every((permA, i)=>permissions.slice(i + 1).every((permB)=>!permissionsAreEquals(permA, permB)));
54
53
  const checkNilFields = (action)=>function checkNilActionFields(fields) {
55
54
  // If the parent has no action field, then we ignore this test
56
- if (fp.isNil(action)) {
55
+ if (action == null) {
57
56
  return true;
58
57
  }
59
- return index.appliesToProperty('fields', action) || fp.isNil(fields);
58
+ return index.appliesToProperty('fields', action) || fields == null;
60
59
  };
61
60
  const fieldsPropertyValidation = (action)=>utils.yup.array().of(utils.yup.string()).nullable().test('field-nested', 'Fields format are incorrect (bad nesting).', checkFieldsAreCorrectlyNested).test('field-nested', 'Fields format are incorrect (duplicates).', checkFieldsDontHaveDuplicates).test('fields-restriction', // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder
62
61
  'The permission at ${path} must have fields set to null or undefined', // @ts-expect-error yup types
@@ -64,7 +63,7 @@ const fieldsPropertyValidation = (action)=>utils.yup.array().of(utils.yup.string
64
63
  const permission = utils.yup.object().shape({
65
64
  action: utils.yup.string().required().test('action-validity', 'action is not an existing permission action', function checkActionValidity(actionId) {
66
65
  // If the action field is Nil, ignore the test and let the required check handle the error
67
- if (fp.isNil(actionId)) {
66
+ if (actionId == null) {
68
67
  return true;
69
68
  }
70
69
  const action = getActionFromProvider(actionId);
@@ -77,10 +76,10 @@ const permission = utils.yup.object().shape({
77
76
  if (!action) {
78
77
  return true;
79
78
  }
80
- if (fp.isNil(action.subjects)) {
81
- return fp.isNil(subject);
79
+ if (action.subjects == null) {
80
+ return subject == null;
82
81
  }
83
- if (fp.isArray(action.subjects) && !fp.isNil(subject)) {
82
+ if (Array.isArray(action.subjects) && subject != null) {
84
83
  return action.subjects.includes(subject);
85
84
  }
86
85
  return false;
@@ -89,15 +88,15 @@ const permission = utils.yup.object().shape({
89
88
  'Invalid property set at ${path}', function checkPropertiesStructure(properties) {
90
89
  // @ts-expect-error yup types
91
90
  const action = getActionFromProvider(this.options.parent.action);
92
- const hasNoProperties = fp.isEmpty(properties) || fp.isNil(properties);
93
- if (!fp.has('options.applyToProperties', action)) {
91
+ const hasNoProperties = _.isEmpty(properties) || properties == null;
92
+ if (!_.has(action, 'options.applyToProperties')) {
94
93
  return hasNoProperties;
95
94
  }
96
95
  if (hasNoProperties) {
97
96
  return true;
98
97
  }
99
98
  const { applyToProperties } = action.options;
100
- if (!fp.isArray(applyToProperties)) {
99
+ if (!Array.isArray(applyToProperties)) {
101
100
  return false;
102
101
  }
103
102
  return Object.keys(properties).every((property)=>applyToProperties.includes(property));
@@ -1 +1 @@
1
- {"version":3,"file":"common-validators.js","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { isEmpty, has, isNil, isArray } from 'lodash/fp';\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('required-byte-size', '${path} must be less than 73 bytes', function checkByteSize(value) {\n if (!value) return true;\n\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function checkPluginName(value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function checkConditionNames(value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function checkNilActionFields(fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (isNil(action)) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || isNil(fields);\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test(\n 'action-validity',\n 'action is not an existing permission action',\n function checkActionValidity(actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (isNil(actionId)) {\n return true;\n }\n\n const action = getActionFromProvider(actionId);\n\n return action !== undefined && action !== null;\n }\n ),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test(\n 'subject-validity',\n 'Invalid subject submitted',\n function checkSubjectValidity(subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (isNil(action.subjects)) {\n return isNil(subject);\n }\n\n if (isArray(action.subjects) && !isNil(subject)) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }\n ),\n properties: yup\n .object()\n .test(\n 'properties-structure',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid property set at ${path}',\n function checkPropertiesStructure(properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || isNil(properties);\n\n if (!has('options.applyToProperties', action)) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n }\n )\n .test(\n 'fields-property',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid fields property at ${path}',\n async function checkFieldsProperty(properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["actionFields","actions","getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","checkByteSize","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","checkPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","of","checkConditionNames","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","checkNilActionFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","checkActionValidity","actionParameters","checkSubjectValidity","options","parent","subjects","properties","checkPropertiesStructure","hasNoProperties","isEmpty","has","applyToProperties","property","checkFieldsProperty","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions","arrayOfConditionNames"],"mappings":"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"}
1
+ {"version":3,"file":"common-validators.js","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _, { isEmpty, has } from 'lodash';\n\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('required-byte-size', '${path} must be less than 73 bytes', function checkByteSize(value) {\n if (!value) return true;\n\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function checkPluginName(value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function checkConditionNames(value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function checkNilActionFields(fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (action == null) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || fields == null;\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test(\n 'action-validity',\n 'action is not an existing permission action',\n function checkActionValidity(actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (actionId == null) {\n return true;\n }\n\n const action = getActionFromProvider(actionId);\n\n return action !== undefined && action !== null;\n }\n ),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test(\n 'subject-validity',\n 'Invalid subject submitted',\n function checkSubjectValidity(subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (action.subjects == null) {\n return subject == null;\n }\n\n if (Array.isArray(action.subjects) && subject != null) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }\n ),\n properties: yup\n .object()\n .test(\n 'properties-structure',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid property set at ${path}',\n function checkPropertiesStructure(properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || properties == null;\n\n if (!has(action, 'options.applyToProperties')) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!Array.isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n }\n )\n .test(\n 'fields-property',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid fields property at ${path}',\n async function checkFieldsProperty(properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["actionFields","actions","getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","checkByteSize","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","checkPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","of","checkConditionNames","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","checkNilActionFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","checkActionValidity","actionParameters","checkSubjectValidity","options","parent","subjects","properties","checkPropertiesStructure","hasNoProperties","isEmpty","has","applyToProperties","property","checkFieldsProperty","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions","arrayOfConditionNames"],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  import { yup } from '@strapi/utils';
2
- import ___default from 'lodash';
3
- import { isEmpty, isNil, has, isArray } from 'lodash/fp';
2
+ import ___default, { isEmpty, has } from 'lodash';
4
3
  import { getService } from '../utils/index.mjs';
5
- import actionDomain from '../domain/action/index.mjs';
4
+ import domain from '../domain/action/index.mjs';
6
5
  import checkFieldsAreCorrectlyNested from './common-functions/check-fields-are-correctly-nested.mjs';
7
6
  import checkFieldsDontHaveDuplicates from './common-functions/check-fields-dont-have-duplicates.mjs';
8
7
 
9
- const { actionFields } = actionDomain;
8
+ const { actionFields } = domain;
10
9
  const getActionFromProvider = (actionId)=>{
11
10
  return getService('permission').actionProvider.get(actionId);
12
11
  };
@@ -45,10 +44,10 @@ const permissionsAreEquals = (a, b)=>a.action === b.action && (a.subject === b.s
45
44
  const checkNoDuplicatedPermissions = (permissions)=>!Array.isArray(permissions) || permissions.every((permA, i)=>permissions.slice(i + 1).every((permB)=>!permissionsAreEquals(permA, permB)));
46
45
  const checkNilFields = (action)=>function checkNilActionFields(fields) {
47
46
  // If the parent has no action field, then we ignore this test
48
- if (isNil(action)) {
47
+ if (action == null) {
49
48
  return true;
50
49
  }
51
- return actionDomain.appliesToProperty('fields', action) || isNil(fields);
50
+ return domain.appliesToProperty('fields', action) || fields == null;
52
51
  };
53
52
  const fieldsPropertyValidation = (action)=>yup.array().of(yup.string()).nullable().test('field-nested', 'Fields format are incorrect (bad nesting).', checkFieldsAreCorrectlyNested).test('field-nested', 'Fields format are incorrect (duplicates).', checkFieldsDontHaveDuplicates).test('fields-restriction', // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder
54
53
  'The permission at ${path} must have fields set to null or undefined', // @ts-expect-error yup types
@@ -56,7 +55,7 @@ const fieldsPropertyValidation = (action)=>yup.array().of(yup.string()).nullable
56
55
  const permission = yup.object().shape({
57
56
  action: yup.string().required().test('action-validity', 'action is not an existing permission action', function checkActionValidity(actionId) {
58
57
  // If the action field is Nil, ignore the test and let the required check handle the error
59
- if (isNil(actionId)) {
58
+ if (actionId == null) {
60
59
  return true;
61
60
  }
62
61
  const action = getActionFromProvider(actionId);
@@ -69,10 +68,10 @@ const permission = yup.object().shape({
69
68
  if (!action) {
70
69
  return true;
71
70
  }
72
- if (isNil(action.subjects)) {
73
- return isNil(subject);
71
+ if (action.subjects == null) {
72
+ return subject == null;
74
73
  }
75
- if (isArray(action.subjects) && !isNil(subject)) {
74
+ if (Array.isArray(action.subjects) && subject != null) {
76
75
  return action.subjects.includes(subject);
77
76
  }
78
77
  return false;
@@ -81,15 +80,15 @@ const permission = yup.object().shape({
81
80
  'Invalid property set at ${path}', function checkPropertiesStructure(properties) {
82
81
  // @ts-expect-error yup types
83
82
  const action = getActionFromProvider(this.options.parent.action);
84
- const hasNoProperties = isEmpty(properties) || isNil(properties);
85
- if (!has('options.applyToProperties', action)) {
83
+ const hasNoProperties = isEmpty(properties) || properties == null;
84
+ if (!has(action, 'options.applyToProperties')) {
86
85
  return hasNoProperties;
87
86
  }
88
87
  if (hasNoProperties) {
89
88
  return true;
90
89
  }
91
90
  const { applyToProperties } = action.options;
92
- if (!isArray(applyToProperties)) {
91
+ if (!Array.isArray(applyToProperties)) {
93
92
  return false;
94
93
  }
95
94
  return Object.keys(properties).every((property)=>applyToProperties.includes(property));
@@ -100,7 +99,7 @@ const permission = yup.object().shape({
100
99
  if (!action || !properties) {
101
100
  return true;
102
101
  }
103
- if (!actionDomain.appliesToProperty('fields', action)) {
102
+ if (!domain.appliesToProperty('fields', action)) {
104
103
  return true;
105
104
  }
106
105
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"common-validators.mjs","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { isEmpty, has, isNil, isArray } from 'lodash/fp';\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('required-byte-size', '${path} must be less than 73 bytes', function checkByteSize(value) {\n if (!value) return true;\n\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function checkPluginName(value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function checkConditionNames(value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function checkNilActionFields(fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (isNil(action)) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || isNil(fields);\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test(\n 'action-validity',\n 'action is not an existing permission action',\n function checkActionValidity(actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (isNil(actionId)) {\n return true;\n }\n\n const action = getActionFromProvider(actionId);\n\n return action !== undefined && action !== null;\n }\n ),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test(\n 'subject-validity',\n 'Invalid subject submitted',\n function checkSubjectValidity(subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (isNil(action.subjects)) {\n return isNil(subject);\n }\n\n if (isArray(action.subjects) && !isNil(subject)) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }\n ),\n properties: yup\n .object()\n .test(\n 'properties-structure',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid property set at ${path}',\n function checkPropertiesStructure(properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || isNil(properties);\n\n if (!has('options.applyToProperties', action)) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n }\n )\n .test(\n 'fields-property',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid fields property at ${path}',\n async function checkFieldsProperty(properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["actionFields","actions","getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","checkByteSize","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","checkPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","of","checkConditionNames","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","checkNilActionFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","checkActionValidity","actionParameters","checkSubjectValidity","options","parent","subjects","properties","checkPropertiesStructure","hasNoProperties","isEmpty","has","applyToProperties","property","checkFieldsProperty","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions","arrayOfConditionNames"],"mappings":"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"}
1
+ {"version":3,"file":"common-validators.mjs","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _, { isEmpty, has } from 'lodash';\n\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('required-byte-size', '${path} must be less than 73 bytes', function checkByteSize(value) {\n if (!value) return true;\n\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function checkPluginName(value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function checkConditionNames(value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function checkNilActionFields(fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (action == null) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || fields == null;\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test(\n 'action-validity',\n 'action is not an existing permission action',\n function checkActionValidity(actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (actionId == null) {\n return true;\n }\n\n const action = getActionFromProvider(actionId);\n\n return action !== undefined && action !== null;\n }\n ),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test(\n 'subject-validity',\n 'Invalid subject submitted',\n function checkSubjectValidity(subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (action.subjects == null) {\n return subject == null;\n }\n\n if (Array.isArray(action.subjects) && subject != null) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }\n ),\n properties: yup\n .object()\n .test(\n 'properties-structure',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid property set at ${path}',\n function checkPropertiesStructure(properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || properties == null;\n\n if (!has(action, 'options.applyToProperties')) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!Array.isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n }\n )\n .test(\n 'fields-property',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n 'Invalid fields property at ${path}',\n async function checkFieldsProperty(properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["actionFields","actions","getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","checkByteSize","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","checkPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","of","checkConditionNames","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","checkNilActionFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","checkActionValidity","actionParameters","checkSubjectValidity","options","parent","subjects","properties","checkPropertiesStructure","hasNoProperties","isEmpty","has","applyToProperties","property","checkFieldsProperty","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions","arrayOfConditionNames"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
4
3
  var utils = require('@strapi/utils');
5
4
  var commonValidators = require('./common-validators.js');
6
5
 
@@ -17,7 +16,7 @@ const profileUpdateSchema = utils.yup.object().shape({
17
16
  lastname: commonValidators.default.lastname.nullable(),
18
17
  username: commonValidators.default.username.nullable(),
19
18
  password: commonValidators.default.password.notNull(),
20
- currentPassword: utils.yup.string().when('password', (password, schema)=>!fp.isUndefined(password) ? schema.required() : schema).notNull(),
19
+ currentPassword: utils.yup.string().when('password', (password, schema)=>password !== undefined ? schema.required() : schema).notNull(),
21
20
  preferedLanguage: utils.yup.string().nullable()
22
21
  }).noUnknown();
23
22
  const userUpdateSchema = utils.yup.object().shape({
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sources":["../../../../../server/src/validation/user.ts"],"sourcesContent":["import { isUndefined } from 'lodash/fp';\nimport { yup, validateYupSchema } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst userCreationSchema = yup\n .object()\n .shape({\n email: validators.email.required(),\n firstname: validators.firstname.required(),\n lastname: validators.lastname,\n roles: validators.roles.min(1),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst profileUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n currentPassword: yup\n .string()\n .when('password', (password: string, schema: any) =>\n !isUndefined(password) ? schema.required() : schema\n )\n .notNull(),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst userUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n isActive: yup.bool().notNull(),\n roles: validators.roles.min(1).notNull(),\n })\n .noUnknown();\n\nconst usersDeleteSchema = yup\n .object()\n .shape({\n ids: yup.array().of(yup.strapiID()).min(1).required(),\n })\n .noUnknown();\n\nexport const validateUserCreationInput = validateYupSchema(userCreationSchema);\nexport const validateProfileUpdateInput = validateYupSchema(profileUpdateSchema);\nexport const validateUserUpdateInput = validateYupSchema(userUpdateSchema);\nexport const validateUsersDeleteInput = validateYupSchema(usersDeleteSchema);\nexport const schemas = {\n userCreationSchema,\n usersDeleteSchema,\n userUpdateSchema,\n};\n\nexport default {\n validateUserCreationInput,\n validateProfileUpdateInput,\n validateUserUpdateInput,\n validateUsersDeleteInput,\n schemas,\n};\n"],"names":["userCreationSchema","yup","object","shape","email","validators","required","firstname","lastname","roles","min","preferedLanguage","string","nullable","noUnknown","profileUpdateSchema","notNull","username","password","currentPassword","when","schema","isUndefined","userUpdateSchema","isActive","bool","usersDeleteSchema","ids","array","of","strapiID","validateUserCreationInput","validateYupSchema","validateProfileUpdateInput","validateUserUpdateInput","validateUsersDeleteInput","schemas"],"mappings":";;;;;;AAIA,MAAMA,kBAAAA,GAAqBC,SAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,wBAAAA,CAAWD,KAAK,CAACE,QAAQ,EAAA;IAChCC,SAAAA,EAAWF,wBAAAA,CAAWE,SAAS,CAACD,QAAQ,EAAA;AACxCE,IAAAA,QAAAA,EAAUH,yBAAWG,QAAQ;AAC7BC,IAAAA,KAAAA,EAAOJ,wBAAAA,CAAWI,KAAK,CAACC,GAAG,CAAC,CAAA,CAAA;IAC5BC,gBAAAA,EAAkBV,SAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMC,mBAAAA,GAAsBd,SAAAA,CACzBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,wBAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,wBAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,wBAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,wBAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,wBAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;AACrCG,IAAAA,eAAAA,EAAiBlB,UACdW,MAAM,EAAA,CACNQ,IAAI,CAAC,YAAY,CAACF,QAAAA,EAAkBG,MAAAA,GACnC,CAACC,eAAYJ,QAAAA,CAAAA,GAAYG,MAAAA,CAAOf,QAAQ,EAAA,GAAKe,QAE9CL,OAAO,EAAA;IACVL,gBAAAA,EAAkBV,SAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMS,gBAAAA,GAAmBtB,SAAAA,CACtBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,wBAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,wBAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,wBAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,wBAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,wBAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;IACrCQ,QAAAA,EAAUvB,SAAAA,CAAIwB,IAAI,EAAA,CAAGT,OAAO,EAAA;AAC5BP,IAAAA,KAAAA,EAAOJ,yBAAWI,KAAK,CAACC,GAAG,CAAC,GAAGM,OAAO;AACxC,CAAA,CAAA,CACCF,SAAS,EAAA;AAEZ,MAAMY,iBAAAA,GAAoBzB,SAAAA,CACvBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLwB,GAAAA,EAAK1B,SAAAA,CAAI2B,KAAK,EAAA,CAAGC,EAAE,CAAC5B,SAAAA,CAAI6B,QAAQ,EAAA,CAAA,CAAIpB,GAAG,CAAC,CAAA,CAAA,CAAGJ,QAAQ;AACrD,CAAA,CAAA,CACCQ,SAAS,EAAA;AAEL,MAAMiB,yBAAAA,GAA4BC,uBAAAA,CAAkBhC,kBAAAA;AACpD,MAAMiC,0BAAAA,GAA6BD,uBAAAA,CAAkBjB,mBAAAA;AACrD,MAAMmB,uBAAAA,GAA0BF,uBAAAA,CAAkBT,gBAAAA;AAClD,MAAMY,wBAAAA,GAA2BH,uBAAAA,CAAkBN,iBAAAA;MAC7CU,OAAAA,GAAU;AACrBpC,IAAAA,kBAGF;;;;;;;;"}
1
+ {"version":3,"file":"user.js","sources":["../../../../../server/src/validation/user.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst userCreationSchema = yup\n .object()\n .shape({\n email: validators.email.required(),\n firstname: validators.firstname.required(),\n lastname: validators.lastname,\n roles: validators.roles.min(1),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst profileUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n currentPassword: yup\n .string()\n .when('password', (password: string, schema: any) =>\n password !== undefined ? schema.required() : schema\n )\n .notNull(),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst userUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n isActive: yup.bool().notNull(),\n roles: validators.roles.min(1).notNull(),\n })\n .noUnknown();\n\nconst usersDeleteSchema = yup\n .object()\n .shape({\n ids: yup.array().of(yup.strapiID()).min(1).required(),\n })\n .noUnknown();\n\nexport const validateUserCreationInput = validateYupSchema(userCreationSchema);\nexport const validateProfileUpdateInput = validateYupSchema(profileUpdateSchema);\nexport const validateUserUpdateInput = validateYupSchema(userUpdateSchema);\nexport const validateUsersDeleteInput = validateYupSchema(usersDeleteSchema);\nexport const schemas = {\n userCreationSchema,\n usersDeleteSchema,\n userUpdateSchema,\n};\n\nexport default {\n validateUserCreationInput,\n validateProfileUpdateInput,\n validateUserUpdateInput,\n validateUsersDeleteInput,\n schemas,\n};\n"],"names":["userCreationSchema","yup","object","shape","email","validators","required","firstname","lastname","roles","min","preferedLanguage","string","nullable","noUnknown","profileUpdateSchema","notNull","username","password","currentPassword","when","schema","undefined","userUpdateSchema","isActive","bool","usersDeleteSchema","ids","array","of","strapiID","validateUserCreationInput","validateYupSchema","validateProfileUpdateInput","validateUserUpdateInput","validateUsersDeleteInput","schemas"],"mappings":";;;;;AAGA,MAAMA,kBAAAA,GAAqBC,SAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,wBAAAA,CAAWD,KAAK,CAACE,QAAQ,EAAA;IAChCC,SAAAA,EAAWF,wBAAAA,CAAWE,SAAS,CAACD,QAAQ,EAAA;AACxCE,IAAAA,QAAAA,EAAUH,yBAAWG,QAAQ;AAC7BC,IAAAA,KAAAA,EAAOJ,wBAAAA,CAAWI,KAAK,CAACC,GAAG,CAAC,CAAA,CAAA;IAC5BC,gBAAAA,EAAkBV,SAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMC,mBAAAA,GAAsBd,SAAAA,CACzBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,wBAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,wBAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,wBAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,wBAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,wBAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;AACrCG,IAAAA,eAAAA,EAAiBlB,SAAAA,CACdW,MAAM,EAAA,CACNQ,IAAI,CAAC,UAAA,EAAY,CAACF,QAAAA,EAAkBG,MAAAA,GACnCH,aAAaI,SAAAA,GAAYD,MAAAA,CAAOf,QAAQ,EAAA,GAAKe,QAE9CL,OAAO,EAAA;IACVL,gBAAAA,EAAkBV,SAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMS,gBAAAA,GAAmBtB,SAAAA,CACtBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,wBAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,wBAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,wBAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,wBAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,wBAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;IACrCQ,QAAAA,EAAUvB,SAAAA,CAAIwB,IAAI,EAAA,CAAGT,OAAO,EAAA;AAC5BP,IAAAA,KAAAA,EAAOJ,yBAAWI,KAAK,CAACC,GAAG,CAAC,GAAGM,OAAO;AACxC,CAAA,CAAA,CACCF,SAAS,EAAA;AAEZ,MAAMY,iBAAAA,GAAoBzB,SAAAA,CACvBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLwB,GAAAA,EAAK1B,SAAAA,CAAI2B,KAAK,EAAA,CAAGC,EAAE,CAAC5B,SAAAA,CAAI6B,QAAQ,EAAA,CAAA,CAAIpB,GAAG,CAAC,CAAA,CAAA,CAAGJ,QAAQ;AACrD,CAAA,CAAA,CACCQ,SAAS,EAAA;AAEL,MAAMiB,yBAAAA,GAA4BC,uBAAAA,CAAkBhC,kBAAAA;AACpD,MAAMiC,0BAAAA,GAA6BD,uBAAAA,CAAkBjB,mBAAAA;AACrD,MAAMmB,uBAAAA,GAA0BF,uBAAAA,CAAkBT,gBAAAA;AAClD,MAAMY,wBAAAA,GAA2BH,uBAAAA,CAAkBN,iBAAAA;MAC7CU,OAAAA,GAAU;AACrBpC,IAAAA,kBAGF;;;;;;;;"}
@@ -1,4 +1,3 @@
1
- import { isUndefined } from 'lodash/fp';
2
1
  import { yup, validateYupSchema } from '@strapi/utils';
3
2
  import validators from './common-validators.mjs';
4
3
 
@@ -15,7 +14,7 @@ const profileUpdateSchema = yup.object().shape({
15
14
  lastname: validators.lastname.nullable(),
16
15
  username: validators.username.nullable(),
17
16
  password: validators.password.notNull(),
18
- currentPassword: yup.string().when('password', (password, schema)=>!isUndefined(password) ? schema.required() : schema).notNull(),
17
+ currentPassword: yup.string().when('password', (password, schema)=>password !== undefined ? schema.required() : schema).notNull(),
19
18
  preferedLanguage: yup.string().nullable()
20
19
  }).noUnknown();
21
20
  const userUpdateSchema = yup.object().shape({
@@ -1 +1 @@
1
- {"version":3,"file":"user.mjs","sources":["../../../../../server/src/validation/user.ts"],"sourcesContent":["import { isUndefined } from 'lodash/fp';\nimport { yup, validateYupSchema } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst userCreationSchema = yup\n .object()\n .shape({\n email: validators.email.required(),\n firstname: validators.firstname.required(),\n lastname: validators.lastname,\n roles: validators.roles.min(1),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst profileUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n currentPassword: yup\n .string()\n .when('password', (password: string, schema: any) =>\n !isUndefined(password) ? schema.required() : schema\n )\n .notNull(),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst userUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n isActive: yup.bool().notNull(),\n roles: validators.roles.min(1).notNull(),\n })\n .noUnknown();\n\nconst usersDeleteSchema = yup\n .object()\n .shape({\n ids: yup.array().of(yup.strapiID()).min(1).required(),\n })\n .noUnknown();\n\nexport const validateUserCreationInput = validateYupSchema(userCreationSchema);\nexport const validateProfileUpdateInput = validateYupSchema(profileUpdateSchema);\nexport const validateUserUpdateInput = validateYupSchema(userUpdateSchema);\nexport const validateUsersDeleteInput = validateYupSchema(usersDeleteSchema);\nexport const schemas = {\n userCreationSchema,\n usersDeleteSchema,\n userUpdateSchema,\n};\n\nexport default {\n validateUserCreationInput,\n validateProfileUpdateInput,\n validateUserUpdateInput,\n validateUsersDeleteInput,\n schemas,\n};\n"],"names":["userCreationSchema","yup","object","shape","email","validators","required","firstname","lastname","roles","min","preferedLanguage","string","nullable","noUnknown","profileUpdateSchema","notNull","username","password","currentPassword","when","schema","isUndefined","userUpdateSchema","isActive","bool","usersDeleteSchema","ids","array","of","strapiID","validateUserCreationInput","validateYupSchema","validateProfileUpdateInput","validateUserUpdateInput","validateUsersDeleteInput","schemas"],"mappings":";;;;AAIA,MAAMA,kBAAAA,GAAqBC,GAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,UAAAA,CAAWD,KAAK,CAACE,QAAQ,EAAA;IAChCC,SAAAA,EAAWF,UAAAA,CAAWE,SAAS,CAACD,QAAQ,EAAA;AACxCE,IAAAA,QAAAA,EAAUH,WAAWG,QAAQ;AAC7BC,IAAAA,KAAAA,EAAOJ,UAAAA,CAAWI,KAAK,CAACC,GAAG,CAAC,CAAA,CAAA;IAC5BC,gBAAAA,EAAkBV,GAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMC,mBAAAA,GAAsBd,GAAAA,CACzBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,UAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,UAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,UAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,UAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,UAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;AACrCG,IAAAA,eAAAA,EAAiBlB,IACdW,MAAM,EAAA,CACNQ,IAAI,CAAC,YAAY,CAACF,QAAAA,EAAkBG,MAAAA,GACnC,CAACC,YAAYJ,QAAAA,CAAAA,GAAYG,MAAAA,CAAOf,QAAQ,EAAA,GAAKe,QAE9CL,OAAO,EAAA;IACVL,gBAAAA,EAAkBV,GAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMS,gBAAAA,GAAmBtB,GAAAA,CACtBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,UAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,UAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,UAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,UAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,UAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;IACrCQ,QAAAA,EAAUvB,GAAAA,CAAIwB,IAAI,EAAA,CAAGT,OAAO,EAAA;AAC5BP,IAAAA,KAAAA,EAAOJ,WAAWI,KAAK,CAACC,GAAG,CAAC,GAAGM,OAAO;AACxC,CAAA,CAAA,CACCF,SAAS,EAAA;AAEZ,MAAMY,iBAAAA,GAAoBzB,GAAAA,CACvBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLwB,GAAAA,EAAK1B,GAAAA,CAAI2B,KAAK,EAAA,CAAGC,EAAE,CAAC5B,GAAAA,CAAI6B,QAAQ,EAAA,CAAA,CAAIpB,GAAG,CAAC,CAAA,CAAA,CAAGJ,QAAQ;AACrD,CAAA,CAAA,CACCQ,SAAS,EAAA;AAEL,MAAMiB,yBAAAA,GAA4BC,iBAAAA,CAAkBhC,kBAAAA;AACpD,MAAMiC,0BAAAA,GAA6BD,iBAAAA,CAAkBjB,mBAAAA;AACrD,MAAMmB,uBAAAA,GAA0BF,iBAAAA,CAAkBT,gBAAAA;AAClD,MAAMY,wBAAAA,GAA2BH,iBAAAA,CAAkBN,iBAAAA;MAC7CU,OAAAA,GAAU;AACrBpC,IAAAA,kBAGF;;;;"}
1
+ {"version":3,"file":"user.mjs","sources":["../../../../../server/src/validation/user.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst userCreationSchema = yup\n .object()\n .shape({\n email: validators.email.required(),\n firstname: validators.firstname.required(),\n lastname: validators.lastname,\n roles: validators.roles.min(1),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst profileUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n currentPassword: yup\n .string()\n .when('password', (password: string, schema: any) =>\n password !== undefined ? schema.required() : schema\n )\n .notNull(),\n preferedLanguage: yup.string().nullable(),\n })\n .noUnknown();\n\nconst userUpdateSchema = yup\n .object()\n .shape({\n email: validators.email.notNull(),\n firstname: validators.firstname.notNull(),\n lastname: validators.lastname.nullable(),\n username: validators.username.nullable(),\n password: validators.password.notNull(),\n isActive: yup.bool().notNull(),\n roles: validators.roles.min(1).notNull(),\n })\n .noUnknown();\n\nconst usersDeleteSchema = yup\n .object()\n .shape({\n ids: yup.array().of(yup.strapiID()).min(1).required(),\n })\n .noUnknown();\n\nexport const validateUserCreationInput = validateYupSchema(userCreationSchema);\nexport const validateProfileUpdateInput = validateYupSchema(profileUpdateSchema);\nexport const validateUserUpdateInput = validateYupSchema(userUpdateSchema);\nexport const validateUsersDeleteInput = validateYupSchema(usersDeleteSchema);\nexport const schemas = {\n userCreationSchema,\n usersDeleteSchema,\n userUpdateSchema,\n};\n\nexport default {\n validateUserCreationInput,\n validateProfileUpdateInput,\n validateUserUpdateInput,\n validateUsersDeleteInput,\n schemas,\n};\n"],"names":["userCreationSchema","yup","object","shape","email","validators","required","firstname","lastname","roles","min","preferedLanguage","string","nullable","noUnknown","profileUpdateSchema","notNull","username","password","currentPassword","when","schema","undefined","userUpdateSchema","isActive","bool","usersDeleteSchema","ids","array","of","strapiID","validateUserCreationInput","validateYupSchema","validateProfileUpdateInput","validateUserUpdateInput","validateUsersDeleteInput","schemas"],"mappings":";;;AAGA,MAAMA,kBAAAA,GAAqBC,GAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,UAAAA,CAAWD,KAAK,CAACE,QAAQ,EAAA;IAChCC,SAAAA,EAAWF,UAAAA,CAAWE,SAAS,CAACD,QAAQ,EAAA;AACxCE,IAAAA,QAAAA,EAAUH,WAAWG,QAAQ;AAC7BC,IAAAA,KAAAA,EAAOJ,UAAAA,CAAWI,KAAK,CAACC,GAAG,CAAC,CAAA,CAAA;IAC5BC,gBAAAA,EAAkBV,GAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMC,mBAAAA,GAAsBd,GAAAA,CACzBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,UAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,UAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,UAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,UAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,UAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;AACrCG,IAAAA,eAAAA,EAAiBlB,GAAAA,CACdW,MAAM,EAAA,CACNQ,IAAI,CAAC,UAAA,EAAY,CAACF,QAAAA,EAAkBG,MAAAA,GACnCH,aAAaI,SAAAA,GAAYD,MAAAA,CAAOf,QAAQ,EAAA,GAAKe,QAE9CL,OAAO,EAAA;IACVL,gBAAAA,EAAkBV,GAAAA,CAAIW,MAAM,EAAA,CAAGC,QAAQ;AACzC,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMS,gBAAAA,GAAmBtB,GAAAA,CACtBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOC,UAAAA,CAAWD,KAAK,CAACY,OAAO,EAAA;IAC/BT,SAAAA,EAAWF,UAAAA,CAAWE,SAAS,CAACS,OAAO,EAAA;IACvCR,QAAAA,EAAUH,UAAAA,CAAWG,QAAQ,CAACK,QAAQ,EAAA;IACtCI,QAAAA,EAAUZ,UAAAA,CAAWY,QAAQ,CAACJ,QAAQ,EAAA;IACtCK,QAAAA,EAAUb,UAAAA,CAAWa,QAAQ,CAACF,OAAO,EAAA;IACrCQ,QAAAA,EAAUvB,GAAAA,CAAIwB,IAAI,EAAA,CAAGT,OAAO,EAAA;AAC5BP,IAAAA,KAAAA,EAAOJ,WAAWI,KAAK,CAACC,GAAG,CAAC,GAAGM,OAAO;AACxC,CAAA,CAAA,CACCF,SAAS,EAAA;AAEZ,MAAMY,iBAAAA,GAAoBzB,GAAAA,CACvBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLwB,GAAAA,EAAK1B,GAAAA,CAAI2B,KAAK,EAAA,CAAGC,EAAE,CAAC5B,GAAAA,CAAI6B,QAAQ,EAAA,CAAA,CAAIpB,GAAG,CAAC,CAAA,CAAA,CAAGJ,QAAQ;AACrD,CAAA,CAAA,CACCQ,SAAS,EAAA;AAEL,MAAMiB,yBAAAA,GAA4BC,iBAAAA,CAAkBhC,kBAAAA;AACpD,MAAMiC,0BAAAA,GAA6BD,iBAAAA,CAAkBjB,mBAAAA;AACrD,MAAMmB,uBAAAA,GAA0BF,iBAAAA,CAAkBT,gBAAAA;AAClD,MAAMY,wBAAAA,GAA2BH,iBAAAA,CAAkBN,iBAAAA;MAC7CU,OAAAA,GAAU;AACrBpC,IAAAA,kBAGF;;;;"}
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Resolves the plan label from the license information returned by the
5
+ * `/admin/project-type` endpoint (browser) or `strapi.ee` (server).
6
+ *
7
+ * This labels the edition that is running: it follows `isEE`, so a lapsed license reads
8
+ * Community. Browser tracking and NPS report this label and the startup table applies the same
9
+ * rule; server metrics also label the running edition, but never say Growth. For the plan a
10
+ * license was issued for, lapsed or not (the Plan card, the Support card and the debug dump),
11
+ * use `getLicensedPlan` below.
12
+ *
13
+ * The label is intentionally limited to three values:
14
+ * - `Community` when there is no license (Community Edition).
15
+ * - `Growth` when the licensed plan price id contains "growth".
16
+ * - `Enterprise` for any other licensed plan.
17
+ */ const getProjectType = ({ isEE, planPriceId })=>{
18
+ if (!isEE) {
19
+ return 'Community';
20
+ }
21
+ if (planPriceId?.toLowerCase().includes('growth')) {
22
+ return 'Growth';
23
+ }
24
+ return 'Enterprise';
25
+ };
26
+ // The statuses a license can be in once it has been read. `none` (never licensed) is left out
27
+ // on purpose, and so is a missing status, which a mixed-version install can produce.
28
+ const LICENSED_STATUSES = [
29
+ 'active',
30
+ 'expired',
31
+ 'unknown'
32
+ ];
33
+ /**
34
+ * Resolves the plan a license was issued for, including one that has lapsed or can no longer
35
+ * be read, so Support links, the Plan card and the debug dump can still name it. It unlocks
36
+ * nothing: feature gating stays on `isEE`.
37
+ *
38
+ * A plan is only reported when a type was verified at some point (live, or retained once the
39
+ * license lapsed) AND the status is licensed. A corrupt license file sets `unknown` before any
40
+ * type is stored, and with no price id `getProjectType` would fall through to Enterprise, so
41
+ * both conditions are required. Every caller that derives a plan should go through here.
42
+ */ const getLicensedPlan = ({ licenseStatus, type, planPriceId })=>getProjectType({
43
+ isEE: Boolean(type) && LICENSED_STATUSES.includes(licenseStatus ?? ''),
44
+ planPriceId: planPriceId ?? undefined
45
+ });
46
+
47
+ exports.getLicensedPlan = getLicensedPlan;
48
+ exports.getProjectType = getProjectType;
49
+ //# sourceMappingURL=get-project-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project-type.js","sources":["../../../../shared/utils/get-project-type.ts"],"sourcesContent":["type ProjectType = 'Community' | 'Growth' | 'Enterprise';\n\n/**\n * Resolves the plan label from the license information returned by the\n * `/admin/project-type` endpoint (browser) or `strapi.ee` (server).\n *\n * This labels the edition that is running: it follows `isEE`, so a lapsed license reads\n * Community. Browser tracking and NPS report this label and the startup table applies the same\n * rule; server metrics also label the running edition, but never say Growth. For the plan a\n * license was issued for, lapsed or not (the Plan card, the Support card and the debug dump),\n * use `getLicensedPlan` below.\n *\n * The label is intentionally limited to three values:\n * - `Community` when there is no license (Community Edition).\n * - `Growth` when the licensed plan price id contains \"growth\".\n * - `Enterprise` for any other licensed plan.\n */\nconst getProjectType = ({\n isEE,\n planPriceId,\n}: {\n isEE: boolean;\n planPriceId?: string;\n}): ProjectType => {\n if (!isEE) {\n return 'Community';\n }\n\n if (planPriceId?.toLowerCase().includes('growth')) {\n return 'Growth';\n }\n\n return 'Enterprise';\n};\n\n// The statuses a license can be in once it has been read. `none` (never licensed) is left out\n// on purpose, and so is a missing status, which a mixed-version install can produce.\nconst LICENSED_STATUSES: readonly string[] = ['active', 'expired', 'unknown'];\n\n/**\n * Resolves the plan a license was issued for, including one that has lapsed or can no longer\n * be read, so Support links, the Plan card and the debug dump can still name it. It unlocks\n * nothing: feature gating stays on `isEE`.\n *\n * A plan is only reported when a type was verified at some point (live, or retained once the\n * license lapsed) AND the status is licensed. A corrupt license file sets `unknown` before any\n * type is stored, and with no price id `getProjectType` would fall through to Enterprise, so\n * both conditions are required. Every caller that derives a plan should go through here.\n */\nconst getLicensedPlan = ({\n licenseStatus,\n type,\n planPriceId,\n}: {\n licenseStatus: string | null | undefined;\n type: string | null | undefined;\n planPriceId?: string | null;\n}): ProjectType =>\n getProjectType({\n isEE: Boolean(type) && LICENSED_STATUSES.includes(licenseStatus ?? ''),\n planPriceId: planPriceId ?? undefined,\n });\n\nexport { getLicensedPlan, getProjectType };\nexport type { ProjectType };\n"],"names":["getProjectType","isEE","planPriceId","toLowerCase","includes","LICENSED_STATUSES","getLicensedPlan","licenseStatus","type","Boolean","undefined"],"mappings":";;AAEA;;;;;;;;;;;;;;AAcC,UACKA,cAAAA,GAAiB,CAAC,EACtBC,IAAI,EACJC,WAAW,EAIZ,GAAA;AACC,IAAA,IAAI,CAACD,IAAAA,EAAM;QACT,OAAO,WAAA;AACT,IAAA;IAEA,IAAIC,WAAAA,EAAaC,WAAAA,EAAAA,CAAcC,QAAAA,CAAS,QAAA,CAAA,EAAW;QACjD,OAAO,QAAA;AACT,IAAA;IAEA,OAAO,YAAA;AACT;AAEA;AACA;AACA,MAAMC,iBAAAA,GAAuC;AAAC,IAAA,QAAA;AAAU,IAAA,SAAA;AAAW,IAAA;AAAU,CAAA;AAE7E;;;;;;;;;IAUA,MAAMC,eAAAA,GAAkB,CAAC,EACvBC,aAAa,EACbC,IAAI,EACJN,WAAW,EAKZ,GACCF,cAAAA,CAAe;AACbC,QAAAA,IAAAA,EAAMQ,OAAAA,CAAQD,IAAAA,CAAAA,IAASH,iBAAAA,CAAkBD,QAAQ,CAACG,aAAAA,IAAiB,EAAA,CAAA;AACnEL,QAAAA,WAAAA,EAAaA,WAAAA,IAAeQ;AAC9B,KAAA;;;;;"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Resolves the plan label from the license information returned by the
3
+ * `/admin/project-type` endpoint (browser) or `strapi.ee` (server).
4
+ *
5
+ * This labels the edition that is running: it follows `isEE`, so a lapsed license reads
6
+ * Community. Browser tracking and NPS report this label and the startup table applies the same
7
+ * rule; server metrics also label the running edition, but never say Growth. For the plan a
8
+ * license was issued for, lapsed or not (the Plan card, the Support card and the debug dump),
9
+ * use `getLicensedPlan` below.
10
+ *
11
+ * The label is intentionally limited to three values:
12
+ * - `Community` when there is no license (Community Edition).
13
+ * - `Growth` when the licensed plan price id contains "growth".
14
+ * - `Enterprise` for any other licensed plan.
15
+ */ const getProjectType = ({ isEE, planPriceId })=>{
16
+ if (!isEE) {
17
+ return 'Community';
18
+ }
19
+ if (planPriceId?.toLowerCase().includes('growth')) {
20
+ return 'Growth';
21
+ }
22
+ return 'Enterprise';
23
+ };
24
+ // The statuses a license can be in once it has been read. `none` (never licensed) is left out
25
+ // on purpose, and so is a missing status, which a mixed-version install can produce.
26
+ const LICENSED_STATUSES = [
27
+ 'active',
28
+ 'expired',
29
+ 'unknown'
30
+ ];
31
+ /**
32
+ * Resolves the plan a license was issued for, including one that has lapsed or can no longer
33
+ * be read, so Support links, the Plan card and the debug dump can still name it. It unlocks
34
+ * nothing: feature gating stays on `isEE`.
35
+ *
36
+ * A plan is only reported when a type was verified at some point (live, or retained once the
37
+ * license lapsed) AND the status is licensed. A corrupt license file sets `unknown` before any
38
+ * type is stored, and with no price id `getProjectType` would fall through to Enterprise, so
39
+ * both conditions are required. Every caller that derives a plan should go through here.
40
+ */ const getLicensedPlan = ({ licenseStatus, type, planPriceId })=>getProjectType({
41
+ isEE: Boolean(type) && LICENSED_STATUSES.includes(licenseStatus ?? ''),
42
+ planPriceId: planPriceId ?? undefined
43
+ });
44
+
45
+ export { getLicensedPlan, getProjectType };
46
+ //# sourceMappingURL=get-project-type.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project-type.mjs","sources":["../../../../shared/utils/get-project-type.ts"],"sourcesContent":["type ProjectType = 'Community' | 'Growth' | 'Enterprise';\n\n/**\n * Resolves the plan label from the license information returned by the\n * `/admin/project-type` endpoint (browser) or `strapi.ee` (server).\n *\n * This labels the edition that is running: it follows `isEE`, so a lapsed license reads\n * Community. Browser tracking and NPS report this label and the startup table applies the same\n * rule; server metrics also label the running edition, but never say Growth. For the plan a\n * license was issued for, lapsed or not (the Plan card, the Support card and the debug dump),\n * use `getLicensedPlan` below.\n *\n * The label is intentionally limited to three values:\n * - `Community` when there is no license (Community Edition).\n * - `Growth` when the licensed plan price id contains \"growth\".\n * - `Enterprise` for any other licensed plan.\n */\nconst getProjectType = ({\n isEE,\n planPriceId,\n}: {\n isEE: boolean;\n planPriceId?: string;\n}): ProjectType => {\n if (!isEE) {\n return 'Community';\n }\n\n if (planPriceId?.toLowerCase().includes('growth')) {\n return 'Growth';\n }\n\n return 'Enterprise';\n};\n\n// The statuses a license can be in once it has been read. `none` (never licensed) is left out\n// on purpose, and so is a missing status, which a mixed-version install can produce.\nconst LICENSED_STATUSES: readonly string[] = ['active', 'expired', 'unknown'];\n\n/**\n * Resolves the plan a license was issued for, including one that has lapsed or can no longer\n * be read, so Support links, the Plan card and the debug dump can still name it. It unlocks\n * nothing: feature gating stays on `isEE`.\n *\n * A plan is only reported when a type was verified at some point (live, or retained once the\n * license lapsed) AND the status is licensed. A corrupt license file sets `unknown` before any\n * type is stored, and with no price id `getProjectType` would fall through to Enterprise, so\n * both conditions are required. Every caller that derives a plan should go through here.\n */\nconst getLicensedPlan = ({\n licenseStatus,\n type,\n planPriceId,\n}: {\n licenseStatus: string | null | undefined;\n type: string | null | undefined;\n planPriceId?: string | null;\n}): ProjectType =>\n getProjectType({\n isEE: Boolean(type) && LICENSED_STATUSES.includes(licenseStatus ?? ''),\n planPriceId: planPriceId ?? undefined,\n });\n\nexport { getLicensedPlan, getProjectType };\nexport type { ProjectType };\n"],"names":["getProjectType","isEE","planPriceId","toLowerCase","includes","LICENSED_STATUSES","getLicensedPlan","licenseStatus","type","Boolean","undefined"],"mappings":"AAEA;;;;;;;;;;;;;;AAcC,UACKA,cAAAA,GAAiB,CAAC,EACtBC,IAAI,EACJC,WAAW,EAIZ,GAAA;AACC,IAAA,IAAI,CAACD,IAAAA,EAAM;QACT,OAAO,WAAA;AACT,IAAA;IAEA,IAAIC,WAAAA,EAAaC,WAAAA,EAAAA,CAAcC,QAAAA,CAAS,QAAA,CAAA,EAAW;QACjD,OAAO,QAAA;AACT,IAAA;IAEA,OAAO,YAAA;AACT;AAEA;AACA;AACA,MAAMC,iBAAAA,GAAuC;AAAC,IAAA,QAAA;AAAU,IAAA,SAAA;AAAW,IAAA;AAAU,CAAA;AAE7E;;;;;;;;;IAUA,MAAMC,eAAAA,GAAkB,CAAC,EACvBC,aAAa,EACbC,IAAI,EACJN,WAAW,EAKZ,GACCF,cAAAA,CAAe;AACbC,QAAAA,IAAAA,EAAMQ,OAAAA,CAAQD,IAAAA,CAAAA,IAASH,iBAAAA,CAAkBD,QAAQ,CAACG,aAAAA,IAAiB,EAAA,CAAA;AACnEL,QAAAA,WAAAA,EAAaA,WAAAA,IAAeQ;AAC9B,KAAA;;;;"}
@@ -0,0 +1,72 @@
1
+ import type { Data, Modules } from '@strapi/types';
2
+ import { emitAudit } from '@strapi/utils';
3
+ import { type AdminUserSnapshot } from './admin-users';
4
+ /**
5
+ * Event hub events bound to the `admin.auth.events` config callbacks
6
+ * (`onConnectionError`, `onSSOAutoRegistration`). Their names and payloads are public.
7
+ */
8
+ export declare const AUTH_EVENTS: {
9
+ readonly LOGIN_FAILURE: "admin.auth.error";
10
+ readonly AUTO_REGISTRATION: "admin.auth.autoRegistration";
11
+ };
12
+ /** One fixed value per emit site. */
13
+ export type LoginFailureReason = 'login_not_allowed' | 'unexpected_error' | 'invalid_credentials' | 'account_inactive' | 'sso_connection_error' | 'sso_registration_disabled' | 'sso_role_misconfigured';
14
+ /**
15
+ * Payload of `admin.auth.error`, also passed to the `onConnectionError` callback.
16
+ * The audit log stores `provider`, `reason` and the account, never `error`.
17
+ */
18
+ export interface LoginFailureEvent {
19
+ error: Error;
20
+ provider: string;
21
+ reason: LoginFailureReason;
22
+ /** The account the login was for, when known. */
23
+ user?: {
24
+ id: Data.ID;
25
+ email: string;
26
+ };
27
+ }
28
+ /** Payload of `admin.auth.autoRegistration`: the created `admin::user` row, roles populated. */
29
+ export interface AutoRegistrationEvent {
30
+ user: {
31
+ id: Data.ID;
32
+ email?: string | null;
33
+ roles?: AdminUserSnapshot['roles'];
34
+ };
35
+ provider: string;
36
+ }
37
+ export interface LoginFailureDetails {
38
+ provider: string;
39
+ reason: LoginFailureReason;
40
+ }
41
+ export interface AutoRegistrationDetails {
42
+ provider: string;
43
+ roles: Data.ID[];
44
+ }
45
+ type AuditStrapi = Parameters<typeof emitAudit>[0]['strapi'];
46
+ /**
47
+ * Emits without waiting: listeners bound to the event, such as the `onConnectionError`
48
+ * config callback, run before the audit subscriber and must not hold the login.
49
+ */
50
+ export declare const emitLoginFailure: ({ strapi }: {
51
+ strapi: AuditStrapi;
52
+ }, event: LoginFailureEvent) => void;
53
+ /**
54
+ * Whether the audit log records a failed login. Not recorded: failures anyone can produce
55
+ * from outside before any verification, a local login for an email with no account and an
56
+ * SSO connection with no valid profile.
57
+ */
58
+ export declare const isRecordedLoginFailure: (event: LoginFailureEvent) => boolean;
59
+ /**
60
+ * The part of the audit-logs lifecycle service used here.
61
+ * The full service type lives in the Admin EE package.
62
+ */
63
+ interface AuditLogsLifecycle {
64
+ registerEvent<TDetails>(name: string, transform: Modules.AuditLogs.EventTransformer<TDetails>, options?: {
65
+ allowUnknownActor?: boolean;
66
+ alwaysUnknownActor?: boolean;
67
+ shouldRecord?: (...args: any[]) => boolean;
68
+ }): void;
69
+ }
70
+ export declare const registerAuthAuditEvents: (auditLogsLifecycle: AuditLogsLifecycle) => void;
71
+ export {};
72
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../server/src/audit-logs/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAqC,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1F;;;GAGG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,GAC1B,mBAAmB,GACnB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,2BAA2B,GAC3B,wBAAwB,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iDAAiD;IACjD,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,gGAAgG;AAChG,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;CAClB;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,YAAY;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,EACnC,OAAO,iBAAiB,KACvB,IASF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,iBAAiB,YAC0B,CAAC;AAE1F;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,aAAa,CAAC,QAAQ,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACvD,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;KAC5C,GACA,IAAI,CAAC;CACT;AAQD,eAAO,MAAM,uBAAuB,GAAI,oBAAoB,kBAAkB,SAkB7E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../server/src/audit-logs/tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../server/src/audit-logs/tokens.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAoIpB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBAoFE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAoIpB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBAoFE"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-actions.d.ts","sourceRoot":"","sources":["../../../../server/src/config/admin-actions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+QnB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,wBAEE"}
1
+ {"version":3,"file":"admin-actions.d.ts","sourceRoot":"","sources":["../../../../server/src/config/admin-actions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsRnB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,wBAEE"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-token.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/admin-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;gBAoDf,OAAO;oBAkCH,OAAO;cAqBb,OAAO;gBAUL,OAAO;aAoBV,OAAO;gBA2BJ,OAAO;6BAsCM,OAAO;;AA1JxC,wBAqLE"}
1
+ {"version":3,"file":"admin-token.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/admin-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;gBAqDf,OAAO;oBAkCH,OAAO;cAqBb,OAAO;gBAUL,OAAO;aAoBV,OAAO;gBA2BJ,OAAO;6BAsCM,OAAO;;AA1JxC,wBAqLE"}