@strapi/admin 5.0.0-rc.9 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/dist/admin/{AdminSeatInfo-j58AKYvZ.js → AdminSeatInfo-8vtNB3ck.js} +3 -3
  2. package/dist/admin/{AdminSeatInfo-j58AKYvZ.js.map → AdminSeatInfo-8vtNB3ck.js.map} +1 -1
  3. package/dist/admin/{AdminSeatInfo-qGNvhfii.mjs → AdminSeatInfo-qIgh5-QA.mjs} +4 -4
  4. package/dist/admin/{AdminSeatInfo-qGNvhfii.mjs.map → AdminSeatInfo-qIgh5-QA.mjs.map} +1 -1
  5. package/dist/admin/{ApplicationInfoPage-ahnTcFV1.mjs → ApplicationInfoPage-AAIv_ZkF.mjs} +5 -5
  6. package/dist/admin/{ApplicationInfoPage-ahnTcFV1.mjs.map → ApplicationInfoPage-AAIv_ZkF.mjs.map} +1 -1
  7. package/dist/admin/{ApplicationInfoPage-JfdJ0U4H.js → ApplicationInfoPage-bkWa99An.js} +5 -5
  8. package/dist/admin/{ApplicationInfoPage-JfdJ0U4H.js.map → ApplicationInfoPage-bkWa99An.js.map} +1 -1
  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-06fn7qrH.mjs → AuthenticatedLayout-J22BBdYe.mjs} +31 -39
  14. package/dist/admin/AuthenticatedLayout-J22BBdYe.mjs.map +1 -0
  15. package/dist/admin/{AuthenticatedLayout-eKDwvUFO.js → AuthenticatedLayout-ZAXB7o93.js} +30 -38
  16. package/dist/admin/AuthenticatedLayout-ZAXB7o93.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-68skzZjY.js → CreatePage-3V_sa8A4.js} +3 -3
  20. package/dist/admin/{CreatePage-68skzZjY.js.map → CreatePage-3V_sa8A4.js.map} +1 -1
  21. package/dist/admin/{CreatePage-bdWb1wg4.mjs → CreatePage-5WzWwepG.mjs} +7 -7
  22. package/dist/admin/CreatePage-5WzWwepG.mjs.map +1 -0
  23. package/dist/admin/{CreatePage-Yd5JyWS5.mjs → CreatePage-hEdR3uWK.mjs} +3 -3
  24. package/dist/admin/{CreatePage-Yd5JyWS5.mjs.map → CreatePage-hEdR3uWK.mjs.map} +1 -1
  25. package/dist/admin/{CreatePage-t5HQUOqJ.js → CreatePage-zzbF8IhD.js} +6 -6
  26. package/dist/admin/CreatePage-zzbF8IhD.js.map +1 -0
  27. package/dist/admin/{CreateView-yv51Pyvw.js → CreateView-5EC5Yv96.js} +3 -3
  28. package/dist/admin/{CreateView-yv51Pyvw.js.map → CreateView-5EC5Yv96.js.map} +1 -1
  29. package/dist/admin/{CreateView-ZZaA8hbe.mjs → CreateView-OjaERndy.mjs} +3 -3
  30. package/dist/admin/{CreateView-ZZaA8hbe.mjs.map → CreateView-OjaERndy.mjs.map} +1 -1
  31. package/dist/admin/{CreateView-V0v5CK8t.mjs → CreateView-S8gDQUCt.mjs} +3 -3
  32. package/dist/admin/{CreateView-V0v5CK8t.mjs.map → CreateView-S8gDQUCt.mjs.map} +1 -1
  33. package/dist/admin/{CreateView-nzILLv0g.js → CreateView-ZQEmP8-n.js} +3 -3
  34. package/dist/admin/{CreateView-nzILLv0g.js.map → CreateView-ZQEmP8-n.js.map} +1 -1
  35. package/dist/admin/{EditPage-cWJ8V1BK.mjs → EditPage-493L2-vV.mjs} +27 -23
  36. package/dist/admin/EditPage-493L2-vV.mjs.map +1 -0
  37. package/dist/admin/{EditPage-A7-BewPd.mjs → EditPage-7fMqo-c-.mjs} +7 -7
  38. package/dist/admin/EditPage-7fMqo-c-.mjs.map +1 -0
  39. package/dist/admin/{EditPage-pTQCDncU.js → EditPage-8T9gBnnc.js} +25 -21
  40. package/dist/admin/EditPage-8T9gBnnc.js.map +1 -0
  41. package/dist/admin/{EditPage-Lw36XG9G.js → EditPage-OFlfNGv0.js} +6 -6
  42. package/dist/admin/EditPage-OFlfNGv0.js.map +1 -0
  43. package/dist/admin/{EditPage-2cMhX4F_.mjs → EditPage-akxbKeqK.mjs} +8 -8
  44. package/dist/admin/{EditPage-2cMhX4F_.mjs.map → EditPage-akxbKeqK.mjs.map} +1 -1
  45. package/dist/admin/{EditPage-LoESB5pq.js → EditPage-gJJgatNc.js} +7 -7
  46. package/dist/admin/{EditPage-LoESB5pq.js.map → EditPage-gJJgatNc.js.map} +1 -1
  47. package/dist/admin/{EditView-KzdDTSO-.js → EditView-ZJPPeal2.js} +5 -6
  48. package/dist/admin/EditView-ZJPPeal2.js.map +1 -0
  49. package/dist/admin/{EditView-HygMdUSf.mjs → EditView-_QID3gT5.mjs} +7 -8
  50. package/dist/admin/EditView-_QID3gT5.mjs.map +1 -0
  51. package/dist/admin/{EditViewPage-FgsrW_wV.js → EditViewPage-_wx5u6QJ.js} +5 -5
  52. package/dist/admin/{EditViewPage-FgsrW_wV.js.map → EditViewPage-_wx5u6QJ.js.map} +1 -1
  53. package/dist/admin/{EditViewPage-47F2xHBt.mjs → EditViewPage-zkNmb1zg.mjs} +6 -6
  54. package/dist/admin/{EditViewPage-47F2xHBt.mjs.map → EditViewPage-zkNmb1zg.mjs.map} +1 -1
  55. package/dist/admin/{EventsTable--XlOTHxM.js → EventsTable-31485Cwq.js} +2 -2
  56. package/dist/admin/{EventsTable--XlOTHxM.js.map → EventsTable-31485Cwq.js.map} +1 -1
  57. package/dist/admin/{EventsTable-mgIyB8DL.mjs → EventsTable-_BT8dIHY.mjs} +2 -2
  58. package/dist/admin/{EventsTable-mgIyB8DL.mjs.map → EventsTable-_BT8dIHY.mjs.map} +1 -1
  59. package/dist/admin/{HomePage-dyDldozB.mjs → HomePage-LenrY0bj.mjs} +7 -10
  60. package/dist/admin/HomePage-LenrY0bj.mjs.map +1 -0
  61. package/dist/admin/{HomePage-H77dsrr1.mjs → HomePage-NdId9gqT.mjs} +3 -3
  62. package/dist/admin/{HomePage-H77dsrr1.mjs.map → HomePage-NdId9gqT.mjs.map} +1 -1
  63. package/dist/admin/{HomePage-ywYHZHMa.js → HomePage-T2yVEfC3.js} +15 -18
  64. package/dist/admin/HomePage-T2yVEfC3.js.map +1 -0
  65. package/dist/admin/{HomePage-uVwht52t.js → HomePage-yyizKL39.js} +3 -3
  66. package/dist/admin/{HomePage-uVwht52t.js.map → HomePage-yyizKL39.js.map} +1 -1
  67. package/dist/admin/{InstalledPluginsPage-3OSkplVn.mjs → InstalledPlugins-Z_uS95dC.mjs} +9 -11
  68. package/dist/admin/InstalledPlugins-Z_uS95dC.mjs.map +1 -0
  69. package/dist/admin/{InstalledPluginsPage-JkruwT2d.js → InstalledPlugins-spdwM8ub.js} +9 -11
  70. package/dist/admin/InstalledPlugins-spdwM8ub.js.map +1 -0
  71. package/dist/admin/{Layout-8Ds_z3XN.mjs → Layout-5lg6USuO.mjs} +5 -5
  72. package/dist/admin/{Layout-8Ds_z3XN.mjs.map → Layout-5lg6USuO.mjs.map} +1 -1
  73. package/dist/admin/{Layout-pVTNV6PU.js → Layout-B3TQMQxb.js} +5 -5
  74. package/dist/admin/{Layout-pVTNV6PU.js.map → Layout-B3TQMQxb.js.map} +1 -1
  75. package/dist/admin/{ListPage-semY3kTl.mjs → ListPage--B6TB-mt.mjs} +4 -4
  76. package/dist/admin/{ListPage-semY3kTl.mjs.map → ListPage--B6TB-mt.mjs.map} +1 -1
  77. package/dist/admin/{ListPage-DHUp0PDw.js → ListPage-GRLtmRuy.js} +8 -8
  78. package/dist/admin/ListPage-GRLtmRuy.js.map +1 -0
  79. package/dist/admin/{ListPage-NtjeF8R2.mjs → ListPage-Ggd99FLO.mjs} +4 -4
  80. package/dist/admin/{ListPage-NtjeF8R2.mjs.map → ListPage-Ggd99FLO.mjs.map} +1 -1
  81. package/dist/admin/{ListPage-OIdhjljI.js → ListPage-Hc3VZ9O3.js} +6 -6
  82. package/dist/admin/{ListPage-OIdhjljI.js.map → ListPage-Hc3VZ9O3.js.map} +1 -1
  83. package/dist/admin/{ListPage-LokTy34i.mjs → ListPage-LIn0aEKt.mjs} +3 -3
  84. package/dist/admin/{ListPage-LokTy34i.mjs.map → ListPage-LIn0aEKt.mjs.map} +1 -1
  85. package/dist/admin/{ListPage-15KiUCLt.js → ListPage-UEsKYDPH.js} +3 -3
  86. package/dist/admin/{ListPage-15KiUCLt.js.map → ListPage-UEsKYDPH.js.map} +1 -1
  87. package/dist/admin/{ListPage-dApwERT6.js → ListPage-Vf4xtn8w.js} +5 -5
  88. package/dist/admin/{ListPage-dApwERT6.js.map → ListPage-Vf4xtn8w.js.map} +1 -1
  89. package/dist/admin/{ListPage-8M-bmv0a.mjs → ListPage-rCkaHmeP.mjs} +6 -6
  90. package/dist/admin/{ListPage-8M-bmv0a.mjs.map → ListPage-rCkaHmeP.mjs.map} +1 -1
  91. package/dist/admin/{ListPage-hNIbvh17.mjs → ListPage-vJik-wkj.mjs} +10 -10
  92. package/dist/admin/ListPage-vJik-wkj.mjs.map +1 -0
  93. package/dist/admin/{ListPage-jTpJnTuQ.js → ListPage-y3rcDJX1.js} +3 -3
  94. package/dist/admin/{ListPage-jTpJnTuQ.js.map → ListPage-y3rcDJX1.js.map} +1 -1
  95. package/dist/admin/{ListView-ZSEn2tK5.js → ListView-8pEtfLsu.js} +5 -5
  96. package/dist/admin/{ListView-ZSEn2tK5.js.map → ListView-8pEtfLsu.js.map} +1 -1
  97. package/dist/admin/{ListView-tCCo7pVS.mjs → ListView-iCqFRGiO.mjs} +5 -5
  98. package/dist/admin/{ListView-tCCo7pVS.mjs.map → ListView-iCqFRGiO.mjs.map} +1 -1
  99. package/dist/admin/{ListView-kEuSmXPm.mjs → ListView-jrsV1wF_.mjs} +5 -5
  100. package/dist/admin/{ListView-kEuSmXPm.mjs.map → ListView-jrsV1wF_.mjs.map} +1 -1
  101. package/dist/admin/{ListView-MA83TDJF.js → ListView-noYLY_DM.js} +4 -4
  102. package/dist/admin/{ListView-MA83TDJF.js.map → ListView-noYLY_DM.js.map} +1 -1
  103. package/dist/admin/{Login-GLcLgHUd.mjs → Login--GgWQano.mjs} +3 -3
  104. package/dist/admin/{Login-GLcLgHUd.mjs.map → Login--GgWQano.mjs.map} +1 -1
  105. package/dist/admin/{Login-RrWZQA_X.js → Login-qr72UXGp.js} +3 -3
  106. package/dist/admin/{Login-RrWZQA_X.js.map → Login-qr72UXGp.js.map} +1 -1
  107. package/dist/admin/{MagicLinkEE-u0n-nwtv.js → MagicLinkEE-uTufI4yx.js} +3 -3
  108. package/dist/admin/{MagicLinkEE-u0n-nwtv.js.map → MagicLinkEE-uTufI4yx.js.map} +1 -1
  109. package/dist/admin/{MagicLinkEE-_qltdLkk.mjs → MagicLinkEE-vQcgXndx.mjs} +3 -3
  110. package/dist/admin/{MagicLinkEE-_qltdLkk.mjs.map → MagicLinkEE-vQcgXndx.mjs.map} +1 -1
  111. package/dist/admin/{MarketplacePage-41CstG0b.mjs → MarketplacePage-LRlL_4ys.mjs} +64 -63
  112. package/dist/admin/MarketplacePage-LRlL_4ys.mjs.map +1 -0
  113. package/dist/admin/{MarketplacePage-uyOTT12t.js → MarketplacePage-yRWZ54oN.js} +65 -64
  114. package/dist/admin/MarketplacePage-yRWZ54oN.js.map +1 -0
  115. package/dist/admin/{Permissions-J2jRpCh_.mjs → Permissions-aSGK8VGG.mjs} +2 -2
  116. package/dist/admin/{Permissions-J2jRpCh_.mjs.map → Permissions-aSGK8VGG.mjs.map} +1 -1
  117. package/dist/admin/{Permissions-LMVH6wf4.js → Permissions-bmMBmcv7.js} +2 -2
  118. package/dist/admin/{Permissions-LMVH6wf4.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-wxZFen3W.js → ProfilePage-Mte9RhXw.js} +5 -5
  124. package/dist/admin/ProfilePage-Mte9RhXw.js.map +1 -0
  125. package/dist/admin/{ProfilePage-zwG0fq_e.mjs → ProfilePage-voofTYei.mjs} +6 -6
  126. package/dist/admin/ProfilePage-voofTYei.mjs.map +1 -0
  127. package/dist/admin/{PurchaseAuditLogs-FDPV-ZqU.mjs → PurchaseAuditLogs-8wmVhLCb.mjs} +2 -2
  128. package/dist/admin/{PurchaseAuditLogs-FDPV-ZqU.mjs.map → PurchaseAuditLogs-8wmVhLCb.mjs.map} +1 -1
  129. package/dist/admin/{PurchaseAuditLogs-f6iczpRi.js → PurchaseAuditLogs-qxVh-U_P.js} +2 -2
  130. package/dist/admin/{PurchaseAuditLogs-f6iczpRi.js.map → PurchaseAuditLogs-qxVh-U_P.js.map} +1 -1
  131. package/dist/admin/{PurchaseSingleSignOn-S0B2HM4d.mjs → PurchaseSingleSignOn-kgjD8gsd.mjs} +2 -2
  132. package/dist/admin/{PurchaseSingleSignOn-S0B2HM4d.mjs.map → PurchaseSingleSignOn-kgjD8gsd.mjs.map} +1 -1
  133. package/dist/admin/{PurchaseSingleSignOn-0wXAjOLm.js → PurchaseSingleSignOn-ovEsG_Ud.js} +2 -2
  134. package/dist/admin/{PurchaseSingleSignOn-0wXAjOLm.js.map → PurchaseSingleSignOn-ovEsG_Ud.js.map} +1 -1
  135. package/dist/admin/{SelectRoles-h_1srnVz.mjs → SelectRoles-Kzqv2-TI.mjs} +6 -6
  136. package/dist/admin/SelectRoles-Kzqv2-TI.mjs.map +1 -0
  137. package/dist/admin/{SelectRoles-MoDtdDcM.js → SelectRoles-pjJ11lBU.js} +7 -7
  138. package/dist/admin/SelectRoles-pjJ11lBU.js.map +1 -0
  139. package/dist/admin/{SingleSignOnPage-5CdOsumW.js → SingleSignOnPage-WjL8NvC5.js} +4 -4
  140. package/dist/admin/{SingleSignOnPage-5CdOsumW.js.map → SingleSignOnPage-WjL8NvC5.js.map} +1 -1
  141. package/dist/admin/{SingleSignOnPage-AZVczKwR.mjs → SingleSignOnPage-p1fTOytT.mjs} +5 -5
  142. package/dist/admin/{SingleSignOnPage-AZVczKwR.mjs.map → SingleSignOnPage-p1fTOytT.mjs.map} +1 -1
  143. package/dist/admin/{Table-EPKfcF5-.mjs → Table-ARSVxoYe.mjs} +12 -19
  144. package/dist/admin/Table-ARSVxoYe.mjs.map +1 -0
  145. package/dist/admin/{Table-CpbvaRQh.js → Table-QAvKSSis.js} +12 -19
  146. package/dist/admin/Table-QAvKSSis.js.map +1 -0
  147. package/dist/admin/{Theme-PrUuuGtN.mjs → Theme-frC82ceE.mjs} +221 -20
  148. package/dist/admin/Theme-frC82ceE.mjs.map +1 -0
  149. package/dist/admin/{Theme-7W0we6BI.js → Theme-y_rWTknM.js} +225 -19
  150. package/dist/admin/Theme-y_rWTknM.js.map +1 -0
  151. package/dist/admin/{TokenTypeSelect-yRV19q7R.js → TokenTypeSelect-biZzRJv2.js} +4 -5
  152. package/dist/admin/{TokenTypeSelect-yRV19q7R.js.map → TokenTypeSelect-biZzRJv2.js.map} +1 -1
  153. package/dist/admin/{TokenTypeSelect-7Ki5z_3z.mjs → TokenTypeSelect-j-b_9iB9.mjs} +4 -5
  154. package/dist/admin/{TokenTypeSelect-7Ki5z_3z.mjs.map → TokenTypeSelect-j-b_9iB9.mjs.map} +1 -1
  155. package/dist/admin/{UseCasePage-as6-3qKD.mjs → UseCasePage-b2VozaZB.mjs} +4 -4
  156. package/dist/admin/{UseCasePage-as6-3qKD.mjs.map → UseCasePage-b2VozaZB.mjs.map} +1 -1
  157. package/dist/admin/{UseCasePage-l9OmQYhK.js → UseCasePage-hJH0orUl.js} +4 -4
  158. package/dist/admin/{UseCasePage-l9OmQYhK.js.map → UseCasePage-hJH0orUl.js.map} +1 -1
  159. package/dist/admin/{admin-B6AW0Kov.mjs → admin-GZ-AP2T0.mjs} +2 -2
  160. package/dist/admin/{admin-B6AW0Kov.mjs.map → admin-GZ-AP2T0.mjs.map} +1 -1
  161. package/dist/admin/{apiTokens-YMUmHnrH.mjs → apiTokens-GQe-GqwZ.mjs} +2 -2
  162. package/dist/admin/{apiTokens-YMUmHnrH.mjs.map → apiTokens-GQe-GqwZ.mjs.map} +1 -1
  163. package/dist/admin/{constants-X2uDAtEA.js → constants-bgMqSKBQ.js} +3 -3
  164. package/dist/admin/{constants-X2uDAtEA.js.map → constants-bgMqSKBQ.js.map} +1 -1
  165. package/dist/admin/{constants-AYR471DB.mjs → constants-jKuNcrQj.mjs} +3 -3
  166. package/dist/admin/{constants-AYR471DB.mjs.map → constants-jKuNcrQj.mjs.map} +1 -1
  167. package/dist/admin/ee.mjs +1 -1
  168. package/dist/admin/{en-TbnMBjZf.js → en-_1-Nn7iH.js} +3 -2
  169. package/dist/admin/{en-TbnMBjZf.js.map → en-_1-Nn7iH.js.map} +1 -1
  170. package/dist/admin/{en-0Ld-ipyI.mjs → en-lDO5lPD0.mjs} +3 -2
  171. package/dist/admin/{en-0Ld-ipyI.mjs.map → en-lDO5lPD0.mjs.map} +1 -1
  172. package/dist/admin/{index-Fu3hPmaj.mjs → index-hoTsgrwy.mjs} +136 -279
  173. package/dist/admin/index-hoTsgrwy.mjs.map +1 -0
  174. package/dist/admin/{index-w33_0vI-.js → index-we0DbzVF.js} +140 -286
  175. package/dist/admin/index-we0DbzVF.js.map +1 -0
  176. package/dist/admin/index.js +5 -4
  177. package/dist/admin/index.js.map +1 -1
  178. package/dist/admin/index.mjs +3 -3
  179. package/dist/admin/{selectors-ZpHhvPK4.mjs → selectors--muHmKGe.mjs} +2 -2
  180. package/dist/admin/{selectors-ZpHhvPK4.mjs.map → selectors--muHmKGe.mjs.map} +1 -1
  181. package/dist/admin/{selectors-zQKcCNuz.js → selectors-1ySxKbos.js} +2 -2
  182. package/dist/admin/{selectors-zQKcCNuz.js.map → selectors-1ySxKbos.js.map} +1 -1
  183. package/dist/admin/src/StrapiApp.d.ts +8 -6
  184. package/dist/admin/src/components/Form.d.ts +3 -1
  185. package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -4
  186. package/dist/admin/src/constants.d.ts +10 -0
  187. package/dist/admin/src/features/Auth.d.ts +1 -1
  188. package/dist/admin/src/hooks/useRBAC.d.ts +1 -1
  189. package/dist/admin/src/index.d.ts +3 -0
  190. package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +1 -1
  191. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -1
  192. package/dist/admin/src/pages/Settings/pages/InstalledPlugins.d.ts +3 -0
  193. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +1 -1
  194. package/dist/admin/src/types/permissions.d.ts +3 -1
  195. package/dist/admin/test.js +3 -3
  196. package/dist/admin/test.js.map +1 -1
  197. package/dist/admin/test.mjs +4 -4
  198. package/dist/admin/test.mjs.map +1 -1
  199. package/dist/admin/{transferTokens-CNI0TFdA.mjs → transferTokens-v8tNpI_l.mjs} +2 -2
  200. package/dist/admin/{transferTokens-CNI0TFdA.mjs.map → transferTokens-v8tNpI_l.mjs.map} +1 -1
  201. package/dist/admin/{useAdminRoles-w6h8NFK5.js → useAdminRoles-0gM7o3f2.js} +2 -2
  202. package/dist/admin/{useAdminRoles-w6h8NFK5.js.map → useAdminRoles-0gM7o3f2.js.map} +1 -1
  203. package/dist/admin/{useAdminRoles-lDesL4gN.mjs → useAdminRoles-uRNvxyDX.mjs} +2 -2
  204. package/dist/admin/{useAdminRoles-lDesL4gN.mjs.map → useAdminRoles-uRNvxyDX.mjs.map} +1 -1
  205. package/dist/admin/{useLicenseLimitNotification-PaR7jmqd.mjs → useLicenseLimitNotification-Qx_rSpUQ.mjs} +3 -3
  206. package/dist/admin/{useLicenseLimitNotification-PaR7jmqd.mjs.map → useLicenseLimitNotification-Qx_rSpUQ.mjs.map} +1 -1
  207. package/dist/admin/{useLicenseLimitNotification-g1vq6nzk.js → useLicenseLimitNotification-eau4ja6h.js} +2 -2
  208. package/dist/admin/{useLicenseLimitNotification-g1vq6nzk.js.map → useLicenseLimitNotification-eau4ja6h.js.map} +1 -1
  209. package/dist/admin/{useLicenseLimits-Jy6E6qc2.mjs → useLicenseLimits-j5znikzW.mjs} +2 -2
  210. package/dist/admin/{useLicenseLimits-Jy6E6qc2.mjs.map → useLicenseLimits-j5znikzW.mjs.map} +1 -1
  211. package/dist/admin/{useWebhooks-7thg-d57.mjs → useWebhooks-upF7mgdZ.mjs} +2 -2
  212. package/dist/admin/{useWebhooks-7thg-d57.mjs.map → useWebhooks-upF7mgdZ.mjs.map} +1 -1
  213. package/dist/admin/{validation-IcNGA_ef.mjs → validation-OR7t0a-C.mjs} +4 -4
  214. package/dist/admin/validation-OR7t0a-C.mjs.map +1 -0
  215. package/dist/admin/{validation-4SWh9S5z.js → validation-VuxEFW4W.js} +4 -4
  216. package/dist/admin/validation-VuxEFW4W.js.map +1 -0
  217. package/dist/ee/server/src/audit-logs/content-types/audit-log.d.ts +41 -0
  218. package/dist/ee/server/src/audit-logs/content-types/audit-log.d.ts.map +1 -0
  219. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +7 -0
  220. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -0
  221. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts +19 -0
  222. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -0
  223. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +27 -0
  224. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -0
  225. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +12 -0
  226. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -0
  227. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +6 -0
  228. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -0
  229. package/dist/ee/server/src/bootstrap.d.ts +3 -0
  230. package/dist/ee/server/src/bootstrap.d.ts.map +1 -0
  231. package/dist/ee/server/src/config/admin-actions.d.ts +20 -0
  232. package/dist/ee/server/src/config/admin-actions.d.ts.map +1 -0
  233. package/dist/ee/server/src/content-types/index.d.ts +3 -0
  234. package/dist/ee/server/src/content-types/index.d.ts.map +1 -0
  235. package/dist/ee/server/src/controllers/admin.d.ts +29 -0
  236. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -0
  237. package/dist/ee/server/src/controllers/authentication-utils/constants.d.ts +10 -0
  238. package/dist/ee/server/src/controllers/authentication-utils/constants.d.ts.map +1 -0
  239. package/dist/ee/server/src/controllers/authentication-utils/index.d.ts +5 -0
  240. package/dist/ee/server/src/controllers/authentication-utils/index.d.ts.map +1 -0
  241. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts +9 -0
  242. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -0
  243. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +55 -0
  244. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -0
  245. package/dist/ee/server/src/controllers/authentication.d.ts +9 -0
  246. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -0
  247. package/dist/ee/server/src/controllers/index.d.ts +48 -0
  248. package/dist/ee/server/src/controllers/index.d.ts.map +1 -0
  249. package/dist/ee/server/src/controllers/role.d.ts +20 -0
  250. package/dist/ee/server/src/controllers/role.d.ts.map +1 -0
  251. package/dist/ee/server/src/controllers/user.d.ts +8 -0
  252. package/dist/ee/server/src/controllers/user.d.ts.map +1 -0
  253. package/dist/ee/server/src/destroy.d.ts +6 -0
  254. package/dist/ee/server/src/destroy.d.ts.map +1 -0
  255. package/dist/ee/server/src/index.d.ts +380 -0
  256. package/dist/ee/server/src/index.d.ts.map +1 -0
  257. package/dist/ee/server/src/register.d.ts +6 -0
  258. package/dist/ee/server/src/register.d.ts.map +1 -0
  259. package/dist/ee/server/src/routes/index.d.ts +47 -0
  260. package/dist/ee/server/src/routes/index.d.ts.map +1 -0
  261. package/dist/ee/server/src/routes/license-limit.d.ts +18 -0
  262. package/dist/ee/server/src/routes/license-limit.d.ts.map +1 -0
  263. package/dist/ee/server/src/routes/sso.d.ts +29 -0
  264. package/dist/ee/server/src/routes/sso.d.ts.map +1 -0
  265. package/dist/ee/server/src/routes/utils.d.ts +3 -0
  266. package/dist/ee/server/src/routes/utils.d.ts.map +1 -0
  267. package/dist/ee/server/src/services/auth.d.ts +6 -0
  268. package/dist/ee/server/src/services/auth.d.ts.map +1 -0
  269. package/dist/ee/server/src/services/index.d.ts +39 -0
  270. package/dist/ee/server/src/services/index.d.ts.map +1 -0
  271. package/dist/ee/server/src/services/metrics.d.ts +8 -0
  272. package/dist/ee/server/src/services/metrics.d.ts.map +1 -0
  273. package/dist/ee/server/src/services/passport/provider-registry.d.ts +4 -0
  274. package/dist/ee/server/src/services/passport/provider-registry.d.ts.map +1 -0
  275. package/dist/ee/server/src/services/passport/sso.d.ts +19 -0
  276. package/dist/ee/server/src/services/passport/sso.d.ts.map +1 -0
  277. package/dist/ee/server/src/services/passport.d.ts +13 -0
  278. package/dist/ee/server/src/services/passport.d.ts.map +1 -0
  279. package/dist/ee/server/src/services/role.d.ts +5 -0
  280. package/dist/ee/server/src/services/role.d.ts.map +1 -0
  281. package/dist/ee/server/src/services/seat-enforcement.d.ts +6 -0
  282. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -0
  283. package/dist/ee/server/src/services/user.d.ts +10 -0
  284. package/dist/ee/server/src/services/user.d.ts.map +1 -0
  285. package/dist/ee/server/src/utils/index.d.ts +11 -0
  286. package/dist/ee/server/src/utils/index.d.ts.map +1 -0
  287. package/dist/ee/server/src/utils/persisted-tables.d.ts +42 -0
  288. package/dist/ee/server/src/utils/persisted-tables.d.ts.map +1 -0
  289. package/dist/ee/server/src/utils/sso-lock.d.ts +6 -0
  290. package/dist/ee/server/src/utils/sso-lock.d.ts.map +1 -0
  291. package/dist/ee/server/src/validation/authentication.d.ts +15 -0
  292. package/dist/ee/server/src/validation/authentication.d.ts.map +1 -0
  293. package/dist/ee/server/src/validation/role.d.ts +21 -0
  294. package/dist/ee/server/src/validation/role.d.ts.map +1 -0
  295. package/dist/ee/server/src/validation/user.d.ts +19 -0
  296. package/dist/ee/server/src/validation/user.d.ts.map +1 -0
  297. package/dist/package.json.d.ts +10 -9
  298. package/dist/server/index.js +1891 -538
  299. package/dist/server/index.js.map +1 -1
  300. package/dist/server/index.mjs +1687 -333
  301. package/dist/server/index.mjs.map +1 -1
  302. package/dist/server/src/domain/action/provider.d.ts +1 -1
  303. package/dist/server/src/domain/condition/provider.d.ts +3 -1
  304. package/dist/server/src/domain/condition/provider.d.ts.map +1 -1
  305. package/dist/server/src/index.d.ts +738 -10
  306. package/dist/server/src/index.d.ts.map +1 -1
  307. package/dist/server/src/services/permission.d.ts +4 -2
  308. package/dist/server/src/services/permission.d.ts.map +1 -1
  309. package/dist/shared/contracts/admin.d.ts +1 -0
  310. package/dist/shared/contracts/admin.d.ts.map +1 -1
  311. package/dist/shared/contracts/user.d.ts +1 -1
  312. package/dist/shared/contracts/user.d.ts.map +1 -1
  313. package/package.json +17 -16
  314. package/dist/admin/AuthenticatedLayout-06fn7qrH.mjs.map +0 -1
  315. package/dist/admin/AuthenticatedLayout-eKDwvUFO.js.map +0 -1
  316. package/dist/admin/ContentBox-3MRTNw0X.js +0 -43
  317. package/dist/admin/ContentBox-3MRTNw0X.js.map +0 -1
  318. package/dist/admin/ContentBox-9LBDzws0.mjs +0 -41
  319. package/dist/admin/ContentBox-9LBDzws0.mjs.map +0 -1
  320. package/dist/admin/CreatePage-bdWb1wg4.mjs.map +0 -1
  321. package/dist/admin/CreatePage-t5HQUOqJ.js.map +0 -1
  322. package/dist/admin/EditPage-A7-BewPd.mjs.map +0 -1
  323. package/dist/admin/EditPage-Lw36XG9G.js.map +0 -1
  324. package/dist/admin/EditPage-cWJ8V1BK.mjs.map +0 -1
  325. package/dist/admin/EditPage-pTQCDncU.js.map +0 -1
  326. package/dist/admin/EditView-HygMdUSf.mjs.map +0 -1
  327. package/dist/admin/EditView-KzdDTSO-.js.map +0 -1
  328. package/dist/admin/HomePage-dyDldozB.mjs.map +0 -1
  329. package/dist/admin/HomePage-ywYHZHMa.js.map +0 -1
  330. package/dist/admin/InstalledPluginsPage-3OSkplVn.mjs.map +0 -1
  331. package/dist/admin/InstalledPluginsPage-JkruwT2d.js.map +0 -1
  332. package/dist/admin/ListPage-DHUp0PDw.js.map +0 -1
  333. package/dist/admin/ListPage-hNIbvh17.mjs.map +0 -1
  334. package/dist/admin/MarketplacePage-41CstG0b.mjs.map +0 -1
  335. package/dist/admin/MarketplacePage-uyOTT12t.js.map +0 -1
  336. package/dist/admin/ProfilePage-wxZFen3W.js.map +0 -1
  337. package/dist/admin/ProfilePage-zwG0fq_e.mjs.map +0 -1
  338. package/dist/admin/SelectRoles-MoDtdDcM.js.map +0 -1
  339. package/dist/admin/SelectRoles-h_1srnVz.mjs.map +0 -1
  340. package/dist/admin/Table-CpbvaRQh.js.map +0 -1
  341. package/dist/admin/Table-EPKfcF5-.mjs.map +0 -1
  342. package/dist/admin/Theme-7W0we6BI.js.map +0 -1
  343. package/dist/admin/Theme-PrUuuGtN.mjs.map +0 -1
  344. package/dist/admin/index-Fu3hPmaj.mjs.map +0 -1
  345. package/dist/admin/index-w33_0vI-.js.map +0 -1
  346. package/dist/admin/src/pages/InstalledPluginsPage.d.ts +0 -3
  347. package/dist/admin/validation-4SWh9S5z.js.map +0 -1
  348. package/dist/admin/validation-IcNGA_ef.mjs.map +0 -1
  349. package/dist/ee/server/index.js +0 -2193
  350. package/dist/ee/server/index.js.map +0 -1
  351. package/dist/ee/server/index.mjs +0 -2188
  352. package/dist/ee/server/index.mjs.map +0 -1
  353. 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",
