@strapi/admin 5.0.0-rc.3 → 5.0.0-rc.30

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 (389) hide show
  1. package/dist/admin/{AdminSeatInfo-E8azTFQY.js → AdminSeatInfo-8vtNB3ck.js} +4 -4
  2. package/dist/admin/AdminSeatInfo-8vtNB3ck.js.map +1 -0
  3. package/dist/admin/{AdminSeatInfo-Q_hUNC5B.mjs → AdminSeatInfo-qIgh5-QA.mjs} +5 -5
  4. package/dist/admin/AdminSeatInfo-qIgh5-QA.mjs.map +1 -0
  5. package/dist/admin/{ApplicationInfoPage-noPIfujW.js → ApplicationInfoPage-ezUPoomC.js} +10 -10
  6. package/dist/admin/ApplicationInfoPage-ezUPoomC.js.map +1 -0
  7. package/dist/admin/{ApplicationInfoPage-kEld-u0P.mjs → ApplicationInfoPage-hvwQQDfu.mjs} +10 -10
  8. package/dist/admin/ApplicationInfoPage-hvwQQDfu.mjs.map +1 -0
  9. package/dist/admin/{AuthResponse-J8A48xdo.mjs → AuthResponse-HYXVuTDF.mjs} +2 -2
  10. package/dist/admin/{AuthResponse-J8A48xdo.mjs.map → AuthResponse-HYXVuTDF.mjs.map} +1 -1
  11. package/dist/admin/{AuthResponse-KlTDmm2i.js → AuthResponse-R8kR_yqS.js} +2 -2
  12. package/dist/admin/{AuthResponse-KlTDmm2i.js.map → AuthResponse-R8kR_yqS.js.map} +1 -1
  13. package/dist/admin/{AuthenticatedLayout-zYfAXNPg.mjs → AuthenticatedLayout-L-NNsHI6.mjs} +69 -82
  14. package/dist/admin/AuthenticatedLayout-L-NNsHI6.mjs.map +1 -0
  15. package/dist/admin/{AuthenticatedLayout-kLMmhrNQ.js → AuthenticatedLayout-U_Y1i-L-.js} +68 -81
  16. package/dist/admin/AuthenticatedLayout-U_Y1i-L-.js.map +1 -0
  17. package/dist/admin/{CreateActionEE-Yfp4hs7a.mjs → CreateActionEE-X2nnG2dm.mjs} +2 -2
  18. package/dist/admin/{CreateActionEE-Yfp4hs7a.mjs.map → CreateActionEE-X2nnG2dm.mjs.map} +1 -1
  19. package/dist/admin/{CreatePage-I7iAq1hY.mjs → CreatePage-J5u689Z3.mjs} +3 -3
  20. package/dist/admin/{CreatePage-I7iAq1hY.mjs.map → CreatePage-J5u689Z3.mjs.map} +1 -1
  21. package/dist/admin/{CreatePage-CUxfLM1W.js → CreatePage-hVCdmn57.js} +3 -3
  22. package/dist/admin/{CreatePage-CUxfLM1W.js.map → CreatePage-hVCdmn57.js.map} +1 -1
  23. package/dist/admin/{CreatePage-bJgO6DND.mjs → CreatePage-kEk8SJfP.mjs} +7 -7
  24. package/dist/admin/CreatePage-kEk8SJfP.mjs.map +1 -0
  25. package/dist/admin/{CreatePage-0dG6JVsn.js → CreatePage-wgAv5nl3.js} +6 -6
  26. package/dist/admin/CreatePage-wgAv5nl3.js.map +1 -0
  27. package/dist/admin/{CreateView-_K_RroGC.js → CreateView-jmN888jP.js} +3 -3
  28. package/dist/admin/{CreateView-_K_RroGC.js.map → CreateView-jmN888jP.js.map} +1 -1
  29. package/dist/admin/{CreateView-uZSogyWz.mjs → CreateView-jyUut1x5.mjs} +3 -3
  30. package/dist/admin/{CreateView-uZSogyWz.mjs.map → CreateView-jyUut1x5.mjs.map} +1 -1
  31. package/dist/admin/{CreateView-dpvub7Dn.mjs → CreateView-m1DVHo7c.mjs} +3 -3
  32. package/dist/admin/{CreateView-dpvub7Dn.mjs.map → CreateView-m1DVHo7c.mjs.map} +1 -1
  33. package/dist/admin/{CreateView-8WdBrUg7.js → CreateView-ormHpP1q.js} +3 -3
  34. package/dist/admin/{CreateView-8WdBrUg7.js.map → CreateView-ormHpP1q.js.map} +1 -1
  35. package/dist/admin/{EditPage-T7HhMiw2.js → EditPage-5io6Tp6t.js} +8 -8
  36. package/dist/admin/EditPage-5io6Tp6t.js.map +1 -0
  37. package/dist/admin/{EditPage-D5r0GV3j.mjs → EditPage-Od_v4_be.mjs} +42 -29
  38. package/dist/admin/EditPage-Od_v4_be.mjs.map +1 -0
  39. package/dist/admin/{EditPage-X8jnX0_l.js → EditPage-Pt5W8neh.js} +40 -27
  40. package/dist/admin/EditPage-Pt5W8neh.js.map +1 -0
  41. package/dist/admin/{EditPage-iksJke6K.js → EditPage-Q95nrnV7.js} +25 -16
  42. package/dist/admin/EditPage-Q95nrnV7.js.map +1 -0
  43. package/dist/admin/{EditPage-Bx_qeoOF.mjs → EditPage-lgiRfwaF.mjs} +26 -17
  44. package/dist/admin/EditPage-lgiRfwaF.mjs.map +1 -0
  45. package/dist/admin/{EditPage-yBDiueEy.mjs → EditPage-tOIK-Cfa.mjs} +9 -9
  46. package/dist/admin/EditPage-tOIK-Cfa.mjs.map +1 -0
  47. package/dist/admin/{EditView-9nfADKvX.mjs → EditView-C2YwNWBO.mjs} +11 -12
  48. package/dist/admin/EditView-C2YwNWBO.mjs.map +1 -0
  49. package/dist/admin/{EditView-kxg0Wurs.js → EditView-gMzPUOqp.js} +9 -10
  50. package/dist/admin/EditView-gMzPUOqp.js.map +1 -0
  51. package/dist/admin/{EditViewPage-PmrZwoCk.mjs → EditViewPage-BgCS0-PW.mjs} +77 -54
  52. package/dist/admin/EditViewPage-BgCS0-PW.mjs.map +1 -0
  53. package/dist/admin/{EditViewPage-I5bq_bCv.js → EditViewPage-ejtUKO-R.js} +76 -53
  54. package/dist/admin/EditViewPage-ejtUKO-R.js.map +1 -0
  55. package/dist/admin/{EventsTable-uNKFTehG.js → EventsTable-A7mZRfim.js} +2 -2
  56. package/dist/admin/{EventsTable-uNKFTehG.js.map → EventsTable-A7mZRfim.js.map} +1 -1
  57. package/dist/admin/{EventsTable-d03-9tkm.mjs → EventsTable-t4y4yZXc.mjs} +2 -2
  58. package/dist/admin/{EventsTable-d03-9tkm.mjs.map → EventsTable-t4y4yZXc.mjs.map} +1 -1
  59. package/dist/admin/{HomePage-183EKMLK.mjs → HomePage-1wvgf7Va.mjs} +3 -3
  60. package/dist/admin/{HomePage-183EKMLK.mjs.map → HomePage-1wvgf7Va.mjs.map} +1 -1
  61. package/dist/admin/{HomePage-n2buy2O4.mjs → HomePage-Uy655P1o.mjs} +11 -14
  62. package/dist/admin/HomePage-Uy655P1o.mjs.map +1 -0
  63. package/dist/admin/{HomePage-XakoaT95.js → HomePage-l2K5VEES.js} +19 -22
  64. package/dist/admin/HomePage-l2K5VEES.js.map +1 -0
  65. package/dist/admin/{HomePage-8mwfR9nn.js → HomePage-zvRCtbch.js} +3 -3
  66. package/dist/admin/{HomePage-8mwfR9nn.js.map → HomePage-zvRCtbch.js.map} +1 -1
  67. package/dist/admin/{InstalledPluginsPage--BdpZuNa.js → InstalledPlugins-SpFdFYND.js} +9 -11
  68. package/dist/admin/InstalledPlugins-SpFdFYND.js.map +1 -0
  69. package/dist/admin/{InstalledPluginsPage-nFNbVJPm.mjs → InstalledPlugins-wPRaVeug.mjs} +9 -11
  70. package/dist/admin/InstalledPlugins-wPRaVeug.mjs.map +1 -0
  71. package/dist/admin/{Layout-2ucTUD08.js → Layout-1pNNiYP1.js} +5 -5
  72. package/dist/admin/{Layout-2ucTUD08.js.map → Layout-1pNNiYP1.js.map} +1 -1
  73. package/dist/admin/{Layout-rXyzByjE.mjs → Layout-WNZbvlel.mjs} +5 -5
  74. package/dist/admin/{Layout-rXyzByjE.mjs.map → Layout-WNZbvlel.mjs.map} +1 -1
  75. package/dist/admin/{ListPage-iBPceR0S.mjs → ListPage-9efPpe0f.mjs} +7 -7
  76. package/dist/admin/ListPage-9efPpe0f.mjs.map +1 -0
  77. package/dist/admin/{ListPage-U0JQnpSG.js → ListPage-C9_pjixy.js} +3 -3
  78. package/dist/admin/{ListPage-U0JQnpSG.js.map → ListPage-C9_pjixy.js.map} +1 -1
  79. package/dist/admin/{ListPage-vZsQ_8fm.mjs → ListPage-RaBcFl-9.mjs} +3 -3
  80. package/dist/admin/{ListPage-vZsQ_8fm.mjs.map → ListPage-RaBcFl-9.mjs.map} +1 -1
  81. package/dist/admin/{ListPage-pwMqUvh3.js → ListPage-SNyqdq5P.js} +46 -28
  82. package/dist/admin/ListPage-SNyqdq5P.js.map +1 -0
  83. package/dist/admin/{ListPage-SnKebmiT.js → ListPage-UJdwjcJg.js} +5 -5
  84. package/dist/admin/ListPage-UJdwjcJg.js.map +1 -0
  85. package/dist/admin/{ListPage-nXLMZNTC.js → ListPage-dkI5xNaW.js} +7 -7
  86. package/dist/admin/ListPage-dkI5xNaW.js.map +1 -0
  87. package/dist/admin/{ListPage-j-5j-VkL.mjs → ListPage-jfLUMF0B.mjs} +5 -5
  88. package/dist/admin/{ListPage-j-5j-VkL.mjs.map → ListPage-jfLUMF0B.mjs.map} +1 -1
  89. package/dist/admin/{ListPage-GUI-KsYW.js → ListPage-vWxKV7tW.js} +6 -6
  90. package/dist/admin/{ListPage-GUI-KsYW.js.map → ListPage-vWxKV7tW.js.map} +1 -1
  91. package/dist/admin/{ListPage-k3F774YE.mjs → ListPage-wxodcCqH.mjs} +6 -6
  92. package/dist/admin/ListPage-wxodcCqH.mjs.map +1 -0
  93. package/dist/admin/{ListPage-pdwlNZO5.mjs → ListPage-z_lGScc3.mjs} +48 -30
  94. package/dist/admin/ListPage-z_lGScc3.mjs.map +1 -0
  95. package/dist/admin/{ListView-6t08ndE1.js → ListView-96suJOx8.js} +4 -4
  96. package/dist/admin/{ListView-6t08ndE1.js.map → ListView-96suJOx8.js.map} +1 -1
  97. package/dist/admin/{ListView-mhOmYiYT.js → ListView-9c2btOtu.js} +5 -5
  98. package/dist/admin/{ListView-mhOmYiYT.js.map → ListView-9c2btOtu.js.map} +1 -1
  99. package/dist/admin/{ListView-vbeM6zm_.mjs → ListView-WuLI8P9g.mjs} +5 -5
  100. package/dist/admin/{ListView-vbeM6zm_.mjs.map → ListView-WuLI8P9g.mjs.map} +1 -1
  101. package/dist/admin/{ListView-gd-uUYo3.mjs → ListView-Xh4ewfST.mjs} +5 -5
  102. package/dist/admin/{ListView-gd-uUYo3.mjs.map → ListView-Xh4ewfST.mjs.map} +1 -1
  103. package/dist/admin/{Login-VnmdXnMj.mjs → Login-Che5xFmG.mjs} +4 -4
  104. package/dist/admin/{Login-VnmdXnMj.mjs.map → Login-Che5xFmG.mjs.map} +1 -1
  105. package/dist/admin/{Login-KEjxL7NL.js → Login-FibrFNCh.js} +4 -4
  106. package/dist/admin/{Login-KEjxL7NL.js.map → Login-FibrFNCh.js.map} +1 -1
  107. package/dist/admin/{MagicLinkEE-lbZ8IiEW.mjs → MagicLinkEE-FrMh9qpI.mjs} +3 -3
  108. package/dist/admin/{MagicLinkEE-lbZ8IiEW.mjs.map → MagicLinkEE-FrMh9qpI.mjs.map} +1 -1
  109. package/dist/admin/{MagicLinkEE-_uF-eBZl.js → MagicLinkEE-XeVNxSHy.js} +3 -3
  110. package/dist/admin/{MagicLinkEE-_uF-eBZl.js.map → MagicLinkEE-XeVNxSHy.js.map} +1 -1
  111. package/dist/admin/{MarketplacePage-Pwwe_Pr9.js → MarketplacePage-BPe_3jP4.js} +87 -74
  112. package/dist/admin/MarketplacePage-BPe_3jP4.js.map +1 -0
  113. package/dist/admin/{MarketplacePage--aN208CJ.mjs → MarketplacePage-hQE7ybnf.mjs} +86 -73
  114. package/dist/admin/MarketplacePage-hQE7ybnf.mjs.map +1 -0
  115. package/dist/admin/{Permissions-oxdduJgE.mjs → Permissions-aSGK8VGG.mjs} +3 -3
  116. package/dist/admin/{Permissions-oxdduJgE.mjs.map → Permissions-aSGK8VGG.mjs.map} +1 -1
  117. package/dist/admin/{Permissions-SuZE5tW3.js → Permissions-bmMBmcv7.js} +3 -3
  118. package/dist/admin/{Permissions-SuZE5tW3.js.map → Permissions-bmMBmcv7.js.map} +1 -1
  119. package/dist/admin/{PrivateRoute-ndqg7K6H.js → PrivateRoute-LO9G_pCJ.js} +2 -2
  120. package/dist/admin/{PrivateRoute-ndqg7K6H.js.map → PrivateRoute-LO9G_pCJ.js.map} +1 -1
  121. package/dist/admin/{PrivateRoute-4oRTB_tX.mjs → PrivateRoute-S4Lol0B9.mjs} +2 -2
  122. package/dist/admin/{PrivateRoute-4oRTB_tX.mjs.map → PrivateRoute-S4Lol0B9.mjs.map} +1 -1
  123. package/dist/admin/{ProfilePage-wo_TrDuQ.mjs → ProfilePage-RM2Dol_b.mjs} +9 -9
  124. package/dist/admin/ProfilePage-RM2Dol_b.mjs.map +1 -0
  125. package/dist/admin/{ProfilePage-9GtyEQef.js → ProfilePage-kBO5al50.js} +8 -8
  126. package/dist/admin/ProfilePage-kBO5al50.js.map +1 -0
  127. package/dist/admin/{PurchaseAuditLogs-YYOVsNMr.js → PurchaseAuditLogs-2mIURI7O.js} +2 -2
  128. package/dist/admin/{PurchaseAuditLogs-YYOVsNMr.js.map → PurchaseAuditLogs-2mIURI7O.js.map} +1 -1
  129. package/dist/admin/{PurchaseAuditLogs-KuzDXxa_.mjs → PurchaseAuditLogs-Mzq8o-DK.mjs} +2 -2
  130. package/dist/admin/{PurchaseAuditLogs-KuzDXxa_.mjs.map → PurchaseAuditLogs-Mzq8o-DK.mjs.map} +1 -1
  131. package/dist/admin/{PurchaseSingleSignOn-UF2SMczk.js → PurchaseSingleSignOn-P_X-9MEx.js} +2 -2
  132. package/dist/admin/{PurchaseSingleSignOn-UF2SMczk.js.map → PurchaseSingleSignOn-P_X-9MEx.js.map} +1 -1
  133. package/dist/admin/{PurchaseSingleSignOn-4m19d5bJ.mjs → PurchaseSingleSignOn-cMTLeK2B.mjs} +2 -2
  134. package/dist/admin/{PurchaseSingleSignOn-4m19d5bJ.mjs.map → PurchaseSingleSignOn-cMTLeK2B.mjs.map} +1 -1
  135. package/dist/admin/{SSOProviders-QBcyB9VI.js → SSOProviders-9-d1vYXb.js} +4 -4
  136. package/dist/admin/SSOProviders-9-d1vYXb.js.map +1 -0
  137. package/dist/admin/{SSOProviders-nMmBLr8g.mjs → SSOProviders-sy3Xon2A.mjs} +4 -4
  138. package/dist/admin/SSOProviders-sy3Xon2A.mjs.map +1 -0
  139. package/dist/admin/{SelectRoles-82KlaNv9.mjs → SelectRoles-MZNlONGM.mjs} +7 -7
  140. package/dist/admin/SelectRoles-MZNlONGM.mjs.map +1 -0
  141. package/dist/admin/{SelectRoles-iUoQ1i46.js → SelectRoles-W7y7odaY.js} +8 -8
  142. package/dist/admin/SelectRoles-W7y7odaY.js.map +1 -0
  143. package/dist/admin/{SingleSignOnPage-xBAVG_IK.js → SingleSignOnPage-OwgCN2hp.js} +14 -5
  144. package/dist/admin/SingleSignOnPage-OwgCN2hp.js.map +1 -0
  145. package/dist/admin/{SingleSignOnPage-N3e0bw3O.mjs → SingleSignOnPage-gvYva6J8.mjs} +15 -6
  146. package/dist/admin/SingleSignOnPage-gvYva6J8.mjs.map +1 -0
  147. package/dist/admin/{Table-YZ9eQlTc.mjs → Table-a9i0e2LJ.mjs} +13 -20
  148. package/dist/admin/Table-a9i0e2LJ.mjs.map +1 -0
  149. package/dist/admin/{Table-M_g0IUVs.js → Table-mhCUTq4S.js} +13 -20
  150. package/dist/admin/Table-mhCUTq4S.js.map +1 -0
  151. package/dist/admin/{Theme-PrUuuGtN.mjs → Theme-frC82ceE.mjs} +221 -20
  152. package/dist/admin/Theme-frC82ceE.mjs.map +1 -0
  153. package/dist/admin/{Theme-7W0we6BI.js → Theme-y_rWTknM.js} +225 -19
  154. package/dist/admin/Theme-y_rWTknM.js.map +1 -0
  155. package/dist/admin/{TokenTypeSelect-vAeDNBmG.mjs → TokenTypeSelect-WifdoxkK.mjs} +5 -6
  156. package/dist/admin/TokenTypeSelect-WifdoxkK.mjs.map +1 -0
  157. package/dist/admin/{TokenTypeSelect-HMyBvTwA.js → TokenTypeSelect-XdGVptL-.js} +5 -6
  158. package/dist/admin/TokenTypeSelect-XdGVptL-.js.map +1 -0
  159. package/dist/admin/{UseCasePage-VlWOTc-k.js → UseCasePage-MjT4gpNe.js} +14 -8
  160. package/dist/admin/UseCasePage-MjT4gpNe.js.map +1 -0
  161. package/dist/admin/{UseCasePage-GupUMZgN.mjs → UseCasePage-URqtqwgm.mjs} +14 -8
  162. package/dist/admin/{UseCasePage-GupUMZgN.mjs.map → UseCasePage-URqtqwgm.mjs.map} +1 -1
  163. package/dist/admin/{admin-B6AW0Kov.mjs → admin-GZ-AP2T0.mjs} +2 -2
  164. package/dist/admin/{admin-B6AW0Kov.mjs.map → admin-GZ-AP2T0.mjs.map} +1 -1
  165. package/dist/admin/{apiTokens-YMUmHnrH.mjs → apiTokens-GQe-GqwZ.mjs} +2 -2
  166. package/dist/admin/{apiTokens-YMUmHnrH.mjs.map → apiTokens-GQe-GqwZ.mjs.map} +1 -1
  167. package/dist/admin/{constants-hpTrGuiB.mjs → constants-HotVFBqh.mjs} +4 -4
  168. package/dist/admin/{constants-hpTrGuiB.mjs.map → constants-HotVFBqh.mjs.map} +1 -1
  169. package/dist/admin/{constants-2ESPgM_p.js → constants-j8FcH7FB.js} +4 -4
  170. package/dist/admin/{constants-2ESPgM_p.js.map → constants-j8FcH7FB.js.map} +1 -1
  171. package/dist/admin/ee.mjs +1 -1
  172. package/dist/admin/{en-TbnMBjZf.js → en-_1-Nn7iH.js} +3 -2
  173. package/dist/admin/{en-TbnMBjZf.js.map → en-_1-Nn7iH.js.map} +1 -1
  174. package/dist/admin/{en-0Ld-ipyI.mjs → en-lDO5lPD0.mjs} +3 -2
  175. package/dist/admin/{en-0Ld-ipyI.mjs.map → en-lDO5lPD0.mjs.map} +1 -1
  176. package/dist/admin/{index-qf9IxVeZ.js → index-h7R8mHHX.js} +145 -291
  177. package/dist/admin/index-h7R8mHHX.js.map +1 -0
  178. package/dist/admin/{index-6pjQxyB0.mjs → index-ukxNzreH.mjs} +141 -284
  179. package/dist/admin/index-ukxNzreH.mjs.map +1 -0
  180. package/dist/admin/index.js +5 -4
  181. package/dist/admin/index.js.map +1 -1
  182. package/dist/admin/index.mjs +3 -3
  183. package/dist/admin/{selectors-ZpHhvPK4.mjs → selectors--muHmKGe.mjs} +2 -2
  184. package/dist/admin/{selectors-ZpHhvPK4.mjs.map → selectors--muHmKGe.mjs.map} +1 -1
  185. package/dist/admin/{selectors-zQKcCNuz.js → selectors-1ySxKbos.js} +2 -2
  186. package/dist/admin/{selectors-zQKcCNuz.js.map → selectors-1ySxKbos.js.map} +1 -1
  187. package/dist/admin/src/StrapiApp.d.ts +8 -6
  188. package/dist/admin/src/components/Form.d.ts +3 -1
  189. package/dist/admin/src/components/FormInputs/Json.d.ts +2 -2
  190. package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -4
  191. package/dist/admin/src/constants.d.ts +10 -0
  192. package/dist/admin/src/features/Auth.d.ts +1 -1
  193. package/dist/admin/src/hooks/useRBAC.d.ts +1 -1
  194. package/dist/admin/src/index.d.ts +3 -0
  195. package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +1 -1
  196. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -1
  197. package/dist/admin/src/pages/Settings/pages/InstalledPlugins.d.ts +3 -0
  198. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +1 -1
  199. package/dist/admin/src/types/permissions.d.ts +3 -1
  200. package/dist/admin/test.js +3 -3
  201. package/dist/admin/test.js.map +1 -1
  202. package/dist/admin/test.mjs +4 -4
  203. package/dist/admin/test.mjs.map +1 -1
  204. package/dist/admin/{transferTokens-CNI0TFdA.mjs → transferTokens-v8tNpI_l.mjs} +2 -2
  205. package/dist/admin/{transferTokens-CNI0TFdA.mjs.map → transferTokens-v8tNpI_l.mjs.map} +1 -1
  206. package/dist/admin/{useAdminRoles-8Uy9-IbL.js → useAdminRoles-BxjzG1Wt.js} +2 -2
  207. package/dist/admin/{useAdminRoles-8Uy9-IbL.js.map → useAdminRoles-BxjzG1Wt.js.map} +1 -1
  208. package/dist/admin/{useAdminRoles-a4_GH7yG.mjs → useAdminRoles-fAp7mZbB.mjs} +2 -2
  209. package/dist/admin/{useAdminRoles-a4_GH7yG.mjs.map → useAdminRoles-fAp7mZbB.mjs.map} +1 -1
  210. package/dist/admin/{useLicenseLimitNotification-PaR7jmqd.mjs → useLicenseLimitNotification-Qx_rSpUQ.mjs} +3 -3
  211. package/dist/admin/{useLicenseLimitNotification-PaR7jmqd.mjs.map → useLicenseLimitNotification-Qx_rSpUQ.mjs.map} +1 -1
  212. package/dist/admin/{useLicenseLimitNotification-g1vq6nzk.js → useLicenseLimitNotification-eau4ja6h.js} +2 -2
  213. package/dist/admin/{useLicenseLimitNotification-g1vq6nzk.js.map → useLicenseLimitNotification-eau4ja6h.js.map} +1 -1
  214. package/dist/admin/{useLicenseLimits-Jy6E6qc2.mjs → useLicenseLimits-j5znikzW.mjs} +2 -2
  215. package/dist/admin/{useLicenseLimits-Jy6E6qc2.mjs.map → useLicenseLimits-j5znikzW.mjs.map} +1 -1
  216. package/dist/admin/{useWebhooks-7thg-d57.mjs → useWebhooks-upF7mgdZ.mjs} +2 -2
  217. package/dist/admin/{useWebhooks-7thg-d57.mjs.map → useWebhooks-upF7mgdZ.mjs.map} +1 -1
  218. package/dist/admin/{validation-ODUz3BOU.js → validation-6SSeyGur.js} +4 -4
  219. package/dist/admin/validation-6SSeyGur.js.map +1 -0
  220. package/dist/admin/{validation-YqwSDeRS.mjs → validation-cMzmzqCF.mjs} +4 -4
  221. package/dist/admin/validation-cMzmzqCF.mjs.map +1 -0
  222. package/dist/ee/server/src/audit-logs/content-types/audit-log.d.ts +41 -0
  223. package/dist/ee/server/src/audit-logs/content-types/audit-log.d.ts.map +1 -0
  224. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +7 -0
  225. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -0
  226. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts +19 -0
  227. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -0
  228. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +27 -0
  229. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -0
  230. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +12 -0
  231. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -0
  232. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +6 -0
  233. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -0
  234. package/dist/ee/server/src/bootstrap.d.ts +3 -0
  235. package/dist/ee/server/src/bootstrap.d.ts.map +1 -0
  236. package/dist/ee/server/src/config/admin-actions.d.ts +20 -0
  237. package/dist/ee/server/src/config/admin-actions.d.ts.map +1 -0
  238. package/dist/ee/server/src/content-types/index.d.ts +3 -0
  239. package/dist/ee/server/src/content-types/index.d.ts.map +1 -0
  240. package/dist/ee/server/src/controllers/admin.d.ts +29 -0
  241. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -0
  242. package/dist/ee/server/src/controllers/authentication-utils/constants.d.ts +10 -0
  243. package/dist/ee/server/src/controllers/authentication-utils/constants.d.ts.map +1 -0
  244. package/dist/ee/server/src/controllers/authentication-utils/index.d.ts +5 -0
  245. package/dist/ee/server/src/controllers/authentication-utils/index.d.ts.map +1 -0
  246. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts +9 -0
  247. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -0
  248. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +55 -0
  249. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -0
  250. package/dist/ee/server/src/controllers/authentication.d.ts +9 -0
  251. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -0
  252. package/dist/ee/server/src/controllers/index.d.ts +48 -0
  253. package/dist/ee/server/src/controllers/index.d.ts.map +1 -0
  254. package/dist/ee/server/src/controllers/role.d.ts +20 -0
  255. package/dist/ee/server/src/controllers/role.d.ts.map +1 -0
  256. package/dist/ee/server/src/controllers/user.d.ts +8 -0
  257. package/dist/ee/server/src/controllers/user.d.ts.map +1 -0
  258. package/dist/ee/server/src/destroy.d.ts +6 -0
  259. package/dist/ee/server/src/destroy.d.ts.map +1 -0
  260. package/dist/ee/server/src/index.d.ts +380 -0
  261. package/dist/ee/server/src/index.d.ts.map +1 -0
  262. package/dist/ee/server/src/register.d.ts +6 -0
  263. package/dist/ee/server/src/register.d.ts.map +1 -0
  264. package/dist/ee/server/src/routes/index.d.ts +47 -0
  265. package/dist/ee/server/src/routes/index.d.ts.map +1 -0
  266. package/dist/ee/server/src/routes/license-limit.d.ts +18 -0
  267. package/dist/ee/server/src/routes/license-limit.d.ts.map +1 -0
  268. package/dist/ee/server/src/routes/sso.d.ts +29 -0
  269. package/dist/ee/server/src/routes/sso.d.ts.map +1 -0
  270. package/dist/ee/server/src/routes/utils.d.ts +3 -0
  271. package/dist/ee/server/src/routes/utils.d.ts.map +1 -0
  272. package/dist/ee/server/src/services/auth.d.ts +6 -0
  273. package/dist/ee/server/src/services/auth.d.ts.map +1 -0
  274. package/dist/ee/server/src/services/index.d.ts +39 -0
  275. package/dist/ee/server/src/services/index.d.ts.map +1 -0
  276. package/dist/ee/server/src/services/metrics.d.ts +8 -0
  277. package/dist/ee/server/src/services/metrics.d.ts.map +1 -0
  278. package/dist/ee/server/src/services/passport/provider-registry.d.ts +4 -0
  279. package/dist/ee/server/src/services/passport/provider-registry.d.ts.map +1 -0
  280. package/dist/ee/server/src/services/passport/sso.d.ts +19 -0
  281. package/dist/ee/server/src/services/passport/sso.d.ts.map +1 -0
  282. package/dist/ee/server/src/services/passport.d.ts +13 -0
  283. package/dist/ee/server/src/services/passport.d.ts.map +1 -0
  284. package/dist/ee/server/src/services/role.d.ts +5 -0
  285. package/dist/ee/server/src/services/role.d.ts.map +1 -0
  286. package/dist/ee/server/src/services/seat-enforcement.d.ts +6 -0
  287. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -0
  288. package/dist/ee/server/src/services/user.d.ts +10 -0
  289. package/dist/ee/server/src/services/user.d.ts.map +1 -0
  290. package/dist/ee/server/src/utils/index.d.ts +11 -0
  291. package/dist/ee/server/src/utils/index.d.ts.map +1 -0
  292. package/dist/ee/server/src/utils/persisted-tables.d.ts +42 -0
  293. package/dist/ee/server/src/utils/persisted-tables.d.ts.map +1 -0
  294. package/dist/ee/server/src/utils/sso-lock.d.ts +6 -0
  295. package/dist/ee/server/src/utils/sso-lock.d.ts.map +1 -0
  296. package/dist/ee/server/src/validation/authentication.d.ts +15 -0
  297. package/dist/ee/server/src/validation/authentication.d.ts.map +1 -0
  298. package/dist/ee/server/src/validation/role.d.ts +21 -0
  299. package/dist/ee/server/src/validation/role.d.ts.map +1 -0
  300. package/dist/ee/server/src/validation/user.d.ts +19 -0
  301. package/dist/ee/server/src/validation/user.d.ts.map +1 -0
  302. package/dist/package.json.d.ts +16 -15
  303. package/dist/server/index.js +1934 -539
  304. package/dist/server/index.js.map +1 -1
  305. package/dist/server/index.mjs +1734 -338
  306. package/dist/server/index.mjs.map +1 -1
  307. package/dist/server/src/config/admin-actions.d.ts +26 -0
  308. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  309. package/dist/server/src/domain/action/index.d.ts +51 -1
  310. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  311. package/dist/server/src/domain/action/provider.d.ts +10 -13
  312. package/dist/server/src/domain/action/provider.d.ts.map +1 -1
  313. package/dist/server/src/domain/condition/provider.d.ts +5 -6
  314. package/dist/server/src/domain/condition/provider.d.ts.map +1 -1
  315. package/dist/server/src/domain/permission/index.d.ts +2 -2
  316. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  317. package/dist/server/src/index.d.ts +738 -10
  318. package/dist/server/src/index.d.ts.map +1 -1
  319. package/dist/server/src/services/action.d.ts +1 -3
  320. package/dist/server/src/services/action.d.ts.map +1 -1
  321. package/dist/server/src/services/permission.d.ts +11 -18
  322. package/dist/server/src/services/permission.d.ts.map +1 -1
  323. package/dist/server/src/services/transfer/permission.d.ts +6 -2
  324. package/dist/server/src/services/transfer/permission.d.ts.map +1 -1
  325. package/dist/server/src/validation/action-provider.d.ts.map +1 -1
  326. package/dist/shared/contracts/admin.d.ts +1 -0
  327. package/dist/shared/contracts/admin.d.ts.map +1 -1
  328. package/dist/shared/contracts/user.d.ts +1 -1
  329. package/dist/shared/contracts/user.d.ts.map +1 -1
  330. package/package.json +17 -16
  331. package/dist/admin/AdminSeatInfo-E8azTFQY.js.map +0 -1
  332. package/dist/admin/AdminSeatInfo-Q_hUNC5B.mjs.map +0 -1
  333. package/dist/admin/ApplicationInfoPage-kEld-u0P.mjs.map +0 -1
  334. package/dist/admin/ApplicationInfoPage-noPIfujW.js.map +0 -1
  335. package/dist/admin/AuthenticatedLayout-kLMmhrNQ.js.map +0 -1
  336. package/dist/admin/AuthenticatedLayout-zYfAXNPg.mjs.map +0 -1
  337. package/dist/admin/ContentBox-3MRTNw0X.js +0 -43
  338. package/dist/admin/ContentBox-3MRTNw0X.js.map +0 -1
  339. package/dist/admin/ContentBox-9LBDzws0.mjs +0 -41
  340. package/dist/admin/ContentBox-9LBDzws0.mjs.map +0 -1
  341. package/dist/admin/CreatePage-0dG6JVsn.js.map +0 -1
  342. package/dist/admin/CreatePage-bJgO6DND.mjs.map +0 -1
  343. package/dist/admin/EditPage-Bx_qeoOF.mjs.map +0 -1
  344. package/dist/admin/EditPage-D5r0GV3j.mjs.map +0 -1
  345. package/dist/admin/EditPage-T7HhMiw2.js.map +0 -1
  346. package/dist/admin/EditPage-X8jnX0_l.js.map +0 -1
  347. package/dist/admin/EditPage-iksJke6K.js.map +0 -1
  348. package/dist/admin/EditPage-yBDiueEy.mjs.map +0 -1
  349. package/dist/admin/EditView-9nfADKvX.mjs.map +0 -1
  350. package/dist/admin/EditView-kxg0Wurs.js.map +0 -1
  351. package/dist/admin/EditViewPage-I5bq_bCv.js.map +0 -1
  352. package/dist/admin/EditViewPage-PmrZwoCk.mjs.map +0 -1
  353. package/dist/admin/HomePage-XakoaT95.js.map +0 -1
  354. package/dist/admin/HomePage-n2buy2O4.mjs.map +0 -1
  355. package/dist/admin/InstalledPluginsPage--BdpZuNa.js.map +0 -1
  356. package/dist/admin/InstalledPluginsPage-nFNbVJPm.mjs.map +0 -1
  357. package/dist/admin/ListPage-SnKebmiT.js.map +0 -1
  358. package/dist/admin/ListPage-iBPceR0S.mjs.map +0 -1
  359. package/dist/admin/ListPage-k3F774YE.mjs.map +0 -1
  360. package/dist/admin/ListPage-nXLMZNTC.js.map +0 -1
  361. package/dist/admin/ListPage-pdwlNZO5.mjs.map +0 -1
  362. package/dist/admin/ListPage-pwMqUvh3.js.map +0 -1
  363. package/dist/admin/MarketplacePage--aN208CJ.mjs.map +0 -1
  364. package/dist/admin/MarketplacePage-Pwwe_Pr9.js.map +0 -1
  365. package/dist/admin/ProfilePage-9GtyEQef.js.map +0 -1
  366. package/dist/admin/ProfilePage-wo_TrDuQ.mjs.map +0 -1
  367. package/dist/admin/SSOProviders-QBcyB9VI.js.map +0 -1
  368. package/dist/admin/SSOProviders-nMmBLr8g.mjs.map +0 -1
  369. package/dist/admin/SelectRoles-82KlaNv9.mjs.map +0 -1
  370. package/dist/admin/SelectRoles-iUoQ1i46.js.map +0 -1
  371. package/dist/admin/SingleSignOnPage-N3e0bw3O.mjs.map +0 -1
  372. package/dist/admin/SingleSignOnPage-xBAVG_IK.js.map +0 -1
  373. package/dist/admin/Table-M_g0IUVs.js.map +0 -1
  374. package/dist/admin/Table-YZ9eQlTc.mjs.map +0 -1
  375. package/dist/admin/Theme-7W0we6BI.js.map +0 -1
  376. package/dist/admin/Theme-PrUuuGtN.mjs.map +0 -1
  377. package/dist/admin/TokenTypeSelect-HMyBvTwA.js.map +0 -1
  378. package/dist/admin/TokenTypeSelect-vAeDNBmG.mjs.map +0 -1
  379. package/dist/admin/UseCasePage-VlWOTc-k.js.map +0 -1
  380. package/dist/admin/index-6pjQxyB0.mjs.map +0 -1
  381. package/dist/admin/index-qf9IxVeZ.js.map +0 -1
  382. package/dist/admin/src/pages/InstalledPluginsPage.d.ts +0 -3
  383. package/dist/admin/validation-ODUz3BOU.js.map +0 -1
  384. package/dist/admin/validation-YqwSDeRS.mjs.map +0 -1
  385. package/dist/ee/server/index.js +0 -2180
  386. package/dist/ee/server/index.js.map +0 -1
  387. package/dist/ee/server/index.mjs +0 -2175
  388. package/dist/ee/server/index.mjs.map +0 -1
  389. package/strapi-server.js +0 -18
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const _ = require("lodash");
3
3
  const fp = require("lodash/fp");