@@ -289,7 +289,7 @@ const actions = [
289
289
  }
290
290
  ];
291
291
  const adminActions = {
292
- actions
292
+ actions: actions$1
293
293
  };
294
294
  const conditions = [
295
295
  {
@@ -324,13 +324,13 @@ const defaultAdminAuthSettings = {
324
324
  }
325
325
  };
326
326
  const registerPermissionActions = async () => {
327
- await getService("permission").actionProvider.registerMany(adminActions.actions);
327
+ await getService$1("permission").actionProvider.registerMany(adminActions.actions);
328
328
  };
329
329
  const registerAdminConditions = async () => {
330
- await getService("permission").conditionProvider.registerMany(adminConditions.conditions);
330
+ await getService$1("permission").conditionProvider.registerMany(adminConditions.conditions);
331
331
  };
332
332
  const registerModelHooks = () => {
333
- const { sendDidChangeInterfaceLanguage: sendDidChangeInterfaceLanguage2 } = getService("metrics");
333
+ const { sendDidChangeInterfaceLanguage: sendDidChangeInterfaceLanguage2 } = getService$1("metrics");
334
334
  strapi.db.lifecycles.subscribe({
335
335
  models: ["admin::user"],
336
336
  afterCreate: sendDidChangeInterfaceLanguage2,
@@ -346,7 +346,7 @@ const syncAuthSettings = async () => {
346
346
  const adminStore = await strapi.store({ type: "core", name: "admin" });
347
347
  const adminAuthSettings = await adminStore.get({ key: "auth" });
348
348
  const newAuthSettings = fp.merge(defaultAdminAuthSettings, adminAuthSettings);
349
- const roleExists = await getService("role").exists({
349
+ const roleExists = await getService$1("role").exists({
350
350
  id: newAuthSettings.providers.defaultRole
351
351
  });
352
352
  if (!roleExists) {
@@ -356,7 +356,7 @@ const syncAuthSettings = async () => {
356
356
  };
357
357
  const syncAPITokensPermissions = async () => {
358
358
  const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
359
- const permissionsInDB = await utils$1.async.pipe(
359
+ const permissionsInDB = await utils$2.async.pipe(
360
360
  strapi.db.query("admin::api-token-permission").findMany,
361
361
  fp.map("action")
362
362
  )();
@@ -365,16 +365,16 @@ const syncAPITokensPermissions = async () => {
365
365
  await strapi.db.query("admin::api-token-permission").deleteMany({ where: { action: { $in: unknownPermissions } } });
366
366
  }
367
367
  };
368
- const bootstrap = async ({ strapi: strapi2 }) => {
368
+ const bootstrap$1 = async ({ strapi: strapi2 }) => {
369
369
  await registerAdminConditions();
370
370
  await registerPermissionActions();
371
371
  registerModelHooks();
372
- const permissionService = getService("permission");
373
- const userService = getService("user");
374
- const roleService = getService("role");
375
- const apiTokenService = getService("api-token");
376
- const transferService = getService("transfer");
377
- 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");
378
378
  await roleService.createRolesIfNoneExist();
379
379
  await roleService.resetSuperAdminPermissions();
380
380
  await roleService.displayWarningIfNoSuperAdmin();
@@ -382,8 +382,8 @@ const bootstrap = async ({ strapi: strapi2 }) => {
382
382
  await userService.displayWarningIfUsersDontHaveRole();
383
383
  await syncAuthSettings();
384
384
  await syncAPITokensPermissions();
385
- await getService("metrics").sendUpdateProjectInformation(strapi2);
386
- getService("metrics").startCron(strapi2);
385
+ await getService$1("metrics").sendUpdateProjectInformation(strapi2);
386
+ getService$1("metrics").startCron(strapi2);
387
387
  apiTokenService.checkSaltIsDefined();
388
388
  transferService.token.checkSaltIsDefined();
389
389
  tokenService.checkSecretIsDefined();
@@ -440,7 +440,7 @@ const serveStatic = (filesDir, koaStaticOptions = {}) => {
440
440
  ctx.path = prev;
441
441
  };
442
442
  };
443
- const authenticate$2 = async (ctx) => {
443
+ const authenticate$3 = async (ctx) => {
444
444
  const { authorization } = ctx.request.header;
445
445
  if (!authorization) {
446
446
  return { authenticated: false };
@@ -450,7 +450,7 @@ const authenticate$2 = async (ctx) => {
450
450
  return { authenticated: false };
451
451
  }
452
452
  const token2 = parts[1];
453
- const { payload, isValid } = getService("token").decodeJwtToken(token2);
453
+ const { payload, isValid } = getService$1("token").decodeJwtToken(token2);
454
454
  if (!isValid) {
455
455
  return { authenticated: false };
456
456
  }
@@ -458,7 +458,7 @@ const authenticate$2 = async (ctx) => {
458
458
  if (!user2 || !(user2.isActive === true)) {
459
459
  return { authenticated: false };
460
460
  }
461
- const userAbility = await getService("permission").engine.generateUserAbility(user2);
461
+ const userAbility = await getService$1("permission").engine.generateUserAbility(user2);
462
462
  ctx.state.userAbility = userAbility;
463
463
  ctx.state.user = user2;
464
464
  return {
@@ -470,7 +470,7 @@ const authenticate$2 = async (ctx) => {
470
470
  const name$1 = "admin";
471
471
  const adminAuthStrategy = {
472
472
  name: name$1,
473
- authenticate: authenticate$2
473
+ authenticate: authenticate$3
474
474
  };
475
475
  const DAY_IN_MS = 24 * 60 * 60 * 1e3;
476
476
  const constants$3 = {
@@ -510,7 +510,7 @@ const constants$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
510
510
  __proto__: null,
511
511
  default: constants$3
512
512
  }, Symbol.toStringTag, { value: "Module" }));
513
- const { UnauthorizedError: UnauthorizedError$2, ForbiddenError: ForbiddenError$1 } = utils$1.errors;
513
+ const { UnauthorizedError: UnauthorizedError$3, ForbiddenError: ForbiddenError$2 } = utils$2.errors;
514
514
  const isReadScope = (scope) => scope.endsWith("find") || scope.endsWith("findOne");
515
515
  const extractToken$1 = (ctx) => {
516
516
  if (ctx.request && ctx.request.header && ctx.request.header.authorization) {
@@ -522,8 +522,8 @@ const extractToken$1 = (ctx) => {
522
522
  }
523
523
  return null;
524
524
  };
525
- const authenticate$1 = async (ctx) => {
526
- const apiTokenService = getService("api-token");
525
+ const authenticate$2 = async (ctx) => {
526
+ const apiTokenService = getService$1("api-token");
527
527
  const token2 = extractToken$1(ctx);
528
528
  if (!token2) {
529
529
  return { authenticated: false };
@@ -538,7 +538,7 @@ const authenticate$1 = async (ctx) => {
538
538
  if (!fp.isNil(apiToken2.expiresAt)) {
539
539
  const expirationDate = new Date(apiToken2.expiresAt);
540
540
  if (expirationDate < currentDate) {
541
- return { authenticated: false, error: new UnauthorizedError$2("Token expired") };
541
+ return { authenticated: false, error: new UnauthorizedError$3("Token expired") };
542
542
  }
543
543
  }
544
544
  const hoursSinceLastUsed = dateFns.differenceInHours(currentDate, dateFns.parseISO(apiToken2.lastUsedAt));
@@ -556,44 +556,44 @@ const authenticate$1 = async (ctx) => {
556
556
  }
557
557
  return { authenticated: true, credentials: apiToken2 };
558
558
  };
559
- const verify$2 = (auth2, config) => {
559
+ const verify$2 = (auth2, config2) => {
560
560
  const { credentials: apiToken2, ability: ability2 } = auth2;
561
561
  if (!apiToken2) {
562
- throw new UnauthorizedError$2("Token not found");
562
+ throw new UnauthorizedError$3("Token not found");
563
563
  }
564
564
  const currentDate = /* @__PURE__ */ new Date();
565
565
  if (!fp.isNil(apiToken2.expiresAt)) {
566
566
  const expirationDate = new Date(apiToken2.expiresAt);
567
567
  if (expirationDate < currentDate) {
568
- throw new UnauthorizedError$2("Token expired");
568
+ throw new UnauthorizedError$3("Token expired");
569
569
  }
570
570
  }
571
571
  if (apiToken2.type === constants$3.API_TOKEN_TYPE.FULL_ACCESS) {
572
572
  return;
573
573
  }
574
574
  if (apiToken2.type === constants$3.API_TOKEN_TYPE.READ_ONLY) {
575
- const scopes = fp.castArray(config.scope);
576
- if (config.scope && scopes.every(isReadScope)) {
575
+ const scopes = fp.castArray(config2.scope);
576
+ if (config2.scope && scopes.every(isReadScope)) {
577
577
  return;
578
578
  }
579
579
  } else if (apiToken2.type === constants$3.API_TOKEN_TYPE.CUSTOM) {
580
580
  if (!ability2) {
581
- throw new ForbiddenError$1();
581
+ throw new ForbiddenError$2();
582
582
  }
583
- const scopes = fp.castArray(config.scope);
583
+ const scopes = fp.castArray(config2.scope);
584
584
  const isAllowed = scopes.every((scope) => ability2.can(scope));
585
585
  if (isAllowed) {
586
586
  return;
587
587
  }
588
588
  }
589
- throw new ForbiddenError$1();
589
+ throw new ForbiddenError$2();
590
590
  };
591
591
  const apiTokenAuthStrategy = {
592
592
  name: "api-token",
593
- authenticate: authenticate$1,
593
+ authenticate: authenticate$2,
594
594
  verify: verify$2
595
595
  };
596
- const register$1 = ({ strapi: strapi2 }) => {
596
+ const register$2 = ({ strapi: strapi2 }) => {
597
597
  const passportMiddleware = strapi2.service("admin::passport").init();
598
598
  strapi2.server.api("admin").use(passportMiddleware);
599
599
  strapi2.get("auth").register("admin", adminAuthStrategy);
@@ -602,8 +602,8 @@ const register$1 = ({ strapi: strapi2 }) => {
602
602
  registerAdminPanelRoute({ strapi: strapi2 });
603
603
  }
604
604
  };
605
- const destroy = async () => {
606
- const { conditionProvider: conditionProvider2, actionProvider: actionProvider2 } = getService("permission");
605
+ const destroy$1 = async () => {
606
+ const { conditionProvider: conditionProvider2, actionProvider: actionProvider2 } = getService$1("permission");
607
607
  await conditionProvider2.clear();
608
608
  await actionProvider2.clear();
609
609
  };
@@ -623,34 +623,34 @@ But don’t worry! You can use the following link to reset your password:
623
623
 
624
624
  Thanks.`;
625
625
  const forgotPasswordTemplate = { subject, text, html };
626
- const forgotPassword$1 = {
626
+ const forgotPassword$2 = {
627
627
  emailTemplate: forgotPasswordTemplate
628
628
  };
629
- const index$6 = {
630
- forgotPassword: forgotPassword$1
629
+ const config = {
630
+ forgotPassword: forgotPassword$2
631
631
  };
632
632
  const isAuthenticatedAdmin = (policyCtx) => {
633
633
  return Boolean(policyCtx.state.isAuthenticated);
634
634
  };
635
- const hasPermissionsSchema = utils$1.yup.object({
636
- actions: utils$1.yup.array().of(
635
+ const hasPermissionsSchema = utils$2.yup.object({
636
+ actions: utils$2.yup.array().of(
637
637
  // @ts-expect-error yup types
638
- utils$1.yup.lazy((val) => {
638
+ utils$2.yup.lazy((val) => {
639
639
  if (___namespace.default.isArray(val)) {
640
- 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);
641
641
  }
642
642
  if (___namespace.default.isString(val)) {
643
- return utils$1.yup.string().required();
643
+ return utils$2.yup.string().required();
644
644
  }
645
- return utils$1.yup.object().shape({
646
- action: utils$1.yup.string().required(),
647
- 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()
648
648
  });
649
649
  })
650
650
  )
651
651
  });
652
- const validateHasPermissionsInput = utils$1.validateYupSchema(hasPermissionsSchema);
653
- const { createPolicy: createPolicy$1 } = utils$1.policy;
652
+ const validateHasPermissionsInput = utils$2.validateYupSchema(hasPermissionsSchema);
653
+ const { createPolicy: createPolicy$1 } = utils$2.policy;
654
654
  const inputModifiers = [
655
655
  {
656
656
  check: ___namespace.default.isString,
@@ -669,8 +669,8 @@ const inputModifiers = [
669
669
  const hasPermissions = createPolicy$1({
670
670
  name: "admin::hasPermissions",
671
671
  validator: validateHasPermissionsInput,
672
- handler(ctx, config) {
673
- const { actions: actions2 } = config;
672
+ handler(ctx, config2) {
673
+ const { actions: actions2 } = config2;
674
674
  const { userAbility: ability2 } = ctx.state;
675
675
  const permissions2 = actions2.map(
676
676
  (action2) => inputModifiers.find((modifier) => modifier.check(action2))?.transform(action2)
@@ -681,7 +681,7 @@ const hasPermissions = createPolicy$1({
681
681
  return isAuthorized;
682
682
  }
683
683
  });
684
- const { createPolicy } = utils$1.policy;
684
+ const { createPolicy } = utils$2.policy;
685
685
  const isTelemetryEnabled = createPolicy({
686
686
  name: "admin::isTelemetryEnabled",
687
687
  handler(_ctx, _config, { strapi: strapi2 }) {
@@ -690,8 +690,8 @@ const isTelemetryEnabled = createPolicy({
690
690
  }
691
691
  }
692
692
  });
693
- const index$5 = { isAuthenticatedAdmin, hasPermissions, isTelemetryEnabled };
694
- const admin$1 = [
693
+ const policies = { isAuthenticatedAdmin, hasPermissions, isTelemetryEnabled };
694
+ const admin$4 = [
695
695
  {
696
696
  method: "GET",
697
697
  path: "/init",
@@ -760,7 +760,7 @@ const admin$1 = [
760
760
  }
761
761
  }
762
762
  ];
763
- const authentication$1 = [
763
+ const authentication$2 = [
764
764
  {
765
765
  method: "POST",
766
766
  path: "/login",
@@ -1189,7 +1189,7 @@ const contentApi$1 = [
1189
1189
  }
1190
1190
  }
1191
1191
  ];
1192
- const { UnauthorizedError: UnauthorizedError$1, ForbiddenError } = utils$1.errors;
1192
+ const { UnauthorizedError: UnauthorizedError$2, ForbiddenError: ForbiddenError$1 } = utils$2.errors;
1193
1193
  const extractToken = (ctx) => {
1194
1194
  if (ctx.request && ctx.request.header && ctx.request.header.authorization) {
1195
1195
  const parts = ctx.request.header.authorization.split(/\s+/);
@@ -1200,8 +1200,8 @@ const extractToken = (ctx) => {
1200
1200
  }
1201
1201
  return null;
1202
1202
  };
1203
- const authenticate = async (ctx) => {
1204
- const { token: tokenService } = getService("transfer");
1203
+ const authenticate$1 = async (ctx) => {
1204
+ const { token: tokenService } = getService$1("transfer");
1205
1205
  const token2 = extractToken(ctx);
1206
1206
  if (!token2) {
1207
1207
  return { authenticated: false };
@@ -1214,7 +1214,7 @@ const authenticate = async (ctx) => {
1214
1214
  if (!fp.isNil(transferToken2.expiresAt)) {
1215
1215
  const expirationDate = new Date(transferToken2.expiresAt);
1216
1216
  if (expirationDate < currentDate) {
1217
- return { authenticated: false, error: new UnauthorizedError$1("Token expired") };
1217
+ return { authenticated: false, error: new UnauthorizedError$2("Token expired") };
1218
1218
  }
1219
1219
  }
1220
1220
  const hoursSinceLastUsed = dateFns.differenceInHours(currentDate, dateFns.parseISO(transferToken2.lastUsedAt));
@@ -1224,36 +1224,36 @@ const authenticate = async (ctx) => {
1224
1224
  data: { lastUsedAt: currentDate }
1225
1225
  });
1226
1226
  }
1227
- const ability2 = await getService("transfer").permission.engine.generateAbility(
1227
+ const ability2 = await getService$1("transfer").permission.engine.generateAbility(
1228
1228
  transferToken2.permissions.map((action2) => ({ action: action2 }))
1229
1229
  );
1230
1230
  return { authenticated: true, ability: ability2, credentials: transferToken2 };
1231
1231
  };
1232
- const verify$1 = async (auth2, config = {}) => {
1232
+ const verify$1 = async (auth2, config2 = {}) => {
1233
1233
  const { credentials: transferToken2, ability: ability2 } = auth2;
1234
1234
  if (!transferToken2) {
1235
- throw new UnauthorizedError$1("Token not found");
1235
+ throw new UnauthorizedError$2("Token not found");
1236
1236
  }
1237
1237
  const currentDate = /* @__PURE__ */ new Date();
1238
1238
  if (!fp.isNil(transferToken2.expiresAt)) {
1239
1239
  const expirationDate = new Date(transferToken2.expiresAt);
1240
1240
  if (expirationDate < currentDate) {
1241
- throw new UnauthorizedError$1("Token expired");
1241
+ throw new UnauthorizedError$2("Token expired");
1242
1242
  }
1243
1243
  }
1244
1244
  if (!ability2) {
1245
- throw new ForbiddenError();
1245
+ throw new ForbiddenError$1();
1246
1246
  }
1247
- const scopes = fp.castArray(config.scope ?? []);
1247
+ const scopes = fp.castArray(config2.scope ?? []);
1248
1248
  const isAllowed = scopes.every((scope) => ability2.can(scope));
1249
1249
  if (!isAllowed) {
1250
- throw new ForbiddenError();
1250
+ throw new ForbiddenError$1();
1251
1251
  }
1252
1252
  };
1253
1253
  const name = "data-transfer";
1254
1254
  const dataTransferAuthStrategy = {
1255
1255
  name,
1256
- authenticate,
1256
+ authenticate: authenticate$1,
1257
1257
  verify: verify$1
1258
1258
  };
1259
1259
  const transfer$2 = [
@@ -1354,12 +1354,12 @@ const transfer$2 = [
1354
1354
  }
1355
1355
  }
1356
1356
  ];
1357
- const routes = {
1357
+ const routes$1 = {
1358
1358
  admin: {
1359
1359
  type: "admin",
1360
1360
  routes: [
1361
- ...admin$1,
1362
- ...authentication$1,
1361
+ ...admin$4,
1362
+ ...authentication$2,
1363
1363
  ...permissions,
1364
1364
  ...users,
1365
1365
  ...roles$1,
@@ -1370,7 +1370,7 @@ const routes = {
1370
1370
  ]
1371
1371
  }
1372
1372
  };
1373
- const { ApplicationError: ApplicationError$7 } = utils$1.errors;
1373
+ const { ApplicationError: ApplicationError$a } = utils$2.errors;
1374
1374
  const hashPassword = (password2) => bcrypt__default.default.hash(password2, 10);
1375
1375
  const validatePassword = (password2, hash2) => bcrypt__default.default.compare(password2, hash2);
1376
1376
  const checkCredentials = async ({ email: email2, password: password2 }) => {
@@ -1387,13 +1387,13 @@ const checkCredentials = async ({ email: email2, password: password2 }) => {
1387
1387
  }
1388
1388
  return [null, user2];
1389
1389
  };
1390
- const forgotPassword = async ({ email: email2 } = {}) => {
1390
+ const forgotPassword$1 = async ({ email: email2 } = {}) => {
1391
1391
  const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
1392
1392
  if (!user2) {
1393
1393
  return;
1394
1394
  }
1395
- const resetPasswordToken = getService("token").createToken();
1396
- await getService("user").updateById(user2.id, { resetPasswordToken });
1395
+ const resetPasswordToken = getService$1("token").createToken();
1396
+ await getService$1("user").updateById(user2.id, { resetPasswordToken });
1397
1397
  const url = `${strapi.config.get(
1398
1398
  "admin.absoluteUrl"
1399
1399
  )}/auth/reset-password?code=${resetPasswordToken}`;
@@ -1412,18 +1412,18 @@ const forgotPassword = async ({ email: email2 } = {}) => {
1412
1412
  strapi.log.error(err);
1413
1413
  });
1414
1414
  };
1415
- const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
1415
+ const resetPassword$1 = async ({ resetPasswordToken, password: password2 } = {}) => {
1416
1416
  const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
1417
1417
  if (!matchingUser) {
1418
- throw new ApplicationError$7();
1418
+ throw new ApplicationError$a();
1419
1419
  }
1420
- return getService("user").updateById(matchingUser.id, {
1420
+ return getService$1("user").updateById(matchingUser.id, {
1421
1421
  password: password2,
1422
1422
  resetPasswordToken: null
1423
1423
  });
1424
1424
  };
1425
- const auth = { checkCredentials, validatePassword, hashPassword, forgotPassword, resetPassword };
1426
- 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;
1427
1427
  function createUser(attributes) {
1428
1428
  return {
1429
1429
  roles: [],
@@ -1433,7 +1433,7 @@ function createUser(attributes) {
1433
1433
  };
1434
1434
  }
1435
1435
  const hasSuperAdminRole$1 = (user2) => {
1436
- 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;
1437
1437
  };
1438
1438
  const ADMIN_USER_ALLOWED_FIELDS = ["id", "firstname", "lastname", "username"];
1439
1439
  const getDefaultActionAttributes = () => ({
@@ -1523,18 +1523,18 @@ const checkFieldsDontHaveDuplicates = (fields) => {
1523
1523
  return ___namespace.default.uniq(fields).length === fields.length;
1524
1524
  };
1525
1525
  const getActionFromProvider = (actionId) => {
1526
- return getService("permission").actionProvider.get(actionId);
1527
- };
1528
- const email = utils$1.yup.string().email().lowercase();
1529
- const firstname = utils$1.yup.string().trim().min(1);
1530
- const lastname = utils$1.yup.string();
1531
- const username = utils$1.yup.string().min(1);
1532
- 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");
1533
- const roles = utils$1.yup.array(utils$1.yup.strapiID()).min(1);
1534
- 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) {
1535
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` });
1536
1536
  });
1537
- 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) {
1538
1538
  const ids = strapi.service("admin::permission").conditionProvider.keys();
1539
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` });
1540
1540
  });
@@ -1548,7 +1548,7 @@ const checkNilFields = (action2) => function(fields) {
1548
1548
  }
1549
1549
  return actionDomain.appliesToProperty("fields", action2) || fp.isNil(fields);
1550
1550
  };
1551
- 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(
1552
1552
  "field-nested",
1553
1553
  "Fields format are incorrect (bad nesting).",
1554
1554
  checkFieldsAreCorrectlyNested
@@ -1562,15 +1562,15 @@ const fieldsPropertyValidation = (action2) => utils$1.yup.array().of(utils$1.yup
1562
1562
  // @ts-expect-error yup types
1563
1563
  checkNilFields(action2)
1564
1564
  );
1565
- const permission$3 = utils$1.yup.object().shape({
1566
- 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) {
1567
1567
  if (fp.isNil(actionId)) {
1568
1568
  return true;
1569
1569
  }
1570
1570
  return !!getActionFromProvider(actionId);
1571
1571
  }),
1572
- actionParameters: utils$1.yup.object().nullable(),
1573
- 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) {
1574
1574
  const action2 = getActionFromProvider(this.options.parent.action);
1575
1575
  if (!action2) {
1576
1576
  return true;
@@ -1583,7 +1583,7 @@ const permission$3 = utils$1.yup.object().shape({
1583
1583
  }
1584
1584
  return false;
1585
1585
  }),
1586
- 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) {
1587
1587
  const action2 = getActionFromProvider(this.options.parent.action);
1588
1588
  const hasNoProperties = fp.isEmpty(properties) || fp.isNil(properties);
1589
1589
  if (!fp.has("options.applyToProperties", action2)) {
@@ -1622,10 +1622,10 @@ const permission$3 = utils$1.yup.object().shape({
1622
1622
  }
1623
1623
  }
1624
1624
  ),
1625
- conditions: utils$1.yup.array().of(utils$1.yup.string())
1625
+ conditions: utils$2.yup.array().of(utils$2.yup.string())
1626
1626
  }).noUnknown();
1627
- const updatePermissions = utils$1.yup.object().shape({
1628
- 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(
1629
1629
  "duplicated-permissions",
1630
1630
  "Some permissions are duplicated (same action and subject)",
1631
1631
  checkNoDuplicatedPermissions
@@ -1643,46 +1643,46 @@ const validators = {
1643
1643
  permission: permission$3,
1644
1644
  updatePermissions
1645
1645
  };
1646
- const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$2 } = constants$3;
1647
- const { ValidationError: ValidationError$4 } = utils$1.errors;
1648
- const sanitizeUserRoles = (role2) => ___namespace.default.pick(role2, ["id", "name", "description", "code"]);
1649
- 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) => {
1650
1650
  return {
1651
1651
  ...___namespace.default.omit(user2, ["password", "resetPasswordToken", "registrationToken", "roles"]),
1652
- roles: user2.roles && user2.roles.map(sanitizeUserRoles)
1652
+ roles: user2.roles && user2.roles.map(sanitizeUserRoles$1)
1653
1653
  };
1654
1654
  };
1655
1655
  const create$5 = async (attributes) => {
1656
1656
  const userInfo = {
1657
- registrationToken: getService("token").createToken(),
1657
+ registrationToken: getService$1("token").createToken(),
1658
1658
  ...attributes
1659
1659
  };
1660
1660
  if (___namespace.default.has(attributes, "password")) {
1661
- userInfo.password = await getService("auth").hashPassword(attributes.password);
1661
+ userInfo.password = await getService$1("auth").hashPassword(attributes.password);
1662
1662
  }
1663
1663
  const user2 = createUser(userInfo);
1664
1664
  const createdUser = await strapi.db.query("admin::user").create({ data: user2, populate: ["roles"] });
1665
- getService("metrics").sendDidInviteUser();
1666
- strapi.eventHub.emit("user.create", { user: sanitizeUser(createdUser) });
1665
+ getService$1("metrics").sendDidInviteUser();
1666
+ strapi.eventHub.emit("user.create", { user: sanitizeUser$1(createdUser) });
1667
1667
  return createdUser;
1668
1668
  };
1669
- const updateById = async (id, attributes) => {
1669
+ const updateById$1 = async (id, attributes) => {
1670
1670
  if (___namespace.default.has(attributes, "roles")) {
1671
- const lastAdminUser = await isLastSuperAdminUser(id);
1672
- const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1673
- 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);
1674
1674
  if (lastAdminUser && willRemoveSuperAdminRole) {
1675
- 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.");
1676
1676
  }
1677
1677
  }
1678
1678
  if (attributes.isActive === false) {
1679
- const lastAdminUser = await isLastSuperAdminUser(id);
1679
+ const lastAdminUser = await isLastSuperAdminUser$1(id);
1680
1680
  if (lastAdminUser) {
1681
- 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.");
1682
1682
  }
1683
1683
  }
1684
1684
  if (___namespace.default.has(attributes, "password")) {
1685
- const hashedPassword = await getService("auth").hashPassword(attributes.password);
1685
+ const hashedPassword = await getService$1("auth").hashPassword(attributes.password);
1686
1686
  const updatedUser2 = await strapi.db.query("admin::user").update({
1687
1687
  where: { id },
1688
1688
  data: {
@@ -1691,7 +1691,7 @@ const updateById = async (id, attributes) => {
1691
1691
  },
1692
1692
  populate: ["roles"]
1693
1693
  });
1694
- strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser2) });
1694
+ strapi.eventHub.emit("user.update", { user: sanitizeUser$1(updatedUser2) });
1695
1695
  return updatedUser2;
1696
1696
  }
1697
1697
  const updatedUser = await strapi.db.query("admin::user").update({
@@ -1700,7 +1700,7 @@ const updateById = async (id, attributes) => {
1700
1700
  populate: ["roles"]
1701
1701
  });
1702
1702
  if (updatedUser) {
1703
- strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser) });
1703
+ strapi.eventHub.emit("user.update", { user: sanitizeUser$1(updatedUser) });
1704
1704
  }
1705
1705
  return updatedUser;
1706
1706
  };
@@ -1712,17 +1712,17 @@ const resetPasswordByEmail = async (email2, password$1) => {
1712
1712
  try {
1713
1713
  await password.validate(password$1);
1714
1714
  } catch (error) {
1715
- throw new ValidationError$4(
1715
+ throw new ValidationError$6(
1716
1716
  "Invalid password. Expected a minimum of 8 characters with at least one number and one uppercase letter"
1717
1717
  );
1718
1718
  }
1719
- await updateById(user2.id, { password: password$1 });
1719
+ await updateById$1(user2.id, { password: password$1 });
1720
1720
  };
1721
- const isLastSuperAdminUser = async (userId) => {
1722
- const user2 = await findOne$1(userId);
1721
+ const isLastSuperAdminUser$1 = async (userId) => {
1722
+ const user2 = await findOne$2(userId);
1723
1723
  if (!user2)
1724
1724
  return false;
1725
- const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1725
+ const superAdminRole = await getService$1("role").getSuperAdminWithUsersCount();
1726
1726
  return superAdminRole.usersCount === 1 && hasSuperAdminRole$1(user2);
1727
1727
  };
1728
1728
  const exists$3 = async (attributes = {}) => {
@@ -1735,15 +1735,15 @@ const findRegistrationInfo = async (registrationToken) => {
1735
1735
  }
1736
1736
  return ___namespace.default.pick(user2, ["email", "firstname", "lastname"]);
1737
1737
  };
1738
- const register = async ({
1738
+ const register$1 = async ({
1739
1739
  registrationToken,
1740
1740
  userInfo
1741
1741
  }) => {
1742
1742
  const matchingUser = await strapi.db.query("admin::user").findOne({ where: { registrationToken } });
1743
1743
  if (!matchingUser) {
1744
- throw new ValidationError$4("Invalid registration info");
1744
+ throw new ValidationError$6("Invalid registration info");
1745
1745
  }
1746
- return getService("user").updateById(matchingUser.id, {
1746
+ return getService$1("user").updateById(matchingUser.id, {
1747
1747
  password: userInfo.password,
1748
1748
  firstname: userInfo.firstname,
1749
1749
  lastname: userInfo.lastname,
@@ -1751,7 +1751,7 @@ const register = async ({
1751
1751
  isActive: true
1752
1752
  });
1753
1753
  };
1754
- const findOne$1 = async (id, populate = ["roles"]) => {
1754
+ const findOne$2 = async (id, populate = ["roles"]) => {
1755
1755
  return strapi.db.query("admin::user").findOne({ where: { id }, populate });
1756
1756
  };
1757
1757
  const findOneByEmail = async (email2, populate = []) => {
@@ -1764,7 +1764,7 @@ const findPage = async (params = {}) => {
1764
1764
  const query = strapi.get("query-params").transform("admin::user", fp.defaults({ populate: ["roles"] }, params));
1765
1765
  return strapi.db.query("admin::user").findPage(query);
1766
1766
  };
1767
- const deleteById = async (id) => {
1767
+ const deleteById$1 = async (id) => {
1768
1768
  const userToDelete = await strapi.db.query("admin::user").findOne({
1769
1769
  where: { id },
1770
1770
  populate: ["roles"]
@@ -1773,19 +1773,19 @@ const deleteById = async (id) => {
1773
1773
  return null;
1774
1774
  }
1775
1775
  if (userToDelete) {
1776
- if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE$2)) {
1777
- 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();
1778
1778
  if (superAdminRole.usersCount === 1) {
1779
- 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.");
1780
1780
  }
1781
1781
  }
1782
1782
  }
1783
1783
  const deletedUser = await strapi.db.query("admin::user").delete({ where: { id }, populate: ["roles"] });
1784
- strapi.eventHub.emit("user.delete", { user: sanitizeUser(deletedUser) });
1784
+ strapi.eventHub.emit("user.delete", { user: sanitizeUser$1(deletedUser) });
1785
1785
  return deletedUser;
1786
1786
  };
1787
- const deleteByIds$2 = async (ids) => {
1788
- const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1787
+ const deleteByIds$3 = async (ids) => {
1788
+ const superAdminRole = await getService$1("role").getSuperAdminWithUsersCount();
1789
1789
  const nbOfSuperAdminToDelete = await strapi.db.query("admin::user").count({
1790
1790
  where: {
1791
1791
  id: ids,
@@ -1793,7 +1793,7 @@ const deleteByIds$2 = async (ids) => {
1793
1793
  }
1794
1794
  });
1795
1795
  if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {
1796
- 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.");
1797
1797
  }
1798
1798
  const deletedUsers = [];
1799
1799
  for (const id of ids) {
@@ -1804,7 +1804,7 @@ const deleteByIds$2 = async (ids) => {
1804
1804
  deletedUsers.push(deletedUser);
1805
1805
  }
1806
1806
  strapi.eventHub.emit("user.delete", {
1807
- users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser))
1807
+ users: deletedUsers.map((deletedUser) => sanitizeUser$1(deletedUser))
1808
1808
  });
1809
1809
  return deletedUsers;
1810
1810
  };
@@ -1846,18 +1846,18 @@ const getLanguagesInUse = async () => {
1846
1846
  const users2 = await strapi.db.query("admin::user").findMany({ select: ["preferedLanguage"] });
1847
1847
  return users2.map((user2) => user2.preferedLanguage || "en");
1848
1848
  };
1849
- const user$1 = {
1849
+ const user$3 = {
1850
1850
  create: create$5,
1851
- updateById,
1851
+ updateById: updateById$1,
1852
1852
  exists: exists$3,
1853
1853
  findRegistrationInfo,
1854
- register,
1855
- sanitizeUser,
1856
- findOne: findOne$1,
1854
+ register: register$1,
1855
+ sanitizeUser: sanitizeUser$1,
1856
+ findOne: findOne$2,
1857
1857
  findOneByEmail,
1858
1858
  findPage,
1859
- deleteById,
1860
- deleteByIds: deleteByIds$2,
1859
+ deleteById: deleteById$1,
1860
+ deleteByIds: deleteByIds$3,
1861
1861
  countUsersWithoutRole,
1862
1862
  count: count$1,
1863
1863
  assignARoleToAll,
@@ -1937,17 +1937,17 @@ const permissionDomain = {
1937
1937
  setProperty,
1938
1938
  toPermission
1939
1939
  };
1940
- const checkPermissionsSchema = utils$1.yup.object().shape({
1941
- permissions: utils$1.yup.array().of(
1942
- utils$1.yup.object().shape({
1943
- action: utils$1.yup.string().required(),
1944
- subject: utils$1.yup.string().nullable(),
1945
- 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()
1946
1946
  }).noUnknown()
1947
1947
  )
1948
1948
  });
1949
1949
  const checkPermissionsExist = function(permissions2) {
1950
- const existingActions = getService("permission").actionProvider.values();
1950
+ const existingActions = getService$1("permission").actionProvider.values();
1951
1951
  const failIndex = permissions2.findIndex(
1952
1952
  (permission2) => !existingActions.some(
1953
1953
  (action2) => action2.actionId === permission2.action && (action2.section !== "contentTypes" || action2.subjects.includes(permission2.subject))
@@ -1961,17 +1961,17 @@ const checkPermissionsExist = function(permissions2) {
1961
1961
  })
1962
1962
  );
1963
1963
  };
1964
- const actionsExistSchema = utils$1.yup.array().of(
1965
- utils$1.yup.object().shape({
1966
- 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())
1967
1967
  })
1968
1968
  ).test("actions-exist", "", checkPermissionsExist);
1969
- const validatePermissionsExist = utils$1.validateYupSchema(actionsExistSchema);
1970
- const validateCheckPermissionsInput = utils$1.validateYupSchema(checkPermissionsSchema);
1971
- const validatedUpdatePermissionsInput = utils$1.validateYupSchema(validators.updatePermissions);
1972
- const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$1, CONTENT_TYPE_SECTION } = constants$3;
1973
- const { createAsyncSeriesWaterfallHook } = utils$1.hooks;
1974
- 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;
1975
1975
  const hooks = {
1976
1976
  willResetSuperAdminPermissions: createAsyncSeriesWaterfallHook()
1977
1977
  };
@@ -1994,11 +1994,11 @@ const arePermissionsEqual = (p1, p2) => {
1994
1994
  const create$3 = async (attributes) => {
1995
1995
  const alreadyExists = await exists$2({ name: attributes.name });
1996
1996
  if (alreadyExists) {
1997
- throw new ApplicationError$6(
1997
+ throw new ApplicationError$9(
1998
1998
  `The name must be unique and a role with name \`${attributes.name}\` already exists.`
1999
1999
  );
2000
2000
  }
2001
- const autoGeneratedCode = `${___namespace.default.kebabCase(attributes.name)}-${utils$1.dates.timestampCode()}`;
2001
+ const autoGeneratedCode = `${___namespace.default.kebabCase(attributes.name)}-${utils$2.dates.timestampCode()}`;
2002
2002
  const rolesWithCode = {
2003
2003
  ...attributes,
2004
2004
  code: attributes.code || autoGeneratedCode
@@ -2007,7 +2007,7 @@ const create$3 = async (attributes) => {
2007
2007
  strapi.eventHub.emit("role.create", { role: sanitizeRole(result) });
2008
2008
  return result;
2009
2009
  };
2010
- const findOne = (params = {}, populate) => {
2010
+ const findOne$1 = (params = {}, populate) => {
2011
2011
  return strapi.db.query("admin::role").findOne({ where: params, populate });
2012
2012
  };
2013
2013
  const findOneWithUsersCount = async (params = {}, populate) => {
@@ -2035,7 +2035,7 @@ const update$3 = async (params, attributes) => {
2035
2035
  id: { $ne: params.id }
2036
2036
  });
2037
2037
  if (alreadyExists) {
2038
- throw new ApplicationError$6(
2038
+ throw new ApplicationError$9(
2039
2039
  `The name must be unique and a role with name \`${sanitizedAttributes.name}\` already exists.`
2040
2040
  );
2041
2041
  }
@@ -2053,19 +2053,19 @@ const count = async (params = {}) => {
2053
2053
  };
2054
2054
  const checkRolesIdForDeletion = async (ids = []) => {
2055
2055
  const superAdminRole = await getSuperAdmin();
2056
- if (superAdminRole && utils$1.arrays.includesString(ids, superAdminRole.id)) {
2057
- 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");
2058
2058
  }
2059
2059
  for (const roleId of ids) {
2060
2060
  const usersCount = await getUsersCount(roleId);
2061
2061
  if (usersCount !== 0) {
2062
- 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");
2063
2063
  }
2064
2064
  }
2065
2065
  };
2066
- const deleteByIds$1 = async (ids = []) => {
2066
+ const deleteByIds$2 = async (ids = []) => {
2067
2067
  await checkRolesIdForDeletion(ids);
2068
- await getService("permission").deleteByRolesIds(ids);
2068
+ await getService$1("permission").deleteByRolesIds(ids);
2069
2069
  const deletedRoles = [];
2070
2070
  for (const id of ids) {
2071
2071
  const deletedRole = await strapi.db.query("admin::role").delete({ where: { id } });
@@ -2079,14 +2079,14 @@ const deleteByIds$1 = async (ids = []) => {
2079
2079
  const getUsersCount = async (roleId) => {
2080
2080
  return strapi.db.query("admin::user").count({ where: { roles: { id: roleId } } });
2081
2081
  };
2082
- const getSuperAdmin = () => findOne({ code: SUPER_ADMIN_CODE$1 });
2083
- 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 });
2084
2084
  const createRolesIfNoneExist = async () => {
2085
2085
  const someRolesExist = await exists$2();
2086
2086
  if (someRolesExist) {
2087
2087
  return;
2088
2088
  }
2089
- const { actionProvider: actionProvider2 } = getService("permission");
2089
+ const { actionProvider: actionProvider2 } = getService$1("permission");
2090
2090
  const allActions = actionProvider2.values();
2091
2091
  const contentTypesActions = allActions.filter((a) => a.section === "contentTypes");
2092
2092
  const superAdminRole = await create$3({
@@ -2094,7 +2094,7 @@ const createRolesIfNoneExist = async () => {
2094
2094
  code: "strapi-super-admin",
2095
2095
  description: "Super Admins can access and manage all features and settings."
2096
2096
  });
2097
- await getService("user").assignARoleToAll(superAdminRole.id);
2097
+ await getService$1("user").assignARoleToAll(superAdminRole.id);
2098
2098
  const editorRole = await create$3({
2099
2099
  name: "Editor",
2100
2100
  code: "strapi-editor",
@@ -2105,7 +2105,7 @@ const createRolesIfNoneExist = async () => {
2105
2105
  code: "strapi-author",
2106
2106
  description: "Authors can manage the content they have created."
2107
2107
  });
2108
- const editorPermissions = getService("content-type").getPermissionsWithNestedFields(
2108
+ const editorPermissions = getService$1("content-type").getPermissionsWithNestedFields(
2109
2109
  contentTypesActions,
2110
2110
  {
2111
2111
  restrictedSubjects: ["plugin::users-permissions.user"]
@@ -2132,7 +2132,7 @@ const getDefaultPluginPermissions = ({ isAuthor = false } = {}) => {
2132
2132
  };
2133
2133
  const displayWarningIfNoSuperAdmin = async () => {
2134
2134
  const superAdminRole = await getSuperAdminWithUsersCount();
2135
- const someUsersExists = await getService("user").exists();
2135
+ const someUsersExists = await getService$1("user").exists();
2136
2136
  if (!superAdminRole) {
2137
2137
  strapi.log.warn("Your application doesn't have a super admin role.");
2138
2138
  } else if (someUsersExists && superAdminRole.usersCount === 0) {
@@ -2141,12 +2141,12 @@ const displayWarningIfNoSuperAdmin = async () => {
2141
2141
  };
2142
2142
  const assignPermissions = async (roleId, permissions2 = []) => {
2143
2143
  await validatePermissionsExist(permissions2);
2144
- const internalActions = getService("permission").actionProvider.values().filter((action2) => action2.section === "internal").map((action2) => action2.actionId);
2145
- 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();
2146
2146
  const isSuperAdmin = superAdmin && superAdmin.id === roleId;
2147
2147
  const assignRole = fp.set("role", roleId);
2148
2148
  const permissionsWithRole = permissions2.map(assignRole).map(permissionDomain.create);
2149
- const existingPermissions = await getService("permission").findMany({
2149
+ const existingPermissions = await getService$1("permission").findMany({
2150
2150
  where: { role: { id: roleId } },
2151
2151
  populate: ["role"]
2152
2152
  });
@@ -2162,31 +2162,31 @@ const assignPermissions = async (roleId, permissions2 = []) => {
2162
2162
  ).filter((permission2) => !internalActions.includes(permission2.action));
2163
2163
  const permissionsToReturn = fp.differenceBy("id", permissionsToDelete, existingPermissions);
2164
2164
  if (permissionsToDelete.length > 0) {
2165
- await getService("permission").deleteByIds(permissionsToDelete.map(fp.prop("id")));
2165
+ await getService$1("permission").deleteByIds(permissionsToDelete.map(fp.prop("id")));
2166
2166
  }
2167
2167
  if (permissionsToAdd.length > 0) {
2168
2168
  const newPermissions = await addPermissions(roleId, permissionsToAdd);
2169
2169
  permissionsToReturn.push(...newPermissions);
2170
2170
  }
2171
2171
  if (!isSuperAdmin && (permissionsToAdd.length || permissionsToDelete.length)) {
2172
- await getService("metrics").sendDidUpdateRolePermissions();
2172
+ await getService$1("metrics").sendDidUpdateRolePermissions();
2173
2173
  }
2174
2174
  return permissionsToReturn;
2175
2175
  };
2176
2176
  const addPermissions = async (roleId, permissions2) => {
2177
- const { conditionProvider: conditionProvider2, createMany: createMany2 } = getService("permission");
2177
+ const { conditionProvider: conditionProvider2, createMany: createMany2 } = getService$1("permission");
2178
2178
  const { sanitizeConditions: sanitizeConditions2 } = permissionDomain;
2179
2179
  const permissionsWithRole = permissions2.map(fp.set("role", roleId)).map(sanitizeConditions2(conditionProvider2)).map(permissionDomain.create);
2180
2180
  return createMany2(permissionsWithRole);
2181
2181
  };
2182
2182
  const isContentTypeAction = (action2) => action2.section === CONTENT_TYPE_SECTION;
2183
2183
  const resetSuperAdminPermissions = async () => {
2184
- const superAdminRole = await getService("role").getSuperAdmin();
2184
+ const superAdminRole = await getService$1("role").getSuperAdmin();
2185
2185
  if (!superAdminRole) {
2186
2186
  return;
2187
2187
  }
2188
- const permissionService = getService("permission");
2189
- const contentTypeService = getService("content-type");
2188
+ const permissionService = getService$1("permission");
2189
+ const contentTypeService = getService$1("content-type");
2190
2190
  const allActions = permissionService.actionProvider.values();
2191
2191
  const contentTypesActions = allActions.filter((action2) => isContentTypeAction(action2));
2192
2192
  const otherActions = allActions.filter((action2) => !isContentTypeAction(action2));
@@ -2212,23 +2212,23 @@ const resetSuperAdminPermissions = async () => {
2212
2212
  };
2213
2213
  const hasSuperAdminRole = (user2) => {
2214
2214
  const roles2 = ___namespace.default.get(user2, "roles", []);
2215
- return roles2.map(fp.prop("code")).includes(SUPER_ADMIN_CODE$1);
2215
+ return roles2.map(fp.prop("code")).includes(SUPER_ADMIN_CODE$3);
2216
2216
  };
2217
2217
  const constants$2 = {
2218
- superAdminCode: SUPER_ADMIN_CODE$1
2218
+ superAdminCode: SUPER_ADMIN_CODE$3
2219
2219
  };
2220
- const role$1 = {
2220
+ const role$3 = {
2221
2221
  hooks,
2222
2222
  sanitizeRole,
2223
2223
  create: create$3,
2224
- findOne,
2224
+ findOne: findOne$1,
2225
2225
  findOneWithUsersCount,
2226
2226
  find,
2227
2227
  findAllWithUsersCount,
2228
2228
  update: update$3,
2229
2229
  exists: exists$2,
2230
2230
  count,
2231
- deleteByIds: deleteByIds$1,
2231
+ deleteByIds: deleteByIds$2,
2232
2232
  getUsersCount,
2233
2233
  getSuperAdmin,
2234
2234
  getSuperAdminWithUsersCount,
@@ -2249,7 +2249,7 @@ const createLocalStrategy = (strapi2, middleware) => {
2249
2249
  session: false
2250
2250
  },
2251
2251
  (email2, password2, done) => {
2252
- 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]) => {
2253
2253
  if (middleware) {
2254
2254
  return middleware([error, user2, message], done);
2255
2255
  }
@@ -2266,7 +2266,7 @@ const valueIsFunctionType = ([, value]) => fp.isFunction(value);
2266
2266
  const keyIsValidEventName = ([key]) => {
2267
2267
  return Object.keys(strapi.service("admin::passport").authEventsMapper).includes(key);
2268
2268
  };
2269
- const getPassportStrategies = () => [createLocalStrategy(strapi)];
2269
+ const getPassportStrategies$1 = () => [createLocalStrategy(strapi)];
2270
2270
  const registerAuthEvents = () => {
2271
2271
  const { events = {} } = strapi.config.get("admin.auth", {});
2272
2272
  const { authEventsMapper: authEventsMapper2 } = strapi.service("admin::passport");
@@ -2280,10 +2280,10 @@ const init = () => {
2280
2280
  registerAuthEvents();
2281
2281
  return passport__default.default.initialize();
2282
2282
  };
2283
- const passport = { init, getPassportStrategies, authEventsMapper };
2283
+ const passport$1 = { init, getPassportStrategies: getPassportStrategies$1, authEventsMapper };
2284
2284
  const sendDidInviteUser = async () => {
2285
- const numberOfUsers = await getService("user").count();
2286
- const numberOfRoles = await getService("role").count();
2285
+ const numberOfUsers = await getService$1("user").count();
2286
+ const numberOfRoles = await getService$1("role").count();
2287
2287
  strapi.telemetry.send("didInviteUser", {
2288
2288
  groupProperties: { numberOfRoles, numberOfUsers }
2289
2289
  });
@@ -2292,27 +2292,27 @@ const sendDidUpdateRolePermissions = async () => {
2292
2292
  strapi.telemetry.send("didUpdateRolePermissions");
2293
2293
  };
2294
2294
  const sendDidChangeInterfaceLanguage = async () => {
2295
- const languagesInUse = await getService("user").getLanguagesInUse();
2295
+ const languagesInUse = await getService$1("user").getLanguagesInUse();
2296
2296
  strapi.telemetry.send("didChangeInterfaceLanguage", { userProperties: { languagesInUse } });
2297
2297
  };
2298
- const sendUpdateProjectInformation = async (strapi2) => {
2299
- const numberOfActiveAdminUsers = await getService("user").count({ isActive: true });
2300
- 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();
2301
2301
  strapi2.telemetry.send("didUpdateProjectInformation", {
2302
2302
  groupProperties: { numberOfActiveAdminUsers, numberOfAdminUsers }
2303
2303
  });
2304
2304
  };
2305
- const startCron = (strapi2) => {
2305
+ const startCron$1 = (strapi2) => {
2306
2306
  strapi2.cron.add({
2307
- "0 0 0 * * *": () => sendUpdateProjectInformation(strapi2)
2307
+ "0 0 0 * * *": () => sendUpdateProjectInformation$1(strapi2)
2308
2308
  });
2309
2309
  };
2310
- const metrics = {
2310
+ const metrics$1 = {
2311
2311
  sendDidInviteUser,
2312
2312
  sendDidUpdateRolePermissions,
2313
2313
  sendDidChangeInterfaceLanguage,
2314
- sendUpdateProjectInformation,
2315
- startCron
2314
+ sendUpdateProjectInformation: sendUpdateProjectInformation$1,
2315
+ startCron: startCron$1
2316
2316
  };
2317
2317
  const defaultJwtOptions = { expiresIn: "30d" };
2318
2318
  const getTokenOptions = () => {
@@ -2357,37 +2357,37 @@ const token$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
2357
2357
  decodeJwtToken,
2358
2358
  getTokenOptions
2359
2359
  }, Symbol.toStringTag, { value: "Module" }));
2360
- const registerProviderActionSchema = utils$1.yup.array().required().of(
2361
- utils$1.yup.object().shape({
2362
- 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(
2363
2363
  /^[a-z]([a-z|.|-]+)[a-z]$/,
2364
2364
  (v) => `${v.path}: The id can only contain lowercase letters, dots and hyphens.`
2365
2365
  ).required(),
2366
- section: utils$1.yup.string().oneOf(["contentTypes", "plugins", "settings", "internal"]).required(),
2367
- 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", {
2368
2368
  is: "plugins",
2369
2369
  then: validators.isAPluginName.required(),
2370
2370
  otherwise: validators.isAPluginName
2371
2371
  }),
2372
- subjects: utils$1.yup.mixed().when("section", {
2372
+ subjects: utils$2.yup.mixed().when("section", {
2373
2373
  is: "contentTypes",
2374
- then: utils$1.yup.array().of(utils$1.yup.string()).required(),
2375
- 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')
2376
2376
  }),
2377
- displayName: utils$1.yup.string().required(),
2378
- category: utils$1.yup.mixed().when("section", {
2377
+ displayName: utils$2.yup.string().required(),
2378
+ category: utils$2.yup.mixed().when("section", {
2379
2379
  is: "settings",
2380
- then: utils$1.yup.string().required(),
2381
- otherwise: utils$1.yup.mixed().test(
2380
+ then: utils$2.yup.string().required(),
2381
+ otherwise: utils$2.yup.mixed().test(
2382
2382
  "settingsCategory",
2383
2383
  'category should only be defined for the "settings" section',
2384
2384
  (cat) => cat === void 0
2385
2385
  )
2386
2386
  }),
2387
- subCategory: utils$1.yup.mixed().when("section", {
2387
+ subCategory: utils$2.yup.mixed().when("section", {
2388
2388
  is: (section) => ["settings", "plugins"].includes(section),
2389
- then: utils$1.yup.string(),
2390
- otherwise: utils$1.yup.mixed().test(
2389
+ then: utils$2.yup.string(),
2390
+ otherwise: utils$2.yup.mixed().test(
2391
2391
  "settingsSubCategory",
2392
2392
  'subCategory should only be defined for "plugins" and "settings" sections',
2393
2393
  (subCat) => {
@@ -2395,23 +2395,23 @@ const registerProviderActionSchema = utils$1.yup.array().required().of(
2395
2395
  }
2396
2396
  )
2397
2397
  }),
2398
- options: utils$1.yup.object({
2399
- applyToProperties: utils$1.yup.array().of(utils$1.yup.string())
2398
+ options: utils$2.yup.object({
2399
+ applyToProperties: utils$2.yup.array().of(utils$2.yup.string())
2400
2400
  }),
2401
- aliases: utils$1.yup.array(
2402
- utils$1.yup.object({
2403
- actionId: utils$1.yup.string(),
2404
- subjects: utils$1.yup.array(utils$1.yup.string()).nullable()
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
2405
  })
2406
2406
  ).nullable()
2407
2407
  }).noUnknown()
2408
2408
  );
2409
- const validateRegisterProviderAction = utils$1.validateYupSchemaSync(registerProviderActionSchema);
2410
- const { ApplicationError: ApplicationError$5 } = utils$1.errors;
2409
+ const validateRegisterProviderAction = utils$2.validateYupSchemaSync(registerProviderActionSchema);
2410
+ const { ApplicationError: ApplicationError$8 } = utils$2.errors;
2411
2411
  const createActionProvider = (options) => {
2412
- const provider = utils$1.providerFactory(options);
2412
+ const provider = utils$2.providerFactory(options);
2413
2413
  const actionHooks = {
2414
- appliesPropertyToSubject: utils$1.hooks.createAsyncParallelHook()
2414
+ appliesPropertyToSubject: utils$2.hooks.createAsyncParallelHook()
2415
2415
  };
2416
2416
  return {
2417
2417
  ...provider,
@@ -2437,7 +2437,7 @@ const createActionProvider = (options) => {
2437
2437
  async appliesToProperty(property, actionId, subject2) {
2438
2438
  const action2 = provider.get(actionId);
2439
2439
  if (!action2) {
2440
- throw new ApplicationError$5(`No action found with id "${actionId}"`);
2440
+ throw new ApplicationError$8(`No action found with id "${actionId}"`);
2441
2441
  }
2442
2442
  const appliesToAction = actionDomain.appliesToProperty(property, action2);
2443
2443
  if (!appliesToAction) {
@@ -2515,7 +2515,7 @@ const domain = {
2515
2515
  sanitizeConditionAttributes
2516
2516
  };
2517
2517
  const createConditionProvider = () => {
2518
- const provider = utils$1.providerFactory();
2518
+ const provider = utils$2.providerFactory();
2519
2519
  return {
2520
2520
  ...provider,
2521
2521
  async register(conditionAttributes) {
@@ -2535,14 +2535,14 @@ const createConditionProvider = () => {
2535
2535
  };
2536
2536
  const {
2537
2537
  visitors: { removePassword, expandWildcardPopulate }
2538
- } = utils$1.sanitize;
2538
+ } = utils$2.sanitize;
2539
2539
  const {
2540
2540
  constants: constants$1,
2541
2541
  isScalarAttribute: isScalarAttribute$1,
2542
2542
  getNonVisibleAttributes: getNonVisibleAttributes$1,
2543
2543
  getNonWritableAttributes,
2544
2544
  getWritableAttributes: getWritableAttributes$1
2545
- } = utils$1.contentTypes;
2545
+ } = utils$2.contentTypes;
2546
2546
  const {
2547
2547
  ID_ATTRIBUTE: ID_ATTRIBUTE$1,
2548
2548
  DOC_ID_ATTRIBUTE: DOC_ID_ATTRIBUTE$1,
@@ -2556,7 +2556,7 @@ const COMPONENT_FIELDS$1 = ["__component"];
2556
2556
  const STATIC_FIELDS$1 = [ID_ATTRIBUTE$1, DOC_ID_ATTRIBUTE$1];
2557
2557
  const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) => {
2558
2558
  const schema = strapi.getModel(model);
2559
- const { removeDisallowedFields } = utils$1.sanitize.visitors;
2559
+ const { removeDisallowedFields } = utils$2.sanitize.visitors;
2560
2560
  const ctx = {
2561
2561
  schema,
2562
2562
  getModel: strapi.getModel.bind(strapi)
@@ -2564,39 +2564,39 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2564
2564
  const createSanitizeQuery = (options = {}) => {
2565
2565
  const { fields } = options;
2566
2566
  const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);
2567
- const sanitizeFilters = utils$1.async.pipe(
2568
- utils$1.traverse.traverseQueryFilters(removeDisallowedFields(permittedFields), ctx),
2569
- utils$1.traverse.traverseQueryFilters(omitDisallowedAdminUserFields, ctx),
2570
- utils$1.traverse.traverseQueryFilters(omitHiddenFields, ctx),
2571
- utils$1.traverse.traverseQueryFilters(removePassword, ctx),
2572
- 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 }) => {
2573
2573
  if (fp.isObject(value) && fp.isEmpty(value)) {
2574
2574
  remove(key);
2575
2575
  }
2576
2576
  }, ctx)
2577
2577
  );
2578
- const sanitizeSort = utils$1.async.pipe(
2579
- utils$1.traverse.traverseQuerySort(removeDisallowedFields(permittedFields), ctx),
2580
- utils$1.traverse.traverseQuerySort(omitDisallowedAdminUserFields, ctx),
2581
- utils$1.traverse.traverseQuerySort(omitHiddenFields, ctx),
2582
- utils$1.traverse.traverseQuerySort(removePassword, ctx),
2583
- 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 }) => {
2584
2584
  if (!isScalarAttribute$1(attribute) && fp.isEmpty(value)) {
2585
2585
  remove(key);
2586
2586
  }
2587
2587
  }, ctx)
2588
2588
  );
2589
- const sanitizePopulate = utils$1.async.pipe(
2590
- utils$1.traverse.traverseQueryPopulate(expandWildcardPopulate, ctx),
2591
- utils$1.traverse.traverseQueryPopulate(removeDisallowedFields(permittedFields), ctx),
2592
- utils$1.traverse.traverseQueryPopulate(omitDisallowedAdminUserFields, ctx),
2593
- utils$1.traverse.traverseQueryPopulate(omitHiddenFields, ctx),
2594
- 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)
2595
2595
  );
2596
- const sanitizeFields = utils$1.async.pipe(
2597
- utils$1.traverse.traverseQueryFields(removeDisallowedFields(permittedFields), ctx),
2598
- utils$1.traverse.traverseQueryFields(omitHiddenFields, ctx),
2599
- 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)
2600
2600
  );
2601
2601
  return async (query) => {
2602
2602
  const sanitizedQuery = fp.cloneDeep(query);
@@ -2618,15 +2618,15 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2618
2618
  const createSanitizeOutput = (options = {}) => {
2619
2619
  const { fields } = options;
2620
2620
  const permittedFields = fields.shouldIncludeAll ? null : getOutputFields(fields.permitted);
2621
- return utils$1.async.pipe(
2621
+ return utils$2.async.pipe(
2622
2622
  // Remove fields hidden from the admin
2623
- utils$1.traverseEntity(omitHiddenFields, ctx),
2623
+ utils$2.traverseEntity(omitHiddenFields, ctx),
2624
2624
  // Remove unallowed fields from admin::user relations
2625
- utils$1.traverseEntity(pickAllowedAdminUserFields, ctx),
2625
+ utils$2.traverseEntity(pickAllowedAdminUserFields, ctx),
2626
2626
  // Remove not allowed fields (RBAC)
2627
- utils$1.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2627
+ utils$2.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2628
2628
  // Remove all fields of type 'password'
2629
- utils$1.sanitize.sanitizers.sanitizePasswords({
2629
+ utils$2.sanitize.sanitizers.sanitizePasswords({
2630
2630
  schema,
2631
2631
  getModel(uid) {
2632
2632
  return strapi.getModel(uid);
@@ -2637,11 +2637,11 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2637
2637
  const createSanitizeInput = (options = {}) => {
2638
2638
  const { fields } = options;
2639
2639
  const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
2640
- return utils$1.async.pipe(
2640
+ return utils$2.async.pipe(
2641
2641
  // Remove fields hidden from the admin
2642
- utils$1.traverseEntity(omitHiddenFields, ctx),
2642
+ utils$2.traverseEntity(omitHiddenFields, ctx),
2643
2643
  // Remove not allowed fields (RBAC)
2644
- utils$1.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2644
+ utils$2.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2645
2645
  // Remove roles from createdBy & updatedBy fields
2646
2646
  omitCreatorRoles
2647
2647
  );
@@ -2742,9 +2742,9 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2742
2742
  sanitizeQuery: wrapSanitize(createSanitizeQuery)
2743
2743
  };
2744
2744
  };
2745
- const { ValidationError: ValidationError$3 } = utils$1.errors;
2746
- const { throwPassword, throwDisallowedFields } = utils$1.validate.visitors;
2747
- 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;
2748
2748
  const {
2749
2749
  ID_ATTRIBUTE,
2750
2750
  DOC_ID_ATTRIBUTE,
@@ -2758,7 +2758,7 @@ const COMPONENT_FIELDS = ["__component"];
2758
2758
  const STATIC_FIELDS = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];
2759
2759
  const throwInvalidKey = ({ key, path: path2 }) => {
2760
2760
  const msg = path2 && path2 !== key ? `Invalid key ${key} at ${path2}` : `Invalid key ${key}`;
2761
- throw new ValidationError$3(msg);
2761
+ throw new ValidationError$5(msg);
2762
2762
  };
2763
2763
  const createValidateHelpers = ({ action: action2, ability: ability$1, model }) => {
2764
2764
  const schema = strapi.getModel(model);
@@ -2769,35 +2769,35 @@ const createValidateHelpers = ({ action: action2, ability: ability$1, model }) =
2769
2769
  const createValidateQuery = (options = {}) => {
2770
2770
  const { fields } = options;
2771
2771
  const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);
2772
- const validateFilters = utils$1.async.pipe(
2773
- utils$1.traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),
2774
- utils$1.traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),
2775
- utils$1.traverse.traverseQueryFilters(throwPassword, ctx),
2776
- 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 }) => {
2777
2777
  if (fp.isObject(value) && fp.isEmpty(value)) {
2778
2778
  throwInvalidKey({ key, path: path2.attribute });
2779
2779
  }
2780
2780
  }, ctx)
2781
2781
  );
2782
- const validateSort = utils$1.async.pipe(
2783
- utils$1.traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),
2784
- utils$1.traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),
2785
- utils$1.traverse.traverseQuerySort(throwPassword, ctx),
2786
- 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 }) => {
2787
2787
  if (!isScalarAttribute(attribute) && fp.isEmpty(value)) {
2788
2788
  throwInvalidKey({ key, path: path2.attribute });
2789
2789
  }
2790
2790
  }, ctx)
2791
2791
  );
2792
- const validateFields = utils$1.async.pipe(
2793
- utils$1.traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),
2794
- 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)
2795
2795
  );
2796
- const validatePopulate = utils$1.async.pipe(
2797
- utils$1.traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),
2798
- utils$1.traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),
2799
- utils$1.traverse.traverseQueryPopulate(throwHiddenFields, ctx),
2800
- 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)
2801
2801
  );
2802
2802
  return async (query) => {
2803
2803
  if (query.filters) {
@@ -2818,11 +2818,11 @@ const createValidateHelpers = ({ action: action2, ability: ability$1, model }) =
2818
2818
  const createValidateInput = (options = {}) => {
2819
2819
  const { fields } = options;
2820
2820
  const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
2821
- return utils$1.async.pipe(
2821
+ return utils$2.async.pipe(
2822
2822
  // Remove fields hidden from the admin
2823
- utils$1.traverseEntity(throwHiddenFields, ctx),
2823
+ utils$2.traverseEntity(throwHiddenFields, ctx),
2824
2824
  // Remove not allowed fields (RBAC)
2825
- utils$1.traverseEntity(throwDisallowedFields(permittedFields), ctx),
2825
+ utils$2.traverseEntity(throwDisallowedFields(permittedFields), ctx),
2826
2826
  // Remove roles from createdBy & updatedBy fields
2827
2827
  omitCreatorRoles
2828
2828
  );
@@ -2943,7 +2943,7 @@ const unwrapDeep = (obj) => {
2943
2943
  {}
2944
2944
  );
2945
2945
  };
2946
- const index$4 = ({ ability: ability$1, action: action2, model }) => ({
2946
+ const index = ({ ability: ability$1, action: action2, model }) => ({
2947
2947
  ability: ability$1,
2948
2948
  action: action2,
2949
2949
  model,
@@ -3016,7 +3016,7 @@ const createPermissionEngine = (params) => {
3016
3016
  * @param user
3017
3017
  */
3018
3018
  async generateUserAbility(user2) {
3019
- const permissions2 = await getService("permission").findUserPermissions(user2);
3019
+ const permissions2 = await getService$1("permission").findUserPermissions(user2);
3020
3020
  return engine2.generateAbility(permissions2, user2);
3021
3021
  },
3022
3022
  /**
@@ -3031,8 +3031,8 @@ const emptyObjectFactory = () => ({});
3031
3031
  const createSection = ({ initialStateFactory = emptyObjectFactory, handlers = [], matchers = [] } = {}) => {
3032
3032
  const state = {
3033
3033
  hooks: {
3034
- handlers: utils$1.hooks.createAsyncSeriesHook(),
3035
- matchers: utils$1.hooks.createAsyncParallelHook()
3034
+ handlers: utils$2.hooks.createAsyncSeriesHook(),
3035
+ matchers: utils$2.hooks.createAsyncParallelHook()
3036
3036
  }
3037
3037
  };
3038
3038
  handlers.forEach((handler) => state.hooks.handlers.register(handler));
@@ -3136,7 +3136,7 @@ const toSubjectTemplate = (ct) => ({
3136
3136
  label: ct.info.singularName,
3137
3137
  properties: []
3138
3138
  });
3139
- const { isVisibleAttribute } = utils$1.contentTypes;
3139
+ const { isVisibleAttribute } = utils$2.contentTypes;
3140
3140
  const settings = ({ action: action2, section }) => {
3141
3141
  const { category, subCategory, displayName, actionId } = action2;
3142
3142
  section.push({
@@ -3246,10 +3246,10 @@ const deleteByRolesIds = async (rolesIds) => {
3246
3246
  }
3247
3247
  });
3248
3248
  if (permissionsToDelete.length > 0) {
3249
- await deleteByIds(permissionsToDelete.map(fp.prop("id")));
3249
+ await deleteByIds$1(permissionsToDelete.map(fp.prop("id")));
3250
3250
  }
3251
3251
  };
3252
- const deleteByIds = async (ids) => {
3252
+ const deleteByIds$1 = async (ids) => {
3253
3253
  const result = [];
3254
3254
  for (const id of ids) {
3255
3255
  const queryResult = await strapi.db.query("admin::permission").delete({ where: { id } });
@@ -3281,7 +3281,7 @@ const findUserPermissions = async (user2) => {
3281
3281
  return findMany({ where: { role: { users: { id: user2.id } } } });
3282
3282
  };
3283
3283
  const filterPermissionsToRemove = async (permissions2) => {
3284
- const { actionProvider: actionProvider2 } = getService("permission");
3284
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3285
3285
  const permissionsToRemove = [];
3286
3286
  for (const permission2 of permissions2) {
3287
3287
  const { subjects, options = {} } = actionProvider2.get(permission2.action) || {};
@@ -3307,7 +3307,7 @@ const filterPermissionsToRemove = async (permissions2) => {
3307
3307
  };
3308
3308
  const cleanPermissionsInDatabase = async () => {
3309
3309
  const pageSize = 200;
3310
- const contentTypeService = getService("content-type");
3310
+ const contentTypeService = getService$1("content-type");
3311
3311
  const total = await strapi.db.query("admin::permission").count();
3312
3312
  const pageCount = Math.ceil(total / pageSize);
3313
3313
  for (let page = 0; page < pageCount; page += 1) {
@@ -3332,7 +3332,7 @@ const cleanPermissionsInDatabase = async () => {
3332
3332
  return update$2({ id: permission2.id }, permission2);
3333
3333
  };
3334
3334
  await Promise.all([
3335
- deleteByIds(permissionsIdToRemove),
3335
+ deleteByIds$1(permissionsIdToRemove),
3336
3336
  pmap__default.default(permissionsNeedingToBeUpdated, updatePromiseProvider, {
3337
3337
  concurrency: 100,
3338
3338
  stopOnError: true
@@ -3353,8 +3353,8 @@ const permission$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.define
3353
3353
  cleanPermissionsInDatabase,
3354
3354
  conditionProvider,
3355
3355
  createMany,
3356
- createPermissionsManager: index$4,
3357
- deleteByIds,
3356
+ createPermissionsManager: index,
3357
+ deleteByIds: deleteByIds$1,
3358
3358
  deleteByRolesIds,
3359
3359
  engine: engine$1,
3360
3360
  findMany,
@@ -3372,7 +3372,7 @@ const getNestedFields = (model, {
3372
3372
  if (nestingLevel === 0) {
3373
3373
  return prefix ? [prefix] : [];
3374
3374
  }
3375
- const nonAuthorizableFields = utils$1.contentTypes.getNonVisibleAttributes(model);
3375
+ const nonAuthorizableFields = utils$2.contentTypes.getNonVisibleAttributes(model);
3376
3376
  return ___namespace.default.reduce(
3377
3377
  model.attributes,
3378
3378
  (fields, attr, key) => {
@@ -3409,7 +3409,7 @@ const getNestedFieldsWithIntermediate = (model, { prefix = "", nestingLevel = 15
3409
3409
  if (nestingLevel === 0) {
3410
3410
  return [];
3411
3411
  }
3412
- const nonAuthorizableFields = utils$1.contentTypes.getNonVisibleAttributes(model);
3412
+ const nonAuthorizableFields = utils$2.contentTypes.getNonVisibleAttributes(model);
3413
3413
  return ___namespace.default.reduce(
3414
3414
  model.attributes,
3415
3415
  (fields, attr, key) => {
@@ -3451,7 +3451,7 @@ const getPermissionsWithNestedFields = (actions2, { nestingLevel, restrictedSubj
3451
3451
  }, []);
3452
3452
  };
3453
3453
  const cleanPermissionFields = (permissions2, { nestingLevel } = {}) => {
3454
- const { actionProvider: actionProvider2 } = getService("permission");
3454
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3455
3455
  return permissions2.map((permission2) => {
3456
3456
  const {
3457
3457
  action: actionId,
@@ -3490,7 +3490,7 @@ const contentType = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
3490
3490
  getPermissionsWithNestedFields
3491
3491
  }, Symbol.toStringTag, { value: "Module" }));
3492
3492
  const isValidCondition = (condition2) => {
3493
- const { conditionProvider: conditionProvider2 } = getService("permission");
3493
+ const { conditionProvider: conditionProvider2 } = getService$1("permission");
3494
3494
  return fp.isString(condition2) && conditionProvider2.has(condition2);
3495
3495
  };
3496
3496
  const condition = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -3498,11 +3498,11 @@ const condition = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePro
3498
3498
  isValidCondition
3499
3499
  }, Symbol.toStringTag, { value: "Module" }));
3500
3500
  const { AUTHOR_CODE, PUBLISH_ACTION } = constants$3;
3501
- const { NotFoundError: NotFoundError$2 } = utils$1.errors;
3501
+ const { NotFoundError: NotFoundError$2 } = utils$2.errors;
3502
3502
  const getAllowedActionsForRole = async (roleId) => {
3503
- const { actionProvider: actionProvider2 } = getService("permission");
3503
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3504
3504
  if (!fp.isNil(roleId)) {
3505
- const role2 = await getService("role").findOne({ id: roleId });
3505
+ const role2 = await getService$1("role").findOne({ id: roleId });
3506
3506
  if (!role2) {
3507
3507
  throw new NotFoundError$2("role.notFound");
3508
3508
  }
@@ -3516,7 +3516,7 @@ const action = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3516
3516
  __proto__: null,
3517
3517
  getAllowedActionsForRole
3518
3518
  }, Symbol.toStringTag, { value: "Module" }));
3519
- const { ValidationError: ValidationError$2, NotFoundError: NotFoundError$1 } = utils$1.errors;
3519
+ const { ValidationError: ValidationError$4, NotFoundError: NotFoundError$1 } = utils$2.errors;
3520
3520
  const SELECT_FIELDS$1 = [
3521
3521
  "id",
3522
3522
  "name",
@@ -3531,16 +3531,16 @@ const SELECT_FIELDS$1 = [
3531
3531
  const POPULATE_FIELDS$1 = ["permissions"];
3532
3532
  const assertCustomTokenPermissionsValidity = (type, permissions2) => {
3533
3533
  if (type !== constants$3.API_TOKEN_TYPE.CUSTOM && !fp.isEmpty(permissions2)) {
3534
- throw new ValidationError$2("Non-custom tokens should not reference permissions");
3534
+ throw new ValidationError$4("Non-custom tokens should not reference permissions");
3535
3535
  }
3536
3536
  if (type === constants$3.API_TOKEN_TYPE.CUSTOM && !fp.isArray(permissions2)) {
3537
- throw new ValidationError$2("Missing permissions attribute for custom token");
3537
+ throw new ValidationError$4("Missing permissions attribute for custom token");
3538
3538
  }
3539
3539
  if (type === constants$3.API_TOKEN_TYPE.CUSTOM) {
3540
3540
  const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
3541
3541
  const invalidPermissions = fp.difference(permissions2, validPermissions);
3542
3542
  if (!fp.isEmpty(invalidPermissions)) {
3543
- throw new ValidationError$2(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3543
+ throw new ValidationError$4(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3544
3544
  }
3545
3545
  }
3546
3546
  };
@@ -3555,7 +3555,7 @@ const isValidLifespan$1 = (lifespan) => {
3555
3555
  };
3556
3556
  const assertValidLifespan$1 = (lifespan) => {
3557
3557
  if (!isValidLifespan$1(lifespan)) {
3558
- throw new ValidationError$2(
3558
+ throw new ValidationError$4(
3559
3559
  `lifespan must be one of the following values:
3560
3560
  ${Object.values(constants$3.API_TOKEN_LIFESPANS).join(", ")}`
3561
3561
  );
@@ -3590,7 +3590,7 @@ const hash$1 = (accessKey) => {
3590
3590
  const getExpirationFields$1 = (lifespan) => {
3591
3591
  const isValidNumber = fp.isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
3592
3592
  if (!isValidNumber && !fp.isNil(lifespan)) {
3593
- 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");
3594
3594
  }
3595
3595
  return {
3596
3596
  lifespan: lifespan || null,
@@ -3742,8 +3742,8 @@ const apiToken$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
3742
3742
  }, Symbol.toStringTag, { value: "Module" }));
3743
3743
  const DEFAULT_TRANSFER_ACTIONS = ["push", "pull"];
3744
3744
  const providers = {
3745
- action: utils$1.providerFactory(),
3746
- condition: utils$1.providerFactory()
3745
+ action: utils$2.providerFactory(),
3746
+ condition: utils$2.providerFactory()
3747
3747
  };
3748
3748
  DEFAULT_TRANSFER_ACTIONS.forEach((action2) => {
3749
3749
  providers.action.register(action2, { action: action2 });
@@ -3754,7 +3754,7 @@ const permission$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.define
3754
3754
  engine,
3755
3755
  providers
3756
3756
  }, Symbol.toStringTag, { value: "Module" }));
3757
- const { ValidationError: ValidationError$1, NotFoundError } = utils$1.errors;
3757
+ const { ValidationError: ValidationError$3, NotFoundError } = utils$2.errors;
3758
3758
  const TRANSFER_TOKEN_UID = "admin::transfer-token";
3759
3759
  const TRANSFER_TOKEN_PERMISSION_UID = "admin::transfer-token-permission";
3760
3760
  const SELECT_FIELDS = [
@@ -3905,7 +3905,7 @@ const regenerate = async (id) => {
3905
3905
  const getExpirationFields = (lifespan) => {
3906
3906
  const isValidNumber = fp.isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
3907
3907
  if (!isValidNumber && !fp.isNil(lifespan)) {
3908
- 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");
3909
3909
  }
3910
3910
  return {
3911
3911
  lifespan: lifespan || null,
@@ -3913,14 +3913,14 @@ const getExpirationFields = (lifespan) => {
3913
3913
  };
3914
3914
  };
3915
3915
  const hash = (accessKey) => {
3916
- const { hasValidTokenSalt: hasValidTokenSalt2 } = getService("transfer").utils;
3916
+ const { hasValidTokenSalt: hasValidTokenSalt2 } = getService$1("transfer").utils;
3917
3917
  if (!hasValidTokenSalt2()) {
3918
3918
  throw new TypeError("Required token salt is not defined");
3919
3919
  }
3920
3920
  return crypto__default.default.createHmac("sha512", strapi.config.get("admin.transfer.token.salt")).update(accessKey).digest("hex");
3921
3921
  };
3922
3922
  const checkSaltIsDefined = () => {
3923
- const { hasValidTokenSalt: hasValidTokenSalt2 } = getService("transfer").utils;
3923
+ const { hasValidTokenSalt: hasValidTokenSalt2 } = getService$1("transfer").utils;
3924
3924
  if (!strapi.config.get("server.transfer.remote.enabled")) {
3925
3925
  return;
3926
3926
  }
@@ -3946,7 +3946,7 @@ const assertTokenPermissionsValidity = (attributes) => {
3946
3946
  const validPermissions = permissionService.providers.action.keys();
3947
3947
  const invalidPermissions = fp.difference(attributes.permissions, validPermissions);
3948
3948
  if (!fp.isEmpty(invalidPermissions)) {
3949
- throw new ValidationError$1(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3949
+ throw new ValidationError$3(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3950
3950
  }
3951
3951
  };
3952
3952
  const isValidLifespan = (lifespan) => {
@@ -3960,7 +3960,7 @@ const isValidLifespan = (lifespan) => {
3960
3960
  };
3961
3961
  const assertValidLifespan = (lifespan) => {
3962
3962
  if (!isValidLifespan(lifespan)) {
3963
- throw new ValidationError$1(
3963
+ throw new ValidationError$3(
3964
3964
  `lifespan must be one of the following values:
3965
3965
  ${Object.values(constants$3.TRANSFER_TOKEN_LIFESPANS).join(", ")}`
3966
3966
  );
@@ -3986,15 +3986,15 @@ const hasValidTokenSalt = () => {
3986
3986
  return typeof salt === "string" && salt.length > 0;
3987
3987
  };
3988
3988
  const isRemoteTransferEnabled = () => {
3989
- const { utils: utils2 } = getService("transfer");
3990
- 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) {
3991
3991
  strapi.log.warn(
3992
3992
  "STRAPI_DISABLE_REMOTE_DATA_TRANSFER is no longer supported. Instead, set transfer.remote.enabled to false in your server configuration"
3993
3993
  );
3994
3994
  }
3995
3995
  return utils2.hasValidTokenSalt() && strapi.config.get("server.transfer.remote.enabled");
3996
3996
  };
3997
- const utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3997
+ const utils$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3998
3998
  __proto__: null,
3999
3999
  hasValidTokenSalt,
4000
4000
  isRemoteTransferEnabled
@@ -4003,7 +4003,7 @@ const transfer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
4003
4003
  __proto__: null,
4004
4004
  permission: permission$1,
4005
4005
  token: token$2,
4006
- utils
4006
+ utils: utils$1
4007
4007
  }, Symbol.toStringTag, { value: "Module" }));
4008
4008
  const PROJECT_SETTINGS_FILE_INPUTS = ["menuLogo", "authLogo"];
4009
4009
  const parseFilesData = async (files) => {
@@ -4124,14 +4124,14 @@ const projectSettings = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
4124
4124
  parseFilesData,
4125
4125
  updateProjectSettings: updateProjectSettings$1
4126
4126
  }, Symbol.toStringTag, { value: "Module" }));
4127
- const index$3 = {
4128
- auth,
4129
- user: user$1,
4130
- role: role$1,
4131
- passport,
4127
+ const services$1 = {
4128
+ auth: auth$1,
4129
+ user: user$3,
4130
+ role: role$3,
4131
+ passport: passport$1,
4132
4132
  token: token$3,
4133
4133
  permission: permission$2,
4134
- metrics,
4134
+ metrics: metrics$1,
4135
4135
  "content-type": contentType,
4136
4136
  constants: constants$4,
4137
4137
  condition,
@@ -4164,13 +4164,13 @@ const updateProjectSettingsImagesDimensions = zod.z.object({
4164
4164
  menuLogo: logoDimensions.nullish(),
4165
4165
  authLogo: logoDimensions.nullish()
4166
4166
  }).strict();
4167
- const validateUpdateProjectSettings = utils$1.validateZod(updateProjectSettings);
4168
- const validateUpdateProjectSettingsFiles = utils$1.validateZod(updateProjectSettingsFiles);
4169
- 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(
4170
4170
  updateProjectSettingsImagesDimensions
4171
4171
  );
4172
4172
  const { isUsingTypeScript } = tsUtils__default.default;
4173
- const admin = {
4173
+ const admin$3 = {
4174
4174
  // TODO very temporary to check the switch ee/ce
4175
4175
  // When removing this we need to update the /admin/src/index.js file
4176
4176
  // whe,re we set the strapi.window.isEE value
@@ -4182,8 +4182,8 @@ const admin = {
4182
4182
  },
4183
4183
  async init() {
4184
4184
  let uuid = strapi.config.get("uuid", false);
4185
- const hasAdmin = await getService("user").exists();
4186
- 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();
4187
4187
  const telemetryDisabled = strapi.config.get(
4188
4188
  "packageJsonStrapi.telemetryDisabled",
4189
4189
  null
@@ -4201,7 +4201,7 @@ const admin = {
4201
4201
  };
4202
4202
  },
4203
4203
  async getProjectSettings() {
4204
- return getService(
4204
+ return getService$1(
4205
4205
  "project-settings"
4206
4206
  ).getProjectSettings();
4207
4207
  },
@@ -4209,7 +4209,7 @@ const admin = {
4209
4209
  const {
4210
4210
  request: { files, body }
4211
4211
  } = ctx;
4212
- const projectSettingsService = getService("project-settings");
4212
+ const projectSettingsService = getService$1("project-settings");
4213
4213
  await validateUpdateProjectSettings(body);
4214
4214
  await validateUpdateProjectSettingsFiles(files);
4215
4215
  const formatedFiles = await projectSettingsService.parseFilesData(files);
@@ -4228,7 +4228,7 @@ const admin = {
4228
4228
  const useTypescriptOnAdmin = await isUsingTypeScript(
4229
4229
  path__default.default.join(strapi.dirs.app.root, "src", "admin")
4230
4230
  );
4231
- const isHostedOnStrapiCloud = utils$1.env("STRAPI_HOSTING", null) === "strapi.cloud";
4231
+ const isHostedOnStrapiCloud = utils$2.env("STRAPI_HOSTING", null) === "strapi.cloud";
4232
4232
  const numberOfAllContentTypes = ___namespace.default.size(strapi.contentTypes);
4233
4233
  const numberOfComponents = ___namespace.default.size(strapi.components);
4234
4234
  const getNumberOfDynamicZones = () => {
@@ -4293,26 +4293,26 @@ const admin = {
4293
4293
  ctx.send({ plugins: plugins2 });
4294
4294
  }
4295
4295
  };
4296
- const apiTokenCreationSchema = utils$1.yup.object().shape({
4297
- name: utils$1.yup.string().min(1).required(),
4298
- description: utils$1.yup.string().optional(),
4299
- type: utils$1.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).required(),
4300
- permissions: utils$1.yup.array().of(utils$1.yup.string()).nullable(),
4301
- 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()
4302
4302
  }).noUnknown().strict();
4303
- const apiTokenUpdateSchema = utils$1.yup.object().shape({
4304
- name: utils$1.yup.string().min(1).notNull(),
4305
- description: utils$1.yup.string().nullable(),
4306
- type: utils$1.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).notNull(),
4307
- 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()
4308
4308
  }).noUnknown().strict();
4309
- const validateApiTokenCreationInput = utils$1.validateYupSchema(apiTokenCreationSchema);
4310
- const validateApiTokenUpdateInput = utils$1.validateYupSchema(apiTokenUpdateSchema);
4311
- 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;
4312
4312
  const apiToken$1 = {
4313
4313
  async create(ctx) {
4314
4314
  const { body } = ctx.request;
4315
- const apiTokenService = getService("api-token");
4315
+ const apiTokenService = getService$1("api-token");
4316
4316
  const attributes = {
4317
4317
  name: fp.trim(body.name),
4318
4318
  description: fp.trim(body.description),
@@ -4323,14 +4323,14 @@ const apiToken$1 = {
4323
4323
  await validateApiTokenCreationInput(attributes);
4324
4324
  const alreadyExists = await apiTokenService.exists({ name: attributes.name });
4325
4325
  if (alreadyExists) {
4326
- throw new ApplicationError$4("Name already taken");
4326
+ throw new ApplicationError$7("Name already taken");
4327
4327
  }
4328
4328
  const apiToken2 = await apiTokenService.create(attributes);
4329
4329
  ctx.created({ data: apiToken2 });
4330
4330
  },
4331
4331
  async regenerate(ctx) {
4332
4332
  const { id } = ctx.params;
4333
- const apiTokenService = getService("api-token");
4333
+ const apiTokenService = getService$1("api-token");
4334
4334
  const apiTokenExists = await apiTokenService.getById(id);
4335
4335
  if (!apiTokenExists) {
4336
4336
  ctx.notFound("API Token not found");
@@ -4340,19 +4340,19 @@ const apiToken$1 = {
4340
4340
  ctx.created({ data: accessToken });
4341
4341
  },
4342
4342
  async list(ctx) {
4343
- const apiTokenService = getService("api-token");
4343
+ const apiTokenService = getService$1("api-token");
4344
4344
  const apiTokens2 = await apiTokenService.list();
4345
4345
  ctx.send({ data: apiTokens2 });
4346
4346
  },
4347
4347
  async revoke(ctx) {
4348
4348
  const { id } = ctx.params;
4349
- const apiTokenService = getService("api-token");
4349
+ const apiTokenService = getService$1("api-token");
4350
4350
  const apiToken2 = await apiTokenService.revoke(id);
4351
4351
  ctx.deleted({ data: apiToken2 });
4352
4352
  },
4353
4353
  async get(ctx) {
4354
4354
  const { id } = ctx.params;
4355
- const apiTokenService = getService("api-token");
4355
+ const apiTokenService = getService$1("api-token");
4356
4356
  const apiToken2 = await apiTokenService.getById(id);
4357
4357
  if (!apiToken2) {
4358
4358
  ctx.notFound("API Token not found");
@@ -4363,7 +4363,7 @@ const apiToken$1 = {
4363
4363
  async update(ctx) {
4364
4364
  const { body } = ctx.request;
4365
4365
  const { id } = ctx.params;
4366
- const apiTokenService = getService("api-token");
4366
+ const apiTokenService = getService$1("api-token");
4367
4367
  const attributes = body;
4368
4368
  if (fp.has("name", attributes)) {
4369
4369
  attributes.name = fp.trim(body.name);
@@ -4378,57 +4378,62 @@ const apiToken$1 = {
4378
4378
  }
4379
4379
  if (fp.has("name", attributes)) {
4380
4380
  const nameAlreadyTaken = await apiTokenService.getByName(attributes.name);
4381
- if (!!nameAlreadyTaken && !utils$1.strings.isEqual(nameAlreadyTaken.id, id)) {
4382
- 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");
4383
4383
  }
4384
4384
  }
4385
4385
  const apiToken2 = await apiTokenService.update(id, attributes);
4386
4386
  ctx.send({ data: apiToken2 });
4387
4387
  },
4388
4388
  async getLayout(ctx) {
4389
- const apiTokenService = getService("api-token");
4389
+ const apiTokenService = getService$1("api-token");
4390
4390
  const layout = await apiTokenService.getApiTokenLayout();
4391
4391
  ctx.send({ data: layout });
4392
4392
  }
4393
4393
  };
4394
- const userCreationSchema = utils$1.yup.object().shape({
4394
+ const userCreationSchema = utils$2.yup.object().shape({
4395
4395
  email: validators.email.required(),
4396
4396
  firstname: validators.firstname.required(),
4397
4397
  lastname: validators.lastname,
4398
4398
  roles: validators.roles.min(1),
4399
- preferedLanguage: utils$1.yup.string().nullable()
4399
+ preferedLanguage: utils$2.yup.string().nullable()
4400
4400
  }).noUnknown();
4401
- const profileUpdateSchema = utils$1.yup.object().shape({
4401
+ const profileUpdateSchema = utils$2.yup.object().shape({
4402
4402
  email: validators.email.notNull(),
4403
4403
  firstname: validators.firstname.notNull(),
4404
4404
  lastname: validators.lastname.nullable(),
4405
4405
  username: validators.username.nullable(),
4406
4406
  password: validators.password.notNull(),
4407
- currentPassword: utils$1.yup.string().when(
4407
+ currentPassword: utils$2.yup.string().when(
4408
4408
  "password",
4409
4409
  (password2, schema) => !fp.isUndefined(password2) ? schema.required() : schema
4410
4410
  ).notNull(),
4411
- preferedLanguage: utils$1.yup.string().nullable()
4411
+ preferedLanguage: utils$2.yup.string().nullable()
4412
4412
  }).noUnknown();
4413
- const userUpdateSchema = utils$1.yup.object().shape({
4413
+ const userUpdateSchema = utils$2.yup.object().shape({
4414
4414
  email: validators.email.notNull(),
4415
4415
  firstname: validators.firstname.notNull(),
4416
4416
  lastname: validators.lastname.nullable(),
4417
4417
  username: validators.username.nullable(),
4418
4418
  password: validators.password.notNull(),
4419
- isActive: utils$1.yup.bool().notNull(),
4419
+ isActive: utils$2.yup.bool().notNull(),
4420
4420
  roles: validators.roles.min(1).notNull()
4421
4421
  }).noUnknown();
4422
- const usersDeleteSchema = utils$1.yup.object().shape({
4423
- 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()
4424
4424
  }).noUnknown();
4425
- const validateUserCreationInput = utils$1.validateYupSchema(userCreationSchema);
4426
- const validateProfileUpdateInput = utils$1.validateYupSchema(profileUpdateSchema);
4427
- const validateUserUpdateInput = utils$1.validateYupSchema(userUpdateSchema);
4428
- 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
+ };
4429
4434
  const authenticatedUser = {
4430
4435
  async getMe(ctx) {
4431
- const userInfo = getService("user").sanitizeUser(ctx.state.user);
4436
+ const userInfo = getService$1("user").sanitizeUser(ctx.state.user);
4432
4437
  ctx.body = {
4433
4438
  data: userInfo
4434
4439
  };
@@ -4436,8 +4441,8 @@ const authenticatedUser = {
4436
4441
  async updateMe(ctx) {
4437
4442
  const input = ctx.request.body;
4438
4443
  await validateProfileUpdateInput(input);
4439
- const userService = getService("user");
4440
- const authServer = getService("auth");
4444
+ const userService = getService$1("user");
4445
+ const authServer = getService$1("auth");
4441
4446
  const { currentPassword, ...userInfo } = input;
4442
4447
  if (currentPassword && userInfo.password) {
4443
4448
  const isValid = await authServer.validatePassword(currentPassword, ctx.state.user.password);
@@ -4453,7 +4458,7 @@ const authenticatedUser = {
4453
4458
  };
4454
4459
  },
4455
4460
  async getOwnPermissions(ctx) {
4456
- const { findUserPermissions: findUserPermissions2, sanitizePermission: sanitizePermission2 } = getService("permission");
4461
+ const { findUserPermissions: findUserPermissions2, sanitizePermission: sanitizePermission2 } = getService$1("permission");
4457
4462
  const { user: user2 } = ctx.state;
4458
4463
  const userPermissions = await findUserPermissions2(user2);
4459
4464
  ctx.body = {
@@ -4462,39 +4467,39 @@ const authenticatedUser = {
4462
4467
  };
4463
4468
  }
4464
4469
  };
4465
- const registrationSchema = utils$1.yup.object().shape({
4466
- registrationToken: utils$1.yup.string().required(),
4467
- 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({
4468
4473
  firstname: validators.firstname.required(),
4469
4474
  lastname: validators.lastname.nullable(),
4470
4475
  password: validators.password.required()
4471
4476
  }).required().noUnknown()
4472
4477
  }).noUnknown();
4473
- const registrationInfoQuerySchema = utils$1.yup.object().shape({
4474
- registrationToken: utils$1.yup.string().required()
4478
+ const registrationInfoQuerySchema = utils$2.yup.object().shape({
4479
+ registrationToken: utils$2.yup.string().required()
4475
4480
  }).required().noUnknown();
4476
- const adminRegistrationSchema = utils$1.yup.object().shape({
4481
+ const adminRegistrationSchema = utils$2.yup.object().shape({
4477
4482
  email: validators.email.required(),
4478
4483
  firstname: validators.firstname.required(),
4479
4484
  lastname: validators.lastname.nullable(),
4480
4485
  password: validators.password.required()
4481
4486
  }).required().noUnknown();
4482
- const validateRegistrationInput = utils$1.validateYupSchema(registrationSchema);
4483
- const validateRegistrationInfoQuery = utils$1.validateYupSchema(registrationInfoQuerySchema);
4484
- const validateAdminRegistrationInput = utils$1.validateYupSchema(adminRegistrationSchema);
4485
- 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({
4486
4491
  email: validators.email.required()
4487
4492
  }).required().noUnknown();
4488
- const validateForgotPasswordInput = utils$1.validateYupSchema(forgotPasswordSchema);
4489
- const resetPasswordSchema = utils$1.yup.object().shape({
4490
- 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(),
4491
4496
  password: validators.password.required()
4492
4497
  }).required().noUnknown();
4493
- const validateResetPasswordInput = utils$1.validateYupSchema(resetPasswordSchema);
4494
- const renewToken = utils$1.yup.object().shape({ token: utils$1.yup.string().required() }).required().noUnknown();
4495
- const validateRenewTokenInput = utils$1.validateYupSchema(renewToken);
4496
- const { ApplicationError: ApplicationError$3, ValidationError } = utils$1.errors;
4497
- 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 = {
4498
4503
  login: compose__default.default([
4499
4504
  (ctx, next) => {
4500
4505
  return passport__default.default.authenticate("local", { session: false }, (err, user2, info) => {
@@ -4510,11 +4515,11 @@ const authentication = {
4510
4515
  error: new Error(info.message),
4511
4516
  provider: "local"
4512
4517
  });
4513
- throw new ApplicationError$3(info.message);
4518
+ throw new ApplicationError$6(info.message);
4514
4519
  }
4515
4520
  const query = ctx.state;
4516
4521
  query.user = user2;
4517
- const sanitizedUser = getService("user").sanitizeUser(user2);
4522
+ const sanitizedUser = getService$1("user").sanitizeUser(user2);
4518
4523
  strapi.eventHub.emit("admin.auth.success", { user: sanitizedUser, provider: "local" });
4519
4524
  return next();
4520
4525
  })(ctx, next);
@@ -4523,8 +4528,8 @@ const authentication = {
4523
4528
  const { user: user2 } = ctx.state;
4524
4529
  ctx.body = {
4525
4530
  data: {
4526
- token: getService("token").createJwtToken(user2),
4527
- user: getService("user").sanitizeUser(ctx.state.user)
4531
+ token: getService$1("token").createJwtToken(user2),
4532
+ user: getService$1("user").sanitizeUser(ctx.state.user)
4528
4533
  // TODO: fetch more detailed info
4529
4534
  }
4530
4535
  };
@@ -4533,50 +4538,50 @@ const authentication = {
4533
4538
  async renewToken(ctx) {
4534
4539
  await validateRenewTokenInput(ctx.request.body);
4535
4540
  const { token: token2 } = ctx.request.body;
4536
- const { isValid, payload } = getService("token").decodeJwtToken(token2);
4541
+ const { isValid, payload } = getService$1("token").decodeJwtToken(token2);
4537
4542
  if (!isValid) {
4538
- throw new ValidationError("Invalid token");
4543
+ throw new ValidationError$2("Invalid token");
4539
4544
  }
4540
4545
  ctx.body = {
4541
4546
  data: {
4542
- token: getService("token").createJwtToken({ id: payload.id })
4547
+ token: getService$1("token").createJwtToken({ id: payload.id })
4543
4548
  }
4544
4549
  };
4545
4550
  },
4546
4551
  async registrationInfo(ctx) {
4547
4552
  await validateRegistrationInfoQuery(ctx.request.query);
4548
4553
  const { registrationToken } = ctx.request.query;
4549
- const registrationInfo = await getService("user").findRegistrationInfo(registrationToken);
4554
+ const registrationInfo = await getService$1("user").findRegistrationInfo(registrationToken);
4550
4555
  if (!registrationInfo) {
4551
- throw new ValidationError("Invalid registrationToken");
4556
+ throw new ValidationError$2("Invalid registrationToken");
4552
4557
  }
4553
4558
  ctx.body = { data: registrationInfo };
4554
4559
  },
4555
4560
  async register(ctx) {
4556
4561
  const input = ctx.request.body;
4557
4562
  await validateRegistrationInput(input);
4558
- const user2 = await getService("user").register(input);
4563
+ const user2 = await getService$1("user").register(input);
4559
4564
  ctx.body = {
4560
4565
  data: {
4561
- token: getService("token").createJwtToken(user2),
4562
- user: getService("user").sanitizeUser(user2)
4566
+ token: getService$1("token").createJwtToken(user2),
4567
+ user: getService$1("user").sanitizeUser(user2)
4563
4568
  }
4564
4569
  };
4565
4570
  },
4566
4571
  async registerAdmin(ctx) {
4567
4572
  const input = ctx.request.body;
4568
4573
  await validateAdminRegistrationInput(input);
4569
- const hasAdmin = await getService("user").exists();
4574
+ const hasAdmin = await getService$1("user").exists();
4570
4575
  if (hasAdmin) {
4571
- throw new ApplicationError$3("You cannot register a new super admin");
4576
+ throw new ApplicationError$6("You cannot register a new super admin");
4572
4577
  }
4573
- const superAdminRole = await getService("role").getSuperAdmin();
4578
+ const superAdminRole = await getService$1("role").getSuperAdmin();
4574
4579
  if (!superAdminRole) {
4575
- throw new ApplicationError$3(
4580
+ throw new ApplicationError$6(
4576
4581
  "Cannot register the first admin because the super admin role doesn't exist."
4577
4582
  );
4578
4583
  }
4579
- const user2 = await getService("user").create({
4584
+ const user2 = await getService$1("user").create({
4580
4585
  ...input,
4581
4586
  registrationToken: null,
4582
4587
  isActive: true,
@@ -4585,30 +4590,30 @@ const authentication = {
4585
4590
  strapi.telemetry.send("didCreateFirstAdmin");
4586
4591
  ctx.body = {
4587
4592
  data: {
4588
- token: getService("token").createJwtToken(user2),
4589
- user: getService("user").sanitizeUser(user2)
4593
+ token: getService$1("token").createJwtToken(user2),
4594
+ user: getService$1("user").sanitizeUser(user2)
4590
4595
  }
4591
4596
  };
4592
4597
  },
4593
4598
  async forgotPassword(ctx) {
4594
4599
  const input = ctx.request.body;
4595
4600
  await validateForgotPasswordInput(input);
4596
- getService("auth").forgotPassword(input);
4601
+ getService$1("auth").forgotPassword(input);
4597
4602
  ctx.status = 204;
4598
4603
  },
4599
4604
  async resetPassword(ctx) {
4600
4605
  const input = ctx.request.body;
4601
4606
  await validateResetPasswordInput(input);
4602
- const user2 = await getService("auth").resetPassword(input);
4607
+ const user2 = await getService$1("auth").resetPassword(input);
4603
4608
  ctx.body = {
4604
4609
  data: {
4605
- token: getService("token").createJwtToken(user2),
4606
- user: getService("user").sanitizeUser(user2)
4610
+ token: getService$1("token").createJwtToken(user2),
4611
+ user: getService$1("user").sanitizeUser(user2)
4607
4612
  }
4608
4613
  };
4609
4614
  },
4610
4615
  logout(ctx) {
4611
- const sanitizedUser = getService("user").sanitizeUser(ctx.state.user);
4616
+ const sanitizedUser = getService$1("user").sanitizeUser(ctx.state.user);
4612
4617
  strapi.eventHub.emit("admin.logout", { user: sanitizedUser });
4613
4618
  ctx.body = { data: {} };
4614
4619
  }
@@ -4624,7 +4629,7 @@ const permission = {
4624
4629
  const { body: input } = ctx.request;
4625
4630
  const { userAbility } = ctx.state;
4626
4631
  await validateCheckPermissionsInput(input);
4627
- const { engine: engine2 } = getService("permission");
4632
+ const { engine: engine2 } = getService$1("permission");
4628
4633
  const checkPermissionsFn = engine2.checkMany(userAbility);
4629
4634
  ctx.body = {
4630
4635
  data: checkPermissionsFn(input.permissions)
@@ -4635,7 +4640,7 @@ const permission = {
4635
4640
  * @param {KoaContext} ctx - koa context
4636
4641
  */
4637
4642
  async getAll(ctx) {
4638
- const { sectionsBuilder: sectionsBuilder2, actionProvider: actionProvider2, conditionProvider: conditionProvider2 } = getService("permission");
4643
+ const { sectionsBuilder: sectionsBuilder2, actionProvider: actionProvider2, conditionProvider: conditionProvider2 } = getService$1("permission");
4639
4644
  const actions2 = actionProvider2.values();
4640
4645
  const conditions2 = conditionProvider2.values();
4641
4646
  const sections = await sectionsBuilder2.build(actions2);
@@ -4648,12 +4653,12 @@ const permission = {
4648
4653
  };
4649
4654
  }
4650
4655
  };
4651
- const roleCreateSchema = utils$1.yup.object().shape({
4652
- name: utils$1.yup.string().min(1).required(),
4653
- 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()
4654
4659
  }).noUnknown();
4655
- const rolesDeleteSchema = utils$1.yup.object().shape({
4656
- 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) {
4657
4662
  try {
4658
4663
  await strapi.service("admin::role").checkRolesIdForDeletion(ids);
4659
4664
  } catch (e) {
@@ -4662,7 +4667,7 @@ const rolesDeleteSchema = utils$1.yup.object().shape({
4662
4667
  return true;
4663
4668
  })
4664
4669
  }).noUnknown();
4665
- 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) {
4666
4671
  try {
4667
4672
  await strapi.service("admin::role").checkRolesIdForDeletion([id]);
4668
4673
  } catch (e) {
@@ -4670,25 +4675,25 @@ const roleDeleteSchema = utils$1.yup.strapiID().required().test("no-admin-single
4670
4675
  }
4671
4676
  return true;
4672
4677
  });
4673
- const roleUpdateSchema = utils$1.yup.object().shape({
4674
- name: utils$1.yup.string().min(1),
4675
- 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()
4676
4681
  }).noUnknown();
4677
- const validateRoleCreateInput = utils$1.validateYupSchema(roleCreateSchema);
4678
- const validateRoleUpdateInput = utils$1.validateYupSchema(roleUpdateSchema);
4679
- const validateRolesDeleteInput = utils$1.validateYupSchema(rolesDeleteSchema);
4680
- const validateRoleDeleteInput = utils$1.validateYupSchema(roleDeleteSchema);
4681
- const { ApplicationError: ApplicationError$2 } = utils$1.errors;
4682
- const { SUPER_ADMIN_CODE } = constants$3;
4683
- 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 = {
4684
4689
  /**
4685
4690
  * Create a new role
4686
4691
  * @param {KoaContext} ctx - koa context
4687
4692
  */
4688
4693
  async create(ctx) {
4689
4694
  const { body } = ctx.request;
4690
- await validateRoleCreateInput(body);
4691
- const roleService = getService("role");
4695
+ await validateRoleCreateInput$1(body);
4696
+ const roleService = getService$1("role");
4692
4697
  const role2 = await roleService.create(body);
4693
4698
  const sanitizedRole = roleService.sanitizeRole(role2);
4694
4699
  ctx.created({ data: sanitizedRole });
@@ -4699,7 +4704,7 @@ const role = {
4699
4704
  */
4700
4705
  async findOne(ctx) {
4701
4706
  const { id } = ctx.params;
4702
- const role2 = await getService("role").findOneWithUsersCount({ id });
4707
+ const role2 = await getService$1("role").findOneWithUsersCount({ id });
4703
4708
  if (!role2) {
4704
4709
  return ctx.notFound("role.notFound");
4705
4710
  }
@@ -4713,13 +4718,13 @@ const role = {
4713
4718
  */
4714
4719
  async findAll(ctx) {
4715
4720
  const { query } = ctx.request;
4716
- const permissionsManager = getService("permission").createPermissionsManager({
4721
+ const permissionsManager = getService$1("permission").createPermissionsManager({
4717
4722
  ability: ctx.state.userAbility,
4718
4723
  model: "admin::role"
4719
4724
  });
4720
4725
  await permissionsManager.validateQuery(query);
4721
4726
  const sanitizedQuery = await permissionsManager.sanitizeQuery(query);
4722
- const roles2 = await getService("role").findAllWithUsersCount(sanitizedQuery);
4727
+ const roles2 = await getService$1("role").findAllWithUsersCount(sanitizedQuery);
4723
4728
  ctx.body = {
4724
4729
  data: roles2
4725
4730
  };
@@ -4731,14 +4736,14 @@ const role = {
4731
4736
  async update(ctx) {
4732
4737
  const { id } = ctx.params;
4733
4738
  const { body } = ctx.request;
4734
- const roleService = getService("role");
4739
+ const roleService = getService$1("role");
4735
4740
  await validateRoleUpdateInput(body);
4736
4741
  const role2 = await roleService.findOne({ id });
4737
4742
  if (!role2) {
4738
4743
  return ctx.notFound("role.notFound");
4739
4744
  }
4740
- if (role2.code === SUPER_ADMIN_CODE) {
4741
- 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.");
4742
4747
  }
4743
4748
  const updatedRole = await roleService.update({ id }, body);
4744
4749
  const sanitizedRole = roleService.sanitizeRole(updatedRole);
@@ -4752,8 +4757,8 @@ const role = {
4752
4757
  */
4753
4758
  async getPermissions(ctx) {
4754
4759
  const { id } = ctx.params;
4755
- const roleService = getService("role");
4756
- const permissionService = getService("permission");
4760
+ const roleService = getService$1("role");
4761
+ const permissionService = getService$1("permission");
4757
4762
  const role2 = await roleService.findOne({ id });
4758
4763
  if (!role2) {
4759
4764
  return ctx.notFound("role.notFound");
@@ -4772,14 +4777,14 @@ const role = {
4772
4777
  async updatePermissions(ctx) {
4773
4778
  const { id } = ctx.params;
4774
4779
  const { body: input } = ctx.request;
4775
- const roleService = getService("role");
4776
- const permissionService = getService("permission");
4780
+ const roleService = getService$1("role");
4781
+ const permissionService = getService$1("permission");
4777
4782
  const role2 = await roleService.findOne({ id });
4778
4783
  if (!role2) {
4779
4784
  return ctx.notFound("role.notFound");
4780
4785
  }
4781
- if (role2.code === SUPER_ADMIN_CODE) {
4782
- 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.");
4783
4788
  }
4784
4789
  await validatedUpdatePermissionsInput(input);
4785
4790
  if (!role2) {
@@ -4797,8 +4802,8 @@ const role = {
4797
4802
  */
4798
4803
  async deleteOne(ctx) {
4799
4804
  const { id } = ctx.params;
4800
- await validateRoleDeleteInput(id);
4801
- const roleService = getService("role");
4805
+ await validateRoleDeleteInput$1(id);
4806
+ const roleService = getService$1("role");
4802
4807
  const roles2 = await roleService.deleteByIds([id]);
4803
4808
  const sanitizedRole = roles2.map((role2) => roleService.sanitizeRole(role2))[0] || null;
4804
4809
  return ctx.deleted({
@@ -4811,8 +4816,8 @@ const role = {
4811
4816
  */
4812
4817
  async deleteMany(ctx) {
4813
4818
  const { body } = ctx.request;
4814
- await validateRolesDeleteInput(body);
4815
- const roleService = getService("role");
4819
+ await validateRolesDeleteInput$1(body);
4820
+ const roleService = getService$1("role");
4816
4821
  const roles2 = await roleService.deleteByIds(body.ids);
4817
4822
  const sanitizedRoles = roles2.map(roleService.sanitizeRole);
4818
4823
  return ctx.deleted({
@@ -4825,11 +4830,11 @@ const {
4825
4830
  handlers: { createPushController, createPullController }
4826
4831
  }
4827
4832
  } = dataTransfer$1.strapi;
4828
- const { UnauthorizedError } = utils$1.errors;
4833
+ const { UnauthorizedError: UnauthorizedError$1 } = utils$2.errors;
4829
4834
  const verify = async (ctx, scope) => {
4830
4835
  const { auth: auth2 } = ctx.state;
4831
4836
  if (!auth2) {
4832
- throw new UnauthorizedError();
4837
+ throw new UnauthorizedError$1();
4833
4838
  }
4834
4839
  await dataTransferAuthStrategy.verify(auth2, { scope });
4835
4840
  };
@@ -4839,34 +4844,34 @@ const runner = {
4839
4844
  push,
4840
4845
  pull
4841
4846
  };
4842
- const transferTokenCreationSchema = utils$1.yup.object().shape({
4843
- name: utils$1.yup.string().min(1).required(),
4844
- description: utils$1.yup.string().optional(),
4845
- permissions: utils$1.yup.array().min(1).of(utils$1.yup.string().oneOf(Object.values(constants$3.TRANSFER_TOKEN_TYPE))).required(),
4846
- 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()
4847
4852
  }).noUnknown().strict();
4848
- const transferTokenUpdateSchema = utils$1.yup.object().shape({
4849
- name: utils$1.yup.string().min(1).notNull(),
4850
- description: utils$1.yup.string().nullable(),
4851
- 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()
4852
4857
  }).noUnknown().strict();
4853
- const validateTransferTokenCreationInput$1 = utils$1.validateYupSchema(transferTokenCreationSchema);
4854
- const validateTransferTokenUpdateInput$1 = utils$1.validateYupSchema(transferTokenUpdateSchema);
4858
+ const validateTransferTokenCreationInput$1 = utils$2.validateYupSchema(transferTokenCreationSchema);
4859
+ const validateTransferTokenUpdateInput$1 = utils$2.validateYupSchema(transferTokenUpdateSchema);
4855
4860
  const token$1 = {
4856
4861
  validateTransferTokenCreationInput: validateTransferTokenCreationInput$1,
4857
4862
  validateTransferTokenUpdateInput: validateTransferTokenUpdateInput$1
4858
4863
  };
4859
- const { ApplicationError: ApplicationError$1 } = utils$1.errors;
4864
+ const { ApplicationError: ApplicationError$4 } = utils$2.errors;
4860
4865
  const { validateTransferTokenCreationInput, validateTransferTokenUpdateInput } = token$1;
4861
4866
  const token = {
4862
4867
  async list(ctx) {
4863
- const transferService = getService("transfer");
4868
+ const transferService = getService$1("transfer");
4864
4869
  const transferTokens = await transferService.token.list();
4865
4870
  ctx.body = { data: transferTokens };
4866
4871
  },
4867
4872
  async getById(ctx) {
4868
4873
  const { id } = ctx.params;
4869
- const tokenService = getService("transfer").token;
4874
+ const tokenService = getService$1("transfer").token;
4870
4875
  const transferToken2 = await tokenService.getById(id);
4871
4876
  if (!transferToken2) {
4872
4877
  ctx.notFound("Transfer token not found");
@@ -4876,7 +4881,7 @@ const token = {
4876
4881
  },
4877
4882
  async create(ctx) {
4878
4883
  const { body } = ctx.request;
4879
- const { token: tokenService } = getService("transfer");
4884
+ const { token: tokenService } = getService$1("transfer");
4880
4885
  const attributes = {
4881
4886
  name: fp.trim(body.name),
4882
4887
  description: fp.trim(body.description),
@@ -4886,7 +4891,7 @@ const token = {
4886
4891
  await validateTransferTokenCreationInput(attributes);
4887
4892
  const alreadyExists = await tokenService.exists({ name: attributes.name });
4888
4893
  if (alreadyExists) {
4889
- throw new ApplicationError$1("Name already taken");
4894
+ throw new ApplicationError$4("Name already taken");
4890
4895
  }
4891
4896
  const transferTokens = await tokenService.create(attributes);
4892
4897
  ctx.created({ data: transferTokens });
@@ -4894,7 +4899,7 @@ const token = {
4894
4899
  async update(ctx) {
4895
4900
  const { body } = ctx.request;
4896
4901
  const { id } = ctx.params;
4897
- const { token: tokenService } = getService("transfer");
4902
+ const { token: tokenService } = getService$1("transfer");
4898
4903
  const attributes = body;
4899
4904
  if (fp.has("name", attributes)) {
4900
4905
  attributes.name = fp.trim(body.name);
@@ -4909,8 +4914,8 @@ const token = {
4909
4914
  }
4910
4915
  if (fp.has("name", attributes)) {
4911
4916
  const nameAlreadyTaken = await tokenService.getByName(attributes.name);
4912
- if (!!nameAlreadyTaken && !utils$1.strings.isEqual(nameAlreadyTaken.id, id)) {
4913
- 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");
4914
4919
  }
4915
4920
  }
4916
4921
  const apiToken2 = await tokenService.update(id, attributes);
@@ -4918,13 +4923,13 @@ const token = {
4918
4923
  },
4919
4924
  async revoke(ctx) {
4920
4925
  const { id } = ctx.params;
4921
- const { token: tokenService } = getService("transfer");
4926
+ const { token: tokenService } = getService$1("transfer");
4922
4927
  const transferToken2 = await tokenService.revoke(id);
4923
4928
  ctx.deleted({ data: transferToken2 });
4924
4929
  },
4925
4930
  async regenerate(ctx) {
4926
4931
  const { id } = ctx.params;
4927
- const { token: tokenService } = getService("transfer");
4932
+ const { token: tokenService } = getService$1("transfer");
4928
4933
  const exists2 = await tokenService.getById(id);
4929
4934
  if (!exists2) {
4930
4935
  ctx.notFound("Transfer token not found");
@@ -4939,12 +4944,12 @@ const transfer = {
4939
4944
  ...prefixActionsName("runner", runner),
4940
4945
  ...prefixActionsName("token", token)
4941
4946
  };
4942
- const { ApplicationError } = utils$1.errors;
4943
- const user = {
4947
+ const { ApplicationError: ApplicationError$3 } = utils$2.errors;
4948
+ const user$2 = {
4944
4949
  async create(ctx) {
4945
4950
  const { body } = ctx.request;
4946
4951
  const cleanData = { ...body, email: ___namespace.get(body, `email`, ``).toLowerCase() };
4947
- await validateUserCreationInput(cleanData);
4952
+ await validateUserCreationInput$1(cleanData);
4948
4953
  const attributes = ___namespace.pick(cleanData, [
4949
4954
  "firstname",
4950
4955
  "lastname",
@@ -4952,19 +4957,19 @@ const user = {
4952
4957
  "roles",
4953
4958
  "preferedLanguage"
4954
4959
  ]);
4955
- const userAlreadyExists = await getService("user").exists({
4960
+ const userAlreadyExists = await getService$1("user").exists({
4956
4961
  email: attributes.email
4957
4962
  });
4958
4963
  if (userAlreadyExists) {
4959
- throw new ApplicationError("Email already taken");
4964
+ throw new ApplicationError$3("Email already taken");
4960
4965
  }
4961
- const createdUser = await getService("user").create(attributes);
4962
- const userInfo = getService("user").sanitizeUser(createdUser);
4966
+ const createdUser = await getService$1("user").create(attributes);
4967
+ const userInfo = getService$1("user").sanitizeUser(createdUser);
4963
4968
  Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
4964
4969
  ctx.created({ data: userInfo });
4965
4970
  },
4966
4971
  async find(ctx) {
4967
- const userService = getService("user");
4972
+ const userService = getService$1("user");
4968
4973
  const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
4969
4974
  ability: ctx.state.userAbility,
4970
4975
  model: "admin::user"
@@ -4981,12 +4986,12 @@ const user = {
4981
4986
  },
4982
4987
  async findOne(ctx) {
4983
4988
  const { id } = ctx.params;
4984
- const user2 = await getService("user").findOne(id);
4989
+ const user2 = await getService$1("user").findOne(id);
4985
4990
  if (!user2) {
4986
4991
  return ctx.notFound("User does not exist");
4987
4992
  }
4988
4993
  ctx.body = {
4989
- data: getService("user").sanitizeUser(user2)
4994
+ data: getService$1("user").sanitizeUser(user2)
4990
4995
  };
4991
4996
  },
4992
4997
  async update(ctx) {
@@ -4994,30 +4999,30 @@ const user = {
4994
4999
  const { body: input } = ctx.request;
4995
5000
  await validateUserUpdateInput(input);
4996
5001
  if (___namespace.has(input, "email")) {
4997
- const uniqueEmailCheck = await getService("user").exists({
5002
+ const uniqueEmailCheck = await getService$1("user").exists({
4998
5003
  id: { $ne: id },
4999
5004
  email: input.email
5000
5005
  });
5001
5006
  if (uniqueEmailCheck) {
5002
- throw new ApplicationError("A user with this email address already exists");
5007
+ throw new ApplicationError$3("A user with this email address already exists");
5003
5008
  }
5004
5009
  }
5005
- const updatedUser = await getService("user").updateById(id, input);
5010
+ const updatedUser = await getService$1("user").updateById(id, input);
5006
5011
  if (!updatedUser) {
5007
5012
  return ctx.notFound("User does not exist");
5008
5013
  }
5009
5014
  ctx.body = {
5010
- data: getService("user").sanitizeUser(updatedUser)
5015
+ data: getService$1("user").sanitizeUser(updatedUser)
5011
5016
  };
5012
5017
  },
5013
5018
  async deleteOne(ctx) {
5014
5019
  const { id } = ctx.params;
5015
- const deletedUser = await getService("user").deleteById(id);
5020
+ const deletedUser = await getService$1("user").deleteById(id);
5016
5021
  if (!deletedUser) {
5017
5022
  return ctx.notFound("User not found");
5018
5023
  }
5019
5024
  return ctx.deleted({
5020
- data: getService("user").sanitizeUser(deletedUser)
5025
+ data: getService$1("user").sanitizeUser(deletedUser)
5021
5026
  });
5022
5027
  },
5023
5028
  /**
@@ -5027,17 +5032,17 @@ const user = {
5027
5032
  async deleteMany(ctx) {
5028
5033
  const { body } = ctx.request;
5029
5034
  await validateUsersDeleteInput(body);
5030
- const users2 = await getService("user").deleteByIds(body.ids);
5031
- 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);
5032
5037
  return ctx.deleted({
5033
5038
  data: sanitizedUsers
5034
5039
  });
5035
5040
  }
5036
5041
  };
5037
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*)?$/;
5038
- const webhookValidator = utils$1.yup.object({
5039
- name: utils$1.yup.string().required(),
5040
- 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(
5041
5046
  "is-public-url",
5042
5047
  "Url is not supported because it isn't reachable over the public internet",
5043
5048
  async (url) => {
@@ -5053,21 +5058,21 @@ const webhookValidator = utils$1.yup.object({
5053
5058
  }
5054
5059
  }
5055
5060
  ),
5056
- headers: utils$1.yup.lazy((data) => {
5061
+ headers: utils$2.yup.lazy((data) => {
5057
5062
  if (typeof data !== "object") {
5058
- return utils$1.yup.object().required();
5063
+ return utils$2.yup.object().required();
5059
5064
  }
5060
- return utils$1.yup.object(
5065
+ return utils$2.yup.object(
5061
5066
  // @ts-expect-error lodash types
5062
5067
  ___namespace.default.mapValues(data, () => {
5063
- utils$1.yup.string().min(1).required();
5068
+ utils$2.yup.string().min(1).required();
5064
5069
  })
5065
5070
  ).required();
5066
5071
  }),
5067
- events: utils$1.yup.array().of(utils$1.yup.string()).required()
5072
+ events: utils$2.yup.array().of(utils$2.yup.string()).required()
5068
5073
  }).noUnknown();
5069
5074
  const updateWebhookValidator = webhookValidator.shape({
5070
- isEnabled: utils$1.yup.boolean()
5075
+ isEnabled: utils$2.yup.boolean()
5071
5076
  });
5072
5077
  const webhooks = {
5073
5078
  async listWebhooks(ctx) {
@@ -5084,7 +5089,7 @@ const webhooks = {
5084
5089
  },
5085
5090
  async createWebhook(ctx) {
5086
5091
  const { body } = ctx.request;
5087
- await utils$1.validateYupSchema(webhookValidator)(body);
5092
+ await utils$2.validateYupSchema(webhookValidator)(body);
5088
5093
  const webhook = await strapi.get("webhookStore").createWebhook(body);
5089
5094
  strapi.get("webhookRunner").add(webhook);
5090
5095
  ctx.created({ data: webhook });
@@ -5092,7 +5097,7 @@ const webhooks = {
5092
5097
  async updateWebhook(ctx) {
5093
5098
  const { id } = ctx.params;
5094
5099
  const { body } = ctx.request;
5095
- await utils$1.validateYupSchema(updateWebhookValidator)(body);
5100
+ await utils$2.validateYupSchema(updateWebhookValidator)(body);
5096
5101
  const webhook = await strapi.get("webhookStore").findWebhook(id);
5097
5102
  if (!webhook) {
5098
5103
  return ctx.notFound("webhook.notFound");
@@ -5148,15 +5153,15 @@ const contentApi = {
5148
5153
  ctx.send({ data: routesMap });
5149
5154
  }
5150
5155
  };
5151
- const index$2 = {
5152
- admin,
5156
+ const controllers$1 = {
5157
+ admin: admin$3,
5153
5158
  "api-token": apiToken$1,
5154
5159
  "authenticated-user": authenticatedUser,
5155
- authentication,
5160
+ authentication: authentication$1,
5156
5161
  permission,
5157
- role,
5162
+ role: role$2,
5158
5163
  transfer,
5159
- user,
5164
+ user: user$2,
5160
5165
  webhooks,
5161
5166
  "content-api": contentApi
5162
5167
  };
@@ -5581,7 +5586,7 @@ const transferTokenPermission = {
5581
5586
  }
5582
5587
  }
5583
5588
  };
5584
- const index$1 = {
5589
+ const contentTypes = {
5585
5590
  permission: { schema: Permission },
5586
5591
  user: { schema: User },
5587
5592
  role: { schema: Role },
@@ -5591,7 +5596,7 @@ const index$1 = {
5591
5596
  "transfer-token-permission": { schema: transferTokenPermission }
5592
5597
  };
5593
5598
  const { RateLimitError } = utils__default.default.errors;
5594
- const rateLimit = (config, { strapi: strapi2 }) => async (ctx, next) => {
5599
+ const rateLimit = (config2, { strapi: strapi2 }) => async (ctx, next) => {
5595
5600
  let rateLimitConfig = strapi2.config.get("admin.rateLimit");
5596
5601
  if (!rateLimitConfig) {
5597
5602
  rateLimitConfig = {
@@ -5614,14 +5619,14 @@ const rateLimit = (config, { strapi: strapi2 }) => async (ctx, next) => {
5614
5619
  throw new RateLimitError();
5615
5620
  },
5616
5621
  ...rateLimitConfig,
5617
- ...config
5622
+ ...config2
5618
5623
  };
5619
5624
  return rateLimit2.middleware(loadConfig)(ctx, next);
5620
5625
  }
5621
5626
  return next();
5622
5627
  };
5623
5628
  const dataTransfer = () => async (ctx, next) => {
5624
- const transferUtils = getService("transfer").utils;
5629
+ const transferUtils = getService$1("transfer").utils;
5625
5630
  const { hasValidTokenSalt: hasValidTokenSalt2, isRemoteTransferEnabled: isRemoteTransferEnabled2 } = transferUtils;
5626
5631
  if (isRemoteTransferEnabled2()) {
5627
5632
  return next();
@@ -5639,18 +5644,1366 @@ const dataTransfer = () => async (ctx, next) => {
5639
5644
  }
5640
5645
  throw new Error("Unexpected error while trying to access a data transfer route");
5641
5646
  };
5642
- const index = {
5647
+ const middlewares$1 = {
5643
5648
  rateLimit,
5644
5649
  "data-transfer": dataTransfer
5645
5650
  };
5646
- exports.bootstrap = bootstrap;
5647
- exports.config = index$6;
5648
- exports.contentTypes = index$1;
5649
- exports.controllers = index$2;
5650
- exports.destroy = destroy;
5651
- exports.middlewares = index;
5652
- exports.policies = index$5;
5653
- exports.register = register$1;
5654
- exports.routes = routes;
5655
- 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;
5656
7009
  //# sourceMappingURL=index.js.map