4
- const utils$1 = require("@strapi/utils");
4
+ const utils$2 = require("@strapi/utils");
5
5
  const path = require("path");
6
6
  const fse = require("fs-extra");
7
7
  const koaStatic = require("koa-static");
8
8
  const dateFns = require("date-fns");
9
9
  require("@strapi/types");
10
- const _ = require("lodash");
11
10
  const bcrypt = require("bcryptjs");
12
- const passport$1 = require("koa-passport");
11
+ const passport$2 = require("koa-passport");
13
12
  const passportLocal = require("passport-local");
14
13
  const crypto = require("crypto");
15
14
  const jwt = require("jsonwebtoken");
@@ -25,6 +24,7 @@ const compose = require("koa-compose");
25
24
  const dataTransfer$1 = require("@strapi/data-transfer");
26
25
  const isLocalhostIp = require("is-localhost-ip");
27
26
  const punycode = require("punycode/");
27
+ const nodeSchedule = require("node-schedule");
28
28
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
29
29
  function _interopNamespace(e) {
30
30
  if (e && e.__esModule)
@@ -44,13 +44,13 @@ function _interopNamespace(e) {
44
44
  n.default = e;
45
45
  return Object.freeze(n);
46
46
  }
47
- const utils__default = /* @__PURE__ */ _interopDefault(utils$1);
47
+ const ___namespace = /* @__PURE__ */ _interopNamespace(_);
48
+ const utils__default = /* @__PURE__ */ _interopDefault(utils$2);
48
49
  const path__default = /* @__PURE__ */ _interopDefault(path);
49
50
  const fse__default = /* @__PURE__ */ _interopDefault(fse);
50
51
  const koaStatic__default = /* @__PURE__ */ _interopDefault(koaStatic);
51
- const ___namespace = /* @__PURE__ */ _interopNamespace(_);
52
52
  const bcrypt__default = /* @__PURE__ */ _interopDefault(bcrypt);
53
- const passport__default = /* @__PURE__ */ _interopDefault(passport$1);
53
+ const passport__default = /* @__PURE__ */ _interopDefault(passport$2);
54
54
  const crypto__default = /* @__PURE__ */ _interopDefault(crypto);
55
55
  const jwt__default = /* @__PURE__ */ _interopDefault(jwt);
56
56
  const permissions__default = /* @__PURE__ */ _interopDefault(permissions$1);
@@ -61,10 +61,10 @@ const tsUtils__default = /* @__PURE__ */ _interopDefault(tsUtils);
61
61
  const compose__default = /* @__PURE__ */ _interopDefault(compose);
62
62
  const isLocalhostIp__default = /* @__PURE__ */ _interopDefault(isLocalhostIp);
63
63
  const punycode__default = /* @__PURE__ */ _interopDefault(punycode);
64
- const getService = (name2) => {
64
+ const getService$1 = (name2) => {
65
65
  return strapi.service(`admin::${name2}`);
66
66
  };
67
- const actions = [
67
+ const actions$1 = [
68
68
  {
69
69
  uid: "marketplace.read",
70
70
  displayName: "Access the marketplace",
@@ -115,7 +115,13 @@ const actions = [
115
115
  pluginName: "admin",
116
116
  section: "settings",
117
117
  category: "users and roles",
118
- subCategory: "users"
118
+ subCategory: "users",
119
+ aliases: [
120
+ {
121
+ actionId: "plugin::content-manager.explorer.read",
122
+ subjects: ["admin::user"]
123
+ }
124
+ ]
119
125
  },
120
126
  {
121
127
  uid: "users.update",
@@ -147,7 +153,13 @@ const actions = [
147
153
  pluginName: "admin",
148
154
  section: "settings",
149
155
  category: "users and roles",
150
- subCategory: "roles"
156
+ subCategory: "roles",
157
+ aliases: [
158
+ {
159
+ actionId: "plugin::content-manager.explorer.read",
160
+ subjects: ["admin::role"]
161
+ }
162
+ ]
151
163
  },
152
164
  {
153
165
  uid: "roles.update",
@@ -277,7 +289,7 @@ const actions = [
277
289
  }
278
290
  ];
279
291
  const adminActions = {
280
- actions
292
+ actions: actions$1
281
293
  };
282
294
  const conditions = [
283
295
  {
@@ -312,13 +324,13 @@ const defaultAdminAuthSettings = {
312
324
  }
313
325
  };
314
326
  const registerPermissionActions = async () => {
315
- await getService("permission").actionProvider.registerMany(adminActions.actions);
327
+ await getService$1("permission").actionProvider.registerMany(adminActions.actions);
316
328
  };
317
329
  const registerAdminConditions = async () => {
318
- await getService("permission").conditionProvider.registerMany(adminConditions.conditions);
330
+ await getService$1("permission").conditionProvider.registerMany(adminConditions.conditions);
319
331
  };
320
332
  const registerModelHooks = () => {
321
- const { sendDidChangeInterfaceLanguage: sendDidChangeInterfaceLanguage2 } = getService("metrics");
333
+ const { sendDidChangeInterfaceLanguage: sendDidChangeInterfaceLanguage2 } = getService$1("metrics");
322
334
  strapi.db.lifecycles.subscribe({
323
335
  models: ["admin::user"],
324
336
  afterCreate: sendDidChangeInterfaceLanguage2,
@@ -334,7 +346,7 @@ const syncAuthSettings = async () => {
334
346
  const adminStore = await strapi.store({ type: "core", name: "admin" });
335
347
  const adminAuthSettings = await adminStore.get({ key: "auth" });
336
348
  const newAuthSettings = fp.merge(defaultAdminAuthSettings, adminAuthSettings);
337
- const roleExists = await getService("role").exists({
349
+ const roleExists = await getService$1("role").exists({
338
350
  id: newAuthSettings.providers.defaultRole
339
351
  });
340
352
  if (!roleExists) {
@@ -344,7 +356,7 @@ const syncAuthSettings = async () => {
344
356
  };
345
357
  const syncAPITokensPermissions = async () => {
346
358
  const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
347
- const permissionsInDB = await utils$1.async.pipe(
359
+ const permissionsInDB = await utils$2.async.pipe(
348
360
  strapi.db.query("admin::api-token-permission").findMany,
349
361
  fp.map("action")
350
362
  )();
@@ -353,16 +365,16 @@ const syncAPITokensPermissions = async () => {
353
365
  await strapi.db.query("admin::api-token-permission").deleteMany({ where: { action: { $in: unknownPermissions } } });
354
366
  }
355
367
  };
356
- const bootstrap = async ({ strapi: strapi2 }) => {
368
+ const bootstrap$1 = async ({ strapi: strapi2 }) => {
357
369
  await registerAdminConditions();
358
370
  await registerPermissionActions();
359
371
  registerModelHooks();
360
- const permissionService = getService("permission");
361
- const userService = getService("user");
362
- const roleService = getService("role");
363
- const apiTokenService = getService("api-token");
364
- const transferService = getService("transfer");
365
- const tokenService = getService("token");
372
+ const permissionService = getService$1("permission");
373
+ const userService = getService$1("user");
374
+ const roleService = getService$1("role");
375
+ const apiTokenService = getService$1("api-token");
376
+ const transferService = getService$1("transfer");
377
+ const tokenService = getService$1("token");
366
378
  await roleService.createRolesIfNoneExist();
367
379
  await roleService.resetSuperAdminPermissions();
368
380
  await roleService.displayWarningIfNoSuperAdmin();
@@ -370,8 +382,8 @@ const bootstrap = async ({ strapi: strapi2 }) => {
370
382
  await userService.displayWarningIfUsersDontHaveRole();
371
383
  await syncAuthSettings();
372
384
  await syncAPITokensPermissions();
373
- await getService("metrics").sendUpdateProjectInformation(strapi2);
374
- getService("metrics").startCron(strapi2);
385
+ await getService$1("metrics").sendUpdateProjectInformation(strapi2);
386
+ getService$1("metrics").startCron(strapi2);
375
387
  apiTokenService.checkSaltIsDefined();
376
388
  transferService.token.checkSaltIsDefined();
377
389
  tokenService.checkSecretIsDefined();
@@ -428,7 +440,7 @@ const serveStatic = (filesDir, koaStaticOptions = {}) => {
428
440
  ctx.path = prev;
429
441
  };
430
442
  };
431
- const authenticate$2 = async (ctx) => {
443
+ const authenticate$3 = async (ctx) => {
432
444
  const { authorization } = ctx.request.header;
433
445
  if (!authorization) {
434
446
  return { authenticated: false };
@@ -438,7 +450,7 @@ const authenticate$2 = async (ctx) => {
438
450
  return { authenticated: false };
439
451
  }
440
452
  const token2 = parts[1];
441
- const { payload, isValid } = getService("token").decodeJwtToken(token2);
453
+ const { payload, isValid } = getService$1("token").decodeJwtToken(token2);
442
454
  if (!isValid) {
443
455
  return { authenticated: false };
444
456
  }
@@ -446,7 +458,7 @@ const authenticate$2 = async (ctx) => {
446
458
  if (!user2 || !(user2.isActive === true)) {
447
459
  return { authenticated: false };
448
460
  }
449
- const userAbility = await getService("permission").engine.generateUserAbility(user2);
461
+ const userAbility = await getService$1("permission").engine.generateUserAbility(user2);
450
462
  ctx.state.userAbility = userAbility;
451
463
  ctx.state.user = user2;
452
464
  return {
@@ -458,7 +470,7 @@ const authenticate$2 = async (ctx) => {
458
470
  const name$1 = "admin";
459
471
  const adminAuthStrategy = {
460
472
  name: name$1,
461
- authenticate: authenticate$2
473
+ authenticate: authenticate$3
462
474
  };
463
475
  const DAY_IN_MS = 24 * 60 * 60 * 1e3;
464
476
  const constants$3 = {
@@ -498,7 +510,7 @@ const constants$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
498
510
  __proto__: null,
499
511
  default: constants$3
500
512
  }, Symbol.toStringTag, { value: "Module" }));
501
- const { UnauthorizedError: UnauthorizedError$2, ForbiddenError: ForbiddenError$1 } = utils$1.errors;
513
+ const { UnauthorizedError: UnauthorizedError$3, ForbiddenError: ForbiddenError$2 } = utils$2.errors;
502
514
  const isReadScope = (scope) => scope.endsWith("find") || scope.endsWith("findOne");
503
515
  const extractToken$1 = (ctx) => {
504
516
  if (ctx.request && ctx.request.header && ctx.request.header.authorization) {
@@ -510,8 +522,8 @@ const extractToken$1 = (ctx) => {
510
522
  }
511
523
  return null;
512
524
  };
513
- const authenticate$1 = async (ctx) => {
514
- const apiTokenService = getService("api-token");
525
+ const authenticate$2 = async (ctx) => {
526
+ const apiTokenService = getService$1("api-token");
515
527
  const token2 = extractToken$1(ctx);
516
528
  if (!token2) {
517
529
  return { authenticated: false };
@@ -526,7 +538,7 @@ const authenticate$1 = async (ctx) => {
526
538
  if (!fp.isNil(apiToken2.expiresAt)) {
527
539
  const expirationDate = new Date(apiToken2.expiresAt);
528
540
  if (expirationDate < currentDate) {
529
- return { authenticated: false, error: new UnauthorizedError$2("Token expired") };
541
+ return { authenticated: false, error: new UnauthorizedError$3("Token expired") };
530
542
  }
531
543
  }
532
544
  const hoursSinceLastUsed = dateFns.differenceInHours(currentDate, dateFns.parseISO(apiToken2.lastUsedAt));
@@ -544,44 +556,44 @@ const authenticate$1 = async (ctx) => {
544
556
  }
545
557
  return { authenticated: true, credentials: apiToken2 };
546
558
  };
547
- const verify$2 = (auth2, config) => {
559
+ const verify$2 = (auth2, config2) => {
548
560
  const { credentials: apiToken2, ability: ability2 } = auth2;
549
561
  if (!apiToken2) {
550
- throw new UnauthorizedError$2("Token not found");
562
+ throw new UnauthorizedError$3("Token not found");
551
563
  }
552
564
  const currentDate = /* @__PURE__ */ new Date();
553
565
  if (!fp.isNil(apiToken2.expiresAt)) {
554
566
  const expirationDate = new Date(apiToken2.expiresAt);
555
567
  if (expirationDate < currentDate) {
556
- throw new UnauthorizedError$2("Token expired");
568
+ throw new UnauthorizedError$3("Token expired");
557
569
  }
558
570
  }
559
571
  if (apiToken2.type === constants$3.API_TOKEN_TYPE.FULL_ACCESS) {
560
572
  return;
561
573
  }
562
574
  if (apiToken2.type === constants$3.API_TOKEN_TYPE.READ_ONLY) {
563
- const scopes = fp.castArray(config.scope);
564
- if (config.scope && scopes.every(isReadScope)) {
575
+ const scopes = fp.castArray(config2.scope);
576
+ if (config2.scope && scopes.every(isReadScope)) {
565
577
  return;
566
578
  }
567
579
  } else if (apiToken2.type === constants$3.API_TOKEN_TYPE.CUSTOM) {
568
580
  if (!ability2) {
569
- throw new ForbiddenError$1();
581
+ throw new ForbiddenError$2();
570
582
  }
571
- const scopes = fp.castArray(config.scope);
583
+ const scopes = fp.castArray(config2.scope);
572
584
  const isAllowed = scopes.every((scope) => ability2.can(scope));
573
585
  if (isAllowed) {
574
586
  return;
575
587
  }
576
588
  }
577
- throw new ForbiddenError$1();
589
+ throw new ForbiddenError$2();
578
590
  };
579
591
  const apiTokenAuthStrategy = {
580
592
  name: "api-token",
581
- authenticate: authenticate$1,
593
+ authenticate: authenticate$2,
582
594
  verify: verify$2
583
595
  };
584
- const register$1 = ({ strapi: strapi2 }) => {
596
+ const register$2 = ({ strapi: strapi2 }) => {
585
597
  const passportMiddleware = strapi2.service("admin::passport").init();
586
598
  strapi2.server.api("admin").use(passportMiddleware);
587
599
  strapi2.get("auth").register("admin", adminAuthStrategy);
@@ -590,8 +602,8 @@ const register$1 = ({ strapi: strapi2 }) => {
590
602
  registerAdminPanelRoute({ strapi: strapi2 });
591
603
  }
592
604
  };
593
- const destroy = async () => {
594
- const { conditionProvider: conditionProvider2, actionProvider: actionProvider2 } = getService("permission");
605
+ const destroy$1 = async () => {
606
+ const { conditionProvider: conditionProvider2, actionProvider: actionProvider2 } = getService$1("permission");
595
607
  await conditionProvider2.clear();
596
608
  await actionProvider2.clear();
597
609
  };
@@ -611,34 +623,34 @@ But don’t worry! You can use the following link to reset your password:
611
623
 
612
624
  Thanks.`;
613
625
  const forgotPasswordTemplate = { subject, text, html };
614
- const forgotPassword$1 = {
626
+ const forgotPassword$2 = {
615
627
  emailTemplate: forgotPasswordTemplate
616
628
  };
617
- const index$6 = {
618
- forgotPassword: forgotPassword$1
629
+ const config = {
630
+ forgotPassword: forgotPassword$2
619
631
  };
620
632
  const isAuthenticatedAdmin = (policyCtx) => {
621
633
  return Boolean(policyCtx.state.isAuthenticated);
622
634
  };
623
- const hasPermissionsSchema = utils$1.yup.object({
624
- actions: utils$1.yup.array().of(
635
+ const hasPermissionsSchema = utils$2.yup.object({
636
+ actions: utils$2.yup.array().of(
625
637
  // @ts-expect-error yup types
626
- utils$1.yup.lazy((val) => {
638
+ utils$2.yup.lazy((val) => {
627
639
  if (___namespace.default.isArray(val)) {
628
- return utils$1.yup.array().of(utils$1.yup.string()).min(1).max(2);
640
+ return utils$2.yup.array().of(utils$2.yup.string()).min(1).max(2);
629
641
  }
630
642
  if (___namespace.default.isString(val)) {
631
- return utils$1.yup.string().required();
643
+ return utils$2.yup.string().required();
632
644
  }
633
- return utils$1.yup.object().shape({
634
- action: utils$1.yup.string().required(),
635
- subject: utils$1.yup.string()
645
+ return utils$2.yup.object().shape({
646
+ action: utils$2.yup.string().required(),
647
+ subject: utils$2.yup.string()
636
648
  });
637
649
  })
638
650
  )
639
651
  });
640
- const validateHasPermissionsInput = utils$1.validateYupSchema(hasPermissionsSchema);
641
- const { createPolicy: createPolicy$1 } = utils$1.policy;
652
+ const validateHasPermissionsInput = utils$2.validateYupSchema(hasPermissionsSchema);
653
+ const { createPolicy: createPolicy$1 } = utils$2.policy;
642
654
  const inputModifiers = [
643
655
  {
644
656
  check: ___namespace.default.isString,
@@ -657,8 +669,8 @@ const inputModifiers = [
657
669
  const hasPermissions = createPolicy$1({
658
670
  name: "admin::hasPermissions",
659
671
  validator: validateHasPermissionsInput,
660
- handler(ctx, config) {
661
- const { actions: actions2 } = config;
672
+ handler(ctx, config2) {
673
+ const { actions: actions2 } = config2;
662
674
  const { userAbility: ability2 } = ctx.state;
663
675
  const permissions2 = actions2.map(
664
676
  (action2) => inputModifiers.find((modifier) => modifier.check(action2))?.transform(action2)
@@ -669,7 +681,7 @@ const hasPermissions = createPolicy$1({
669
681
  return isAuthorized;
670
682
  }
671
683
  });
672
- const { createPolicy } = utils$1.policy;
684
+ const { createPolicy } = utils$2.policy;
673
685
  const isTelemetryEnabled = createPolicy({
674
686
  name: "admin::isTelemetryEnabled",
675
687
  handler(_ctx, _config, { strapi: strapi2 }) {
@@ -678,8 +690,8 @@ const isTelemetryEnabled = createPolicy({
678
690
  }
679
691
  }
680
692
  });
681
- const index$5 = { isAuthenticatedAdmin, hasPermissions, isTelemetryEnabled };
682
- const admin$1 = [
693
+ const policies = { isAuthenticatedAdmin, hasPermissions, isTelemetryEnabled };
694
+ const admin$4 = [
683
695
  {
684
696
  method: "GET",
685
697
  path: "/init",
@@ -748,7 +760,7 @@ const admin$1 = [
748
760
  }
749
761
  }
750
762
  ];
751
- const authentication$1 = [
763
+ const authentication$2 = [
752
764
  {
753
765
  method: "POST",
754
766
  path: "/login",
@@ -1177,7 +1189,7 @@ const contentApi$1 = [
1177
1189
  }
1178
1190
  }
1179
1191
  ];
1180
- const { UnauthorizedError: UnauthorizedError$1, ForbiddenError } = utils$1.errors;
1192
+ const { UnauthorizedError: UnauthorizedError$2, ForbiddenError: ForbiddenError$1 } = utils$2.errors;
1181
1193
  const extractToken = (ctx) => {
1182
1194
  if (ctx.request && ctx.request.header && ctx.request.header.authorization) {
1183
1195
  const parts = ctx.request.header.authorization.split(/\s+/);
@@ -1188,8 +1200,8 @@ const extractToken = (ctx) => {
1188
1200
  }
1189
1201
  return null;
1190
1202
  };
1191
- const authenticate = async (ctx) => {
1192
- const { token: tokenService } = getService("transfer");
1203
+ const authenticate$1 = async (ctx) => {
1204
+ const { token: tokenService } = getService$1("transfer");
1193
1205
  const token2 = extractToken(ctx);
1194
1206
  if (!token2) {
1195
1207
  return { authenticated: false };
@@ -1202,7 +1214,7 @@ const authenticate = async (ctx) => {
1202
1214
  if (!fp.isNil(transferToken2.expiresAt)) {
1203
1215
  const expirationDate = new Date(transferToken2.expiresAt);
1204
1216
  if (expirationDate < currentDate) {
1205
- return { authenticated: false, error: new UnauthorizedError$1("Token expired") };
1217
+ return { authenticated: false, error: new UnauthorizedError$2("Token expired") };
1206
1218
  }
1207
1219
  }
1208
1220
  const hoursSinceLastUsed = dateFns.differenceInHours(currentDate, dateFns.parseISO(transferToken2.lastUsedAt));
@@ -1212,36 +1224,36 @@ const authenticate = async (ctx) => {
1212
1224
  data: { lastUsedAt: currentDate }
1213
1225
  });
1214
1226
  }
1215
- const ability2 = await getService("transfer").permission.engine.generateAbility(
1227
+ const ability2 = await getService$1("transfer").permission.engine.generateAbility(
1216
1228
  transferToken2.permissions.map((action2) => ({ action: action2 }))
1217
1229
  );
1218
1230
  return { authenticated: true, ability: ability2, credentials: transferToken2 };
1219
1231
  };
1220
- const verify$1 = async (auth2, config = {}) => {
1232
+ const verify$1 = async (auth2, config2 = {}) => {
1221
1233
  const { credentials: transferToken2, ability: ability2 } = auth2;
1222
1234
  if (!transferToken2) {
1223
- throw new UnauthorizedError$1("Token not found");
1235
+ throw new UnauthorizedError$2("Token not found");
1224
1236
  }
1225
1237
  const currentDate = /* @__PURE__ */ new Date();
1226
1238
  if (!fp.isNil(transferToken2.expiresAt)) {
1227
1239
  const expirationDate = new Date(transferToken2.expiresAt);
1228
1240
  if (expirationDate < currentDate) {
1229
- throw new UnauthorizedError$1("Token expired");
1241
+ throw new UnauthorizedError$2("Token expired");
1230
1242
  }
1231
1243
  }
1232
1244
  if (!ability2) {
1233
- throw new ForbiddenError();
1245
+ throw new ForbiddenError$1();
1234
1246
  }
1235
- const scopes = fp.castArray(config.scope ?? []);
1247
+ const scopes = fp.castArray(config2.scope ?? []);
1236
1248
  const isAllowed = scopes.every((scope) => ability2.can(scope));
1237
1249
  if (!isAllowed) {
1238
- throw new ForbiddenError();
1250
+ throw new ForbiddenError$1();
1239
1251
  }
1240
1252
  };
1241
1253
  const name = "data-transfer";
1242
1254
  const dataTransferAuthStrategy = {
1243
1255
  name,
1244
- authenticate,
1256
+ authenticate: authenticate$1,
1245
1257
  verify: verify$1
1246
1258
  };
1247
1259
  const transfer$2 = [
@@ -1342,12 +1354,12 @@ const transfer$2 = [
1342
1354
  }
1343
1355
  }
1344
1356
  ];
1345
- const routes = {
1357
+ const routes$1 = {
1346
1358
  admin: {
1347
1359
  type: "admin",
1348
1360
  routes: [
1349
- ...admin$1,
1350
- ...authentication$1,
1361
+ ...admin$4,
1362
+ ...authentication$2,
1351
1363
  ...permissions,
1352
1364
  ...users,
1353
1365
  ...roles$1,
@@ -1358,7 +1370,7 @@ const routes = {
1358
1370
  ]
1359
1371
  }
1360
1372
  };
1361
- const { ApplicationError: ApplicationError$7 } = utils$1.errors;
1373
+ const { ApplicationError: ApplicationError$a } = utils$2.errors;
1362
1374
  const hashPassword = (password2) => bcrypt__default.default.hash(password2, 10);
1363
1375
  const validatePassword = (password2, hash2) => bcrypt__default.default.compare(password2, hash2);
1364
1376
  const checkCredentials = async ({ email: email2, password: password2 }) => {
@@ -1375,13 +1387,13 @@ const checkCredentials = async ({ email: email2, password: password2 }) => {
1375
1387
  }
1376
1388
  return [null, user2];
1377
1389
  };
1378
- const forgotPassword = async ({ email: email2 } = {}) => {
1390
+ const forgotPassword$1 = async ({ email: email2 } = {}) => {
1379
1391
  const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
1380
1392
  if (!user2) {
1381
1393
  return;
1382
1394
  }
1383
- const resetPasswordToken = getService("token").createToken();
1384
- await getService("user").updateById(user2.id, { resetPasswordToken });
1395
+ const resetPasswordToken = getService$1("token").createToken();
1396
+ await getService$1("user").updateById(user2.id, { resetPasswordToken });
1385
1397
  const url = `${strapi.config.get(
1386
1398
  "admin.absoluteUrl"
1387
1399
  )}/auth/reset-password?code=${resetPasswordToken}`;
@@ -1400,18 +1412,18 @@ const forgotPassword = async ({ email: email2 } = {}) => {
1400
1412
  strapi.log.error(err);
1401
1413
  });
1402
1414
  };
1403
- const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
1415
+ const resetPassword$1 = async ({ resetPasswordToken, password: password2 } = {}) => {
1404
1416
  const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
1405
1417
  if (!matchingUser) {
1406
- throw new ApplicationError$7();
1418
+ throw new ApplicationError$a();
1407
1419
  }
1408
- return getService("user").updateById(matchingUser.id, {
1420
+ return getService$1("user").updateById(matchingUser.id, {
1409
1421
  password: password2,
1410
1422
  resetPasswordToken: null
1411
1423
  });
1412
1424
  };
1413
- const auth = { checkCredentials, validatePassword, hashPassword, forgotPassword, resetPassword };
1414
- const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$3 } = constants$3;
1425
+ const auth$1 = { checkCredentials, validatePassword, hashPassword, forgotPassword: forgotPassword$1, resetPassword: resetPassword$1 };
1426
+ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$5 } = constants$3;
1415
1427
  function createUser(attributes) {
1416
1428
  return {
1417
1429
  roles: [],
@@ -1421,7 +1433,7 @@ function createUser(attributes) {
1421
1433
  };
1422
1434
  }
1423
1435
  const hasSuperAdminRole$1 = (user2) => {
1424
- return user2.roles.filter((role2) => role2.code === SUPER_ADMIN_CODE$3).length > 0;
1436
+ return user2.roles.filter((role2) => role2.code === SUPER_ADMIN_CODE$5).length > 0;
1425
1437
  };
1426
1438
  const ADMIN_USER_ALLOWED_FIELDS = ["id", "firstname", "lastname", "username"];
1427
1439
  const getDefaultActionAttributes = () => ({
@@ -1437,7 +1449,8 @@ const actionFields = [
1437
1449
  "pluginName",
1438
1450
  "subjects",
1439
1451
  "options",
1440
- "actionId"
1452
+ "actionId",
1453
+ "aliases"
1441
1454
  ];
1442
1455
  const sanitizeActionAttributes = fp.pick(actionFields);
1443
1456
  const computeActionId = (attributes) => {
@@ -1510,18 +1523,18 @@ const checkFieldsDontHaveDuplicates = (fields) => {
1510
1523
  return ___namespace.default.uniq(fields).length === fields.length;
1511
1524
  };
1512
1525
  const getActionFromProvider = (actionId) => {
1513
- return getService("permission").actionProvider.get(actionId);
1514
- };
1515
- const email = utils$1.yup.string().email().lowercase();
1516
- const firstname = utils$1.yup.string().trim().min(1);
1517
- const lastname = utils$1.yup.string();
1518
- const username = utils$1.yup.string().min(1);
1519
- const password = utils$1.yup.string().min(8).matches(/[a-z]/, "${path} must contain at least one lowercase character").matches(/[A-Z]/, "${path} must contain at least one uppercase character").matches(/\d/, "${path} must contain at least one number");
1520
- const roles = utils$1.yup.array(utils$1.yup.strapiID()).min(1);
1521
- const isAPluginName = utils$1.yup.string().test("is-a-plugin-name", "is not a plugin name", function(value) {
1526
+ return getService$1("permission").actionProvider.get(actionId);
1527
+ };
1528
+ const email = utils$2.yup.string().email().lowercase();
1529
+ const firstname = utils$2.yup.string().trim().min(1);
1530
+ const lastname = utils$2.yup.string();
1531
+ const username = utils$2.yup.string().min(1);
1532
+ const password = utils$2.yup.string().min(8).matches(/[a-z]/, "${path} must contain at least one lowercase character").matches(/[A-Z]/, "${path} must contain at least one uppercase character").matches(/\d/, "${path} must contain at least one number");
1533
+ const roles = utils$2.yup.array(utils$2.yup.strapiID()).min(1);
1534
+ const isAPluginName = utils$2.yup.string().test("is-a-plugin-name", "is not a plugin name", function(value) {
1522
1535
  return [void 0, "admin", ...Object.keys(strapi.plugins)].includes(value) ? true : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });
1523
1536
  });
1524
- const arrayOfConditionNames = utils$1.yup.array().of(utils$1.yup.string()).test("is-an-array-of-conditions", "is not a plugin name", function(value) {
1537
+ const arrayOfConditionNames = utils$2.yup.array().of(utils$2.yup.string()).test("is-an-array-of-conditions", "is not a plugin name", function(value) {
1525
1538
  const ids = strapi.service("admin::permission").conditionProvider.keys();
1526
1539
  return ___namespace.default.isUndefined(value) || ___namespace.default.difference(value, ids).length === 0 ? true : this.createError({ path: this.path, message: `contains conditions that don't exist` });
1527
1540
  });
@@ -1535,7 +1548,7 @@ const checkNilFields = (action2) => function(fields) {
1535
1548
  }
1536
1549
  return actionDomain.appliesToProperty("fields", action2) || fp.isNil(fields);
1537
1550
  };
1538
- const fieldsPropertyValidation = (action2) => utils$1.yup.array().of(utils$1.yup.string()).nullable().test(
1551
+ const fieldsPropertyValidation = (action2) => utils$2.yup.array().of(utils$2.yup.string()).nullable().test(
1539
1552
  "field-nested",
1540
1553
  "Fields format are incorrect (bad nesting).",
1541
1554
  checkFieldsAreCorrectlyNested
@@ -1549,15 +1562,15 @@ const fieldsPropertyValidation = (action2) => utils$1.yup.array().of(utils$1.yup
1549
1562
  // @ts-expect-error yup types
1550
1563
  checkNilFields(action2)
1551
1564
  );
1552
- const permission$3 = utils$1.yup.object().shape({
1553
- action: utils$1.yup.string().required().test("action-validity", "action is not an existing permission action", function(actionId) {
1565
+ const permission$3 = utils$2.yup.object().shape({
1566
+ action: utils$2.yup.string().required().test("action-validity", "action is not an existing permission action", function(actionId) {
1554
1567
  if (fp.isNil(actionId)) {
1555
1568
  return true;
1556
1569
  }
1557
1570
  return !!getActionFromProvider(actionId);
1558
1571
  }),
1559
- actionParameters: utils$1.yup.object().nullable(),
1560
- subject: utils$1.yup.string().nullable().test("subject-validity", "Invalid subject submitted", function(subject2) {
1572
+ actionParameters: utils$2.yup.object().nullable(),
1573
+ subject: utils$2.yup.string().nullable().test("subject-validity", "Invalid subject submitted", function(subject2) {
1561
1574
  const action2 = getActionFromProvider(this.options.parent.action);
1562
1575
  if (!action2) {
1563
1576
  return true;
@@ -1565,12 +1578,12 @@ const permission$3 = utils$1.yup.object().shape({
1565
1578
  if (fp.isNil(action2.subjects)) {
1566
1579
  return fp.isNil(subject2);
1567
1580
  }
1568
- if (fp.isArray(action2.subjects)) {
1581
+ if (fp.isArray(action2.subjects) && !fp.isNil(subject2)) {
1569
1582
  return action2.subjects.includes(subject2);
1570
1583
  }
1571
1584
  return false;
1572
1585
  }),
1573
- properties: utils$1.yup.object().test("properties-structure", "Invalid property set at ${path}", function(properties) {
1586
+ properties: utils$2.yup.object().test("properties-structure", "Invalid property set at ${path}", function(properties) {
1574
1587
  const action2 = getActionFromProvider(this.options.parent.action);
1575
1588
  const hasNoProperties = fp.isEmpty(properties) || fp.isNil(properties);
1576
1589
  if (!fp.has("options.applyToProperties", action2)) {
@@ -1609,10 +1622,10 @@ const permission$3 = utils$1.yup.object().shape({
1609
1622
  }
1610
1623
  }
1611
1624
  ),
1612
- conditions: utils$1.yup.array().of(utils$1.yup.string())
1625
+ conditions: utils$2.yup.array().of(utils$2.yup.string())
1613
1626
  }).noUnknown();
1614
- const updatePermissions = utils$1.yup.object().shape({
1615
- permissions: utils$1.yup.array().required().of(permission$3).test(
1627
+ const updatePermissions = utils$2.yup.object().shape({
1628
+ permissions: utils$2.yup.array().required().of(permission$3).test(
1616
1629
  "duplicated-permissions",
1617
1630
  "Some permissions are duplicated (same action and subject)",
1618
1631
  checkNoDuplicatedPermissions
@@ -1630,46 +1643,46 @@ const validators = {
1630
1643
  permission: permission$3,
1631
1644
  updatePermissions
1632
1645
  };
1633
- const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$2 } = constants$3;
1634
- const { ValidationError: ValidationError$4 } = utils$1.errors;
1635
- const sanitizeUserRoles = (role2) => ___namespace.default.pick(role2, ["id", "name", "description", "code"]);
1636
- const sanitizeUser = (user2) => {
1646
+ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$4 } = constants$3;
1647
+ const { ValidationError: ValidationError$6 } = utils$2.errors;
1648
+ const sanitizeUserRoles$1 = (role2) => ___namespace.default.pick(role2, ["id", "name", "description", "code"]);
1649
+ const sanitizeUser$1 = (user2) => {
1637
1650
  return {
1638
1651
  ...___namespace.default.omit(user2, ["password", "resetPasswordToken", "registrationToken", "roles"]),
1639
- roles: user2.roles && user2.roles.map(sanitizeUserRoles)
1652
+ roles: user2.roles && user2.roles.map(sanitizeUserRoles$1)
1640
1653
  };
1641
1654
  };
1642
1655
  const create$5 = async (attributes) => {
1643
1656
  const userInfo = {
1644
- registrationToken: getService("token").createToken(),
1657
+ registrationToken: getService$1("token").createToken(),
1645
1658
  ...attributes
1646
1659
  };
1647
1660
  if (___namespace.default.has(attributes, "password")) {
1648
- userInfo.password = await getService("auth").hashPassword(attributes.password);
1661
+ userInfo.password = await getService$1("auth").hashPassword(attributes.password);
1649
1662
  }
1650
1663
  const user2 = createUser(userInfo);
1651
1664
  const createdUser = await strapi.db.query("admin::user").create({ data: user2, populate: ["roles"] });
1652
- getService("metrics").sendDidInviteUser();
1653
- strapi.eventHub.emit("user.create", { user: sanitizeUser(createdUser) });
1665
+ getService$1("metrics").sendDidInviteUser();
1666
+ strapi.eventHub.emit("user.create", { user: sanitizeUser$1(createdUser) });
1654
1667
  return createdUser;
1655
1668
  };
1656
- const updateById = async (id, attributes) => {
1669
+ const updateById$1 = async (id, attributes) => {
1657
1670
  if (___namespace.default.has(attributes, "roles")) {
1658
- const lastAdminUser = await isLastSuperAdminUser(id);
1659
- const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1660
- const willRemoveSuperAdminRole = !utils$1.arrays.includesString(attributes.roles, superAdminRole.id);
1671
+ const lastAdminUser = await isLastSuperAdminUser$1(id);
1672
+ const superAdminRole = await getService$1("role").getSuperAdminWithUsersCount();
1673
+ const willRemoveSuperAdminRole = !utils$2.arrays.includesString(attributes.roles, superAdminRole.id);
1661
1674
  if (lastAdminUser && willRemoveSuperAdminRole) {
1662
- throw new ValidationError$4("You must have at least one user with super admin role.");
1675
+ throw new ValidationError$6("You must have at least one user with super admin role.");
1663
1676
  }
1664
1677
  }
1665
1678
  if (attributes.isActive === false) {
1666
- const lastAdminUser = await isLastSuperAdminUser(id);
1679
+ const lastAdminUser = await isLastSuperAdminUser$1(id);
1667
1680
  if (lastAdminUser) {
1668
- throw new ValidationError$4("You must have at least one user with super admin role.");
1681
+ throw new ValidationError$6("You must have at least one user with super admin role.");
1669
1682
  }
1670
1683
  }
1671
1684
  if (___namespace.default.has(attributes, "password")) {
1672
- const hashedPassword = await getService("auth").hashPassword(attributes.password);
1685
+ const hashedPassword = await getService$1("auth").hashPassword(attributes.password);
1673
1686
  const updatedUser2 = await strapi.db.query("admin::user").update({
1674
1687
  where: { id },
1675
1688
  data: {
@@ -1678,7 +1691,7 @@ const updateById = async (id, attributes) => {
1678
1691
  },
1679
1692
  populate: ["roles"]
1680
1693
  });
1681
- strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser2) });
1694
+ strapi.eventHub.emit("user.update", { user: sanitizeUser$1(updatedUser2) });
1682
1695
  return updatedUser2;
1683
1696
  }
1684
1697
  const updatedUser = await strapi.db.query("admin::user").update({
@@ -1687,7 +1700,7 @@ const updateById = async (id, attributes) => {
1687
1700
  populate: ["roles"]
1688
1701
  });
1689
1702
  if (updatedUser) {
1690
- strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser) });
1703
+ strapi.eventHub.emit("user.update", { user: sanitizeUser$1(updatedUser) });
1691
1704
  }
1692
1705
  return updatedUser;
1693
1706
  };
@@ -1699,17 +1712,17 @@ const resetPasswordByEmail = async (email2, password$1) => {
1699
1712
  try {
1700
1713
  await password.validate(password$1);
1701
1714
  } catch (error) {
1702
- throw new ValidationError$4(
1715
+ throw new ValidationError$6(
1703
1716
  "Invalid password. Expected a minimum of 8 characters with at least one number and one uppercase letter"
1704
1717
  );
1705
1718
  }
1706
- await updateById(user2.id, { password: password$1 });
1719
+ await updateById$1(user2.id, { password: password$1 });
1707
1720
  };
1708
- const isLastSuperAdminUser = async (userId) => {
1709
- const user2 = await findOne$1(userId);
1721
+ const isLastSuperAdminUser$1 = async (userId) => {
1722
+ const user2 = await findOne$2(userId);
1710
1723
  if (!user2)
1711
1724
  return false;
1712
- const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1725
+ const superAdminRole = await getService$1("role").getSuperAdminWithUsersCount();
1713
1726
  return superAdminRole.usersCount === 1 && hasSuperAdminRole$1(user2);
1714
1727
  };
1715
1728
  const exists$3 = async (attributes = {}) => {
@@ -1722,15 +1735,15 @@ const findRegistrationInfo = async (registrationToken) => {
1722
1735
  }
1723
1736
  return ___namespace.default.pick(user2, ["email", "firstname", "lastname"]);
1724
1737
  };
1725
- const register = async ({
1738
+ const register$1 = async ({
1726
1739
  registrationToken,
1727
1740
  userInfo
1728
1741
  }) => {
1729
1742
  const matchingUser = await strapi.db.query("admin::user").findOne({ where: { registrationToken } });
1730
1743
  if (!matchingUser) {
1731
- throw new ValidationError$4("Invalid registration info");
1744
+ throw new ValidationError$6("Invalid registration info");
1732
1745
  }
1733
- return getService("user").updateById(matchingUser.id, {
1746
+ return getService$1("user").updateById(matchingUser.id, {
1734
1747
  password: userInfo.password,
1735
1748
  firstname: userInfo.firstname,
1736
1749
  lastname: userInfo.lastname,
@@ -1738,7 +1751,7 @@ const register = async ({
1738
1751
  isActive: true
1739
1752
  });
1740
1753
  };
1741
- const findOne$1 = async (id, populate = ["roles"]) => {
1754
+ const findOne$2 = async (id, populate = ["roles"]) => {
1742
1755
  return strapi.db.query("admin::user").findOne({ where: { id }, populate });
1743
1756
  };
1744
1757
  const findOneByEmail = async (email2, populate = []) => {
@@ -1751,7 +1764,7 @@ const findPage = async (params = {}) => {
1751
1764
  const query = strapi.get("query-params").transform("admin::user", fp.defaults({ populate: ["roles"] }, params));
1752
1765
  return strapi.db.query("admin::user").findPage(query);
1753
1766
  };
1754
- const deleteById = async (id) => {
1767
+ const deleteById$1 = async (id) => {
1755
1768
  const userToDelete = await strapi.db.query("admin::user").findOne({
1756
1769
  where: { id },
1757
1770
  populate: ["roles"]
@@ -1760,19 +1773,19 @@ const deleteById = async (id) => {
1760
1773
  return null;
1761
1774
  }
1762
1775
  if (userToDelete) {
1763
- if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE$2)) {
1764
- const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1776
+ if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE$4)) {
1777
+ const superAdminRole = await getService$1("role").getSuperAdminWithUsersCount();
1765
1778
  if (superAdminRole.usersCount === 1) {
1766
- throw new ValidationError$4("You must have at least one user with super admin role.");
1779
+ throw new ValidationError$6("You must have at least one user with super admin role.");
1767
1780
  }
1768
1781
  }
1769
1782
  }
1770
1783
  const deletedUser = await strapi.db.query("admin::user").delete({ where: { id }, populate: ["roles"] });
1771
- strapi.eventHub.emit("user.delete", { user: sanitizeUser(deletedUser) });
1784
+ strapi.eventHub.emit("user.delete", { user: sanitizeUser$1(deletedUser) });
1772
1785
  return deletedUser;
1773
1786
  };
1774
- const deleteByIds$2 = async (ids) => {
1775
- const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1787
+ const deleteByIds$3 = async (ids) => {
1788
+ const superAdminRole = await getService$1("role").getSuperAdminWithUsersCount();
1776
1789
  const nbOfSuperAdminToDelete = await strapi.db.query("admin::user").count({
1777
1790
  where: {
1778
1791
  id: ids,
@@ -1780,7 +1793,7 @@ const deleteByIds$2 = async (ids) => {
1780
1793
  }
1781
1794
  });
1782
1795
  if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {
1783
- throw new ValidationError$4("You must have at least one user with super admin role.");
1796
+ throw new ValidationError$6("You must have at least one user with super admin role.");
1784
1797
  }
1785
1798
  const deletedUsers = [];
1786
1799
  for (const id of ids) {
@@ -1791,7 +1804,7 @@ const deleteByIds$2 = async (ids) => {
1791
1804
  deletedUsers.push(deletedUser);
1792
1805
  }
1793
1806
  strapi.eventHub.emit("user.delete", {
1794
- users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser))
1807
+ users: deletedUsers.map((deletedUser) => sanitizeUser$1(deletedUser))
1795
1808
  });
1796
1809
  return deletedUsers;
1797
1810
  };
@@ -1833,18 +1846,18 @@ const getLanguagesInUse = async () => {
1833
1846
  const users2 = await strapi.db.query("admin::user").findMany({ select: ["preferedLanguage"] });
1834
1847
  return users2.map((user2) => user2.preferedLanguage || "en");
1835
1848
  };
1836
- const user$1 = {
1849
+ const user$3 = {
1837
1850
  create: create$5,
1838
- updateById,
1851
+ updateById: updateById$1,
1839
1852
  exists: exists$3,
1840
1853
  findRegistrationInfo,
1841
- register,
1842
- sanitizeUser,
1843
- findOne: findOne$1,
1854
+ register: register$1,
1855
+ sanitizeUser: sanitizeUser$1,
1856
+ findOne: findOne$2,
1844
1857
  findOneByEmail,
1845
1858
  findPage,
1846
- deleteById,
1847
- deleteByIds: deleteByIds$2,
1859
+ deleteById: deleteById$1,
1860
+ deleteByIds: deleteByIds$3,
1848
1861
  countUsersWithoutRole,
1849
1862
  count: count$1,
1850
1863
  assignARoleToAll,
@@ -1924,17 +1937,17 @@ const permissionDomain = {
1924
1937
  setProperty,
1925
1938
  toPermission
1926
1939
  };
1927
- const checkPermissionsSchema = utils$1.yup.object().shape({
1928
- permissions: utils$1.yup.array().of(
1929
- utils$1.yup.object().shape({
1930
- action: utils$1.yup.string().required(),
1931
- subject: utils$1.yup.string().nullable(),
1932
- field: utils$1.yup.string()
1940
+ const checkPermissionsSchema = utils$2.yup.object().shape({
1941
+ permissions: utils$2.yup.array().of(
1942
+ utils$2.yup.object().shape({
1943
+ action: utils$2.yup.string().required(),
1944
+ subject: utils$2.yup.string().nullable(),
1945
+ field: utils$2.yup.string()
1933
1946
  }).noUnknown()
1934
1947
  )
1935
1948
  });
1936
1949
  const checkPermissionsExist = function(permissions2) {
1937
- const existingActions = getService("permission").actionProvider.values();
1950
+ const existingActions = getService$1("permission").actionProvider.values();
1938
1951
  const failIndex = permissions2.findIndex(
1939
1952
  (permission2) => !existingActions.some(
1940
1953
  (action2) => action2.actionId === permission2.action && (action2.section !== "contentTypes" || action2.subjects.includes(permission2.subject))
@@ -1948,17 +1961,17 @@ const checkPermissionsExist = function(permissions2) {
1948
1961
  })
1949
1962
  );
1950
1963
  };
1951
- const actionsExistSchema = utils$1.yup.array().of(
1952
- utils$1.yup.object().shape({
1953
- conditions: utils$1.yup.array().of(utils$1.yup.string())
1964
+ const actionsExistSchema = utils$2.yup.array().of(
1965
+ utils$2.yup.object().shape({
1966
+ conditions: utils$2.yup.array().of(utils$2.yup.string())
1954
1967
  })
1955
1968
  ).test("actions-exist", "", checkPermissionsExist);
1956
- const validatePermissionsExist = utils$1.validateYupSchema(actionsExistSchema);
1957
- const validateCheckPermissionsInput = utils$1.validateYupSchema(checkPermissionsSchema);
1958
- const validatedUpdatePermissionsInput = utils$1.validateYupSchema(validators.updatePermissions);
1959
- const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$1, CONTENT_TYPE_SECTION } = constants$3;
1960
- const { createAsyncSeriesWaterfallHook } = utils$1.hooks;
1961
- const { ApplicationError: ApplicationError$6 } = utils$1.errors;
1969
+ const validatePermissionsExist = utils$2.validateYupSchema(actionsExistSchema);
1970
+ const validateCheckPermissionsInput = utils$2.validateYupSchema(checkPermissionsSchema);
1971
+ const validatedUpdatePermissionsInput = utils$2.validateYupSchema(validators.updatePermissions);
1972
+ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$3, CONTENT_TYPE_SECTION } = constants$3;
1973
+ const { createAsyncSeriesWaterfallHook } = utils$2.hooks;
1974
+ const { ApplicationError: ApplicationError$9 } = utils$2.errors;
1962
1975
  const hooks = {
1963
1976
  willResetSuperAdminPermissions: createAsyncSeriesWaterfallHook()
1964
1977
  };
@@ -1981,11 +1994,11 @@ const arePermissionsEqual = (p1, p2) => {
1981
1994
  const create$3 = async (attributes) => {
1982
1995
  const alreadyExists = await exists$2({ name: attributes.name });
1983
1996
  if (alreadyExists) {
1984
- throw new ApplicationError$6(
1997
+ throw new ApplicationError$9(
1985
1998
  `The name must be unique and a role with name \`${attributes.name}\` already exists.`
1986
1999
  );
1987
2000
  }
1988
- const autoGeneratedCode = `${___namespace.default.kebabCase(attributes.name)}-${utils$1.dates.timestampCode()}`;
2001
+ const autoGeneratedCode = `${___namespace.default.kebabCase(attributes.name)}-${utils$2.dates.timestampCode()}`;
1989
2002
  const rolesWithCode = {
1990
2003
  ...attributes,
1991
2004
  code: attributes.code || autoGeneratedCode
@@ -1994,7 +2007,7 @@ const create$3 = async (attributes) => {
1994
2007
  strapi.eventHub.emit("role.create", { role: sanitizeRole(result) });
1995
2008
  return result;
1996
2009
  };
1997
- const findOne = (params = {}, populate) => {
2010
+ const findOne$1 = (params = {}, populate) => {
1998
2011
  return strapi.db.query("admin::role").findOne({ where: params, populate });
1999
2012
  };
2000
2013
  const findOneWithUsersCount = async (params = {}, populate) => {
@@ -2022,7 +2035,7 @@ const update$3 = async (params, attributes) => {
2022
2035
  id: { $ne: params.id }
2023
2036
  });
2024
2037
  if (alreadyExists) {
2025
- throw new ApplicationError$6(
2038
+ throw new ApplicationError$9(
2026
2039
  `The name must be unique and a role with name \`${sanitizedAttributes.name}\` already exists.`
2027
2040
  );
2028
2041
  }
@@ -2040,19 +2053,19 @@ const count = async (params = {}) => {
2040
2053
  };
2041
2054
  const checkRolesIdForDeletion = async (ids = []) => {
2042
2055
  const superAdminRole = await getSuperAdmin();
2043
- if (superAdminRole && utils$1.arrays.includesString(ids, superAdminRole.id)) {
2044
- throw new ApplicationError$6("You cannot delete the super admin role");
2056
+ if (superAdminRole && utils$2.arrays.includesString(ids, superAdminRole.id)) {
2057
+ throw new ApplicationError$9("You cannot delete the super admin role");
2045
2058
  }
2046
2059
  for (const roleId of ids) {
2047
2060
  const usersCount = await getUsersCount(roleId);
2048
2061
  if (usersCount !== 0) {
2049
- throw new ApplicationError$6("Some roles are still assigned to some users");
2062
+ throw new ApplicationError$9("Some roles are still assigned to some users");
2050
2063
  }
2051
2064
  }
2052
2065
  };
2053
- const deleteByIds$1 = async (ids = []) => {
2066
+ const deleteByIds$2 = async (ids = []) => {
2054
2067
  await checkRolesIdForDeletion(ids);
2055
- await getService("permission").deleteByRolesIds(ids);
2068
+ await getService$1("permission").deleteByRolesIds(ids);
2056
2069
  const deletedRoles = [];
2057
2070
  for (const id of ids) {
2058
2071
  const deletedRole = await strapi.db.query("admin::role").delete({ where: { id } });
@@ -2066,14 +2079,14 @@ const deleteByIds$1 = async (ids = []) => {
2066
2079
  const getUsersCount = async (roleId) => {
2067
2080
  return strapi.db.query("admin::user").count({ where: { roles: { id: roleId } } });
2068
2081
  };
2069
- const getSuperAdmin = () => findOne({ code: SUPER_ADMIN_CODE$1 });
2070
- const getSuperAdminWithUsersCount = () => findOneWithUsersCount({ code: SUPER_ADMIN_CODE$1 });
2082
+ const getSuperAdmin = () => findOne$1({ code: SUPER_ADMIN_CODE$3 });
2083
+ const getSuperAdminWithUsersCount = () => findOneWithUsersCount({ code: SUPER_ADMIN_CODE$3 });
2071
2084
  const createRolesIfNoneExist = async () => {
2072
2085
  const someRolesExist = await exists$2();
2073
2086
  if (someRolesExist) {
2074
2087
  return;
2075
2088
  }
2076
- const { actionProvider: actionProvider2 } = getService("permission");
2089
+ const { actionProvider: actionProvider2 } = getService$1("permission");
2077
2090
  const allActions = actionProvider2.values();
2078
2091
  const contentTypesActions = allActions.filter((a) => a.section === "contentTypes");
2079
2092
  const superAdminRole = await create$3({
@@ -2081,7 +2094,7 @@ const createRolesIfNoneExist = async () => {
2081
2094
  code: "strapi-super-admin",
2082
2095
  description: "Super Admins can access and manage all features and settings."
2083
2096
  });
2084
- await getService("user").assignARoleToAll(superAdminRole.id);
2097
+ await getService$1("user").assignARoleToAll(superAdminRole.id);
2085
2098
  const editorRole = await create$3({
2086
2099
  name: "Editor",
2087
2100
  code: "strapi-editor",
@@ -2092,7 +2105,7 @@ const createRolesIfNoneExist = async () => {
2092
2105
  code: "strapi-author",
2093
2106
  description: "Authors can manage the content they have created."
2094
2107
  });
2095
- const editorPermissions = getService("content-type").getPermissionsWithNestedFields(
2108
+ const editorPermissions = getService$1("content-type").getPermissionsWithNestedFields(
2096
2109
  contentTypesActions,
2097
2110
  {
2098
2111
  restrictedSubjects: ["plugin::users-permissions.user"]
@@ -2119,7 +2132,7 @@ const getDefaultPluginPermissions = ({ isAuthor = false } = {}) => {
2119
2132
  };
2120
2133
  const displayWarningIfNoSuperAdmin = async () => {
2121
2134
  const superAdminRole = await getSuperAdminWithUsersCount();
2122
- const someUsersExists = await getService("user").exists();
2135
+ const someUsersExists = await getService$1("user").exists();
2123
2136
  if (!superAdminRole) {
2124
2137
  strapi.log.warn("Your application doesn't have a super admin role.");
2125
2138
  } else if (someUsersExists && superAdminRole.usersCount === 0) {
@@ -2128,12 +2141,12 @@ const displayWarningIfNoSuperAdmin = async () => {
2128
2141
  };
2129
2142
  const assignPermissions = async (roleId, permissions2 = []) => {
2130
2143
  await validatePermissionsExist(permissions2);
2131
- const internalActions = getService("permission").actionProvider.values().filter((action2) => action2.section === "internal").map((action2) => action2.actionId);
2132
- const superAdmin = await getService("role").getSuperAdmin();
2144
+ const internalActions = getService$1("permission").actionProvider.values().filter((action2) => action2.section === "internal").map((action2) => action2.actionId);
2145
+ const superAdmin = await getService$1("role").getSuperAdmin();
2133
2146
  const isSuperAdmin = superAdmin && superAdmin.id === roleId;
2134
2147
  const assignRole = fp.set("role", roleId);
2135
2148
  const permissionsWithRole = permissions2.map(assignRole).map(permissionDomain.create);
2136
- const existingPermissions = await getService("permission").findMany({
2149
+ const existingPermissions = await getService$1("permission").findMany({
2137
2150
  where: { role: { id: roleId } },
2138
2151
  populate: ["role"]
2139
2152
  });
@@ -2149,31 +2162,31 @@ const assignPermissions = async (roleId, permissions2 = []) => {
2149
2162
  ).filter((permission2) => !internalActions.includes(permission2.action));
2150
2163
  const permissionsToReturn = fp.differenceBy("id", permissionsToDelete, existingPermissions);
2151
2164
  if (permissionsToDelete.length > 0) {
2152
- await getService("permission").deleteByIds(permissionsToDelete.map(fp.prop("id")));
2165
+ await getService$1("permission").deleteByIds(permissionsToDelete.map(fp.prop("id")));
2153
2166
  }
2154
2167
  if (permissionsToAdd.length > 0) {
2155
2168
  const newPermissions = await addPermissions(roleId, permissionsToAdd);
2156
2169
  permissionsToReturn.push(...newPermissions);
2157
2170
  }
2158
2171
  if (!isSuperAdmin && (permissionsToAdd.length || permissionsToDelete.length)) {
2159
- await getService("metrics").sendDidUpdateRolePermissions();
2172
+ await getService$1("metrics").sendDidUpdateRolePermissions();
2160
2173
  }
2161
2174
  return permissionsToReturn;
2162
2175
  };
2163
2176
  const addPermissions = async (roleId, permissions2) => {
2164
- const { conditionProvider: conditionProvider2, createMany: createMany2 } = getService("permission");
2177
+ const { conditionProvider: conditionProvider2, createMany: createMany2 } = getService$1("permission");
2165
2178
  const { sanitizeConditions: sanitizeConditions2 } = permissionDomain;
2166
2179
  const permissionsWithRole = permissions2.map(fp.set("role", roleId)).map(sanitizeConditions2(conditionProvider2)).map(permissionDomain.create);
2167
2180
  return createMany2(permissionsWithRole);
2168
2181
  };
2169
2182
  const isContentTypeAction = (action2) => action2.section === CONTENT_TYPE_SECTION;
2170
2183
  const resetSuperAdminPermissions = async () => {
2171
- const superAdminRole = await getService("role").getSuperAdmin();
2184
+ const superAdminRole = await getService$1("role").getSuperAdmin();
2172
2185
  if (!superAdminRole) {
2173
2186
  return;
2174
2187
  }
2175
- const permissionService = getService("permission");
2176
- const contentTypeService = getService("content-type");
2188
+ const permissionService = getService$1("permission");
2189
+ const contentTypeService = getService$1("content-type");
2177
2190
  const allActions = permissionService.actionProvider.values();
2178
2191
  const contentTypesActions = allActions.filter((action2) => isContentTypeAction(action2));
2179
2192
  const otherActions = allActions.filter((action2) => !isContentTypeAction(action2));
@@ -2199,23 +2212,23 @@ const resetSuperAdminPermissions = async () => {
2199
2212
  };
2200
2213
  const hasSuperAdminRole = (user2) => {
2201
2214
  const roles2 = ___namespace.default.get(user2, "roles", []);
2202
- return roles2.map(fp.prop("code")).includes(SUPER_ADMIN_CODE$1);
2215
+ return roles2.map(fp.prop("code")).includes(SUPER_ADMIN_CODE$3);
2203
2216
  };
2204
2217
  const constants$2 = {
2205
- superAdminCode: SUPER_ADMIN_CODE$1
2218
+ superAdminCode: SUPER_ADMIN_CODE$3
2206
2219
  };
2207
- const role$1 = {
2220
+ const role$3 = {
2208
2221
  hooks,
2209
2222
  sanitizeRole,
2210
2223
  create: create$3,
2211
- findOne,
2224
+ findOne: findOne$1,
2212
2225
  findOneWithUsersCount,
2213
2226
  find,
2214
2227
  findAllWithUsersCount,
2215
2228
  update: update$3,
2216
2229
  exists: exists$2,
2217
2230
  count,
2218
- deleteByIds: deleteByIds$1,
2231
+ deleteByIds: deleteByIds$2,
2219
2232
  getUsersCount,
2220
2233
  getSuperAdmin,
2221
2234
  getSuperAdminWithUsersCount,
@@ -2236,7 +2249,7 @@ const createLocalStrategy = (strapi2, middleware) => {
2236
2249
  session: false
2237
2250
  },
2238
2251
  (email2, password2, done) => {
2239
- return getService("auth").checkCredentials({ email: fp.toLower(email2), password: password2 }).then(async ([error, user2, message]) => {
2252
+ return getService$1("auth").checkCredentials({ email: fp.toLower(email2), password: password2 }).then(async ([error, user2, message]) => {
2240
2253
  if (middleware) {
2241
2254
  return middleware([error, user2, message], done);
2242
2255
  }
@@ -2253,7 +2266,7 @@ const valueIsFunctionType = ([, value]) => fp.isFunction(value);
2253
2266
  const keyIsValidEventName = ([key]) => {
2254
2267
  return Object.keys(strapi.service("admin::passport").authEventsMapper).includes(key);
2255
2268
  };
2256
- const getPassportStrategies = () => [createLocalStrategy(strapi)];
2269
+ const getPassportStrategies$1 = () => [createLocalStrategy(strapi)];
2257
2270
  const registerAuthEvents = () => {
2258
2271
  const { events = {} } = strapi.config.get("admin.auth", {});
2259
2272
  const { authEventsMapper: authEventsMapper2 } = strapi.service("admin::passport");
@@ -2267,10 +2280,10 @@ const init = () => {
2267
2280
  registerAuthEvents();
2268
2281
  return passport__default.default.initialize();
2269
2282
  };
2270
- const passport = { init, getPassportStrategies, authEventsMapper };
2283
+ const passport$1 = { init, getPassportStrategies: getPassportStrategies$1, authEventsMapper };
2271
2284
  const sendDidInviteUser = async () => {
2272
- const numberOfUsers = await getService("user").count();
2273
- const numberOfRoles = await getService("role").count();
2285
+ const numberOfUsers = await getService$1("user").count();
2286
+ const numberOfRoles = await getService$1("role").count();
2274
2287
  strapi.telemetry.send("didInviteUser", {
2275
2288
  groupProperties: { numberOfRoles, numberOfUsers }
2276
2289
  });
@@ -2279,27 +2292,27 @@ const sendDidUpdateRolePermissions = async () => {
2279
2292
  strapi.telemetry.send("didUpdateRolePermissions");
2280
2293
  };
2281
2294
  const sendDidChangeInterfaceLanguage = async () => {
2282
- const languagesInUse = await getService("user").getLanguagesInUse();
2295
+ const languagesInUse = await getService$1("user").getLanguagesInUse();
2283
2296
  strapi.telemetry.send("didChangeInterfaceLanguage", { userProperties: { languagesInUse } });
2284
2297
  };
2285
- const sendUpdateProjectInformation = async (strapi2) => {
2286
- const numberOfActiveAdminUsers = await getService("user").count({ isActive: true });
2287
- const numberOfAdminUsers = await getService("user").count();
2298
+ const sendUpdateProjectInformation$1 = async (strapi2) => {
2299
+ const numberOfActiveAdminUsers = await getService$1("user").count({ isActive: true });
2300
+ const numberOfAdminUsers = await getService$1("user").count();
2288
2301
  strapi2.telemetry.send("didUpdateProjectInformation", {
2289
2302
  groupProperties: { numberOfActiveAdminUsers, numberOfAdminUsers }
2290
2303
  });
2291
2304
  };
2292
- const startCron = (strapi2) => {
2305
+ const startCron$1 = (strapi2) => {
2293
2306
  strapi2.cron.add({
2294
- "0 0 0 * * *": () => sendUpdateProjectInformation(strapi2)
2307
+ "0 0 0 * * *": () => sendUpdateProjectInformation$1(strapi2)
2295
2308
  });
2296
2309
  };
2297
- const metrics = {
2310
+ const metrics$1 = {
2298
2311
  sendDidInviteUser,
2299
2312
  sendDidUpdateRolePermissions,
2300
2313
  sendDidChangeInterfaceLanguage,
2301
- sendUpdateProjectInformation,
2302
- startCron
2314
+ sendUpdateProjectInformation: sendUpdateProjectInformation$1,
2315
+ startCron: startCron$1
2303
2316
  };
2304
2317
  const defaultJwtOptions = { expiresIn: "30d" };
2305
2318
  const getTokenOptions = () => {
@@ -2344,37 +2357,37 @@ const token$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
2344
2357
  decodeJwtToken,
2345
2358
  getTokenOptions
2346
2359
  }, Symbol.toStringTag, { value: "Module" }));
2347
- const registerProviderActionSchema = utils$1.yup.array().required().of(
2348
- utils$1.yup.object().shape({
2349
- uid: utils$1.yup.string().matches(
2360
+ const registerProviderActionSchema = utils$2.yup.array().required().of(
2361
+ utils$2.yup.object().shape({
2362
+ uid: utils$2.yup.string().matches(
2350
2363
  /^[a-z]([a-z|.|-]+)[a-z]$/,
2351
2364
  (v) => `${v.path}: The id can only contain lowercase letters, dots and hyphens.`
2352
2365
  ).required(),
2353
- section: utils$1.yup.string().oneOf(["contentTypes", "plugins", "settings", "internal"]).required(),
2354
- pluginName: utils$1.yup.mixed().when("section", {
2366
+ section: utils$2.yup.string().oneOf(["contentTypes", "plugins", "settings", "internal"]).required(),
2367
+ pluginName: utils$2.yup.mixed().when("section", {
2355
2368
  is: "plugins",
2356
2369
  then: validators.isAPluginName.required(),
2357
2370
  otherwise: validators.isAPluginName
2358
2371
  }),
2359
- subjects: utils$1.yup.mixed().when("section", {
2372
+ subjects: utils$2.yup.mixed().when("section", {
2360
2373
  is: "contentTypes",
2361
- then: utils$1.yup.array().of(utils$1.yup.string()).required(),
2362
- otherwise: utils$1.yup.mixed().oneOf([void 0], 'subjects should only be defined for the "contentTypes" section')
2374
+ then: utils$2.yup.array().of(utils$2.yup.string()).required(),
2375
+ otherwise: utils$2.yup.mixed().oneOf([void 0], 'subjects should only be defined for the "contentTypes" section')
2363
2376
  }),
2364
- displayName: utils$1.yup.string().required(),
2365
- category: utils$1.yup.mixed().when("section", {
2377
+ displayName: utils$2.yup.string().required(),
2378
+ category: utils$2.yup.mixed().when("section", {
2366
2379
  is: "settings",
2367
- then: utils$1.yup.string().required(),
2368
- otherwise: utils$1.yup.mixed().test(
2380
+ then: utils$2.yup.string().required(),
2381
+ otherwise: utils$2.yup.mixed().test(
2369
2382
  "settingsCategory",
2370
2383
  'category should only be defined for the "settings" section',
2371
2384
  (cat) => cat === void 0
2372
2385
  )
2373
2386
  }),
2374
- subCategory: utils$1.yup.mixed().when("section", {
2387
+ subCategory: utils$2.yup.mixed().when("section", {
2375
2388
  is: (section) => ["settings", "plugins"].includes(section),
2376
- then: utils$1.yup.string(),
2377
- otherwise: utils$1.yup.mixed().test(
2389
+ then: utils$2.yup.string(),
2390
+ otherwise: utils$2.yup.mixed().test(
2378
2391
  "settingsSubCategory",
2379
2392
  'subCategory should only be defined for "plugins" and "settings" sections',
2380
2393
  (subCat) => {
@@ -2382,17 +2395,23 @@ const registerProviderActionSchema = utils$1.yup.array().required().of(
2382
2395
  }
2383
2396
  )
2384
2397
  }),
2385
- options: utils$1.yup.object({
2386
- applyToProperties: utils$1.yup.array().of(utils$1.yup.string())
2387
- })
2398
+ options: utils$2.yup.object({
2399
+ applyToProperties: utils$2.yup.array().of(utils$2.yup.string())
2400
+ }),
2401
+ aliases: utils$2.yup.array(
2402
+ utils$2.yup.object({
2403
+ actionId: utils$2.yup.string(),
2404
+ subjects: utils$2.yup.array(utils$2.yup.string()).nullable()
2405
+ })
2406
+ ).nullable()
2388
2407
  }).noUnknown()
2389
2408
  );
2390
- const validateRegisterProviderAction = utils$1.validateYupSchemaSync(registerProviderActionSchema);
2391
- const { ApplicationError: ApplicationError$5 } = utils$1.errors;
2409
+ const validateRegisterProviderAction = utils$2.validateYupSchemaSync(registerProviderActionSchema);
2410
+ const { ApplicationError: ApplicationError$8 } = utils$2.errors;
2392
2411
  const createActionProvider = (options) => {
2393
- const provider = utils$1.providerFactory(options);
2412
+ const provider = utils$2.providerFactory(options);
2394
2413
  const actionHooks = {
2395
- appliesPropertyToSubject: utils$1.hooks.createAsyncParallelHook()
2414
+ appliesPropertyToSubject: utils$2.hooks.createAsyncParallelHook()
2396
2415
  };
2397
2416
  return {
2398
2417
  ...provider,
@@ -2418,7 +2437,7 @@ const createActionProvider = (options) => {
2418
2437
  async appliesToProperty(property, actionId, subject2) {
2419
2438
  const action2 = provider.get(actionId);
2420
2439
  if (!action2) {
2421
- throw new ApplicationError$5(`No action found with id "${actionId}"`);
2440
+ throw new ApplicationError$8(`No action found with id "${actionId}"`);
2422
2441
  }
2423
2442
  const appliesToAction = actionDomain.appliesToProperty(property, action2);
2424
2443
  if (!appliesToAction) {
@@ -2436,6 +2455,29 @@ const createActionProvider = (options) => {
2436
2455
  subject: subject2
2437
2456
  });
2438
2457
  return results.every((result) => result !== false);
2458
+ },
2459
+ /**
2460
+ * @experimental
2461
+ */
2462
+ unstable_aliases(actionId, subject2) {
2463
+ const isRegistered = this.has(actionId);
2464
+ if (!isRegistered) {
2465
+ return [];
2466
+ }
2467
+ return this.values().filter(
2468
+ (action2) => action2.aliases?.some((alias) => {
2469
+ if (alias.actionId !== actionId) {
2470
+ return false;
2471
+ }
2472
+ if (!Array.isArray(alias.subjects)) {
2473
+ return true;
2474
+ }
2475
+ if (!subject2) {
2476
+ return false;
2477
+ }
2478
+ return alias.subjects.includes(subject2);
2479
+ })
2480
+ ).map((action2) => action2.actionId);
2439
2481
  }
2440
2482
  };
2441
2483
  };
@@ -2473,7 +2515,7 @@ const domain = {
2473
2515
  sanitizeConditionAttributes
2474
2516
  };
2475
2517
  const createConditionProvider = () => {
2476
- const provider = utils$1.providerFactory();
2518
+ const provider = utils$2.providerFactory();
2477
2519
  return {
2478
2520
  ...provider,
2479
2521
  async register(conditionAttributes) {
@@ -2493,14 +2535,14 @@ const createConditionProvider = () => {
2493
2535
  };
2494
2536
  const {
2495
2537
  visitors: { removePassword, expandWildcardPopulate }
2496
- } = utils$1.sanitize;
2538
+ } = utils$2.sanitize;
2497
2539
  const {
2498
2540
  constants: constants$1,
2499
2541
  isScalarAttribute: isScalarAttribute$1,
2500
2542
  getNonVisibleAttributes: getNonVisibleAttributes$1,
2501
2543
  getNonWritableAttributes,
2502
2544
  getWritableAttributes: getWritableAttributes$1
2503
- } = utils$1.contentTypes;
2545
+ } = utils$2.contentTypes;
2504
2546
  const {
2505
2547
  ID_ATTRIBUTE: ID_ATTRIBUTE$1,
2506
2548
  DOC_ID_ATTRIBUTE: DOC_ID_ATTRIBUTE$1,
@@ -2514,7 +2556,7 @@ const COMPONENT_FIELDS$1 = ["__component"];
2514
2556
  const STATIC_FIELDS$1 = [ID_ATTRIBUTE$1, DOC_ID_ATTRIBUTE$1];
2515
2557
  const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) => {
2516
2558
  const schema = strapi.getModel(model);
2517
- const { removeDisallowedFields } = utils$1.sanitize.visitors;
2559
+ const { removeDisallowedFields } = utils$2.sanitize.visitors;
2518
2560
  const ctx = {
2519
2561
  schema,
2520
2562
  getModel: strapi.getModel.bind(strapi)
@@ -2522,39 +2564,39 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2522
2564
  const createSanitizeQuery = (options = {}) => {
2523
2565
  const { fields } = options;
2524
2566
  const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);
2525
- const sanitizeFilters = utils$1.async.pipe(
2526
- utils$1.traverse.traverseQueryFilters(removeDisallowedFields(permittedFields), ctx),
2527
- utils$1.traverse.traverseQueryFilters(omitDisallowedAdminUserFields, ctx),
2528
- utils$1.traverse.traverseQueryFilters(omitHiddenFields, ctx),
2529
- utils$1.traverse.traverseQueryFilters(removePassword, ctx),
2530
- utils$1.traverse.traverseQueryFilters(({ key, value }, { remove }) => {
2567
+ const sanitizeFilters = utils$2.async.pipe(
2568
+ utils$2.traverse.traverseQueryFilters(removeDisallowedFields(permittedFields), ctx),
2569
+ utils$2.traverse.traverseQueryFilters(omitDisallowedAdminUserFields, ctx),
2570
+ utils$2.traverse.traverseQueryFilters(omitHiddenFields, ctx),
2571
+ utils$2.traverse.traverseQueryFilters(removePassword, ctx),
2572
+ utils$2.traverse.traverseQueryFilters(({ key, value }, { remove }) => {
2531
2573
  if (fp.isObject(value) && fp.isEmpty(value)) {
2532
2574
  remove(key);
2533
2575
  }
2534
2576
  }, ctx)
2535
2577
  );
2536
- const sanitizeSort = utils$1.async.pipe(
2537
- utils$1.traverse.traverseQuerySort(removeDisallowedFields(permittedFields), ctx),
2538
- utils$1.traverse.traverseQuerySort(omitDisallowedAdminUserFields, ctx),
2539
- utils$1.traverse.traverseQuerySort(omitHiddenFields, ctx),
2540
- utils$1.traverse.traverseQuerySort(removePassword, ctx),
2541
- utils$1.traverse.traverseQuerySort(({ key, attribute, value }, { remove }) => {
2578
+ const sanitizeSort = utils$2.async.pipe(
2579
+ utils$2.traverse.traverseQuerySort(removeDisallowedFields(permittedFields), ctx),
2580
+ utils$2.traverse.traverseQuerySort(omitDisallowedAdminUserFields, ctx),
2581
+ utils$2.traverse.traverseQuerySort(omitHiddenFields, ctx),
2582
+ utils$2.traverse.traverseQuerySort(removePassword, ctx),
2583
+ utils$2.traverse.traverseQuerySort(({ key, attribute, value }, { remove }) => {
2542
2584
  if (!isScalarAttribute$1(attribute) && fp.isEmpty(value)) {
2543
2585
  remove(key);
2544
2586
  }
2545
2587
  }, ctx)
2546
2588
  );
2547
- const sanitizePopulate = utils$1.async.pipe(
2548
- utils$1.traverse.traverseQueryPopulate(expandWildcardPopulate, ctx),
2549
- utils$1.traverse.traverseQueryPopulate(removeDisallowedFields(permittedFields), ctx),
2550
- utils$1.traverse.traverseQueryPopulate(omitDisallowedAdminUserFields, ctx),
2551
- utils$1.traverse.traverseQueryPopulate(omitHiddenFields, ctx),
2552
- utils$1.traverse.traverseQueryPopulate(removePassword, ctx)
2589
+ const sanitizePopulate = utils$2.async.pipe(
2590
+ utils$2.traverse.traverseQueryPopulate(expandWildcardPopulate, ctx),
2591
+ utils$2.traverse.traverseQueryPopulate(removeDisallowedFields(permittedFields), ctx),
2592
+ utils$2.traverse.traverseQueryPopulate(omitDisallowedAdminUserFields, ctx),
2593
+ utils$2.traverse.traverseQueryPopulate(omitHiddenFields, ctx),
2594
+ utils$2.traverse.traverseQueryPopulate(removePassword, ctx)
2553
2595
  );
2554
- const sanitizeFields = utils$1.async.pipe(
2555
- utils$1.traverse.traverseQueryFields(removeDisallowedFields(permittedFields), ctx),
2556
- utils$1.traverse.traverseQueryFields(omitHiddenFields, ctx),
2557
- utils$1.traverse.traverseQueryFields(removePassword, ctx)
2596
+ const sanitizeFields = utils$2.async.pipe(
2597
+ utils$2.traverse.traverseQueryFields(removeDisallowedFields(permittedFields), ctx),
2598
+ utils$2.traverse.traverseQueryFields(omitHiddenFields, ctx),
2599
+ utils$2.traverse.traverseQueryFields(removePassword, ctx)
2558
2600
  );
2559
2601
  return async (query) => {
2560
2602
  const sanitizedQuery = fp.cloneDeep(query);
@@ -2576,15 +2618,15 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2576
2618
  const createSanitizeOutput = (options = {}) => {
2577
2619
  const { fields } = options;
2578
2620
  const permittedFields = fields.shouldIncludeAll ? null : getOutputFields(fields.permitted);
2579
- return utils$1.async.pipe(
2621
+ return utils$2.async.pipe(
2580
2622
  // Remove fields hidden from the admin
2581
- utils$1.traverseEntity(omitHiddenFields, ctx),
2623
+ utils$2.traverseEntity(omitHiddenFields, ctx),
2582
2624
  // Remove unallowed fields from admin::user relations
2583
- utils$1.traverseEntity(pickAllowedAdminUserFields, ctx),
2625
+ utils$2.traverseEntity(pickAllowedAdminUserFields, ctx),
2584
2626
  // Remove not allowed fields (RBAC)
2585
- utils$1.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2627
+ utils$2.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2586
2628
  // Remove all fields of type 'password'
2587
- utils$1.sanitize.sanitizers.sanitizePasswords({
2629
+ utils$2.sanitize.sanitizers.sanitizePasswords({
2588
2630
  schema,
2589
2631
  getModel(uid) {
2590
2632
  return strapi.getModel(uid);
@@ -2595,11 +2637,11 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2595
2637
  const createSanitizeInput = (options = {}) => {
2596
2638
  const { fields } = options;
2597
2639
  const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
2598
- return utils$1.async.pipe(
2640
+ return utils$2.async.pipe(
2599
2641
  // Remove fields hidden from the admin
2600
- utils$1.traverseEntity(omitHiddenFields, ctx),
2642
+ utils$2.traverseEntity(omitHiddenFields, ctx),
2601
2643
  // Remove not allowed fields (RBAC)
2602
- utils$1.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2644
+ utils$2.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2603
2645
  // Remove roles from createdBy & updatedBy fields
2604
2646
  omitCreatorRoles
2605
2647
  );
@@ -2700,9 +2742,9 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2700
2742
  sanitizeQuery: wrapSanitize(createSanitizeQuery)
2701
2743
  };
2702
2744
  };
2703
- const { ValidationError: ValidationError$3 } = utils$1.errors;
2704
- const { throwPassword, throwDisallowedFields } = utils$1.validate.visitors;
2705
- const { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } = utils$1.contentTypes;
2745
+ const { ValidationError: ValidationError$5 } = utils$2.errors;
2746
+ const { throwPassword, throwDisallowedFields } = utils$2.validate.visitors;
2747
+ const { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } = utils$2.contentTypes;
2706
2748
  const {
2707
2749
  ID_ATTRIBUTE,
2708
2750
  DOC_ID_ATTRIBUTE,
@@ -2716,7 +2758,7 @@ const COMPONENT_FIELDS = ["__component"];
2716
2758
  const STATIC_FIELDS = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];
2717
2759
  const throwInvalidKey = ({ key, path: path2 }) => {
2718
2760
  const msg = path2 && path2 !== key ? `Invalid key ${key} at ${path2}` : `Invalid key ${key}`;
2719
- throw new ValidationError$3(msg);
2761
+ throw new ValidationError$5(msg);
2720
2762
  };
2721
2763
  const createValidateHelpers = ({ action: action2, ability: ability$1, model }) => {
2722
2764
  const schema = strapi.getModel(model);
@@ -2727,35 +2769,35 @@ const createValidateHelpers = ({ action: action2, ability: ability$1, model }) =
2727
2769
  const createValidateQuery = (options = {}) => {
2728
2770
  const { fields } = options;
2729
2771
  const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);
2730
- const validateFilters = utils$1.async.pipe(
2731
- utils$1.traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),
2732
- utils$1.traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),
2733
- utils$1.traverse.traverseQueryFilters(throwPassword, ctx),
2734
- utils$1.traverse.traverseQueryFilters(({ key, value, path: path2 }) => {
2772
+ const validateFilters = utils$2.async.pipe(
2773
+ utils$2.traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),
2774
+ utils$2.traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),
2775
+ utils$2.traverse.traverseQueryFilters(throwPassword, ctx),
2776
+ utils$2.traverse.traverseQueryFilters(({ key, value, path: path2 }) => {
2735
2777
  if (fp.isObject(value) && fp.isEmpty(value)) {
2736
2778
  throwInvalidKey({ key, path: path2.attribute });
2737
2779
  }
2738
2780
  }, ctx)
2739
2781
  );
2740
- const validateSort = utils$1.async.pipe(
2741
- utils$1.traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),
2742
- utils$1.traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),
2743
- utils$1.traverse.traverseQuerySort(throwPassword, ctx),
2744
- utils$1.traverse.traverseQuerySort(({ key, attribute, value, path: path2 }) => {
2782
+ const validateSort = utils$2.async.pipe(
2783
+ utils$2.traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),
2784
+ utils$2.traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),
2785
+ utils$2.traverse.traverseQuerySort(throwPassword, ctx),
2786
+ utils$2.traverse.traverseQuerySort(({ key, attribute, value, path: path2 }) => {
2745
2787
  if (!isScalarAttribute(attribute) && fp.isEmpty(value)) {
2746
2788
  throwInvalidKey({ key, path: path2.attribute });
2747
2789
  }
2748
2790
  }, ctx)
2749
2791
  );
2750
- const validateFields = utils$1.async.pipe(
2751
- utils$1.traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),
2752
- utils$1.traverse.traverseQueryFields(throwPassword, ctx)
2792
+ const validateFields = utils$2.async.pipe(
2793
+ utils$2.traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),
2794
+ utils$2.traverse.traverseQueryFields(throwPassword, ctx)
2753
2795
  );
2754
- const validatePopulate = utils$1.async.pipe(
2755
- utils$1.traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),
2756
- utils$1.traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),
2757
- utils$1.traverse.traverseQueryPopulate(throwHiddenFields, ctx),
2758
- utils$1.traverse.traverseQueryPopulate(throwPassword, ctx)
2796
+ const validatePopulate = utils$2.async.pipe(
2797
+ utils$2.traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),
2798
+ utils$2.traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),
2799
+ utils$2.traverse.traverseQueryPopulate(throwHiddenFields, ctx),
2800
+ utils$2.traverse.traverseQueryPopulate(throwPassword, ctx)
2759
2801
  );
2760
2802
  return async (query) => {
2761
2803
  if (query.filters) {
@@ -2776,11 +2818,11 @@ const createValidateHelpers = ({ action: action2, ability: ability$1, model }) =
2776
2818
  const createValidateInput = (options = {}) => {
2777
2819
  const { fields } = options;
2778
2820
  const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
2779
- return utils$1.async.pipe(
2821
+ return utils$2.async.pipe(
2780
2822
  // Remove fields hidden from the admin
2781
- utils$1.traverseEntity(throwHiddenFields, ctx),
2823
+ utils$2.traverseEntity(throwHiddenFields, ctx),
2782
2824
  // Remove not allowed fields (RBAC)
2783
- utils$1.traverseEntity(throwDisallowedFields(permittedFields), ctx),
2825
+ utils$2.traverseEntity(throwDisallowedFields(permittedFields), ctx),
2784
2826
  // Remove roles from createdBy & updatedBy fields
2785
2827
  omitCreatorRoles
2786
2828
  );
@@ -2901,7 +2943,7 @@ const unwrapDeep = (obj) => {
2901
2943
  {}
2902
2944
  );
2903
2945
  };
2904
- const index$4 = ({ ability: ability$1, action: action2, model }) => ({
2946
+ const index = ({ ability: ability$1, action: action2, model }) => ({
2905
2947
  ability: ability$1,
2906
2948
  action: action2,
2907
2949
  model,
@@ -2974,7 +3016,7 @@ const createPermissionEngine = (params) => {
2974
3016
  * @param user
2975
3017
  */
2976
3018
  async generateUserAbility(user2) {
2977
- const permissions2 = await getService("permission").findUserPermissions(user2);
3019
+ const permissions2 = await getService$1("permission").findUserPermissions(user2);
2978
3020
  return engine2.generateAbility(permissions2, user2);
2979
3021
  },
2980
3022
  /**
@@ -2989,8 +3031,8 @@ const emptyObjectFactory = () => ({});
2989
3031
  const createSection = ({ initialStateFactory = emptyObjectFactory, handlers = [], matchers = [] } = {}) => {
2990
3032
  const state = {
2991
3033
  hooks: {
2992
- handlers: utils$1.hooks.createAsyncSeriesHook(),
2993
- matchers: utils$1.hooks.createAsyncParallelHook()
3034
+ handlers: utils$2.hooks.createAsyncSeriesHook(),
3035
+ matchers: utils$2.hooks.createAsyncParallelHook()
2994
3036
  }
2995
3037
  };
2996
3038
  handlers.forEach((handler) => state.hooks.handlers.register(handler));
@@ -3094,7 +3136,7 @@ const toSubjectTemplate = (ct) => ({
3094
3136
  label: ct.info.singularName,
3095
3137
  properties: []
3096
3138
  });
3097
- const { isVisibleAttribute } = utils$1.contentTypes;
3139
+ const { isVisibleAttribute } = utils$2.contentTypes;
3098
3140
  const settings = ({ action: action2, section }) => {
3099
3141
  const { category, subCategory, displayName, actionId } = action2;
3100
3142
  section.push({
@@ -3204,10 +3246,10 @@ const deleteByRolesIds = async (rolesIds) => {
3204
3246
  }
3205
3247
  });
3206
3248
  if (permissionsToDelete.length > 0) {
3207
- await deleteByIds(permissionsToDelete.map(fp.prop("id")));
3249
+ await deleteByIds$1(permissionsToDelete.map(fp.prop("id")));
3208
3250
  }
3209
3251
  };
3210
- const deleteByIds = async (ids) => {
3252
+ const deleteByIds$1 = async (ids) => {
3211
3253
  const result = [];
3212
3254
  for (const id of ids) {
3213
3255
  const queryResult = await strapi.db.query("admin::permission").delete({ where: { id } });
@@ -3239,7 +3281,7 @@ const findUserPermissions = async (user2) => {
3239
3281
  return findMany({ where: { role: { users: { id: user2.id } } } });
3240
3282
  };
3241
3283
  const filterPermissionsToRemove = async (permissions2) => {
3242
- const { actionProvider: actionProvider2 } = getService("permission");
3284
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3243
3285
  const permissionsToRemove = [];
3244
3286
  for (const permission2 of permissions2) {
3245
3287
  const { subjects, options = {} } = actionProvider2.get(permission2.action) || {};
@@ -3265,7 +3307,7 @@ const filterPermissionsToRemove = async (permissions2) => {
3265
3307
  };
3266
3308
  const cleanPermissionsInDatabase = async () => {
3267
3309
  const pageSize = 200;
3268
- const contentTypeService = getService("content-type");
3310
+ const contentTypeService = getService$1("content-type");
3269
3311
  const total = await strapi.db.query("admin::permission").count();
3270
3312
  const pageCount = Math.ceil(total / pageSize);
3271
3313
  for (let page = 0; page < pageCount; page += 1) {
@@ -3290,7 +3332,7 @@ const cleanPermissionsInDatabase = async () => {
3290
3332
  return update$2({ id: permission2.id }, permission2);
3291
3333
  };
3292
3334
  await Promise.all([
3293
- deleteByIds(permissionsIdToRemove),
3335
+ deleteByIds$1(permissionsIdToRemove),
3294
3336
  pmap__default.default(permissionsNeedingToBeUpdated, updatePromiseProvider, {
3295
3337
  concurrency: 100,
3296
3338
  stopOnError: true
@@ -3311,8 +3353,8 @@ const permission$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.define
3311
3353
  cleanPermissionsInDatabase,
3312
3354
  conditionProvider,
3313
3355
  createMany,
3314
- createPermissionsManager: index$4,
3315
- deleteByIds,
3356
+ createPermissionsManager: index,
3357
+ deleteByIds: deleteByIds$1,
3316
3358
  deleteByRolesIds,
3317
3359
  engine: engine$1,
3318
3360
  findMany,
@@ -3330,7 +3372,7 @@ const getNestedFields = (model, {
3330
3372
  if (nestingLevel === 0) {
3331
3373
  return prefix ? [prefix] : [];
3332
3374
  }
3333
- const nonAuthorizableFields = utils$1.contentTypes.getNonVisibleAttributes(model);
3375
+ const nonAuthorizableFields = utils$2.contentTypes.getNonVisibleAttributes(model);
3334
3376
  return ___namespace.default.reduce(
3335
3377
  model.attributes,
3336
3378
  (fields, attr, key) => {
@@ -3367,7 +3409,7 @@ const getNestedFieldsWithIntermediate = (model, { prefix = "", nestingLevel = 15
3367
3409
  if (nestingLevel === 0) {
3368
3410
  return [];
3369
3411
  }
3370
- const nonAuthorizableFields = utils$1.contentTypes.getNonVisibleAttributes(model);
3412
+ const nonAuthorizableFields = utils$2.contentTypes.getNonVisibleAttributes(model);
3371
3413
  return ___namespace.default.reduce(
3372
3414
  model.attributes,
3373
3415
  (fields, attr, key) => {
@@ -3409,7 +3451,7 @@ const getPermissionsWithNestedFields = (actions2, { nestingLevel, restrictedSubj
3409
3451
  }, []);
3410
3452
  };
3411
3453
  const cleanPermissionFields = (permissions2, { nestingLevel } = {}) => {
3412
- const { actionProvider: actionProvider2 } = getService("permission");
3454
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3413
3455
  return permissions2.map((permission2) => {
3414
3456
  const {
3415
3457
  action: actionId,
@@ -3448,7 +3490,7 @@ const contentType = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
3448
3490
  getPermissionsWithNestedFields
3449
3491
  }, Symbol.toStringTag, { value: "Module" }));
3450
3492
  const isValidCondition = (condition2) => {
3451
- const { conditionProvider: conditionProvider2 } = getService("permission");
3493
+ const { conditionProvider: conditionProvider2 } = getService$1("permission");
3452
3494
  return fp.isString(condition2) && conditionProvider2.has(condition2);
3453
3495
  };
3454
3496
  const condition = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -3456,11 +3498,11 @@ const condition = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePro
3456
3498
  isValidCondition
3457
3499
  }, Symbol.toStringTag, { value: "Module" }));
3458
3500
  const { AUTHOR_CODE, PUBLISH_ACTION } = constants$3;
3459
- const { NotFoundError: NotFoundError$2 } = utils$1.errors;
3501
+ const { NotFoundError: NotFoundError$2 } = utils$2.errors;
3460
3502
  const getAllowedActionsForRole = async (roleId) => {
3461
- const { actionProvider: actionProvider2 } = getService("permission");
3503
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3462
3504
  if (!fp.isNil(roleId)) {
3463
- const role2 = await getService("role").findOne({ id: roleId });
3505
+ const role2 = await getService$1("role").findOne({ id: roleId });
3464
3506
  if (!role2) {
3465
3507
  throw new NotFoundError$2("role.notFound");
3466
3508
  }
@@ -3474,7 +3516,7 @@ const action = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3474
3516
  __proto__: null,
3475
3517
  getAllowedActionsForRole
3476
3518
  }, Symbol.toStringTag, { value: "Module" }));
3477
- const { ValidationError: ValidationError$2, NotFoundError: NotFoundError$1 } = utils$1.errors;
3519
+ const { ValidationError: ValidationError$4, NotFoundError: NotFoundError$1 } = utils$2.errors;
3478
3520
  const SELECT_FIELDS$1 = [
3479
3521
  "id",
3480
3522
  "name",
@@ -3489,16 +3531,16 @@ const SELECT_FIELDS$1 = [
3489
3531
  const POPULATE_FIELDS$1 = ["permissions"];
3490
3532
  const assertCustomTokenPermissionsValidity = (type, permissions2) => {
3491
3533
  if (type !== constants$3.API_TOKEN_TYPE.CUSTOM && !fp.isEmpty(permissions2)) {
3492
- throw new ValidationError$2("Non-custom tokens should not reference permissions");
3534
+ throw new ValidationError$4("Non-custom tokens should not reference permissions");
3493
3535
  }
3494
3536
  if (type === constants$3.API_TOKEN_TYPE.CUSTOM && !fp.isArray(permissions2)) {
3495
- throw new ValidationError$2("Missing permissions attribute for custom token");
3537
+ throw new ValidationError$4("Missing permissions attribute for custom token");
3496
3538
  }
3497
3539
  if (type === constants$3.API_TOKEN_TYPE.CUSTOM) {
3498
3540
  const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
3499
3541
  const invalidPermissions = fp.difference(permissions2, validPermissions);
3500
3542
  if (!fp.isEmpty(invalidPermissions)) {
3501
- throw new ValidationError$2(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3543
+ throw new ValidationError$4(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3502
3544
  }
3503
3545
  }
3504
3546
  };
@@ -3513,7 +3555,7 @@ const isValidLifespan$1 = (lifespan) => {
3513
3555
  };
3514
3556
  const assertValidLifespan$1 = (lifespan) => {
3515
3557
  if (!isValidLifespan$1(lifespan)) {
3516
- throw new ValidationError$2(
3558
+ throw new ValidationError$4(
3517
3559
  `lifespan must be one of the following values:
3518
3560
  ${Object.values(constants$3.API_TOKEN_LIFESPANS).join(", ")}`
3519
3561
  );
@@ -3548,7 +3590,7 @@ const hash$1 = (accessKey) => {
3548
3590
  const getExpirationFields$1 = (lifespan) => {
3549
3591
  const isValidNumber = fp.isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
3550
3592
  if (!isValidNumber && !fp.isNil(lifespan)) {
3551
- throw new ValidationError$2("lifespan must be a positive number or null");
3593
+ throw new ValidationError$4("lifespan must be a positive number or null");
3552
3594
  }
3553
3595
  return {
3554
3596
  lifespan: lifespan || null,
@@ -3700,8 +3742,8 @@ const apiToken$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
3700
3742
  }, Symbol.toStringTag, { value: "Module" }));
3701
3743
  const DEFAULT_TRANSFER_ACTIONS = ["push", "pull"];
3702
3744
  const providers = {
3703
- action: utils$1.providerFactory(),
3704
- condition: utils$1.providerFactory()
3745
+ action: utils$2.providerFactory(),
3746
+ condition: utils$2.providerFactory()
3705
3747
  };
3706
3748
  DEFAULT_TRANSFER_ACTIONS.forEach((action2) => {
3707
3749
  providers.action.register(action2, { action: action2 });
@@ -3712,7 +3754,7 @@ const permission$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.define
3712
3754
  engine,
3713
3755
  providers
3714
3756
  }, Symbol.toStringTag, { value: "Module" }));
3715
- const { ValidationError: ValidationError$1, NotFoundError } = utils$1.errors;
3757
+ const { ValidationError: ValidationError$3, NotFoundError } = utils$2.errors;
3716
3758
  const TRANSFER_TOKEN_UID = "admin::transfer-token";
3717
3759
  const TRANSFER_TOKEN_PERMISSION_UID = "admin::transfer-token-permission";
3718
3760
  const SELECT_FIELDS = [
@@ -3863,7 +3905,7 @@ const regenerate = async (id) => {
3863
3905
  const getExpirationFields = (lifespan) => {
3864
3906
  const isValidNumber = fp.isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
3865
3907
  if (!isValidNumber && !fp.isNil(lifespan)) {
3866
- throw new ValidationError$1("lifespan must be a positive number or null");
3908
+ throw new ValidationError$3("lifespan must be a positive number or null");
3867
3909
  }
3868
3910
  return {
3869
3911
  lifespan: lifespan || null,
@@ -3871,14 +3913,14 @@ const getExpirationFields = (lifespan) => {
3871
3913
  };
3872
3914
  };
3873
3915
  const hash = (accessKey) => {
3874
- const { hasValidTokenSalt: hasValidTokenSalt2 } = getService("transfer").utils;
3916
+ const { hasValidTokenSalt: hasValidTokenSalt2 } = getService$1("transfer").utils;
3875
3917
  if (!hasValidTokenSalt2()) {
3876
3918
  throw new TypeError("Required token salt is not defined");
3877
3919
  }
3878
3920
  return crypto__default.default.createHmac("sha512", strapi.config.get("admin.transfer.token.salt")).update(accessKey).digest("hex");
3879
3921
  };
3880
3922
  const checkSaltIsDefined = () => {
3881
- const { hasValidTokenSalt: hasValidTokenSalt2 } = getService("transfer").utils;
3923
+ const { hasValidTokenSalt: hasValidTokenSalt2 } = getService$1("transfer").utils;
3882
3924
  if (!strapi.config.get("server.transfer.remote.enabled")) {
3883
3925
  return;
3884
3926
  }
@@ -3904,7 +3946,7 @@ const assertTokenPermissionsValidity = (attributes) => {
3904
3946
  const validPermissions = permissionService.providers.action.keys();
3905
3947
  const invalidPermissions = fp.difference(attributes.permissions, validPermissions);
3906
3948
  if (!fp.isEmpty(invalidPermissions)) {
3907
- throw new ValidationError$1(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3949
+ throw new ValidationError$3(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3908
3950
  }
3909
3951
  };
3910
3952
  const isValidLifespan = (lifespan) => {
@@ -3918,7 +3960,7 @@ const isValidLifespan = (lifespan) => {
3918
3960
  };
3919
3961
  const assertValidLifespan = (lifespan) => {
3920
3962
  if (!isValidLifespan(lifespan)) {
3921
- throw new ValidationError$1(
3963
+ throw new ValidationError$3(
3922
3964
  `lifespan must be one of the following values:
3923
3965
  ${Object.values(constants$3.TRANSFER_TOKEN_LIFESPANS).join(", ")}`
3924
3966
  );
@@ -3944,15 +3986,15 @@ const hasValidTokenSalt = () => {
3944
3986
  return typeof salt === "string" && salt.length > 0;
3945
3987
  };
3946
3988
  const isRemoteTransferEnabled = () => {
3947
- const { utils: utils2 } = getService("transfer");
3948
- if (utils$1.env.bool("STRAPI_DISABLE_REMOTE_DATA_TRANSFER") !== void 0) {
3989
+ const { utils: utils2 } = getService$1("transfer");
3990
+ if (utils$2.env.bool("STRAPI_DISABLE_REMOTE_DATA_TRANSFER") !== void 0) {
3949
3991
  strapi.log.warn(
3950
3992
  "STRAPI_DISABLE_REMOTE_DATA_TRANSFER is no longer supported. Instead, set transfer.remote.enabled to false in your server configuration"
3951
3993
  );
3952
3994
  }
3953
3995
  return utils2.hasValidTokenSalt() && strapi.config.get("server.transfer.remote.enabled");
3954
3996
  };
3955
- const utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3997
+ const utils$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3956
3998
  __proto__: null,
3957
3999
  hasValidTokenSalt,
3958
4000
  isRemoteTransferEnabled
@@ -3961,7 +4003,7 @@ const transfer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
3961
4003
  __proto__: null,
3962
4004
  permission: permission$1,
3963
4005
  token: token$2,
3964
- utils
4006
+ utils: utils$1
3965
4007
  }, Symbol.toStringTag, { value: "Module" }));
3966
4008
  const PROJECT_SETTINGS_FILE_INPUTS = ["menuLogo", "authLogo"];
3967
4009
  const parseFilesData = async (files) => {
@@ -4082,14 +4124,14 @@ const projectSettings = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
4082
4124
  parseFilesData,
4083
4125
  updateProjectSettings: updateProjectSettings$1
4084
4126
  }, Symbol.toStringTag, { value: "Module" }));
4085
- const index$3 = {
4086
- auth,
4087
- user: user$1,
4088
- role: role$1,
4089
- passport,
4127
+ const services$1 = {
4128
+ auth: auth$1,
4129
+ user: user$3,
4130
+ role: role$3,
4131
+ passport: passport$1,
4090
4132
  token: token$3,
4091
4133
  permission: permission$2,
4092
- metrics,
4134
+ metrics: metrics$1,
4093
4135
  "content-type": contentType,
4094
4136
  constants: constants$4,
4095
4137
  condition,
@@ -4122,13 +4164,13 @@ const updateProjectSettingsImagesDimensions = zod.z.object({
4122
4164
  menuLogo: logoDimensions.nullish(),
4123
4165
  authLogo: logoDimensions.nullish()
4124
4166
  }).strict();
4125
- const validateUpdateProjectSettings = utils$1.validateZod(updateProjectSettings);
4126
- const validateUpdateProjectSettingsFiles = utils$1.validateZod(updateProjectSettingsFiles);
4127
- const validateUpdateProjectSettingsImagesDimensions = utils$1.validateZod(
4167
+ const validateUpdateProjectSettings = utils$2.validateZod(updateProjectSettings);
4168
+ const validateUpdateProjectSettingsFiles = utils$2.validateZod(updateProjectSettingsFiles);
4169
+ const validateUpdateProjectSettingsImagesDimensions = utils$2.validateZod(
4128
4170
  updateProjectSettingsImagesDimensions
4129
4171
  );
4130
4172
  const { isUsingTypeScript } = tsUtils__default.default;
4131
- const admin = {
4173
+ const admin$3 = {
4132
4174
  // TODO very temporary to check the switch ee/ce
4133
4175
  // When removing this we need to update the /admin/src/index.js file
4134
4176
  // whe,re we set the strapi.window.isEE value
@@ -4140,8 +4182,8 @@ const admin = {
4140
4182
  },
4141
4183
  async init() {
4142
4184
  let uuid = strapi.config.get("uuid", false);
4143
- const hasAdmin = await getService("user").exists();
4144
- const { menuLogo, authLogo } = await getService("project-settings").getProjectSettings();
4185
+ const hasAdmin = await getService$1("user").exists();
4186
+ const { menuLogo, authLogo } = await getService$1("project-settings").getProjectSettings();
4145
4187
  const telemetryDisabled = strapi.config.get(
4146
4188
  "packageJsonStrapi.telemetryDisabled",
4147
4189
  null
@@ -4159,7 +4201,7 @@ const admin = {
4159
4201
  };
4160
4202
  },
4161
4203
  async getProjectSettings() {
4162
- return getService(
4204
+ return getService$1(
4163
4205
  "project-settings"
4164
4206
  ).getProjectSettings();
4165
4207
  },
@@ -4167,7 +4209,7 @@ const admin = {
4167
4209
  const {
4168
4210
  request: { files, body }
4169
4211
  } = ctx;
4170
- const projectSettingsService = getService("project-settings");
4212
+ const projectSettingsService = getService$1("project-settings");
4171
4213
  await validateUpdateProjectSettings(body);
4172
4214
  await validateUpdateProjectSettingsFiles(files);
4173
4215
  const formatedFiles = await projectSettingsService.parseFilesData(files);
@@ -4186,7 +4228,7 @@ const admin = {
4186
4228
  const useTypescriptOnAdmin = await isUsingTypeScript(
4187
4229
  path__default.default.join(strapi.dirs.app.root, "src", "admin")
4188
4230
  );
4189
- const isHostedOnStrapiCloud = utils$1.env("STRAPI_HOSTING", null) === "strapi.cloud";
4231
+ const isHostedOnStrapiCloud = utils$2.env("STRAPI_HOSTING", null) === "strapi.cloud";
4190
4232
  const numberOfAllContentTypes = ___namespace.default.size(strapi.contentTypes);
4191
4233
  const numberOfComponents = ___namespace.default.size(strapi.components);
4192
4234
  const getNumberOfDynamicZones = () => {
@@ -4251,26 +4293,26 @@ const admin = {
4251
4293
  ctx.send({ plugins: plugins2 });
4252
4294
  }
4253
4295
  };
4254
- const apiTokenCreationSchema = utils$1.yup.object().shape({
4255
- name: utils$1.yup.string().min(1).required(),
4256
- description: utils$1.yup.string().optional(),
4257
- type: utils$1.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).required(),
4258
- permissions: utils$1.yup.array().of(utils$1.yup.string()).nullable(),
4259
- lifespan: utils$1.yup.number().min(1).oneOf(Object.values(constants$3.API_TOKEN_LIFESPANS)).nullable()
4296
+ const apiTokenCreationSchema = utils$2.yup.object().shape({
4297
+ name: utils$2.yup.string().min(1).required(),
4298
+ description: utils$2.yup.string().optional(),
4299
+ type: utils$2.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).required(),
4300
+ permissions: utils$2.yup.array().of(utils$2.yup.string()).nullable(),
4301
+ lifespan: utils$2.yup.number().min(1).oneOf(Object.values(constants$3.API_TOKEN_LIFESPANS)).nullable()
4260
4302
  }).noUnknown().strict();
4261
- const apiTokenUpdateSchema = utils$1.yup.object().shape({
4262
- name: utils$1.yup.string().min(1).notNull(),
4263
- description: utils$1.yup.string().nullable(),
4264
- type: utils$1.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).notNull(),
4265
- permissions: utils$1.yup.array().of(utils$1.yup.string()).nullable()
4303
+ const apiTokenUpdateSchema = utils$2.yup.object().shape({
4304
+ name: utils$2.yup.string().min(1).notNull(),
4305
+ description: utils$2.yup.string().nullable(),
4306
+ type: utils$2.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).notNull(),
4307
+ permissions: utils$2.yup.array().of(utils$2.yup.string()).nullable()
4266
4308
  }).noUnknown().strict();
4267
- const validateApiTokenCreationInput = utils$1.validateYupSchema(apiTokenCreationSchema);
4268
- const validateApiTokenUpdateInput = utils$1.validateYupSchema(apiTokenUpdateSchema);
4269
- const { ApplicationError: ApplicationError$4 } = utils$1.errors;
4309
+ const validateApiTokenCreationInput = utils$2.validateYupSchema(apiTokenCreationSchema);
4310
+ const validateApiTokenUpdateInput = utils$2.validateYupSchema(apiTokenUpdateSchema);
4311
+ const { ApplicationError: ApplicationError$7 } = utils$2.errors;
4270
4312
  const apiToken$1 = {
4271
4313
  async create(ctx) {
4272
4314
  const { body } = ctx.request;
4273
- const apiTokenService = getService("api-token");
4315
+ const apiTokenService = getService$1("api-token");
4274
4316
  const attributes = {
4275
4317
  name: fp.trim(body.name),
4276
4318
  description: fp.trim(body.description),
@@ -4281,14 +4323,14 @@ const apiToken$1 = {
4281
4323
  await validateApiTokenCreationInput(attributes);
4282
4324
  const alreadyExists = await apiTokenService.exists({ name: attributes.name });
4283
4325
  if (alreadyExists) {
4284
- throw new ApplicationError$4("Name already taken");
4326
+ throw new ApplicationError$7("Name already taken");
4285
4327
  }
4286
4328
  const apiToken2 = await apiTokenService.create(attributes);
4287
4329
  ctx.created({ data: apiToken2 });
4288
4330
  },
4289
4331
  async regenerate(ctx) {
4290
4332
  const { id } = ctx.params;
4291
- const apiTokenService = getService("api-token");
4333
+ const apiTokenService = getService$1("api-token");
4292
4334
  const apiTokenExists = await apiTokenService.getById(id);
4293
4335
  if (!apiTokenExists) {
4294
4336
  ctx.notFound("API Token not found");
@@ -4298,19 +4340,19 @@ const apiToken$1 = {
4298
4340
  ctx.created({ data: accessToken });
4299
4341
  },
4300
4342
  async list(ctx) {
4301
- const apiTokenService = getService("api-token");
4343
+ const apiTokenService = getService$1("api-token");
4302
4344
  const apiTokens2 = await apiTokenService.list();
4303
4345
  ctx.send({ data: apiTokens2 });
4304
4346
  },
4305
4347
  async revoke(ctx) {
4306
4348
  const { id } = ctx.params;
4307
- const apiTokenService = getService("api-token");
4349
+ const apiTokenService = getService$1("api-token");
4308
4350
  const apiToken2 = await apiTokenService.revoke(id);
4309
4351
  ctx.deleted({ data: apiToken2 });
4310
4352
  },
4311
4353
  async get(ctx) {
4312
4354
  const { id } = ctx.params;
4313
- const apiTokenService = getService("api-token");
4355
+ const apiTokenService = getService$1("api-token");
4314
4356
  const apiToken2 = await apiTokenService.getById(id);
4315
4357
  if (!apiToken2) {
4316
4358
  ctx.notFound("API Token not found");
@@ -4321,7 +4363,7 @@ const apiToken$1 = {
4321
4363
  async update(ctx) {
4322
4364
  const { body } = ctx.request;
4323
4365
  const { id } = ctx.params;
4324
- const apiTokenService = getService("api-token");
4366
+ const apiTokenService = getService$1("api-token");
4325
4367
  const attributes = body;
4326
4368
  if (fp.has("name", attributes)) {
4327
4369
  attributes.name = fp.trim(body.name);
@@ -4336,57 +4378,62 @@ const apiToken$1 = {
4336
4378
  }
4337
4379
  if (fp.has("name", attributes)) {
4338
4380
  const nameAlreadyTaken = await apiTokenService.getByName(attributes.name);
4339
- if (!!nameAlreadyTaken && !utils$1.strings.isEqual(nameAlreadyTaken.id, id)) {
4340
- throw new ApplicationError$4("Name already taken");
4381
+ if (!!nameAlreadyTaken && !utils$2.strings.isEqual(nameAlreadyTaken.id, id)) {
4382
+ throw new ApplicationError$7("Name already taken");
4341
4383
  }
4342
4384
  }
4343
4385
  const apiToken2 = await apiTokenService.update(id, attributes);
4344
4386
  ctx.send({ data: apiToken2 });
4345
4387
  },
4346
4388
  async getLayout(ctx) {
4347
- const apiTokenService = getService("api-token");
4389
+ const apiTokenService = getService$1("api-token");
4348
4390
  const layout = await apiTokenService.getApiTokenLayout();
4349
4391
  ctx.send({ data: layout });
4350
4392
  }
4351
4393
  };
4352
- const userCreationSchema = utils$1.yup.object().shape({
4394
+ const userCreationSchema = utils$2.yup.object().shape({
4353
4395
  email: validators.email.required(),
4354
4396
  firstname: validators.firstname.required(),
4355
4397
  lastname: validators.lastname,
4356
4398
  roles: validators.roles.min(1),
4357
- preferedLanguage: utils$1.yup.string().nullable()
4399
+ preferedLanguage: utils$2.yup.string().nullable()
4358
4400
  }).noUnknown();
4359
- const profileUpdateSchema = utils$1.yup.object().shape({
4401
+ const profileUpdateSchema = utils$2.yup.object().shape({
4360
4402
  email: validators.email.notNull(),
4361
4403
  firstname: validators.firstname.notNull(),
4362
4404
  lastname: validators.lastname.nullable(),
4363
4405
  username: validators.username.nullable(),
4364
4406
  password: validators.password.notNull(),
4365
- currentPassword: utils$1.yup.string().when(
4407
+ currentPassword: utils$2.yup.string().when(
4366
4408
  "password",
4367
4409
  (password2, schema) => !fp.isUndefined(password2) ? schema.required() : schema
4368
4410
  ).notNull(),
4369
- preferedLanguage: utils$1.yup.string().nullable()
4411
+ preferedLanguage: utils$2.yup.string().nullable()
4370
4412
  }).noUnknown();
4371
- const userUpdateSchema = utils$1.yup.object().shape({
4413
+ const userUpdateSchema = utils$2.yup.object().shape({
4372
4414
  email: validators.email.notNull(),
4373
4415
  firstname: validators.firstname.notNull(),
4374
4416
  lastname: validators.lastname.nullable(),
4375
4417
  username: validators.username.nullable(),
4376
4418
  password: validators.password.notNull(),
4377
- isActive: utils$1.yup.bool().notNull(),
4419
+ isActive: utils$2.yup.bool().notNull(),
4378
4420
  roles: validators.roles.min(1).notNull()
4379
4421
  }).noUnknown();
4380
- const usersDeleteSchema = utils$1.yup.object().shape({
4381
- ids: utils$1.yup.array().of(utils$1.yup.strapiID()).min(1).required()
4422
+ const usersDeleteSchema = utils$2.yup.object().shape({
4423
+ ids: utils$2.yup.array().of(utils$2.yup.strapiID()).min(1).required()
4382
4424
  }).noUnknown();
4383
- const validateUserCreationInput = utils$1.validateYupSchema(userCreationSchema);
4384
- const validateProfileUpdateInput = utils$1.validateYupSchema(profileUpdateSchema);
4385
- const validateUserUpdateInput = utils$1.validateYupSchema(userUpdateSchema);
4386
- const validateUsersDeleteInput = utils$1.validateYupSchema(usersDeleteSchema);
4425
+ const validateUserCreationInput$1 = utils$2.validateYupSchema(userCreationSchema);
4426
+ const validateProfileUpdateInput = utils$2.validateYupSchema(profileUpdateSchema);
4427
+ const validateUserUpdateInput = utils$2.validateYupSchema(userUpdateSchema);
4428
+ const validateUsersDeleteInput = utils$2.validateYupSchema(usersDeleteSchema);
4429
+ const schemas = {
4430
+ userCreationSchema,
4431
+ usersDeleteSchema,
4432
+ userUpdateSchema
4433
+ };
4387
4434
  const authenticatedUser = {
4388
4435
  async getMe(ctx) {
4389
- const userInfo = getService("user").sanitizeUser(ctx.state.user);
4436
+ const userInfo = getService$1("user").sanitizeUser(ctx.state.user);
4390
4437
  ctx.body = {
4391
4438
  data: userInfo
4392
4439
  };
@@ -4394,8 +4441,8 @@ const authenticatedUser = {
4394
4441
  async updateMe(ctx) {
4395
4442
  const input = ctx.request.body;
4396
4443
  await validateProfileUpdateInput(input);
4397
- const userService = getService("user");
4398
- const authServer = getService("auth");
4444
+ const userService = getService$1("user");
4445
+ const authServer = getService$1("auth");
4399
4446
  const { currentPassword, ...userInfo } = input;
4400
4447
  if (currentPassword && userInfo.password) {
4401
4448
  const isValid = await authServer.validatePassword(currentPassword, ctx.state.user.password);
@@ -4411,7 +4458,7 @@ const authenticatedUser = {
4411
4458
  };
4412
4459
  },
4413
4460
  async getOwnPermissions(ctx) {
4414
- const { findUserPermissions: findUserPermissions2, sanitizePermission: sanitizePermission2 } = getService("permission");
4461
+ const { findUserPermissions: findUserPermissions2, sanitizePermission: sanitizePermission2 } = getService$1("permission");
4415
4462
  const { user: user2 } = ctx.state;
4416
4463
  const userPermissions = await findUserPermissions2(user2);
4417
4464
  ctx.body = {
@@ -4420,39 +4467,39 @@ const authenticatedUser = {
4420
4467
  };
4421
4468
  }
4422
4469
  };
4423
- const registrationSchema = utils$1.yup.object().shape({
4424
- registrationToken: utils$1.yup.string().required(),
4425
- userInfo: utils$1.yup.object().shape({
4470
+ const registrationSchema = utils$2.yup.object().shape({
4471
+ registrationToken: utils$2.yup.string().required(),
4472
+ userInfo: utils$2.yup.object().shape({
4426
4473
  firstname: validators.firstname.required(),
4427
4474
  lastname: validators.lastname.nullable(),
4428
4475
  password: validators.password.required()
4429
4476
  }).required().noUnknown()
4430
4477
  }).noUnknown();
4431
- const registrationInfoQuerySchema = utils$1.yup.object().shape({
4432
- registrationToken: utils$1.yup.string().required()
4478
+ const registrationInfoQuerySchema = utils$2.yup.object().shape({
4479
+ registrationToken: utils$2.yup.string().required()
4433
4480
  }).required().noUnknown();
4434
- const adminRegistrationSchema = utils$1.yup.object().shape({
4481
+ const adminRegistrationSchema = utils$2.yup.object().shape({
4435
4482
  email: validators.email.required(),
4436
4483
  firstname: validators.firstname.required(),
4437
4484
  lastname: validators.lastname.nullable(),
4438
4485
  password: validators.password.required()
4439
4486
  }).required().noUnknown();
4440
- const validateRegistrationInput = utils$1.validateYupSchema(registrationSchema);
4441
- const validateRegistrationInfoQuery = utils$1.validateYupSchema(registrationInfoQuerySchema);
4442
- const validateAdminRegistrationInput = utils$1.validateYupSchema(adminRegistrationSchema);
4443
- const forgotPasswordSchema = utils$1.yup.object().shape({
4487
+ const validateRegistrationInput = utils$2.validateYupSchema(registrationSchema);
4488
+ const validateRegistrationInfoQuery = utils$2.validateYupSchema(registrationInfoQuerySchema);
4489
+ const validateAdminRegistrationInput = utils$2.validateYupSchema(adminRegistrationSchema);
4490
+ const forgotPasswordSchema = utils$2.yup.object().shape({
4444
4491
  email: validators.email.required()
4445
4492
  }).required().noUnknown();
4446
- const validateForgotPasswordInput = utils$1.validateYupSchema(forgotPasswordSchema);
4447
- const resetPasswordSchema = utils$1.yup.object().shape({
4448
- resetPasswordToken: utils$1.yup.string().required(),
4493
+ const validateForgotPasswordInput = utils$2.validateYupSchema(forgotPasswordSchema);
4494
+ const resetPasswordSchema = utils$2.yup.object().shape({
4495
+ resetPasswordToken: utils$2.yup.string().required(),
4449
4496
  password: validators.password.required()
4450
4497
  }).required().noUnknown();
4451
- const validateResetPasswordInput = utils$1.validateYupSchema(resetPasswordSchema);
4452
- const renewToken = utils$1.yup.object().shape({ token: utils$1.yup.string().required() }).required().noUnknown();
4453
- const validateRenewTokenInput = utils$1.validateYupSchema(renewToken);
4454
- const { ApplicationError: ApplicationError$3, ValidationError } = utils$1.errors;
4455
- const authentication = {
4498
+ const validateResetPasswordInput = utils$2.validateYupSchema(resetPasswordSchema);
4499
+ const renewToken = utils$2.yup.object().shape({ token: utils$2.yup.string().required() }).required().noUnknown();
4500
+ const validateRenewTokenInput = utils$2.validateYupSchema(renewToken);
4501
+ const { ApplicationError: ApplicationError$6, ValidationError: ValidationError$2 } = utils$2.errors;
4502
+ const authentication$1 = {
4456
4503
  login: compose__default.default([
4457
4504
  (ctx, next) => {
4458
4505
  return passport__default.default.authenticate("local", { session: false }, (err, user2, info) => {
@@ -4468,11 +4515,11 @@ const authentication = {
4468
4515
  error: new Error(info.message),
4469
4516
  provider: "local"
4470
4517
  });
4471
- throw new ApplicationError$3(info.message);
4518
+ throw new ApplicationError$6(info.message);
4472
4519
  }
4473
4520
  const query = ctx.state;
4474
4521
  query.user = user2;
4475
- const sanitizedUser = getService("user").sanitizeUser(user2);
4522
+ const sanitizedUser = getService$1("user").sanitizeUser(user2);
4476
4523
  strapi.eventHub.emit("admin.auth.success", { user: sanitizedUser, provider: "local" });
4477
4524
  return next();
4478
4525
  })(ctx, next);
@@ -4481,8 +4528,8 @@ const authentication = {
4481
4528
  const { user: user2 } = ctx.state;
4482
4529
  ctx.body = {
4483
4530
  data: {
4484
- token: getService("token").createJwtToken(user2),
4485
- user: getService("user").sanitizeUser(ctx.state.user)
4531
+ token: getService$1("token").createJwtToken(user2),
4532
+ user: getService$1("user").sanitizeUser(ctx.state.user)
4486
4533
  // TODO: fetch more detailed info
4487
4534
  }
4488
4535
  };
@@ -4491,50 +4538,50 @@ const authentication = {
4491
4538
  async renewToken(ctx) {
4492
4539
  await validateRenewTokenInput(ctx.request.body);
4493
4540
  const { token: token2 } = ctx.request.body;
4494
- const { isValid, payload } = getService("token").decodeJwtToken(token2);
4541
+ const { isValid, payload } = getService$1("token").decodeJwtToken(token2);
4495
4542
  if (!isValid) {
4496
- throw new ValidationError("Invalid token");
4543
+ throw new ValidationError$2("Invalid token");
4497
4544
  }
4498
4545
  ctx.body = {
4499
4546
  data: {
4500
- token: getService("token").createJwtToken({ id: payload.id })
4547
+ token: getService$1("token").createJwtToken({ id: payload.id })
4501
4548
  }
4502
4549
  };
4503
4550
  },
4504
4551
  async registrationInfo(ctx) {
4505
4552
  await validateRegistrationInfoQuery(ctx.request.query);
4506
4553
  const { registrationToken } = ctx.request.query;
4507
- const registrationInfo = await getService("user").findRegistrationInfo(registrationToken);
4554
+ const registrationInfo = await getService$1("user").findRegistrationInfo(registrationToken);
4508
4555
  if (!registrationInfo) {
4509
- throw new ValidationError("Invalid registrationToken");
4556
+ throw new ValidationError$2("Invalid registrationToken");
4510
4557
  }
4511
4558
  ctx.body = { data: registrationInfo };
4512
4559
  },
4513
4560
  async register(ctx) {
4514
4561
  const input = ctx.request.body;
4515
4562
  await validateRegistrationInput(input);
4516
- const user2 = await getService("user").register(input);
4563
+ const user2 = await getService$1("user").register(input);
4517
4564
  ctx.body = {
4518
4565
  data: {
4519
- token: getService("token").createJwtToken(user2),
4520
- user: getService("user").sanitizeUser(user2)
4566
+ token: getService$1("token").createJwtToken(user2),
4567
+ user: getService$1("user").sanitizeUser(user2)
4521
4568
  }
4522
4569
  };
4523
4570
  },
4524
4571
  async registerAdmin(ctx) {
4525
4572
  const input = ctx.request.body;
4526
4573
  await validateAdminRegistrationInput(input);
4527
- const hasAdmin = await getService("user").exists();
4574
+ const hasAdmin = await getService$1("user").exists();
4528
4575
  if (hasAdmin) {
4529
- throw new ApplicationError$3("You cannot register a new super admin");
4576
+ throw new ApplicationError$6("You cannot register a new super admin");
4530
4577
  }
4531
- const superAdminRole = await getService("role").getSuperAdmin();
4578
+ const superAdminRole = await getService$1("role").getSuperAdmin();
4532
4579
  if (!superAdminRole) {
4533
- throw new ApplicationError$3(
4580
+ throw new ApplicationError$6(
4534
4581
  "Cannot register the first admin because the super admin role doesn't exist."
4535
4582
  );
4536
4583
  }
4537
- const user2 = await getService("user").create({
4584
+ const user2 = await getService$1("user").create({
4538
4585
  ...input,
4539
4586
  registrationToken: null,
4540
4587
  isActive: true,
@@ -4543,30 +4590,30 @@ const authentication = {
4543
4590
  strapi.telemetry.send("didCreateFirstAdmin");
4544
4591
  ctx.body = {
4545
4592
  data: {
4546
- token: getService("token").createJwtToken(user2),
4547
- user: getService("user").sanitizeUser(user2)
4593
+ token: getService$1("token").createJwtToken(user2),
4594
+ user: getService$1("user").sanitizeUser(user2)
4548
4595
  }
4549
4596
  };
4550
4597
  },
4551
4598
  async forgotPassword(ctx) {
4552
4599
  const input = ctx.request.body;
4553
4600
  await validateForgotPasswordInput(input);
4554
- getService("auth").forgotPassword(input);
4601
+ getService$1("auth").forgotPassword(input);
4555
4602
  ctx.status = 204;
4556
4603
  },
4557
4604
  async resetPassword(ctx) {
4558
4605
  const input = ctx.request.body;
4559
4606
  await validateResetPasswordInput(input);
4560
- const user2 = await getService("auth").resetPassword(input);
4607
+ const user2 = await getService$1("auth").resetPassword(input);
4561
4608
  ctx.body = {
4562
4609
  data: {
4563
- token: getService("token").createJwtToken(user2),
4564
- user: getService("user").sanitizeUser(user2)
4610
+ token: getService$1("token").createJwtToken(user2),
4611
+ user: getService$1("user").sanitizeUser(user2)
4565
4612
  }
4566
4613
  };
4567
4614
  },
4568
4615
  logout(ctx) {
4569
- const sanitizedUser = getService("user").sanitizeUser(ctx.state.user);
4616
+ const sanitizedUser = getService$1("user").sanitizeUser(ctx.state.user);
4570
4617
  strapi.eventHub.emit("admin.logout", { user: sanitizedUser });
4571
4618
  ctx.body = { data: {} };
4572
4619
  }
@@ -4582,7 +4629,7 @@ const permission = {
4582
4629
  const { body: input } = ctx.request;
4583
4630
  const { userAbility } = ctx.state;
4584
4631
  await validateCheckPermissionsInput(input);
4585
- const { engine: engine2 } = getService("permission");
4632
+ const { engine: engine2 } = getService$1("permission");
4586
4633
  const checkPermissionsFn = engine2.checkMany(userAbility);
4587
4634
  ctx.body = {
4588
4635
  data: checkPermissionsFn(input.permissions)
@@ -4593,7 +4640,7 @@ const permission = {
4593
4640
  * @param {KoaContext} ctx - koa context
4594
4641
  */
4595
4642
  async getAll(ctx) {
4596
- const { sectionsBuilder: sectionsBuilder2, actionProvider: actionProvider2, conditionProvider: conditionProvider2 } = getService("permission");
4643
+ const { sectionsBuilder: sectionsBuilder2, actionProvider: actionProvider2, conditionProvider: conditionProvider2 } = getService$1("permission");
4597
4644
  const actions2 = actionProvider2.values();
4598
4645
  const conditions2 = conditionProvider2.values();
4599
4646
  const sections = await sectionsBuilder2.build(actions2);
@@ -4606,12 +4653,12 @@ const permission = {
4606
4653
  };
4607
4654
  }
4608
4655
  };
4609
- const roleCreateSchema = utils$1.yup.object().shape({
4610
- name: utils$1.yup.string().min(1).required(),
4611
- description: utils$1.yup.string().nullable()
4656
+ const roleCreateSchema$1 = utils$2.yup.object().shape({
4657
+ name: utils$2.yup.string().min(1).required(),
4658
+ description: utils$2.yup.string().nullable()
4612
4659
  }).noUnknown();
4613
- const rolesDeleteSchema = utils$1.yup.object().shape({
4614
- ids: utils$1.yup.array().of(utils$1.yup.strapiID()).min(1).required().test("roles-deletion-checks", "Roles deletion checks have failed", async function(ids) {
4660
+ const rolesDeleteSchema$1 = utils$2.yup.object().shape({
4661
+ ids: utils$2.yup.array().of(utils$2.yup.strapiID()).min(1).required().test("roles-deletion-checks", "Roles deletion checks have failed", async function(ids) {
4615
4662
  try {
4616
4663
  await strapi.service("admin::role").checkRolesIdForDeletion(ids);
4617
4664
  } catch (e) {
@@ -4620,7 +4667,7 @@ const rolesDeleteSchema = utils$1.yup.object().shape({
4620
4667
  return true;
4621
4668
  })
4622
4669
  }).noUnknown();
4623
- const roleDeleteSchema = utils$1.yup.strapiID().required().test("no-admin-single-delete", "Role deletion checks have failed", async function(id) {
4670
+ const roleDeleteSchema$1 = utils$2.yup.strapiID().required().test("no-admin-single-delete", "Role deletion checks have failed", async function(id) {
4624
4671
  try {
4625
4672
  await strapi.service("admin::role").checkRolesIdForDeletion([id]);
4626
4673
  } catch (e) {
@@ -4628,25 +4675,25 @@ const roleDeleteSchema = utils$1.yup.strapiID().required().test("no-admin-single
4628
4675
  }
4629
4676
  return true;
4630
4677
  });
4631
- const roleUpdateSchema = utils$1.yup.object().shape({
4632
- name: utils$1.yup.string().min(1),
4633
- description: utils$1.yup.string().nullable()
4678
+ const roleUpdateSchema = utils$2.yup.object().shape({
4679
+ name: utils$2.yup.string().min(1),
4680
+ description: utils$2.yup.string().nullable()
4634
4681
  }).noUnknown();
4635
- const validateRoleCreateInput = utils$1.validateYupSchema(roleCreateSchema);
4636
- const validateRoleUpdateInput = utils$1.validateYupSchema(roleUpdateSchema);
4637
- const validateRolesDeleteInput = utils$1.validateYupSchema(rolesDeleteSchema);
4638
- const validateRoleDeleteInput = utils$1.validateYupSchema(roleDeleteSchema);
4639
- const { ApplicationError: ApplicationError$2 } = utils$1.errors;
4640
- const { SUPER_ADMIN_CODE } = constants$3;
4641
- const role = {
4682
+ const validateRoleCreateInput$1 = utils$2.validateYupSchema(roleCreateSchema$1);
4683
+ const validateRoleUpdateInput = utils$2.validateYupSchema(roleUpdateSchema);
4684
+ const validateRolesDeleteInput$1 = utils$2.validateYupSchema(rolesDeleteSchema$1);
4685
+ const validateRoleDeleteInput$1 = utils$2.validateYupSchema(roleDeleteSchema$1);
4686
+ const { ApplicationError: ApplicationError$5 } = utils$2.errors;
4687
+ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$2 } = constants$3;
4688
+ const role$2 = {
4642
4689
  /**
4643
4690
  * Create a new role
4644
4691
  * @param {KoaContext} ctx - koa context
4645
4692
  */
4646
4693
  async create(ctx) {
4647
4694
  const { body } = ctx.request;
4648
- await validateRoleCreateInput(body);
4649
- const roleService = getService("role");
4695
+ await validateRoleCreateInput$1(body);
4696
+ const roleService = getService$1("role");
4650
4697
  const role2 = await roleService.create(body);
4651
4698
  const sanitizedRole = roleService.sanitizeRole(role2);
4652
4699
  ctx.created({ data: sanitizedRole });
@@ -4657,7 +4704,7 @@ const role = {
4657
4704
  */
4658
4705
  async findOne(ctx) {
4659
4706
  const { id } = ctx.params;
4660
- const role2 = await getService("role").findOneWithUsersCount({ id });
4707
+ const role2 = await getService$1("role").findOneWithUsersCount({ id });
4661
4708
  if (!role2) {
4662
4709
  return ctx.notFound("role.notFound");
4663
4710
  }
@@ -4671,13 +4718,13 @@ const role = {
4671
4718
  */
4672
4719
  async findAll(ctx) {
4673
4720
  const { query } = ctx.request;
4674
- const permissionsManager = getService("permission").createPermissionsManager({
4721
+ const permissionsManager = getService$1("permission").createPermissionsManager({
4675
4722
  ability: ctx.state.userAbility,
4676
4723
  model: "admin::role"
4677
4724
  });
4678
4725
  await permissionsManager.validateQuery(query);
4679
4726
  const sanitizedQuery = await permissionsManager.sanitizeQuery(query);
4680
- const roles2 = await getService("role").findAllWithUsersCount(sanitizedQuery);
4727
+ const roles2 = await getService$1("role").findAllWithUsersCount(sanitizedQuery);
4681
4728
  ctx.body = {
4682
4729
  data: roles2
4683
4730
  };
@@ -4689,14 +4736,14 @@ const role = {
4689
4736
  async update(ctx) {
4690
4737
  const { id } = ctx.params;
4691
4738
  const { body } = ctx.request;
4692
- const roleService = getService("role");
4739
+ const roleService = getService$1("role");
4693
4740
  await validateRoleUpdateInput(body);
4694
4741
  const role2 = await roleService.findOne({ id });
4695
4742
  if (!role2) {
4696
4743
  return ctx.notFound("role.notFound");
4697
4744
  }
4698
- if (role2.code === SUPER_ADMIN_CODE) {
4699
- throw new ApplicationError$2("Super admin can't be edited.");
4745
+ if (role2.code === SUPER_ADMIN_CODE$2) {
4746
+ throw new ApplicationError$5("Super admin can't be edited.");
4700
4747
  }
4701
4748
  const updatedRole = await roleService.update({ id }, body);
4702
4749
  const sanitizedRole = roleService.sanitizeRole(updatedRole);
@@ -4710,8 +4757,8 @@ const role = {
4710
4757
  */
4711
4758
  async getPermissions(ctx) {
4712
4759
  const { id } = ctx.params;
4713
- const roleService = getService("role");
4714
- const permissionService = getService("permission");
4760
+ const roleService = getService$1("role");
4761
+ const permissionService = getService$1("permission");
4715
4762
  const role2 = await roleService.findOne({ id });
4716
4763
  if (!role2) {
4717
4764
  return ctx.notFound("role.notFound");
@@ -4730,14 +4777,14 @@ const role = {
4730
4777
  async updatePermissions(ctx) {
4731
4778
  const { id } = ctx.params;
4732
4779
  const { body: input } = ctx.request;
4733
- const roleService = getService("role");
4734
- const permissionService = getService("permission");
4780
+ const roleService = getService$1("role");
4781
+ const permissionService = getService$1("permission");
4735
4782
  const role2 = await roleService.findOne({ id });
4736
4783
  if (!role2) {
4737
4784
  return ctx.notFound("role.notFound");
4738
4785
  }
4739
- if (role2.code === SUPER_ADMIN_CODE) {
4740
- throw new ApplicationError$2("Super admin permissions can't be edited.");
4786
+ if (role2.code === SUPER_ADMIN_CODE$2) {
4787
+ throw new ApplicationError$5("Super admin permissions can't be edited.");
4741
4788
  }
4742
4789
  await validatedUpdatePermissionsInput(input);
4743
4790
  if (!role2) {
@@ -4755,8 +4802,8 @@ const role = {
4755
4802
  */
4756
4803
  async deleteOne(ctx) {
4757
4804
  const { id } = ctx.params;
4758
- await validateRoleDeleteInput(id);
4759
- const roleService = getService("role");
4805
+ await validateRoleDeleteInput$1(id);
4806
+ const roleService = getService$1("role");
4760
4807
  const roles2 = await roleService.deleteByIds([id]);
4761
4808
  const sanitizedRole = roles2.map((role2) => roleService.sanitizeRole(role2))[0] || null;
4762
4809
  return ctx.deleted({
@@ -4769,8 +4816,8 @@ const role = {
4769
4816
  */
4770
4817
  async deleteMany(ctx) {
4771
4818
  const { body } = ctx.request;
4772
- await validateRolesDeleteInput(body);
4773
- const roleService = getService("role");
4819
+ await validateRolesDeleteInput$1(body);
4820
+ const roleService = getService$1("role");
4774
4821
  const roles2 = await roleService.deleteByIds(body.ids);
4775
4822
  const sanitizedRoles = roles2.map(roleService.sanitizeRole);
4776
4823
  return ctx.deleted({
@@ -4783,11 +4830,11 @@ const {
4783
4830
  handlers: { createPushController, createPullController }
4784
4831
  }
4785
4832
  } = dataTransfer$1.strapi;
4786
- const { UnauthorizedError } = utils$1.errors;
4833
+ const { UnauthorizedError: UnauthorizedError$1 } = utils$2.errors;
4787
4834
  const verify = async (ctx, scope) => {
4788
4835
  const { auth: auth2 } = ctx.state;
4789
4836
  if (!auth2) {
4790
- throw new UnauthorizedError();
4837
+ throw new UnauthorizedError$1();
4791
4838
  }
4792
4839
  await dataTransferAuthStrategy.verify(auth2, { scope });
4793
4840
  };
@@ -4797,34 +4844,34 @@ const runner = {
4797
4844
  push,
4798
4845
  pull
4799
4846
  };
4800
- const transferTokenCreationSchema = utils$1.yup.object().shape({
4801
- name: utils$1.yup.string().min(1).required(),
4802
- description: utils$1.yup.string().optional(),
4803
- permissions: utils$1.yup.array().min(1).of(utils$1.yup.string().oneOf(Object.values(constants$3.TRANSFER_TOKEN_TYPE))).required(),
4804
- lifespan: utils$1.yup.number().min(1).oneOf(Object.values(constants$3.TRANSFER_TOKEN_LIFESPANS)).nullable()
4847
+ const transferTokenCreationSchema = utils$2.yup.object().shape({
4848
+ name: utils$2.yup.string().min(1).required(),
4849
+ description: utils$2.yup.string().optional(),
4850
+ permissions: utils$2.yup.array().min(1).of(utils$2.yup.string().oneOf(Object.values(constants$3.TRANSFER_TOKEN_TYPE))).required(),
4851
+ lifespan: utils$2.yup.number().min(1).oneOf(Object.values(constants$3.TRANSFER_TOKEN_LIFESPANS)).nullable()
4805
4852
  }).noUnknown().strict();
4806
- const transferTokenUpdateSchema = utils$1.yup.object().shape({
4807
- name: utils$1.yup.string().min(1).notNull(),
4808
- description: utils$1.yup.string().nullable(),
4809
- permissions: utils$1.yup.array().min(1).of(utils$1.yup.string().oneOf(Object.values(constants$3.TRANSFER_TOKEN_TYPE))).nullable()
4853
+ const transferTokenUpdateSchema = utils$2.yup.object().shape({
4854
+ name: utils$2.yup.string().min(1).notNull(),
4855
+ description: utils$2.yup.string().nullable(),
4856
+ permissions: utils$2.yup.array().min(1).of(utils$2.yup.string().oneOf(Object.values(constants$3.TRANSFER_TOKEN_TYPE))).nullable()
4810
4857
  }).noUnknown().strict();
4811
- const validateTransferTokenCreationInput$1 = utils$1.validateYupSchema(transferTokenCreationSchema);
4812
- const validateTransferTokenUpdateInput$1 = utils$1.validateYupSchema(transferTokenUpdateSchema);
4858
+ const validateTransferTokenCreationInput$1 = utils$2.validateYupSchema(transferTokenCreationSchema);
4859
+ const validateTransferTokenUpdateInput$1 = utils$2.validateYupSchema(transferTokenUpdateSchema);
4813
4860
  const token$1 = {
4814
4861
  validateTransferTokenCreationInput: validateTransferTokenCreationInput$1,
4815
4862
  validateTransferTokenUpdateInput: validateTransferTokenUpdateInput$1
4816
4863
  };
4817
- const { ApplicationError: ApplicationError$1 } = utils$1.errors;
4864
+ const { ApplicationError: ApplicationError$4 } = utils$2.errors;
4818
4865
  const { validateTransferTokenCreationInput, validateTransferTokenUpdateInput } = token$1;
4819
4866
  const token = {
4820
4867
  async list(ctx) {
4821
- const transferService = getService("transfer");
4868
+ const transferService = getService$1("transfer");
4822
4869
  const transferTokens = await transferService.token.list();
4823
4870
  ctx.body = { data: transferTokens };
4824
4871
  },
4825
4872
  async getById(ctx) {
4826
4873
  const { id } = ctx.params;
4827
- const tokenService = getService("transfer").token;
4874
+ const tokenService = getService$1("transfer").token;
4828
4875
  const transferToken2 = await tokenService.getById(id);
4829
4876
  if (!transferToken2) {
4830
4877
  ctx.notFound("Transfer token not found");
@@ -4834,7 +4881,7 @@ const token = {
4834
4881
  },
4835
4882
  async create(ctx) {
4836
4883
  const { body } = ctx.request;
4837
- const { token: tokenService } = getService("transfer");
4884
+ const { token: tokenService } = getService$1("transfer");
4838
4885
  const attributes = {
4839
4886
  name: fp.trim(body.name),
4840
4887
  description: fp.trim(body.description),
@@ -4844,7 +4891,7 @@ const token = {
4844
4891
  await validateTransferTokenCreationInput(attributes);
4845
4892
  const alreadyExists = await tokenService.exists({ name: attributes.name });
4846
4893
  if (alreadyExists) {
4847
- throw new ApplicationError$1("Name already taken");
4894
+ throw new ApplicationError$4("Name already taken");
4848
4895
  }
4849
4896
  const transferTokens = await tokenService.create(attributes);
4850
4897
  ctx.created({ data: transferTokens });
@@ -4852,7 +4899,7 @@ const token = {
4852
4899
  async update(ctx) {
4853
4900
  const { body } = ctx.request;
4854
4901
  const { id } = ctx.params;
4855
- const { token: tokenService } = getService("transfer");
4902
+ const { token: tokenService } = getService$1("transfer");
4856
4903
  const attributes = body;
4857
4904
  if (fp.has("name", attributes)) {
4858
4905
  attributes.name = fp.trim(body.name);
@@ -4867,8 +4914,8 @@ const token = {
4867
4914
  }
4868
4915
  if (fp.has("name", attributes)) {
4869
4916
  const nameAlreadyTaken = await tokenService.getByName(attributes.name);
4870
- if (!!nameAlreadyTaken && !utils$1.strings.isEqual(nameAlreadyTaken.id, id)) {
4871
- throw new ApplicationError$1("Name already taken");
4917
+ if (!!nameAlreadyTaken && !utils$2.strings.isEqual(nameAlreadyTaken.id, id)) {
4918
+ throw new ApplicationError$4("Name already taken");
4872
4919
  }
4873
4920
  }
4874
4921
  const apiToken2 = await tokenService.update(id, attributes);
@@ -4876,13 +4923,13 @@ const token = {
4876
4923
  },
4877
4924
  async revoke(ctx) {
4878
4925
  const { id } = ctx.params;
4879
- const { token: tokenService } = getService("transfer");
4926
+ const { token: tokenService } = getService$1("transfer");
4880
4927
  const transferToken2 = await tokenService.revoke(id);
4881
4928
  ctx.deleted({ data: transferToken2 });
4882
4929
  },
4883
4930
  async regenerate(ctx) {
4884
4931
  const { id } = ctx.params;
4885
- const { token: tokenService } = getService("transfer");
4932
+ const { token: tokenService } = getService$1("transfer");
4886
4933
  const exists2 = await tokenService.getById(id);
4887
4934
  if (!exists2) {
4888
4935
  ctx.notFound("Transfer token not found");
@@ -4897,12 +4944,12 @@ const transfer = {
4897
4944
  ...prefixActionsName("runner", runner),
4898
4945
  ...prefixActionsName("token", token)
4899
4946
  };
4900
- const { ApplicationError } = utils$1.errors;
4901
- const user = {
4947
+ const { ApplicationError: ApplicationError$3 } = utils$2.errors;
4948
+ const user$2 = {
4902
4949
  async create(ctx) {
4903
4950
  const { body } = ctx.request;
4904
4951
  const cleanData = { ...body, email: ___namespace.get(body, `email`, ``).toLowerCase() };
4905
- await validateUserCreationInput(cleanData);
4952
+ await validateUserCreationInput$1(cleanData);
4906
4953
  const attributes = ___namespace.pick(cleanData, [
4907
4954
  "firstname",
4908
4955
  "lastname",
@@ -4910,19 +4957,19 @@ const user = {
4910
4957
  "roles",
4911
4958
  "preferedLanguage"
4912
4959
  ]);
4913
- const userAlreadyExists = await getService("user").exists({
4960
+ const userAlreadyExists = await getService$1("user").exists({
4914
4961
  email: attributes.email
4915
4962
  });
4916
4963
  if (userAlreadyExists) {
4917
- throw new ApplicationError("Email already taken");
4964
+ throw new ApplicationError$3("Email already taken");
4918
4965
  }
4919
- const createdUser = await getService("user").create(attributes);
4920
- const userInfo = getService("user").sanitizeUser(createdUser);
4966
+ const createdUser = await getService$1("user").create(attributes);
4967
+ const userInfo = getService$1("user").sanitizeUser(createdUser);
4921
4968
  Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
4922
4969
  ctx.created({ data: userInfo });
4923
4970
  },
4924
4971
  async find(ctx) {
4925
- const userService = getService("user");
4972
+ const userService = getService$1("user");
4926
4973
  const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
4927
4974
  ability: ctx.state.userAbility,
4928
4975
  model: "admin::user"
@@ -4939,12 +4986,12 @@ const user = {
4939
4986
  },
4940
4987
  async findOne(ctx) {
4941
4988
  const { id } = ctx.params;
4942
- const user2 = await getService("user").findOne(id);
4989
+ const user2 = await getService$1("user").findOne(id);
4943
4990
  if (!user2) {
4944
4991
  return ctx.notFound("User does not exist");
4945
4992
  }
4946
4993
  ctx.body = {
4947
- data: getService("user").sanitizeUser(user2)
4994
+ data: getService$1("user").sanitizeUser(user2)
4948
4995
  };
4949
4996
  },
4950
4997
  async update(ctx) {
@@ -4952,30 +4999,30 @@ const user = {
4952
4999
  const { body: input } = ctx.request;
4953
5000
  await validateUserUpdateInput(input);
4954
5001
  if (___namespace.has(input, "email")) {
4955
- const uniqueEmailCheck = await getService("user").exists({
5002
+ const uniqueEmailCheck = await getService$1("user").exists({
4956
5003
  id: { $ne: id },
4957
5004
  email: input.email
4958
5005
  });
4959
5006
  if (uniqueEmailCheck) {
4960
- throw new ApplicationError("A user with this email address already exists");
5007
+ throw new ApplicationError$3("A user with this email address already exists");
4961
5008
  }
4962
5009
  }
4963
- const updatedUser = await getService("user").updateById(id, input);
5010
+ const updatedUser = await getService$1("user").updateById(id, input);
4964
5011
  if (!updatedUser) {
4965
5012
  return ctx.notFound("User does not exist");
4966
5013
  }
4967
5014
  ctx.body = {
4968
- data: getService("user").sanitizeUser(updatedUser)
5015
+ data: getService$1("user").sanitizeUser(updatedUser)
4969
5016
  };
4970
5017
  },
4971
5018
  async deleteOne(ctx) {
4972
5019
  const { id } = ctx.params;
4973
- const deletedUser = await getService("user").deleteById(id);
5020
+ const deletedUser = await getService$1("user").deleteById(id);
4974
5021
  if (!deletedUser) {
4975
5022
  return ctx.notFound("User not found");
4976
5023
  }
4977
5024
  return ctx.deleted({
4978
- data: getService("user").sanitizeUser(deletedUser)
5025
+ data: getService$1("user").sanitizeUser(deletedUser)
4979
5026
  });
4980
5027
  },
4981
5028
  /**
@@ -4985,17 +5032,17 @@ const user = {
4985
5032
  async deleteMany(ctx) {
4986
5033
  const { body } = ctx.request;
4987
5034
  await validateUsersDeleteInput(body);
4988
- const users2 = await getService("user").deleteByIds(body.ids);
4989
- const sanitizedUsers = users2.map(getService("user").sanitizeUser);
5035
+ const users2 = await getService$1("user").deleteByIds(body.ids);
5036
+ const sanitizedUsers = users2.map(getService$1("user").sanitizeUser);
4990
5037
  return ctx.deleted({
4991
5038
  data: sanitizedUsers
4992
5039
  });
4993
5040
  }
4994
5041
  };
4995
5042
  const urlRegex = /^(?:([a-z0-9+.-]+):\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9_]-*)*[a-z\u00a1-\uffff0-9_]+)(?:\.(?:[a-z\u00a1-\uffff0-9_]-*)*[a-z\u00a1-\uffff0-9_]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/;
4996
- const webhookValidator = utils$1.yup.object({
4997
- name: utils$1.yup.string().required(),
4998
- url: utils$1.yup.string().matches(urlRegex, "url must be a valid URL").required().test(
5043
+ const webhookValidator = utils$2.yup.object({
5044
+ name: utils$2.yup.string().required(),
5045
+ url: utils$2.yup.string().matches(urlRegex, "url must be a valid URL").required().test(
4999
5046
  "is-public-url",
5000
5047
  "Url is not supported because it isn't reachable over the public internet",
5001
5048
  async (url) => {
@@ -5011,21 +5058,21 @@ const webhookValidator = utils$1.yup.object({
5011
5058
  }
5012
5059
  }
5013
5060
  ),
5014
- headers: utils$1.yup.lazy((data) => {
5061
+ headers: utils$2.yup.lazy((data) => {
5015
5062
  if (typeof data !== "object") {
5016
- return utils$1.yup.object().required();
5063
+ return utils$2.yup.object().required();
5017
5064
  }
5018
- return utils$1.yup.object(
5065
+ return utils$2.yup.object(
5019
5066
  // @ts-expect-error lodash types
5020
5067
  ___namespace.default.mapValues(data, () => {
5021
- utils$1.yup.string().min(1).required();
5068
+ utils$2.yup.string().min(1).required();
5022
5069
  })
5023
5070
  ).required();
5024
5071
  }),
5025
- events: utils$1.yup.array().of(utils$1.yup.string()).required()
5072
+ events: utils$2.yup.array().of(utils$2.yup.string()).required()
5026
5073
  }).noUnknown();
5027
5074
  const updateWebhookValidator = webhookValidator.shape({
5028
- isEnabled: utils$1.yup.boolean()
5075
+ isEnabled: utils$2.yup.boolean()
5029
5076
  });
5030
5077
  const webhooks = {
5031
5078
  async listWebhooks(ctx) {
@@ -5042,7 +5089,7 @@ const webhooks = {
5042
5089
  },
5043
5090
  async createWebhook(ctx) {
5044
5091
  const { body } = ctx.request;
5045
- await utils$1.validateYupSchema(webhookValidator)(body);
5092
+ await utils$2.validateYupSchema(webhookValidator)(body);
5046
5093
  const webhook = await strapi.get("webhookStore").createWebhook(body);
5047
5094
  strapi.get("webhookRunner").add(webhook);
5048
5095
  ctx.created({ data: webhook });
@@ -5050,7 +5097,7 @@ const webhooks = {
5050
5097
  async updateWebhook(ctx) {
5051
5098
  const { id } = ctx.params;
5052
5099
  const { body } = ctx.request;
5053
- await utils$1.validateYupSchema(updateWebhookValidator)(body);
5100
+ await utils$2.validateYupSchema(updateWebhookValidator)(body);
5054
5101
  const webhook = await strapi.get("webhookStore").findWebhook(id);
5055
5102
  if (!webhook) {
5056
5103
  return ctx.notFound("webhook.notFound");
@@ -5106,15 +5153,15 @@ const contentApi = {
5106
5153
  ctx.send({ data: routesMap });
5107
5154
  }
5108
5155
  };
5109
- const index$2 = {
5110
- admin,
5156
+ const controllers$1 = {
5157
+ admin: admin$3,
5111
5158
  "api-token": apiToken$1,
5112
5159
  "authenticated-user": authenticatedUser,
5113
- authentication,
5160
+ authentication: authentication$1,
5114
5161
  permission,
5115
- role,
5162
+ role: role$2,
5116
5163
  transfer,
5117
- user,
5164
+ user: user$2,
5118
5165
  webhooks,
5119
5166
  "content-api": contentApi
5120
5167
  };
@@ -5539,7 +5586,7 @@ const transferTokenPermission = {
5539
5586
  }
5540
5587
  }
5541
5588
  };
5542
- const index$1 = {
5589
+ const contentTypes = {
5543
5590
  permission: { schema: Permission },
5544
5591
  user: { schema: User },
5545
5592
  role: { schema: Role },
@@ -5549,7 +5596,7 @@ const index$1 = {
5549
5596
  "transfer-token-permission": { schema: transferTokenPermission }
5550
5597
  };
5551
5598
  const { RateLimitError } = utils__default.default.errors;
5552
- const rateLimit = (config, { strapi: strapi2 }) => async (ctx, next) => {
5599
+ const rateLimit = (config2, { strapi: strapi2 }) => async (ctx, next) => {
5553
5600
  let rateLimitConfig = strapi2.config.get("admin.rateLimit");
5554
5601
  if (!rateLimitConfig) {
5555
5602
  rateLimitConfig = {
@@ -5572,14 +5619,14 @@ const rateLimit = (config, { strapi: strapi2 }) => async (ctx, next) => {
5572
5619
  throw new RateLimitError();
5573
5620
  },
5574
5621
  ...rateLimitConfig,
5575
- ...config
5622
+ ...config2
5576
5623
  };
5577
5624
  return rateLimit2.middleware(loadConfig)(ctx, next);
5578
5625
  }
5579
5626
  return next();
5580
5627
  };
5581
5628
  const dataTransfer = () => async (ctx, next) => {
5582
- const transferUtils = getService("transfer").utils;
5629
+ const transferUtils = getService$1("transfer").utils;
5583
5630
  const { hasValidTokenSalt: hasValidTokenSalt2, isRemoteTransferEnabled: isRemoteTransferEnabled2 } = transferUtils;
5584
5631
  if (isRemoteTransferEnabled2()) {
5585
5632
  return next();
@@ -5597,18 +5644,1366 @@ const dataTransfer = () => async (ctx, next) => {
5597
5644
  }
5598
5645
  throw new Error("Unexpected error while trying to access a data transfer route");
5599
5646
  };
5600
- const index = {
5647
+ const middlewares$1 = {
5601
5648
  rateLimit,
5602
5649
  "data-transfer": dataTransfer
5603
5650
  };
5604
- exports.bootstrap = bootstrap;
5605
- exports.config = index$6;
5606
- exports.contentTypes = index$1;
5607
- exports.controllers = index$2;
5608
- exports.destroy = destroy;
5609
- exports.middlewares = index;
5610
- exports.policies = index$5;
5611
- exports.register = register$1;
5612
- exports.routes = routes;
5613
- exports.services = index$3;
5651
+ const register = async ({ strapi: strapi2 }) => {
5652
+ await register$2({ strapi: strapi2 });
5653
+ };
5654
+ const getService = (name2, { strapi: strapi2 } = { strapi: global.strapi }) => {
5655
+ return strapi2.service(`admin::${name2}`);
5656
+ };
5657
+ const actions = {
5658
+ sso: [
5659
+ {
5660
+ uid: "provider-login.read",
5661
+ displayName: "Read",
5662
+ pluginName: "admin",
5663
+ section: "settings",
5664
+ category: "single sign on",
5665
+ subCategory: "options"
5666
+ },
5667
+ {
5668
+ uid: "provider-login.update",
5669
+ displayName: "Update",
5670
+ pluginName: "admin",
5671
+ section: "settings",
5672
+ category: "single sign on",
5673
+ subCategory: "options"
5674
+ }
5675
+ ],
5676
+ auditLogs: [
5677
+ {
5678
+ uid: "audit-logs.read",
5679
+ displayName: "Read",
5680
+ pluginName: "admin",
5681
+ section: "settings",
5682
+ category: "audit logs",
5683
+ subCategory: "options"
5684
+ }
5685
+ ]
5686
+ };
5687
+ const transformTableName = (table) => {
5688
+ if (typeof table === "string") {
5689
+ return { name: table };
5690
+ }
5691
+ return table;
5692
+ };
5693
+ async function findTables({ strapi: strapi2 }, regex) {
5694
+ const tables = await strapi2.db.dialect.schemaInspector.getTables();
5695
+ return tables.filter((tableName) => regex.test(tableName));
5696
+ }
5697
+ async function addPersistTables({ strapi: strapi2 }, tableNames) {
5698
+ const persistedTables = await getPersistedTables({ strapi: strapi2 });
5699
+ const tables = tableNames.map(transformTableName);
5700
+ const notPersistedTableNames = fp.differenceWith(fp.isEqual, tables, persistedTables);
5701
+ const tablesToPersist = fp.differenceWith(
5702
+ (t1, t2) => t1.name === t2.name,
5703
+ persistedTables,
5704
+ notPersistedTableNames
5705
+ );
5706
+ if (!notPersistedTableNames.length) {
5707
+ return;
5708
+ }
5709
+ tablesToPersist.push(...notPersistedTableNames);
5710
+ await strapi2.store.set({
5711
+ type: "core",
5712
+ key: "persisted_tables",
5713
+ value: tablesToPersist
5714
+ });
5715
+ }
5716
+ async function getPersistedTables({ strapi: strapi2 }) {
5717
+ const persistedTables = await strapi2.store.get({
5718
+ type: "core",
5719
+ key: "persisted_tables"
5720
+ });
5721
+ return (persistedTables || []).map(transformTableName);
5722
+ }
5723
+ const persistTablesWithPrefix = async (tableNamePrefix) => {
5724
+ const tableNameRegex = new RegExp(`^${tableNamePrefix}.*`);
5725
+ const tableNames = await findTables({ strapi }, tableNameRegex);
5726
+ await addPersistTables({ strapi }, tableNames);
5727
+ };
5728
+ const bootstrap = async (args) => {
5729
+ const { actionProvider: actionProvider2 } = getService("permission");
5730
+ if (strapi.ee.features.isEnabled("sso")) {
5731
+ await actionProvider2.registerMany(actions.sso);
5732
+ }
5733
+ if (strapi.ee.features.isEnabled("audit-logs")) {
5734
+ await persistTablesWithPrefix("strapi_audit_logs");
5735
+ await actionProvider2.registerMany(actions.auditLogs);
5736
+ }
5737
+ await getService("seat-enforcement").seatEnforcementWorkflow();
5738
+ await bootstrap$1(args);
5739
+ };
5740
+ const destroy = async ({ strapi: strapi2 }) => {
5741
+ await destroy$1();
5742
+ };
5743
+ const adminContentTypes = {};
5744
+ const isSsoLocked = async (user2) => {
5745
+ if (!strapi.ee.features.isEnabled("sso")) {
5746
+ return false;
5747
+ }
5748
+ if (!user2) {
5749
+ throw new Error("Missing user object");
5750
+ }
5751
+ const adminStore = await strapi.store({ type: "core", name: "admin" });
5752
+ const { providers: providers2 } = await adminStore.get({ key: "auth" });
5753
+ const lockedRoles = providers2.ssoLockedRoles ?? [];
5754
+ if (fp.isEmpty(lockedRoles)) {
5755
+ return false;
5756
+ }
5757
+ const roles2 = (
5758
+ // If the roles are pre-loaded for the given user, then use them
5759
+ user2.roles ?? // Otherwise, try to load the role based on the given user ID
5760
+ await strapi.db.query("admin::user").load(user2, "roles", { roles: { fields: ["id"] } }) ?? // If the query fails somehow, default to an empty array
5761
+ []
5762
+ );
5763
+ const isLocked = lockedRoles.some(
5764
+ (lockedId) => (
5765
+ // lockedRoles will be a string to avoid issues with frontend and bigints
5766
+ roles2.some((role2) => lockedId === role2.id.toString())
5767
+ )
5768
+ );
5769
+ return isLocked;
5770
+ };
5771
+ const { ApplicationError: ApplicationError$2 } = utils$2.errors;
5772
+ const forgotPassword = async ({ email: email2 } = {}) => {
5773
+ const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
5774
+ if (!user2 || await isSsoLocked(user2)) {
5775
+ return;
5776
+ }
5777
+ const resetPasswordToken = getService("token").createToken();
5778
+ await getService("user").updateById(user2.id, { resetPasswordToken });
5779
+ const url = `${strapi.config.get(
5780
+ "admin.absoluteUrl"
5781
+ )}/auth/reset-password?code=${resetPasswordToken}`;
5782
+ return strapi.plugin("email").service("email").sendTemplatedEmail(
5783
+ {
5784
+ to: user2.email,
5785
+ from: strapi.config.get("admin.forgotPassword.from"),
5786
+ replyTo: strapi.config.get("admin.forgotPassword.replyTo")
5787
+ },
5788
+ strapi.config.get("admin.forgotPassword.emailTemplate"),
5789
+ {
5790
+ url,
5791
+ user: ___namespace.default.pick(user2, ["email", "firstname", "lastname", "username"])
5792
+ }
5793
+ ).catch((err) => {
5794
+ strapi.log.error(err);
5795
+ });
5796
+ };
5797
+ const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
5798
+ const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
5799
+ if (!matchingUser || await isSsoLocked(matchingUser)) {
5800
+ throw new ApplicationError$2();
5801
+ }
5802
+ return getService("user").updateById(matchingUser.id, {
5803
+ password: password2,
5804
+ resetPasswordToken: null
5805
+ });
5806
+ };
5807
+ const auth = {
5808
+ forgotPassword,
5809
+ resetPassword
5810
+ };
5811
+ const createProviderRegistry = () => {
5812
+ const registry = /* @__PURE__ */ new Map();
5813
+ Object.assign(registry, {
5814
+ register(provider) {
5815
+ if (strapi.isLoaded) {
5816
+ throw new Error(`You can't register new provider after the bootstrap`);
5817
+ }
5818
+ this.set(provider.uid, provider);
5819
+ },
5820
+ registerMany(providers2) {
5821
+ providers2.forEach((provider) => {
5822
+ this.register(provider);
5823
+ });
5824
+ },
5825
+ getAll() {
5826
+ return Array.from(this.values());
5827
+ }
5828
+ });
5829
+ return registry;
5830
+ };
5831
+ const providerRegistry = createProviderRegistry();
5832
+ const errorMessage = "SSO is disabled. Its functionnalities cannot be accessed.";
5833
+ const getStrategyCallbackURL = (providerName) => {
5834
+ if (!strapi.ee.features.isEnabled("sso")) {
5835
+ throw new Error(errorMessage);
5836
+ }
5837
+ return `/admin/connect/${providerName}`;
5838
+ };
5839
+ const syncProviderRegistryWithConfig = () => {
5840
+ if (!strapi.ee.features.isEnabled("sso")) {
5841
+ throw new Error(errorMessage);
5842
+ }
5843
+ const { providers: providers2 = [] } = strapi.config.get("admin.auth", {});
5844
+ providerRegistry.registerMany(providers2);
5845
+ };
5846
+ const SSOAuthEventsMapper = {
5847
+ onSSOAutoRegistration: "admin.auth.autoRegistration"
5848
+ };
5849
+ const sso$1 = {
5850
+ providerRegistry,
5851
+ getStrategyCallbackURL,
5852
+ syncProviderRegistryWithConfig,
5853
+ authEventsMapper: { ...passport$1.authEventsMapper, ...SSOAuthEventsMapper }
5854
+ };
5855
+ const { UnauthorizedError } = utils$2.errors;
5856
+ const localStrategyMiddleware = async ([error, user2, message], done) => {
5857
+ if (user2 && !error && await isSsoLocked(user2)) {
5858
+ return done(
5859
+ new UnauthorizedError("Login not allowed, please contact your administrator", {
5860
+ code: "LOGIN_NOT_ALLOWED"
5861
+ }),
5862
+ user2,
5863
+ message
5864
+ );
5865
+ }
5866
+ return done(error, user2, message);
5867
+ };
5868
+ const getPassportStrategies = () => {
5869
+ if (!strapi.ee.features.isEnabled("sso")) {
5870
+ return [createLocalStrategy(strapi)];
5871
+ }
5872
+ const localStrategy = createLocalStrategy(strapi, localStrategyMiddleware);
5873
+ if (!strapi.isLoaded) {
5874
+ sso$1.syncProviderRegistryWithConfig();
5875
+ }
5876
+ const providers2 = sso$1.providerRegistry.getAll();
5877
+ const strategies = providers2.map((provider) => provider.createStrategy(strapi));
5878
+ return [localStrategy, ...strategies];
5879
+ };
5880
+ const passport = {
5881
+ getPassportStrategies,
5882
+ ...sso$1
5883
+ };
5884
+ const { ApplicationError: ApplicationError$1 } = utils$2.errors;
5885
+ const ssoCheckRolesIdForDeletion = async (ids) => {
5886
+ const adminStore = await strapi.store({ type: "core", name: "admin" });
5887
+ const {
5888
+ providers: { defaultRole }
5889
+ } = await adminStore.get({ key: "auth" });
5890
+ for (const roleId of ids) {
5891
+ if (defaultRole && fp.toString(defaultRole) === fp.toString(roleId)) {
5892
+ throw new ApplicationError$1(
5893
+ "This role is used as the default SSO role. Make sure to change this configuration before deleting the role"
5894
+ );
5895
+ }
5896
+ }
5897
+ };
5898
+ const role$1 = {
5899
+ ssoCheckRolesIdForDeletion
5900
+ };
5901
+ const { ValidationError: ValidationError$1 } = utils$2.errors;
5902
+ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$1 } = constants$3;
5903
+ const updateEEDisabledUsersList = async (id, input) => {
5904
+ const disabledUsers = await getService("seat-enforcement").getDisabledUserList();
5905
+ if (!disabledUsers) {
5906
+ return;
5907
+ }
5908
+ const user2 = disabledUsers.find((user22) => user22.id === Number(id));
5909
+ if (!user2) {
5910
+ return;
5911
+ }
5912
+ if (user2.isActive !== input.isActive) {
5913
+ const newDisabledUsersList = disabledUsers.filter((user22) => user22.id !== Number(id));
5914
+ await strapi.store.set({
5915
+ type: "ee",
5916
+ key: "disabled_users",
5917
+ value: newDisabledUsersList
5918
+ });
5919
+ }
5920
+ };
5921
+ const castNumberArray = fp.pipe(fp.castArray, fp.map(fp.toNumber));
5922
+ const removeFromEEDisabledUsersList = async (ids) => {
5923
+ let idsToCheck;
5924
+ if (typeof ids === "object") {
5925
+ idsToCheck = castNumberArray(ids);
5926
+ } else {
5927
+ idsToCheck = [Number(ids)];
5928
+ }
5929
+ const disabledUsers = await getService("seat-enforcement").getDisabledUserList();
5930
+ if (!disabledUsers) {
5931
+ return;
5932
+ }
5933
+ const newDisabledUsersList = disabledUsers.filter((user2) => !idsToCheck.includes(user2.id));
5934
+ await strapi.store.set({
5935
+ type: "ee",
5936
+ key: "disabled_users",
5937
+ value: newDisabledUsersList
5938
+ });
5939
+ };
5940
+ const updateById = async (id, attributes) => {
5941
+ if (___namespace.default.has(attributes, "roles")) {
5942
+ const lastAdminUser = await isLastSuperAdminUser(id);
5943
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
5944
+ const willRemoveSuperAdminRole = !utils$2.arrays.includesString(attributes.roles, superAdminRole.id);
5945
+ if (lastAdminUser && willRemoveSuperAdminRole) {
5946
+ throw new ValidationError$1("You must have at least one user with super admin role.");
5947
+ }
5948
+ }
5949
+ if (attributes.isActive === false) {
5950
+ const lastAdminUser = await isLastSuperAdminUser(id);
5951
+ if (lastAdminUser) {
5952
+ throw new ValidationError$1("You must have at least one user with super admin role.");
5953
+ }
5954
+ }
5955
+ if (___namespace.default.has(attributes, "password")) {
5956
+ const hashedPassword = await getService("auth").hashPassword(attributes.password);
5957
+ const updatedUser2 = await strapi.db.query("admin::user").update({
5958
+ where: { id },
5959
+ data: {
5960
+ ...attributes,
5961
+ password: hashedPassword
5962
+ },
5963
+ populate: ["roles"]
5964
+ });
5965
+ strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser2) });
5966
+ return updatedUser2;
5967
+ }
5968
+ const updatedUser = await strapi.db.query("admin::user").update({
5969
+ where: { id },
5970
+ data: attributes,
5971
+ populate: ["roles"]
5972
+ });
5973
+ await updateEEDisabledUsersList(id, attributes);
5974
+ if (updatedUser) {
5975
+ strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser) });
5976
+ }
5977
+ return updatedUser;
5978
+ };
5979
+ const deleteById = async (id) => {
5980
+ const userToDelete = await strapi.db.query("admin::user").findOne({
5981
+ where: { id },
5982
+ populate: ["roles"]
5983
+ });
5984
+ if (!userToDelete) {
5985
+ return null;
5986
+ }
5987
+ if (userToDelete) {
5988
+ if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE$1)) {
5989
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
5990
+ if (superAdminRole.usersCount === 1) {
5991
+ throw new ValidationError$1("You must have at least one user with super admin role.");
5992
+ }
5993
+ }
5994
+ }
5995
+ const deletedUser = await strapi.db.query("admin::user").delete({ where: { id }, populate: ["roles"] });
5996
+ await removeFromEEDisabledUsersList(id);
5997
+ strapi.eventHub.emit("user.delete", { user: sanitizeUser(deletedUser) });
5998
+ return deletedUser;
5999
+ };
6000
+ const deleteByIds = async (ids) => {
6001
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
6002
+ const nbOfSuperAdminToDelete = await strapi.db.query("admin::user").count({
6003
+ where: {
6004
+ id: ids,
6005
+ roles: { id: superAdminRole.id }
6006
+ }
6007
+ });
6008
+ if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {
6009
+ throw new ValidationError$1("You must have at least one user with super admin role.");
6010
+ }
6011
+ const deletedUsers = [];
6012
+ for (const id of ids) {
6013
+ const deletedUser = await strapi.db.query("admin::user").delete({
6014
+ where: { id },
6015
+ populate: ["roles"]
6016
+ });
6017
+ deletedUsers.push(deletedUser);
6018
+ }
6019
+ await removeFromEEDisabledUsersList(ids);
6020
+ strapi.eventHub.emit("user.delete", {
6021
+ users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser))
6022
+ });
6023
+ return deletedUsers;
6024
+ };
6025
+ const sanitizeUserRoles = (role2) => ___namespace.default.pick(role2, ["id", "name", "description", "code"]);
6026
+ const isLastSuperAdminUser = async (userId) => {
6027
+ const user2 = await findOne(userId);
6028
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
6029
+ return superAdminRole.usersCount === 1 && hasSuperAdminRole$1(user2);
6030
+ };
6031
+ const sanitizeUser = (user2) => {
6032
+ return {
6033
+ ...___namespace.default.omit(user2, ["password", "resetPasswordToken", "registrationToken", "roles"]),
6034
+ roles: user2.roles && user2.roles.map(sanitizeUserRoles)
6035
+ };
6036
+ };
6037
+ const findOne = async (id, populate = ["roles"]) => {
6038
+ return strapi.db.query("admin::user").findOne({ where: { id }, populate });
6039
+ };
6040
+ const getCurrentActiveUserCount = async () => {
6041
+ return strapi.db.query("admin::user").count({ where: { isActive: true } });
6042
+ };
6043
+ const user$1 = {
6044
+ updateEEDisabledUsersList,
6045
+ removeFromEEDisabledUsersList,
6046
+ getCurrentActiveUserCount,
6047
+ deleteByIds,
6048
+ deleteById,
6049
+ updateById
6050
+ };
6051
+ const getSSOProvidersList = async () => {
6052
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
6053
+ return providerRegistry2.getAll().map(({ uid }) => uid);
6054
+ };
6055
+ const sendUpdateProjectInformation = async (strapi2) => {
6056
+ let groupProperties = {};
6057
+ const numberOfActiveAdminUsers = await getService("user").count({ isActive: true });
6058
+ const numberOfAdminUsers = await getService("user").count();
6059
+ if (strapi2.ee.features.isEnabled("sso")) {
6060
+ const SSOProviders = await getSSOProvidersList();
6061
+ groupProperties = fp.assign(groupProperties, {
6062
+ SSOProviders,
6063
+ isSSOConfigured: SSOProviders.length !== 0
6064
+ });
6065
+ }
6066
+ if (strapi2.ee.features.isEnabled("cms-content-releases")) {
6067
+ const numberOfContentReleases = await strapi2.db.query("plugin::content-releases.release").count();
6068
+ const numberOfPublishedContentReleases = await strapi2.db.query("plugin::content-releases.release").count({
6069
+ filters: { releasedAt: { $notNull: true } }
6070
+ });
6071
+ groupProperties = fp.assign(groupProperties, {
6072
+ numberOfContentReleases,
6073
+ numberOfPublishedContentReleases
6074
+ });
6075
+ }
6076
+ groupProperties = fp.assign(groupProperties, { numberOfActiveAdminUsers, numberOfAdminUsers });
6077
+ strapi2.telemetry.send("didUpdateProjectInformation", {
6078
+ groupProperties
6079
+ });
6080
+ };
6081
+ const startCron = (strapi2) => {
6082
+ strapi2.cron.add({
6083
+ "0 0 0 * * *": () => sendUpdateProjectInformation(strapi2)
6084
+ });
6085
+ };
6086
+ const metrics = { startCron, getSSOProvidersList, sendUpdateProjectInformation };
6087
+ const { SUPER_ADMIN_CODE } = constants$3;
6088
+ const getDisabledUserList = async () => {
6089
+ return strapi.store.get({ type: "ee", key: "disabled_users" });
6090
+ };
6091
+ const enableMaximumUserCount = async (numberOfUsersToEnable) => {
6092
+ const disabledUsers = await getDisabledUserList();
6093
+ const orderedDisabledUsers = fp.reverse(disabledUsers);
6094
+ const usersToEnable = fp.take(numberOfUsersToEnable, orderedDisabledUsers);
6095
+ await strapi.db.query("admin::user").updateMany({
6096
+ where: { id: fp.map(fp.prop("id"), usersToEnable) },
6097
+ data: { isActive: true }
6098
+ });
6099
+ const remainingDisabledUsers = fp.drop(numberOfUsersToEnable, orderedDisabledUsers);
6100
+ await strapi.store.set({
6101
+ type: "ee",
6102
+ key: "disabled_users",
6103
+ value: remainingDisabledUsers
6104
+ });
6105
+ };
6106
+ const disableUsersAboveLicenseLimit = async (numberOfUsersToDisable) => {
6107
+ const currentlyDisabledUsers = await getDisabledUserList() ?? [];
6108
+ const usersToDisable = [];
6109
+ const nonSuperAdminUsersToDisable = await strapi.db.query("admin::user").findMany({
6110
+ where: {
6111
+ isActive: true,
6112
+ roles: {
6113
+ code: { $ne: SUPER_ADMIN_CODE }
6114
+ }
6115
+ },
6116
+ orderBy: { createdAt: "DESC" },
6117
+ limit: numberOfUsersToDisable
6118
+ });
6119
+ usersToDisable.push(...nonSuperAdminUsersToDisable);
6120
+ if (nonSuperAdminUsersToDisable.length < numberOfUsersToDisable) {
6121
+ const superAdminUsersToDisable = await strapi.db.query("admin::user").findMany({
6122
+ where: {
6123
+ isActive: true,
6124
+ roles: { code: SUPER_ADMIN_CODE }
6125
+ },
6126
+ orderBy: { createdAt: "DESC" },
6127
+ limit: numberOfUsersToDisable - nonSuperAdminUsersToDisable.length
6128
+ });
6129
+ usersToDisable.push(...superAdminUsersToDisable);
6130
+ }
6131
+ await strapi.db.query("admin::user").updateMany({
6132
+ where: { id: fp.map(fp.prop("id"), usersToDisable) },
6133
+ data: { isActive: false }
6134
+ });
6135
+ await strapi.store.set({
6136
+ type: "ee",
6137
+ key: "disabled_users",
6138
+ value: currentlyDisabledUsers.concat(fp.map(fp.pick(["id", "isActive"]), usersToDisable))
6139
+ });
6140
+ };
6141
+ const syncDisabledUserRecords = async () => {
6142
+ const disabledUsers = await strapi.store.get({ type: "ee", key: "disabled_users" });
6143
+ if (!disabledUsers) {
6144
+ return;
6145
+ }
6146
+ await strapi.db.query("admin::user").updateMany({
6147
+ where: { id: fp.map(fp.prop("id"), disabledUsers) },
6148
+ data: { isActive: false }
6149
+ });
6150
+ };
6151
+ const seatEnforcementWorkflow = async () => {
6152
+ const adminSeats = strapi.ee.seats;
6153
+ if (fp.isNil(adminSeats)) {
6154
+ return;
6155
+ }
6156
+ await syncDisabledUserRecords();
6157
+ const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
6158
+ const adminSeatsLeft = adminSeats - currentActiveUserCount;
6159
+ if (adminSeatsLeft > 0) {
6160
+ await enableMaximumUserCount(adminSeatsLeft);
6161
+ } else if (adminSeatsLeft < 0) {
6162
+ await disableUsersAboveLicenseLimit(-adminSeatsLeft);
6163
+ }
6164
+ };
6165
+ const seatEnforcement = {
6166
+ seatEnforcementWorkflow,
6167
+ getDisabledUserList
6168
+ };
6169
+ const services = {
6170
+ auth,
6171
+ passport,
6172
+ role: role$1,
6173
+ user: user$1,
6174
+ metrics,
6175
+ "seat-enforcement": seatEnforcement
6176
+ };
6177
+ const providerOptionsUpdateSchema = utils$2.yup.object().shape({
6178
+ autoRegister: utils$2.yup.boolean().required(),
6179
+ defaultRole: utils$2.yup.strapiID().when("autoRegister", (value, initSchema) => {
6180
+ return value ? initSchema.required() : initSchema.nullable();
6181
+ }).test("is-valid-role", "You must submit a valid default role", (roleId) => {
6182
+ if (roleId === null) {
6183
+ return true;
6184
+ }
6185
+ return strapi.service("admin::role").exists({ id: roleId });
6186
+ }),
6187
+ ssoLockedRoles: utils$2.yup.array().nullable().of(
6188
+ utils$2.yup.strapiID().test(
6189
+ "is-valid-role",
6190
+ "You must submit a valid role for the SSO Locked roles",
6191
+ (roleId) => {
6192
+ return strapi.service("admin::role").exists({ id: roleId });
6193
+ }
6194
+ )
6195
+ )
6196
+ });
6197
+ const validateProviderOptionsUpdate = utils$2.validateYupSchema(providerOptionsUpdateSchema);
6198
+ const PROVIDER_REDIRECT_BASE = "/auth/login";
6199
+ const PROVIDER_REDIRECT_SUCCESS = `${PROVIDER_REDIRECT_BASE}/success`;
6200
+ const PROVIDER_REDIRECT_ERROR = `${PROVIDER_REDIRECT_BASE}/error`;
6201
+ const PROVIDER_URLS_MAP = {
6202
+ success: PROVIDER_REDIRECT_SUCCESS,
6203
+ error: PROVIDER_REDIRECT_ERROR
6204
+ };
6205
+ const getAdminStore = async () => strapi.store({ type: "core", name: "admin" });
6206
+ const getPrefixedRedirectUrls = () => {
6207
+ const { url: adminUrl } = strapi.config.get("admin");
6208
+ const prefixUrl = (url) => `${adminUrl || "/admin"}${url}`;
6209
+ return fp.mapValues(prefixUrl, PROVIDER_URLS_MAP);
6210
+ };
6211
+ const utils = {
6212
+ getAdminStore,
6213
+ getPrefixedRedirectUrls
6214
+ };
6215
+ const defaultConnectionError = () => new Error("Invalid connection payload");
6216
+ const authenticate = async (ctx, next) => {
6217
+ const {
6218
+ params: { provider }
6219
+ } = ctx;
6220
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6221
+ return passport__default.default.authenticate(provider, null, async (error, profile) => {
6222
+ if (error || !profile || !profile.email) {
6223
+ if (error) {
6224
+ strapi.log.error(error);
6225
+ }
6226
+ strapi.eventHub.emit("admin.auth.error", {
6227
+ error: error || defaultConnectionError(),
6228
+ provider
6229
+ });
6230
+ return ctx.redirect(redirectUrls.error);
6231
+ }
6232
+ const user2 = await getService("user").findOneByEmail(profile.email);
6233
+ const scenario = user2 ? existingUserScenario : nonExistingUserScenario;
6234
+ return scenario(ctx, next)(user2 || profile, provider);
6235
+ })(ctx, next);
6236
+ };
6237
+ const existingUserScenario = (ctx, next) => async (user2, provider) => {
6238
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6239
+ if (!user2.isActive) {
6240
+ strapi.eventHub.emit("admin.auth.error", {
6241
+ error: new Error(`Deactivated user tried to login (${user2.id})`),
6242
+ provider
6243
+ });
6244
+ return ctx.redirect(redirectUrls.error);
6245
+ }
6246
+ ctx.state.user = user2;
6247
+ return next();
6248
+ };
6249
+ const nonExistingUserScenario = (ctx, next) => async (profile, provider) => {
6250
+ const { email: email2, firstname: firstname2, lastname: lastname2, username: username2 } = profile;
6251
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6252
+ const adminStore = await utils.getAdminStore();
6253
+ const { providers: providers2 } = await adminStore.get({ key: "auth" });
6254
+ const isMissingRegisterFields = !username2 && (!firstname2 || !lastname2);
6255
+ if (!providers2.autoRegister || !providers2.defaultRole || isMissingRegisterFields) {
6256
+ strapi.eventHub.emit("admin.auth.error", { error: defaultConnectionError(), provider });
6257
+ return ctx.redirect(redirectUrls.error);
6258
+ }
6259
+ const defaultRole = await getService("role").findOne({ id: providers2.defaultRole });
6260
+ if (!defaultRole) {
6261
+ strapi.eventHub.emit("admin.auth.error", { error: defaultConnectionError(), provider });
6262
+ return ctx.redirect(redirectUrls.error);
6263
+ }
6264
+ ctx.state.user = await getService("user").create({
6265
+ email: email2,
6266
+ username: username2,
6267
+ firstname: firstname2,
6268
+ lastname: lastname2,
6269
+ roles: [defaultRole.id],
6270
+ isActive: true,
6271
+ registrationToken: null
6272
+ });
6273
+ strapi.eventHub.emit("admin.auth.autoRegistration", {
6274
+ user: ctx.state.user,
6275
+ provider
6276
+ });
6277
+ return next();
6278
+ };
6279
+ const redirectWithAuth = (ctx) => {
6280
+ const {
6281
+ params: { provider }
6282
+ } = ctx;
6283
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6284
+ const domain2 = strapi.config.get("admin.auth.domain");
6285
+ const { user: user2 } = ctx.state;
6286
+ const jwt2 = getService("token").createJwtToken(user2);
6287
+ const isProduction = strapi.config.get("environment") === "production";
6288
+ const cookiesOptions = { httpOnly: false, secure: isProduction, overwrite: true, domain: domain2 };
6289
+ const sanitizedUser = getService("user").sanitizeUser(user2);
6290
+ strapi.eventHub.emit("admin.auth.success", { user: sanitizedUser, provider });
6291
+ ctx.cookies.set("jwtToken", jwt2, cookiesOptions);
6292
+ ctx.redirect(redirectUrls.success);
6293
+ };
6294
+ const middlewares = {
6295
+ authenticate,
6296
+ redirectWithAuth
6297
+ };
6298
+ const toProviderDTO = fp.pick(["uid", "displayName", "icon"]);
6299
+ const toProviderLoginOptionsDTO = fp.pick(["autoRegister", "defaultRole", "ssoLockedRoles"]);
6300
+ const { ValidationError } = utils$2.errors;
6301
+ const providerAuthenticationFlow = compose__default.default([
6302
+ middlewares.authenticate,
6303
+ middlewares.redirectWithAuth
6304
+ ]);
6305
+ const authentication = {
6306
+ async getProviders(ctx) {
6307
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
6308
+ ctx.body = providerRegistry2.getAll().map(toProviderDTO);
6309
+ },
6310
+ async getProviderLoginOptions(ctx) {
6311
+ const adminStore = await utils.getAdminStore();
6312
+ const { providers: providersOptions } = await adminStore.get({ key: "auth" });
6313
+ ctx.body = {
6314
+ data: toProviderLoginOptionsDTO(providersOptions)
6315
+ };
6316
+ },
6317
+ async updateProviderLoginOptions(ctx) {
6318
+ const {
6319
+ request: { body }
6320
+ } = ctx;
6321
+ await validateProviderOptionsUpdate(body);
6322
+ const adminStore = await utils.getAdminStore();
6323
+ const currentAuthOptions = await adminStore.get({ key: "auth" });
6324
+ const newAuthOptions = { ...currentAuthOptions, providers: body };
6325
+ await adminStore.set({ key: "auth", value: newAuthOptions });
6326
+ strapi.telemetry.send("didUpdateSSOSettings");
6327
+ ctx.body = {
6328
+ data: toProviderLoginOptionsDTO(newAuthOptions.providers)
6329
+ };
6330
+ },
6331
+ providerLogin(ctx, next) {
6332
+ const {
6333
+ params: { provider: providerName }
6334
+ } = ctx;
6335
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
6336
+ if (!providerRegistry2.has(providerName)) {
6337
+ throw new ValidationError(`Invalid provider supplied: ${providerName}`);
6338
+ }
6339
+ return providerAuthenticationFlow(ctx, next);
6340
+ }
6341
+ };
6342
+ const roleCreateSchema = utils$2.yup.object().shape({
6343
+ name: utils$2.yup.string().min(1).required(),
6344
+ description: utils$2.yup.string().nullable()
6345
+ }).noUnknown();
6346
+ const rolesDeleteSchema = utils$2.yup.object().shape({
6347
+ ids: utils$2.yup.array().of(utils$2.yup.strapiID()).min(1).required().test(
6348
+ "roles-deletion-checks",
6349
+ "Roles deletion checks have failed",
6350
+ async function rolesDeletionChecks(ids) {
6351
+ try {
6352
+ await strapi.service("admin::role").checkRolesIdForDeletion(ids);
6353
+ if (strapi.ee.features.isEnabled("sso")) {
6354
+ await strapi.service("admin::role").ssoCheckRolesIdForDeletion(ids);
6355
+ }
6356
+ } catch (e) {
6357
+ return this.createError({ path: "ids", message: e.message });
6358
+ }
6359
+ return true;
6360
+ }
6361
+ )
6362
+ }).noUnknown();
6363
+ const roleDeleteSchema = utils$2.yup.strapiID().required().test(
6364
+ "no-admin-single-delete",
6365
+ "Role deletion checks have failed",
6366
+ async function noAdminSingleDelete(id) {
6367
+ try {
6368
+ await strapi.service("admin::role").checkRolesIdForDeletion([id]);
6369
+ if (strapi.ee.features.isEnabled("sso")) {
6370
+ await strapi.service("admin::role").ssoCheckRolesIdForDeletion([id]);
6371
+ }
6372
+ } catch (e) {
6373
+ return this.createError({ path: "id", message: e.message });
6374
+ }
6375
+ return true;
6376
+ }
6377
+ );
6378
+ const validateRoleCreateInput = utils$2.validateYupSchema(roleCreateSchema);
6379
+ const validateRolesDeleteInput = utils$2.validateYupSchema(rolesDeleteSchema);
6380
+ const validateRoleDeleteInput = utils$2.validateYupSchema(roleDeleteSchema);
6381
+ const role = {
6382
+ /**
6383
+ * Create a new role
6384
+ * @param {KoaContext} ctx - koa context
6385
+ */
6386
+ async create(ctx) {
6387
+ await validateRoleCreateInput(ctx.request.body);
6388
+ const roleService = getService("role");
6389
+ const role2 = await roleService.create(ctx.request.body);
6390
+ const sanitizedRole = roleService.sanitizeRole(role2);
6391
+ ctx.created({ data: sanitizedRole });
6392
+ },
6393
+ /**
6394
+ * Delete a role
6395
+ * @param {KoaContext} ctx - koa context
6396
+ */
6397
+ async deleteOne(ctx) {
6398
+ const { id } = ctx.params;
6399
+ await validateRoleDeleteInput(id);
6400
+ const roleService = getService("role");
6401
+ const roles2 = await roleService.deleteByIds([id]);
6402
+ const sanitizedRole = roles2.map((role2) => roleService.sanitizeRole(role2))[0] || null;
6403
+ return ctx.deleted({
6404
+ data: sanitizedRole
6405
+ });
6406
+ },
6407
+ /**
6408
+ * delete several roles
6409
+ * @param {KoaContext} ctx - koa context
6410
+ */
6411
+ async deleteMany(ctx) {
6412
+ const { body } = ctx.request;
6413
+ await validateRolesDeleteInput(body);
6414
+ const roleService = getService("role");
6415
+ const roles2 = await roleService.deleteByIds(body.ids);
6416
+ const sanitizedRoles = roles2.map(roleService.sanitizeRole);
6417
+ return ctx.deleted({
6418
+ data: sanitizedRoles
6419
+ });
6420
+ }
6421
+ };
6422
+ const ssoUserCreationInputExtension = utils$2.yup.object().shape({
6423
+ useSSORegistration: utils$2.yup.boolean()
6424
+ }).noUnknown();
6425
+ const validateUserCreationInput = (data) => {
6426
+ let schema = schemas.userCreationSchema;
6427
+ if (strapi.ee.features.isEnabled("sso")) {
6428
+ schema = schema.concat(ssoUserCreationInputExtension);
6429
+ }
6430
+ return utils$2.validateYupSchema(schema)(data);
6431
+ };
6432
+ const { ApplicationError, ForbiddenError } = utils$2.errors;
6433
+ const pickUserCreationAttributes = fp.pick(["firstname", "lastname", "email", "roles"]);
6434
+ const hasAdminSeatsAvaialble = async () => {
6435
+ if (!strapi.EE) {
6436
+ return true;
6437
+ }
6438
+ const permittedSeats = strapi.ee.seats;
6439
+ if (fp.isNil(permittedSeats)) {
6440
+ return true;
6441
+ }
6442
+ const userCount = await strapi.service("admin::user").getCurrentActiveUserCount();
6443
+ if (userCount < permittedSeats) {
6444
+ return true;
6445
+ }
6446
+ };
6447
+ const user = {
6448
+ async create(ctx) {
6449
+ if (!await hasAdminSeatsAvaialble()) {
6450
+ throw new ForbiddenError("License seat limit reached. You cannot create a new user");
6451
+ }
6452
+ const { body } = ctx.request;
6453
+ const cleanData = { ...body, email: ___namespace.default.get(body, `email`, ``).toLowerCase() };
6454
+ await validateUserCreationInput(cleanData);
6455
+ const attributes = pickUserCreationAttributes(cleanData);
6456
+ const { useSSORegistration } = cleanData;
6457
+ const userAlreadyExists = await getService("user").exists({ email: attributes.email });
6458
+ if (userAlreadyExists) {
6459
+ throw new ApplicationError("Email already taken");
6460
+ }
6461
+ if (useSSORegistration) {
6462
+ Object.assign(attributes, { registrationToken: null, isActive: true });
6463
+ }
6464
+ const createdUser = await getService("user").create(attributes);
6465
+ const userInfo = getService("user").sanitizeUser(createdUser);
6466
+ Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
6467
+ ctx.created({ data: userInfo });
6468
+ },
6469
+ async update(ctx) {
6470
+ const { id } = ctx.params;
6471
+ const { body: input } = ctx.request;
6472
+ await validateUserUpdateInput(input);
6473
+ if (___namespace.default.has(input, "email")) {
6474
+ const uniqueEmailCheck = await getService("user").exists({
6475
+ id: { $ne: id },
6476
+ email: input.email
6477
+ });
6478
+ if (uniqueEmailCheck) {
6479
+ throw new ApplicationError("A user with this email address already exists");
6480
+ }
6481
+ }
6482
+ const user2 = await getService("user").findOne(id, null);
6483
+ if (!await hasAdminSeatsAvaialble() && !user2.isActive && input.isActive) {
6484
+ throw new ForbiddenError("License seat limit reached. You cannot active this user");
6485
+ }
6486
+ const updatedUser = await getService("user").updateById(id, input);
6487
+ if (!updatedUser) {
6488
+ return ctx.notFound("User does not exist");
6489
+ }
6490
+ ctx.body = {
6491
+ data: getService("user").sanitizeUser(updatedUser)
6492
+ };
6493
+ },
6494
+ async isSSOLocked(ctx) {
6495
+ const { user: user2 } = ctx.state;
6496
+ const isSSOLocked = await isSsoLocked(user2);
6497
+ ctx.body = {
6498
+ data: {
6499
+ isSSOLocked
6500
+ }
6501
+ };
6502
+ }
6503
+ };
6504
+ const admin$2 = {
6505
+ // NOTE: Overrides CE admin controller
6506
+ async getProjectType() {
6507
+ const flags = strapi.config.get("admin.flags", {});
6508
+ try {
6509
+ return { data: { isEE: strapi.EE, features: strapi.ee.features.list(), flags } };
6510
+ } catch (err) {
6511
+ return { data: { isEE: false, features: [], flags } };
6512
+ }
6513
+ },
6514
+ async licenseLimitInformation() {
6515
+ const permittedSeats = strapi.ee.seats;
6516
+ let shouldNotify = false;
6517
+ let licenseLimitStatus = null;
6518
+ let enforcementUserCount;
6519
+ const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
6520
+ const eeDisabledUsers = await getService("seat-enforcement").getDisabledUserList();
6521
+ if (eeDisabledUsers) {
6522
+ enforcementUserCount = currentActiveUserCount + eeDisabledUsers.length;
6523
+ } else {
6524
+ enforcementUserCount = currentActiveUserCount;
6525
+ }
6526
+ if (!fp.isNil(permittedSeats) && enforcementUserCount > permittedSeats) {
6527
+ shouldNotify = true;
6528
+ licenseLimitStatus = "OVER_LIMIT";
6529
+ }
6530
+ if (!fp.isNil(permittedSeats) && enforcementUserCount === permittedSeats) {
6531
+ shouldNotify = true;
6532
+ licenseLimitStatus = "AT_LIMIT";
6533
+ }
6534
+ const data = {
6535
+ enforcementUserCount,
6536
+ currentActiveUserCount,
6537
+ permittedSeats,
6538
+ shouldNotify,
6539
+ shouldStopCreate: fp.isNil(permittedSeats) ? false : currentActiveUserCount >= permittedSeats,
6540
+ licenseLimitStatus,
6541
+ isHostedOnStrapiCloud: utils$2.env("STRAPI_HOSTING", null) === "strapi.cloud",
6542
+ features: strapi.ee.features.list() ?? []
6543
+ };
6544
+ return { data };
6545
+ }
6546
+ };
6547
+ const controllers = {
6548
+ authentication,
6549
+ role,
6550
+ user,
6551
+ admin: admin$2
6552
+ };
6553
+ const enableFeatureMiddleware = (featureName) => (ctx, next) => {
6554
+ if (strapi.ee.features.isEnabled(featureName)) {
6555
+ return next();
6556
+ }
6557
+ ctx.status = 404;
6558
+ };
6559
+ const sso = {
6560
+ type: "admin",
6561
+ routes: [
6562
+ {
6563
+ method: "GET",
6564
+ path: "/providers",
6565
+ handler: "authentication.getProviders",
6566
+ config: {
6567
+ middlewares: [enableFeatureMiddleware("sso")],
6568
+ auth: false
6569
+ }
6570
+ },
6571
+ {
6572
+ method: "GET",
6573
+ path: "/connect/:provider",
6574
+ handler: "authentication.providerLogin",
6575
+ config: {
6576
+ middlewares: [enableFeatureMiddleware("sso")],
6577
+ auth: false
6578
+ }
6579
+ },
6580
+ {
6581
+ method: "POST",
6582
+ path: "/connect/:provider",
6583
+ handler: "authentication.providerLogin",
6584
+ config: {
6585
+ middlewares: [enableFeatureMiddleware("sso")],
6586
+ auth: false
6587
+ }
6588
+ },
6589
+ {
6590
+ method: "GET",
6591
+ path: "/providers/options",
6592
+ handler: "authentication.getProviderLoginOptions",
6593
+ config: {
6594
+ middlewares: [enableFeatureMiddleware("sso")],
6595
+ policies: [
6596
+ "admin::isAuthenticatedAdmin",
6597
+ { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.read"] } }
6598
+ ]
6599
+ }
6600
+ },
6601
+ {
6602
+ method: "PUT",
6603
+ path: "/providers/options",
6604
+ handler: "authentication.updateProviderLoginOptions",
6605
+ config: {
6606
+ middlewares: [enableFeatureMiddleware("sso")],
6607
+ policies: [
6608
+ "admin::isAuthenticatedAdmin",
6609
+ { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.update"] } }
6610
+ ]
6611
+ }
6612
+ },
6613
+ {
6614
+ method: "GET",
6615
+ path: "/providers/isSSOLocked",
6616
+ handler: "user.isSSOLocked",
6617
+ config: {
6618
+ middlewares: [enableFeatureMiddleware("sso")],
6619
+ policies: ["admin::isAuthenticatedAdmin"]
6620
+ }
6621
+ }
6622
+ ]
6623
+ };
6624
+ const licenseLimit = {
6625
+ type: "admin",
6626
+ routes: [
6627
+ // License limit infos
6628
+ {
6629
+ method: "GET",
6630
+ path: "/license-limit-information",
6631
+ handler: "admin.licenseLimitInformation",
6632
+ config: {
6633
+ policies: [
6634
+ "admin::isAuthenticatedAdmin",
6635
+ {
6636
+ name: "admin::hasPermissions",
6637
+ config: {
6638
+ actions: [
6639
+ "admin::users.create",
6640
+ "admin::users.read",
6641
+ "admin::users.update",
6642
+ "admin::users.delete"
6643
+ ]
6644
+ }
6645
+ }
6646
+ ]
6647
+ }
6648
+ }
6649
+ ]
6650
+ };
6651
+ const routes = {
6652
+ sso,
6653
+ "license-limit": licenseLimit
6654
+ };
6655
+ const auditLogsRoutes = {
6656
+ type: "admin",
6657
+ routes: [
6658
+ {
6659
+ method: "GET",
6660
+ path: "/audit-logs",
6661
+ handler: "audit-logs.findMany",
6662
+ config: {
6663
+ middlewares: [enableFeatureMiddleware("audit-logs")],
6664
+ policies: [
6665
+ "admin::isAuthenticatedAdmin",
6666
+ {
6667
+ name: "admin::hasPermissions",
6668
+ config: {
6669
+ actions: ["admin::audit-logs.read"]
6670
+ }
6671
+ }
6672
+ ]
6673
+ }
6674
+ },
6675
+ {
6676
+ method: "GET",
6677
+ path: "/audit-logs/:id",
6678
+ handler: "audit-logs.findOne",
6679
+ config: {
6680
+ middlewares: [enableFeatureMiddleware("audit-logs")],
6681
+ policies: [
6682
+ "admin::isAuthenticatedAdmin",
6683
+ {
6684
+ name: "admin::hasPermissions",
6685
+ config: {
6686
+ actions: ["admin::audit-logs.read"]
6687
+ }
6688
+ }
6689
+ ]
6690
+ }
6691
+ }
6692
+ ]
6693
+ };
6694
+ const ALLOWED_SORT_STRINGS = ["action:ASC", "action:DESC", "date:ASC", "date:DESC"];
6695
+ const validateFindManySchema = utils$2.yup.object().shape({
6696
+ page: utils$2.yup.number().integer().min(1),
6697
+ pageSize: utils$2.yup.number().integer().min(1).max(100),
6698
+ sort: utils$2.yup.mixed().oneOf(ALLOWED_SORT_STRINGS)
6699
+ }).required();
6700
+ const validateFindMany = utils$2.validateYupSchema(validateFindManySchema, { strict: false });
6701
+ const auditLogsController = {
6702
+ async findMany(ctx) {
6703
+ const { query } = ctx.request;
6704
+ await validateFindMany(query);
6705
+ const auditLogs = strapi.get("audit-logs");
6706
+ const body = await auditLogs.findMany(query);
6707
+ ctx.body = body;
6708
+ },
6709
+ async findOne(ctx) {
6710
+ const { id } = ctx.params;
6711
+ const auditLogs = strapi.get("audit-logs");
6712
+ const body = await auditLogs.findOne(id);
6713
+ ctx.body = body;
6714
+ strapi.telemetry.send("didWatchAnAuditLog");
6715
+ }
6716
+ };
6717
+ const getSanitizedUser = (user2) => {
6718
+ let displayName = user2.email;
6719
+ if (user2.username) {
6720
+ displayName = user2.username;
6721
+ } else if (user2.firstname && user2.lastname) {
6722
+ displayName = `${user2.firstname} ${user2.lastname}`;
6723
+ }
6724
+ return {
6725
+ id: user2.id,
6726
+ email: user2.email,
6727
+ displayName
6728
+ };
6729
+ };
6730
+ const createAuditLogsService = (strapi2) => {
6731
+ return {
6732
+ async saveEvent(event) {
6733
+ const { userId, ...rest } = event;
6734
+ const auditLog2 = { ...rest, user: userId };
6735
+ await strapi2.db?.query("admin::audit-log").create({ data: auditLog2 });
6736
+ return this;
6737
+ },
6738
+ async findMany(query) {
6739
+ const { results, pagination } = await strapi2.db?.query("admin::audit-log").findPage({
6740
+ populate: ["user"],
6741
+ select: ["action", "date", "payload"],
6742
+ ...strapi2.get("query-params").transform("admin::audit-log", query)
6743
+ });
6744
+ const sanitizedResults = results.map((result) => {
6745
+ const { user: user2, ...rest } = result;
6746
+ return {
6747
+ ...rest,
6748
+ user: user2 ? getSanitizedUser(user2) : null
6749
+ };
6750
+ });
6751
+ return {
6752
+ results: sanitizedResults,
6753
+ pagination
6754
+ };
6755
+ },
6756
+ async findOne(id) {
6757
+ const result = await strapi2.db?.query("admin::audit-log").findOne({
6758
+ where: { id },
6759
+ populate: ["user"],
6760
+ select: ["action", "date", "payload"]
6761
+ });
6762
+ if (!result) {
6763
+ return null;
6764
+ }
6765
+ const { user: user2, ...rest } = result;
6766
+ return {
6767
+ ...rest,
6768
+ user: user2 ? getSanitizedUser(user2) : null
6769
+ };
6770
+ },
6771
+ deleteExpiredEvents(expirationDate) {
6772
+ return strapi2.db?.query("admin::audit-log").deleteMany({
6773
+ where: {
6774
+ date: {
6775
+ $lt: expirationDate.toISOString()
6776
+ }
6777
+ }
6778
+ });
6779
+ }
6780
+ };
6781
+ };
6782
+ const DEFAULT_RETENTION_DAYS = 90;
6783
+ const defaultEvents = [
6784
+ "entry.create",
6785
+ "entry.update",
6786
+ "entry.delete",
6787
+ "entry.publish",
6788
+ "entry.unpublish",
6789
+ "media.create",
6790
+ "media.update",
6791
+ "media.delete",
6792
+ "media-folder.create",
6793
+ "media-folder.update",
6794
+ "media-folder.delete",
6795
+ "user.create",
6796
+ "user.update",
6797
+ "user.delete",
6798
+ "admin.auth.success",
6799
+ "admin.logout",
6800
+ "content-type.create",
6801
+ "content-type.update",
6802
+ "content-type.delete",
6803
+ "component.create",
6804
+ "component.update",
6805
+ "component.delete",
6806
+ "role.create",
6807
+ "role.update",
6808
+ "role.delete",
6809
+ "permission.create",
6810
+ "permission.update",
6811
+ "permission.delete"
6812
+ ];
6813
+ const getEventMap = (defaultEvents2) => {
6814
+ const getDefaultPayload = (...args) => args[0];
6815
+ return defaultEvents2.reduce((acc, event) => {
6816
+ acc[event] = getDefaultPayload;
6817
+ return acc;
6818
+ }, {});
6819
+ };
6820
+ const getRetentionDays = (strapi2) => {
6821
+ const featureConfig = strapi2.ee.features.get("audit-logs");
6822
+ const licenseRetentionDays = typeof featureConfig === "object" && featureConfig?.options.retentionDays;
6823
+ const userRetentionDays = strapi2.config.get("admin.auditLogs.retentionDays");
6824
+ if (licenseRetentionDays == null) {
6825
+ return userRetentionDays ?? DEFAULT_RETENTION_DAYS;
6826
+ }
6827
+ if (userRetentionDays && userRetentionDays < licenseRetentionDays) {
6828
+ return userRetentionDays;
6829
+ }
6830
+ return licenseRetentionDays;
6831
+ };
6832
+ const createAuditLogsLifecycleService = (strapi2) => {
6833
+ const state = {};
6834
+ const auditLogsService = strapi2.get("audit-logs");
6835
+ const eventMap = getEventMap(defaultEvents);
6836
+ const processEvent = (name2, ...args) => {
6837
+ const requestState = strapi2.requestContext.get()?.state;
6838
+ const isUsingAdminAuth = requestState?.route.info.type === "admin";
6839
+ const user2 = requestState?.user;
6840
+ if (!isUsingAdminAuth || !user2) {
6841
+ return null;
6842
+ }
6843
+ const getPayload = eventMap[name2];
6844
+ if (!getPayload) {
6845
+ return null;
6846
+ }
6847
+ const ignoredUids = ["plugin::upload.file", "plugin::upload.folder"];
6848
+ if (ignoredUids.includes(args[0]?.uid)) {
6849
+ return null;
6850
+ }
6851
+ return {
6852
+ action: name2,
6853
+ date: (/* @__PURE__ */ new Date()).toISOString(),
6854
+ payload: getPayload(...args) || {},
6855
+ userId: user2.id
6856
+ };
6857
+ };
6858
+ const handleEvent = async (name2, ...args) => {
6859
+ const processedEvent = processEvent(name2, ...args);
6860
+ if (processedEvent) {
6861
+ await auditLogsService.saveEvent(processedEvent);
6862
+ }
6863
+ };
6864
+ return {
6865
+ async register() {
6866
+ if (!state.eeEnableUnsubscribe) {
6867
+ state.eeEnableUnsubscribe = strapi2.eventHub.on("ee.enable", () => {
6868
+ this.destroy();
6869
+ this.register();
6870
+ });
6871
+ }
6872
+ if (!state.eeUpdateUnsubscribe) {
6873
+ state.eeUpdateUnsubscribe = strapi2.eventHub.on("ee.update", () => {
6874
+ this.destroy();
6875
+ this.register();
6876
+ });
6877
+ }
6878
+ state.eeDisableUnsubscribe = strapi2.eventHub.on("ee.disable", () => {
6879
+ this.destroy();
6880
+ });
6881
+ if (!strapi2.ee.features.isEnabled("audit-logs")) {
6882
+ return this;
6883
+ }
6884
+ state.eventHubUnsubscribe = strapi2.eventHub.subscribe(handleEvent);
6885
+ const retentionDays = getRetentionDays(strapi2);
6886
+ state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
6887
+ const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1e3);
6888
+ auditLogsService.deleteExpiredEvents(expirationDate);
6889
+ });
6890
+ return this;
6891
+ },
6892
+ unsubscribe() {
6893
+ if (state.eeDisableUnsubscribe) {
6894
+ state.eeDisableUnsubscribe();
6895
+ }
6896
+ if (state.eventHubUnsubscribe) {
6897
+ state.eventHubUnsubscribe();
6898
+ }
6899
+ if (state.deleteExpiredJob) {
6900
+ state.deleteExpiredJob.cancel();
6901
+ }
6902
+ return this;
6903
+ },
6904
+ destroy() {
6905
+ return this.unsubscribe();
6906
+ }
6907
+ };
6908
+ };
6909
+ const auditLog = {
6910
+ schema: {
6911
+ kind: "collectionType",
6912
+ collectionName: "strapi_audit_logs",
6913
+ info: {
6914
+ singularName: "audit-log",
6915
+ pluralName: "audit-logs",
6916
+ displayName: "Audit Log"
6917
+ },
6918
+ options: {
6919
+ timestamps: false
6920
+ },
6921
+ pluginOptions: {
6922
+ "content-manager": {
6923
+ visible: false
6924
+ },
6925
+ "content-type-builder": {
6926
+ visible: false
6927
+ }
6928
+ },
6929
+ attributes: {
6930
+ action: {
6931
+ type: "string",
6932
+ required: true
6933
+ },
6934
+ date: {
6935
+ type: "datetime",
6936
+ required: true
6937
+ },
6938
+ user: {
6939
+ type: "relation",
6940
+ relation: "oneToOne",
6941
+ target: "admin::user"
6942
+ },
6943
+ payload: {
6944
+ type: "json"
6945
+ }
6946
+ }
6947
+ }
6948
+ };
6949
+ const getAdminEE = () => {
6950
+ const eeAdmin = {
6951
+ register,
6952
+ bootstrap,
6953
+ destroy,
6954
+ contentTypes: {
6955
+ // Always register the audit-log content type to prevent data loss
6956
+ "audit-log": auditLog,
6957
+ ...adminContentTypes
6958
+ },
6959
+ services,
6960
+ controllers,
6961
+ routes
6962
+ };
6963
+ if (strapi.config.get("admin.auditLogs.enabled", true) && strapi.ee.features.isEnabled("audit-logs")) {
6964
+ return {
6965
+ ...eeAdmin,
6966
+ controllers: {
6967
+ ...eeAdmin.controllers,
6968
+ "audit-logs": auditLogsController
6969
+ },
6970
+ routes: {
6971
+ ...eeAdmin.routes,
6972
+ "audit-logs": auditLogsRoutes
6973
+ },
6974
+ async register({ strapi: strapi2 }) {
6975
+ await eeAdmin.register({ strapi: strapi2 });
6976
+ strapi2.add("audit-logs", createAuditLogsService(strapi2));
6977
+ const auditLogsLifecycle = createAuditLogsLifecycleService(strapi2);
6978
+ strapi2.add("audit-logs-lifecycle", auditLogsLifecycle);
6979
+ await auditLogsLifecycle.register();
6980
+ },
6981
+ async destroy({ strapi: strapi2 }) {
6982
+ strapi2.get("audit-logs-lifecycle").destroy();
6983
+ await eeAdmin.destroy({ strapi: strapi2 });
6984
+ }
6985
+ };
6986
+ }
6987
+ return eeAdmin;
6988
+ };
6989
+ let admin = {
6990
+ bootstrap: bootstrap$1,
6991
+ register: register$2,
6992
+ destroy: destroy$1,
6993
+ config,
6994
+ policies,
6995
+ routes: routes$1,
6996
+ services: services$1,
6997
+ controllers: controllers$1,
6998
+ contentTypes,
6999
+ middlewares: middlewares$1
7000
+ };
7001
+ const mergeRoutes = (a, b, key) => {
7002
+ return ___namespace.default.isArray(a) && ___namespace.default.isArray(b) && key === "routes" ? a.concat(b) : void 0;
7003
+ };
7004
+ if (strapi.EE) {
7005
+ admin = ___namespace.default.mergeWith({}, admin, getAdminEE(), mergeRoutes);
7006
+ }
7007
+ const admin$1 = admin;
7008
+ module.exports = admin$1;
5614
7009
  //# sourceMappingURL=index.js.map