@strapi/admin 5.0.0-rc.9 → 5.0.1

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 (359) 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-FPcBalFr.mjs} +5 -5
  6. package/dist/admin/{ApplicationInfoPage-ahnTcFV1.mjs.map → ApplicationInfoPage-FPcBalFr.mjs.map} +1 -1
  7. package/dist/admin/{ApplicationInfoPage-JfdJ0U4H.js → ApplicationInfoPage-hY4yez-z.js} +5 -5
  8. package/dist/admin/{ApplicationInfoPage-JfdJ0U4H.js.map → ApplicationInfoPage-hY4yez-z.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-WfWtk2vt.mjs} +32 -40
  14. package/dist/admin/AuthenticatedLayout-WfWtk2vt.mjs.map +1 -0
  15. package/dist/admin/{AuthenticatedLayout-eKDwvUFO.js → AuthenticatedLayout-_fHeS86w.js} +31 -39
  16. package/dist/admin/AuthenticatedLayout-_fHeS86w.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-2iQ7FkkX.js} +3 -3
  20. package/dist/admin/{CreatePage-68skzZjY.js.map → CreatePage-2iQ7FkkX.js.map} +1 -1
  21. package/dist/admin/{CreatePage-t5HQUOqJ.js → CreatePage-60fNdNfa.js} +6 -6
  22. package/dist/admin/CreatePage-60fNdNfa.js.map +1 -0
  23. package/dist/admin/{CreatePage-bdWb1wg4.mjs → CreatePage-pPnHpatu.mjs} +7 -7
  24. package/dist/admin/CreatePage-pPnHpatu.mjs.map +1 -0
  25. package/dist/admin/{CreatePage-Yd5JyWS5.mjs → CreatePage-z6N1v5X5.mjs} +3 -3
  26. package/dist/admin/{CreatePage-Yd5JyWS5.mjs.map → CreatePage-z6N1v5X5.mjs.map} +1 -1
  27. package/dist/admin/{CreateView-yv51Pyvw.js → CreateView-18WQPz4-.js} +3 -3
  28. package/dist/admin/{CreateView-yv51Pyvw.js.map → CreateView-18WQPz4-.js.map} +1 -1
  29. package/dist/admin/{CreateView-ZZaA8hbe.mjs → CreateView-4UcrE6vq.mjs} +3 -3
  30. package/dist/admin/{CreateView-ZZaA8hbe.mjs.map → CreateView-4UcrE6vq.mjs.map} +1 -1
  31. package/dist/admin/{CreateView-V0v5CK8t.mjs → CreateView-8k0KvpoK.mjs} +3 -3
  32. package/dist/admin/{CreateView-V0v5CK8t.mjs.map → CreateView-8k0KvpoK.mjs.map} +1 -1
  33. package/dist/admin/{CreateView-nzILLv0g.js → CreateView-YbqcAK_f.js} +3 -3
  34. package/dist/admin/{CreateView-nzILLv0g.js.map → CreateView-YbqcAK_f.js.map} +1 -1
  35. package/dist/admin/{EditPage-A7-BewPd.mjs → EditPage-Fu5aqX9h.mjs} +7 -7
  36. package/dist/admin/EditPage-Fu5aqX9h.mjs.map +1 -0
  37. package/dist/admin/{EditPage-Lw36XG9G.js → EditPage-H3D08t-N.js} +6 -6
  38. package/dist/admin/EditPage-H3D08t-N.js.map +1 -0
  39. package/dist/admin/{EditPage-cWJ8V1BK.mjs → EditPage-K8aawKOf.mjs} +27 -23
  40. package/dist/admin/EditPage-K8aawKOf.mjs.map +1 -0
  41. package/dist/admin/{EditPage-LoESB5pq.js → EditPage-U4UN4MeE.js} +7 -7
  42. package/dist/admin/{EditPage-LoESB5pq.js.map → EditPage-U4UN4MeE.js.map} +1 -1
  43. package/dist/admin/{EditPage-2cMhX4F_.mjs → EditPage-dZLyVDGx.mjs} +8 -8
  44. package/dist/admin/{EditPage-2cMhX4F_.mjs.map → EditPage-dZLyVDGx.mjs.map} +1 -1
  45. package/dist/admin/{EditPage-pTQCDncU.js → EditPage-ewduoYpT.js} +25 -21
  46. package/dist/admin/EditPage-ewduoYpT.js.map +1 -0
  47. package/dist/admin/{EditView-KzdDTSO-.js → EditView-1TEk6oaL.js} +5 -6
  48. package/dist/admin/EditView-1TEk6oaL.js.map +1 -0
  49. package/dist/admin/{EditView-HygMdUSf.mjs → EditView-xgk-lEu1.mjs} +7 -8
  50. package/dist/admin/EditView-xgk-lEu1.mjs.map +1 -0
  51. package/dist/admin/{EditViewPage-47F2xHBt.mjs → EditViewPage-2CHLYZlY.mjs} +6 -6
  52. package/dist/admin/{EditViewPage-47F2xHBt.mjs.map → EditViewPage-2CHLYZlY.mjs.map} +1 -1
  53. package/dist/admin/{EditViewPage-FgsrW_wV.js → EditViewPage-R2kud83M.js} +5 -5
  54. package/dist/admin/{EditViewPage-FgsrW_wV.js.map → EditViewPage-R2kud83M.js.map} +1 -1
  55. package/dist/admin/{EventsTable-mgIyB8DL.mjs → EventsTable-JJ16vr2h.mjs} +2 -2
  56. package/dist/admin/{EventsTable-mgIyB8DL.mjs.map → EventsTable-JJ16vr2h.mjs.map} +1 -1
  57. package/dist/admin/{EventsTable--XlOTHxM.js → EventsTable-fzeOe9NB.js} +2 -2
  58. package/dist/admin/{EventsTable--XlOTHxM.js.map → EventsTable-fzeOe9NB.js.map} +1 -1
  59. package/dist/admin/{HomePage-ywYHZHMa.js → HomePage-DB00H9y5.js} +15 -18
  60. package/dist/admin/HomePage-DB00H9y5.js.map +1 -0
  61. package/dist/admin/{HomePage-H77dsrr1.mjs → HomePage-EDHzBAy8.mjs} +3 -3
  62. package/dist/admin/{HomePage-H77dsrr1.mjs.map → HomePage-EDHzBAy8.mjs.map} +1 -1
  63. package/dist/admin/{HomePage-uVwht52t.js → HomePage-GsLJ4j4f.js} +3 -3
  64. package/dist/admin/{HomePage-uVwht52t.js.map → HomePage-GsLJ4j4f.js.map} +1 -1
  65. package/dist/admin/{HomePage-dyDldozB.mjs → HomePage-oz8OSt1B.mjs} +7 -10
  66. package/dist/admin/HomePage-oz8OSt1B.mjs.map +1 -0
  67. package/dist/admin/{InstalledPluginsPage-JkruwT2d.js → InstalledPlugins-T0ds5aOe.js} +9 -11
  68. package/dist/admin/InstalledPlugins-T0ds5aOe.js.map +1 -0
  69. package/dist/admin/{InstalledPluginsPage-3OSkplVn.mjs → InstalledPlugins-ngsQKZBi.mjs} +9 -11
  70. package/dist/admin/InstalledPlugins-ngsQKZBi.mjs.map +1 -0
  71. package/dist/admin/{Layout-pVTNV6PU.js → Layout-LTVvoQIP.js} +5 -5
  72. package/dist/admin/{Layout-pVTNV6PU.js.map → Layout-LTVvoQIP.js.map} +1 -1
  73. package/dist/admin/{Layout-8Ds_z3XN.mjs → Layout-dlsF2jYh.mjs} +5 -5
  74. package/dist/admin/{Layout-8Ds_z3XN.mjs.map → Layout-dlsF2jYh.mjs.map} +1 -1
  75. package/dist/admin/{ListPage-semY3kTl.mjs → ListPage-4VAaMuov.mjs} +4 -4
  76. package/dist/admin/{ListPage-semY3kTl.mjs.map → ListPage-4VAaMuov.mjs.map} +1 -1
  77. package/dist/admin/{ListPage-8M-bmv0a.mjs → ListPage-CAAa_iYD.mjs} +6 -6
  78. package/dist/admin/{ListPage-8M-bmv0a.mjs.map → ListPage-CAAa_iYD.mjs.map} +1 -1
  79. package/dist/admin/{ListPage-LokTy34i.mjs → ListPage-HjeCNXIL.mjs} +3 -3
  80. package/dist/admin/{ListPage-LokTy34i.mjs.map → ListPage-HjeCNXIL.mjs.map} +1 -1
  81. package/dist/admin/{ListPage-jTpJnTuQ.js → ListPage-J_zameoY.js} +3 -3
  82. package/dist/admin/{ListPage-jTpJnTuQ.js.map → ListPage-J_zameoY.js.map} +1 -1
  83. package/dist/admin/{ListPage-15KiUCLt.js → ListPage-W_j2UV6e.js} +3 -3
  84. package/dist/admin/{ListPage-15KiUCLt.js.map → ListPage-W_j2UV6e.js.map} +1 -1
  85. package/dist/admin/{ListPage-hNIbvh17.mjs → ListPage-cMqf3hxn.mjs} +10 -10
  86. package/dist/admin/ListPage-cMqf3hxn.mjs.map +1 -0
  87. package/dist/admin/{ListPage-OIdhjljI.js → ListPage-e_XhqWy-.js} +6 -6
  88. package/dist/admin/{ListPage-OIdhjljI.js.map → ListPage-e_XhqWy-.js.map} +1 -1
  89. package/dist/admin/{ListPage-NtjeF8R2.mjs → ListPage-fE9R8ZE1.mjs} +4 -4
  90. package/dist/admin/{ListPage-NtjeF8R2.mjs.map → ListPage-fE9R8ZE1.mjs.map} +1 -1
  91. package/dist/admin/{ListPage-dApwERT6.js → ListPage-kv14w7sy.js} +5 -5
  92. package/dist/admin/{ListPage-dApwERT6.js.map → ListPage-kv14w7sy.js.map} +1 -1
  93. package/dist/admin/{ListPage-DHUp0PDw.js → ListPage-qj3M7V0W.js} +8 -8
  94. package/dist/admin/ListPage-qj3M7V0W.js.map +1 -0
  95. package/dist/admin/{ListView-ZSEn2tK5.js → ListView-J3Bd1ZAj.js} +5 -5
  96. package/dist/admin/{ListView-ZSEn2tK5.js.map → ListView-J3Bd1ZAj.js.map} +1 -1
  97. package/dist/admin/{ListView-kEuSmXPm.mjs → ListView-JTtPuayE.mjs} +5 -5
  98. package/dist/admin/{ListView-kEuSmXPm.mjs.map → ListView-JTtPuayE.mjs.map} +1 -1
  99. package/dist/admin/{ListView-MA83TDJF.js → ListView-e_rZH3km.js} +4 -4
  100. package/dist/admin/{ListView-MA83TDJF.js.map → ListView-e_rZH3km.js.map} +1 -1
  101. package/dist/admin/{ListView-tCCo7pVS.mjs → ListView-ziItL2Hn.mjs} +5 -5
  102. package/dist/admin/{ListView-tCCo7pVS.mjs.map → ListView-ziItL2Hn.mjs.map} +1 -1
  103. package/dist/admin/{Login-RrWZQA_X.js → Login-B5mc1U2m.js} +3 -3
  104. package/dist/admin/{Login-RrWZQA_X.js.map → Login-B5mc1U2m.js.map} +1 -1
  105. package/dist/admin/{Login-GLcLgHUd.mjs → Login-STwy4gIQ.mjs} +3 -3
  106. package/dist/admin/{Login-GLcLgHUd.mjs.map → Login-STwy4gIQ.mjs.map} +1 -1
  107. package/dist/admin/{MagicLinkEE-u0n-nwtv.js → MagicLinkEE-3PSvKNEX.js} +3 -3
  108. package/dist/admin/{MagicLinkEE-u0n-nwtv.js.map → MagicLinkEE-3PSvKNEX.js.map} +1 -1
  109. package/dist/admin/{MagicLinkEE-_qltdLkk.mjs → MagicLinkEE-oXcvyO9m.mjs} +3 -3
  110. package/dist/admin/{MagicLinkEE-_qltdLkk.mjs.map → MagicLinkEE-oXcvyO9m.mjs.map} +1 -1
  111. package/dist/admin/{MarketplacePage-uyOTT12t.js → MarketplacePage-XkcAwVQL.js} +65 -64
  112. package/dist/admin/MarketplacePage-XkcAwVQL.js.map +1 -0
  113. package/dist/admin/{MarketplacePage-41CstG0b.mjs → MarketplacePage-s3TgP0pj.mjs} +64 -63
  114. package/dist/admin/MarketplacePage-s3TgP0pj.mjs.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-zwG0fq_e.mjs → ProfilePage-EPvpBxko.mjs} +6 -6
  124. package/dist/admin/ProfilePage-EPvpBxko.mjs.map +1 -0
  125. package/dist/admin/{ProfilePage-wxZFen3W.js → ProfilePage-TMGpOFkt.js} +5 -5
  126. package/dist/admin/ProfilePage-TMGpOFkt.js.map +1 -0
  127. package/dist/admin/{PurchaseAuditLogs-f6iczpRi.js → PurchaseAuditLogs-HcdrHEM2.js} +2 -2
  128. package/dist/admin/{PurchaseAuditLogs-f6iczpRi.js.map → PurchaseAuditLogs-HcdrHEM2.js.map} +1 -1
  129. package/dist/admin/{PurchaseAuditLogs-FDPV-ZqU.mjs → PurchaseAuditLogs-K2YmR4Il.mjs} +2 -2
  130. package/dist/admin/{PurchaseAuditLogs-FDPV-ZqU.mjs.map → PurchaseAuditLogs-K2YmR4Il.mjs.map} +1 -1
  131. package/dist/admin/{PurchaseSingleSignOn-S0B2HM4d.mjs → PurchaseSingleSignOn-sxd54apY.mjs} +2 -2
  132. package/dist/admin/{PurchaseSingleSignOn-S0B2HM4d.mjs.map → PurchaseSingleSignOn-sxd54apY.mjs.map} +1 -1
  133. package/dist/admin/{PurchaseSingleSignOn-0wXAjOLm.js → PurchaseSingleSignOn-y7p3yZ-b.js} +2 -2
  134. package/dist/admin/{PurchaseSingleSignOn-0wXAjOLm.js.map → PurchaseSingleSignOn-y7p3yZ-b.js.map} +1 -1
  135. package/dist/admin/{SelectRoles-MoDtdDcM.js → SelectRoles-L8dRONb-.js} +7 -7
  136. package/dist/admin/SelectRoles-L8dRONb-.js.map +1 -0
  137. package/dist/admin/{SelectRoles-h_1srnVz.mjs → SelectRoles-esk6LySb.mjs} +6 -6
  138. package/dist/admin/SelectRoles-esk6LySb.mjs.map +1 -0
  139. package/dist/admin/{SingleSignOnPage-5CdOsumW.js → SingleSignOnPage-cih5-oBZ.js} +4 -4
  140. package/dist/admin/{SingleSignOnPage-5CdOsumW.js.map → SingleSignOnPage-cih5-oBZ.js.map} +1 -1
  141. package/dist/admin/{SingleSignOnPage-AZVczKwR.mjs → SingleSignOnPage-idMTZOuN.mjs} +5 -5
  142. package/dist/admin/{SingleSignOnPage-AZVczKwR.mjs.map → SingleSignOnPage-idMTZOuN.mjs.map} +1 -1
  143. package/dist/admin/{Table-CpbvaRQh.js → Table-1mVE67Cd.js} +12 -19
  144. package/dist/admin/Table-1mVE67Cd.js.map +1 -0
  145. package/dist/admin/{Table-EPKfcF5-.mjs → Table-wZgpqMG3.mjs} +12 -19
  146. package/dist/admin/Table-wZgpqMG3.mjs.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-7Ki5z_3z.mjs → TokenTypeSelect-GplqVrbt.mjs} +4 -5
  152. package/dist/admin/{TokenTypeSelect-7Ki5z_3z.mjs.map → TokenTypeSelect-GplqVrbt.mjs.map} +1 -1
  153. package/dist/admin/{TokenTypeSelect-yRV19q7R.js → TokenTypeSelect-Itk7isiz.js} +4 -5
  154. package/dist/admin/{TokenTypeSelect-yRV19q7R.js.map → TokenTypeSelect-Itk7isiz.js.map} +1 -1
  155. package/dist/admin/{UseCasePage-l9OmQYhK.js → UseCasePage-1SuyjC6w.js} +4 -4
  156. package/dist/admin/{UseCasePage-l9OmQYhK.js.map → UseCasePage-1SuyjC6w.js.map} +1 -1
  157. package/dist/admin/{UseCasePage-as6-3qKD.mjs → UseCasePage-QPnZOFrC.mjs} +4 -4
  158. package/dist/admin/{UseCasePage-as6-3qKD.mjs.map → UseCasePage-QPnZOFrC.mjs.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-K5ARNpfV.js} +3 -3
  164. package/dist/admin/{constants-X2uDAtEA.js.map → constants-K5ARNpfV.js.map} +1 -1
  165. package/dist/admin/{constants-AYR471DB.mjs → constants-T5y8alpG.mjs} +3 -3
  166. package/dist/admin/{constants-AYR471DB.mjs.map → constants-T5y8alpG.mjs.map} +1 -1
  167. package/dist/admin/ee.mjs +1 -1
  168. package/dist/admin/en-GB-8ipWI3xp.mjs +6 -0
  169. package/dist/admin/en-GB-8ipWI3xp.mjs.map +1 -0
  170. package/dist/admin/en-GB-vRfq_FQ3.js +10 -0
  171. package/dist/admin/en-GB-vRfq_FQ3.js.map +1 -0
  172. package/dist/admin/{en-TbnMBjZf.js → en-_1-Nn7iH.js} +3 -2
  173. package/dist/admin/{en-TbnMBjZf.js.map → en-_1-Nn7iH.js.map} +1 -1
  174. package/dist/admin/{en-0Ld-ipyI.mjs → en-lDO5lPD0.mjs} +3 -2
  175. package/dist/admin/{en-0Ld-ipyI.mjs.map → en-lDO5lPD0.mjs.map} +1 -1
  176. package/dist/admin/{index-Fu3hPmaj.mjs → index-QPUYgtlo.mjs} +143 -280
  177. package/dist/admin/index-QPUYgtlo.mjs.map +1 -0
  178. package/dist/admin/{index-w33_0vI-.js → index-YMz7KziV.js} +147 -287
  179. package/dist/admin/index-YMz7KziV.js.map +1 -0
  180. package/dist/admin/index.js +5 -4
  181. package/dist/admin/index.js.map +1 -1
  182. package/dist/admin/index.mjs +3 -3
  183. package/dist/admin/{selectors-ZpHhvPK4.mjs → selectors--muHmKGe.mjs} +2 -2
  184. package/dist/admin/{selectors-ZpHhvPK4.mjs.map → selectors--muHmKGe.mjs.map} +1 -1
  185. package/dist/admin/{selectors-zQKcCNuz.js → selectors-1ySxKbos.js} +2 -2
  186. package/dist/admin/{selectors-zQKcCNuz.js.map → selectors-1ySxKbos.js.map} +1 -1
  187. package/dist/admin/src/StrapiApp.d.ts +8 -6
  188. package/dist/admin/src/components/Form.d.ts +3 -1
  189. package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -4
  190. package/dist/admin/src/constants.d.ts +10 -0
  191. package/dist/admin/src/features/Auth.d.ts +1 -1
  192. package/dist/admin/src/hooks/useRBAC.d.ts +1 -1
  193. package/dist/admin/src/index.d.ts +3 -0
  194. package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +1 -1
  195. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -1
  196. package/dist/admin/src/pages/Settings/pages/InstalledPlugins.d.ts +3 -0
  197. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +1 -1
  198. package/dist/admin/src/translations/languageNativeNames.d.ts +1 -0
  199. package/dist/admin/src/types/permissions.d.ts +3 -1
  200. package/dist/admin/test.js +3 -3
  201. package/dist/admin/test.js.map +1 -1
  202. package/dist/admin/test.mjs +4 -4
  203. package/dist/admin/test.mjs.map +1 -1
  204. package/dist/admin/{transferTokens-CNI0TFdA.mjs → transferTokens-v8tNpI_l.mjs} +2 -2
  205. package/dist/admin/{transferTokens-CNI0TFdA.mjs.map → transferTokens-v8tNpI_l.mjs.map} +1 -1
  206. package/dist/admin/{useAdminRoles-lDesL4gN.mjs → useAdminRoles-DX1MOKC9.mjs} +2 -2
  207. package/dist/admin/{useAdminRoles-lDesL4gN.mjs.map → useAdminRoles-DX1MOKC9.mjs.map} +1 -1
  208. package/dist/admin/{useAdminRoles-w6h8NFK5.js → useAdminRoles-nNC9r0dz.js} +2 -2
  209. package/dist/admin/{useAdminRoles-w6h8NFK5.js.map → useAdminRoles-nNC9r0dz.js.map} +1 -1
  210. package/dist/admin/{useLicenseLimitNotification-PaR7jmqd.mjs → useLicenseLimitNotification-Qx_rSpUQ.mjs} +3 -3
  211. package/dist/admin/{useLicenseLimitNotification-PaR7jmqd.mjs.map → useLicenseLimitNotification-Qx_rSpUQ.mjs.map} +1 -1
  212. package/dist/admin/{useLicenseLimitNotification-g1vq6nzk.js → useLicenseLimitNotification-eau4ja6h.js} +2 -2
  213. package/dist/admin/{useLicenseLimitNotification-g1vq6nzk.js.map → useLicenseLimitNotification-eau4ja6h.js.map} +1 -1
  214. package/dist/admin/{useLicenseLimits-Jy6E6qc2.mjs → useLicenseLimits-j5znikzW.mjs} +2 -2
  215. package/dist/admin/{useLicenseLimits-Jy6E6qc2.mjs.map → useLicenseLimits-j5znikzW.mjs.map} +1 -1
  216. package/dist/admin/{useWebhooks-7thg-d57.mjs → useWebhooks-upF7mgdZ.mjs} +2 -2
  217. package/dist/admin/{useWebhooks-7thg-d57.mjs.map → useWebhooks-upF7mgdZ.mjs.map} +1 -1
  218. package/dist/admin/{validation-4SWh9S5z.js → validation-AQCTfU6y.js} +4 -4
  219. package/dist/admin/validation-AQCTfU6y.js.map +1 -0
  220. package/dist/admin/{validation-IcNGA_ef.mjs → validation-tnv2QISi.mjs} +4 -4
  221. package/dist/admin/validation-tnv2QISi.mjs.map +1 -0
  222. package/dist/ee/server/src/audit-logs/content-types/audit-log.d.ts +41 -0
  223. package/dist/ee/server/src/audit-logs/content-types/audit-log.d.ts.map +1 -0
  224. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +7 -0
  225. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -0
  226. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts +19 -0
  227. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -0
  228. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +27 -0
  229. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -0
  230. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +12 -0
  231. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -0
  232. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +6 -0
  233. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -0
  234. package/dist/ee/server/src/bootstrap.d.ts +3 -0
  235. package/dist/ee/server/src/bootstrap.d.ts.map +1 -0
  236. package/dist/ee/server/src/config/admin-actions.d.ts +20 -0
  237. package/dist/ee/server/src/config/admin-actions.d.ts.map +1 -0
  238. package/dist/ee/server/src/content-types/index.d.ts +3 -0
  239. package/dist/ee/server/src/content-types/index.d.ts.map +1 -0
  240. package/dist/ee/server/src/controllers/admin.d.ts +29 -0
  241. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -0
  242. package/dist/ee/server/src/controllers/authentication-utils/constants.d.ts +10 -0
  243. package/dist/ee/server/src/controllers/authentication-utils/constants.d.ts.map +1 -0
  244. package/dist/ee/server/src/controllers/authentication-utils/index.d.ts +5 -0
  245. package/dist/ee/server/src/controllers/authentication-utils/index.d.ts.map +1 -0
  246. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts +9 -0
  247. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -0
  248. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +55 -0
  249. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -0
  250. package/dist/ee/server/src/controllers/authentication.d.ts +9 -0
  251. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -0
  252. package/dist/ee/server/src/controllers/index.d.ts +48 -0
  253. package/dist/ee/server/src/controllers/index.d.ts.map +1 -0
  254. package/dist/ee/server/src/controllers/role.d.ts +20 -0
  255. package/dist/ee/server/src/controllers/role.d.ts.map +1 -0
  256. package/dist/ee/server/src/controllers/user.d.ts +8 -0
  257. package/dist/ee/server/src/controllers/user.d.ts.map +1 -0
  258. package/dist/ee/server/src/destroy.d.ts +6 -0
  259. package/dist/ee/server/src/destroy.d.ts.map +1 -0
  260. package/dist/ee/server/src/index.d.ts +380 -0
  261. package/dist/ee/server/src/index.d.ts.map +1 -0
  262. package/dist/ee/server/src/register.d.ts +6 -0
  263. package/dist/ee/server/src/register.d.ts.map +1 -0
  264. package/dist/ee/server/src/routes/index.d.ts +47 -0
  265. package/dist/ee/server/src/routes/index.d.ts.map +1 -0
  266. package/dist/ee/server/src/routes/license-limit.d.ts +18 -0
  267. package/dist/ee/server/src/routes/license-limit.d.ts.map +1 -0
  268. package/dist/ee/server/src/routes/sso.d.ts +29 -0
  269. package/dist/ee/server/src/routes/sso.d.ts.map +1 -0
  270. package/dist/ee/server/src/routes/utils.d.ts +3 -0
  271. package/dist/ee/server/src/routes/utils.d.ts.map +1 -0
  272. package/dist/ee/server/src/services/auth.d.ts +6 -0
  273. package/dist/ee/server/src/services/auth.d.ts.map +1 -0
  274. package/dist/ee/server/src/services/index.d.ts +39 -0
  275. package/dist/ee/server/src/services/index.d.ts.map +1 -0
  276. package/dist/ee/server/src/services/metrics.d.ts +8 -0
  277. package/dist/ee/server/src/services/metrics.d.ts.map +1 -0
  278. package/dist/ee/server/src/services/passport/provider-registry.d.ts +4 -0
  279. package/dist/ee/server/src/services/passport/provider-registry.d.ts.map +1 -0
  280. package/dist/ee/server/src/services/passport/sso.d.ts +19 -0
  281. package/dist/ee/server/src/services/passport/sso.d.ts.map +1 -0
  282. package/dist/ee/server/src/services/passport.d.ts +13 -0
  283. package/dist/ee/server/src/services/passport.d.ts.map +1 -0
  284. package/dist/ee/server/src/services/role.d.ts +5 -0
  285. package/dist/ee/server/src/services/role.d.ts.map +1 -0
  286. package/dist/ee/server/src/services/seat-enforcement.d.ts +6 -0
  287. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -0
  288. package/dist/ee/server/src/services/user.d.ts +10 -0
  289. package/dist/ee/server/src/services/user.d.ts.map +1 -0
  290. package/dist/ee/server/src/utils/index.d.ts +11 -0
  291. package/dist/ee/server/src/utils/index.d.ts.map +1 -0
  292. package/dist/ee/server/src/utils/persisted-tables.d.ts +42 -0
  293. package/dist/ee/server/src/utils/persisted-tables.d.ts.map +1 -0
  294. package/dist/ee/server/src/utils/sso-lock.d.ts +6 -0
  295. package/dist/ee/server/src/utils/sso-lock.d.ts.map +1 -0
  296. package/dist/ee/server/src/validation/authentication.d.ts +15 -0
  297. package/dist/ee/server/src/validation/authentication.d.ts.map +1 -0
  298. package/dist/ee/server/src/validation/role.d.ts +21 -0
  299. package/dist/ee/server/src/validation/role.d.ts.map +1 -0
  300. package/dist/ee/server/src/validation/user.d.ts +19 -0
  301. package/dist/ee/server/src/validation/user.d.ts.map +1 -0
  302. package/dist/package.json.d.ts +11 -10
  303. package/dist/server/index.js +1897 -538
  304. package/dist/server/index.js.map +1 -1
  305. package/dist/server/index.mjs +1693 -333
  306. package/dist/server/index.mjs.map +1 -1
  307. package/dist/server/src/domain/action/provider.d.ts +1 -1
  308. package/dist/server/src/domain/condition/provider.d.ts +3 -1
  309. package/dist/server/src/domain/condition/provider.d.ts.map +1 -1
  310. package/dist/server/src/index.d.ts +738 -10
  311. package/dist/server/src/index.d.ts.map +1 -1
  312. package/dist/server/src/services/metrics.d.ts.map +1 -1
  313. package/dist/server/src/services/permission.d.ts +4 -2
  314. package/dist/server/src/services/permission.d.ts.map +1 -1
  315. package/dist/shared/contracts/admin.d.ts +1 -0
  316. package/dist/shared/contracts/admin.d.ts.map +1 -1
  317. package/dist/shared/contracts/user.d.ts +1 -1
  318. package/dist/shared/contracts/user.d.ts.map +1 -1
  319. package/package.json +18 -17
  320. package/dist/admin/AuthenticatedLayout-06fn7qrH.mjs.map +0 -1
  321. package/dist/admin/AuthenticatedLayout-eKDwvUFO.js.map +0 -1
  322. package/dist/admin/ContentBox-3MRTNw0X.js +0 -43
  323. package/dist/admin/ContentBox-3MRTNw0X.js.map +0 -1
  324. package/dist/admin/ContentBox-9LBDzws0.mjs +0 -41
  325. package/dist/admin/ContentBox-9LBDzws0.mjs.map +0 -1
  326. package/dist/admin/CreatePage-bdWb1wg4.mjs.map +0 -1
  327. package/dist/admin/CreatePage-t5HQUOqJ.js.map +0 -1
  328. package/dist/admin/EditPage-A7-BewPd.mjs.map +0 -1
  329. package/dist/admin/EditPage-Lw36XG9G.js.map +0 -1
  330. package/dist/admin/EditPage-cWJ8V1BK.mjs.map +0 -1
  331. package/dist/admin/EditPage-pTQCDncU.js.map +0 -1
  332. package/dist/admin/EditView-HygMdUSf.mjs.map +0 -1
  333. package/dist/admin/EditView-KzdDTSO-.js.map +0 -1
  334. package/dist/admin/HomePage-dyDldozB.mjs.map +0 -1
  335. package/dist/admin/HomePage-ywYHZHMa.js.map +0 -1
  336. package/dist/admin/InstalledPluginsPage-3OSkplVn.mjs.map +0 -1
  337. package/dist/admin/InstalledPluginsPage-JkruwT2d.js.map +0 -1
  338. package/dist/admin/ListPage-DHUp0PDw.js.map +0 -1
  339. package/dist/admin/ListPage-hNIbvh17.mjs.map +0 -1
  340. package/dist/admin/MarketplacePage-41CstG0b.mjs.map +0 -1
  341. package/dist/admin/MarketplacePage-uyOTT12t.js.map +0 -1
  342. package/dist/admin/ProfilePage-wxZFen3W.js.map +0 -1
  343. package/dist/admin/ProfilePage-zwG0fq_e.mjs.map +0 -1
  344. package/dist/admin/SelectRoles-MoDtdDcM.js.map +0 -1
  345. package/dist/admin/SelectRoles-h_1srnVz.mjs.map +0 -1
  346. package/dist/admin/Table-CpbvaRQh.js.map +0 -1
  347. package/dist/admin/Table-EPKfcF5-.mjs.map +0 -1
  348. package/dist/admin/Theme-7W0we6BI.js.map +0 -1
  349. package/dist/admin/Theme-PrUuuGtN.mjs.map +0 -1
  350. package/dist/admin/index-Fu3hPmaj.mjs.map +0 -1
  351. package/dist/admin/index-w33_0vI-.js.map +0 -1
  352. package/dist/admin/src/pages/InstalledPluginsPage.d.ts +0 -3
  353. package/dist/admin/validation-4SWh9S5z.js.map +0 -1
  354. package/dist/admin/validation-IcNGA_ef.mjs.map +0 -1
  355. package/dist/ee/server/index.js +0 -2193
  356. package/dist/ee/server/index.js.map +0 -1
  357. package/dist/ee/server/index.mjs +0 -2188
  358. package/dist/ee/server/index.mjs.map +0 -1
  359. 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,30 @@ 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
+ sendProjectInformation: {
2308
+ task: () => sendUpdateProjectInformation$1(strapi2),
2309
+ options: "0 0 0 * * *"
2310
+ }
2308
2311
  });
2309
2312
  };
2310
- const metrics = {
2313
+ const metrics$1 = {
2311
2314
  sendDidInviteUser,
2312
2315
  sendDidUpdateRolePermissions,
2313
2316
  sendDidChangeInterfaceLanguage,
2314
- sendUpdateProjectInformation,
2315
- startCron
2317
+ sendUpdateProjectInformation: sendUpdateProjectInformation$1,
2318
+ startCron: startCron$1
2316
2319
  };
2317
2320
  const defaultJwtOptions = { expiresIn: "30d" };
2318
2321
  const getTokenOptions = () => {
@@ -2357,37 +2360,37 @@ const token$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
2357
2360
  decodeJwtToken,
2358
2361
  getTokenOptions
2359
2362
  }, 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(
2363
+ const registerProviderActionSchema = utils$2.yup.array().required().of(
2364
+ utils$2.yup.object().shape({
2365
+ uid: utils$2.yup.string().matches(
2363
2366
  /^[a-z]([a-z|.|-]+)[a-z]$/,
2364
2367
  (v) => `${v.path}: The id can only contain lowercase letters, dots and hyphens.`
2365
2368
  ).required(),
2366
- section: utils$1.yup.string().oneOf(["contentTypes", "plugins", "settings", "internal"]).required(),
2367
- pluginName: utils$1.yup.mixed().when("section", {
2369
+ section: utils$2.yup.string().oneOf(["contentTypes", "plugins", "settings", "internal"]).required(),
2370
+ pluginName: utils$2.yup.mixed().when("section", {
2368
2371
  is: "plugins",
2369
2372
  then: validators.isAPluginName.required(),
2370
2373
  otherwise: validators.isAPluginName
2371
2374
  }),
2372
- subjects: utils$1.yup.mixed().when("section", {
2375
+ subjects: utils$2.yup.mixed().when("section", {
2373
2376
  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')
2377
+ then: utils$2.yup.array().of(utils$2.yup.string()).required(),
2378
+ otherwise: utils$2.yup.mixed().oneOf([void 0], 'subjects should only be defined for the "contentTypes" section')
2376
2379
  }),
2377
- displayName: utils$1.yup.string().required(),
2378
- category: utils$1.yup.mixed().when("section", {
2380
+ displayName: utils$2.yup.string().required(),
2381
+ category: utils$2.yup.mixed().when("section", {
2379
2382
  is: "settings",
2380
- then: utils$1.yup.string().required(),
2381
- otherwise: utils$1.yup.mixed().test(
2383
+ then: utils$2.yup.string().required(),
2384
+ otherwise: utils$2.yup.mixed().test(
2382
2385
  "settingsCategory",
2383
2386
  'category should only be defined for the "settings" section',
2384
2387
  (cat) => cat === void 0
2385
2388
  )
2386
2389
  }),
2387
- subCategory: utils$1.yup.mixed().when("section", {
2390
+ subCategory: utils$2.yup.mixed().when("section", {
2388
2391
  is: (section) => ["settings", "plugins"].includes(section),
2389
- then: utils$1.yup.string(),
2390
- otherwise: utils$1.yup.mixed().test(
2392
+ then: utils$2.yup.string(),
2393
+ otherwise: utils$2.yup.mixed().test(
2391
2394
  "settingsSubCategory",
2392
2395
  'subCategory should only be defined for "plugins" and "settings" sections',
2393
2396
  (subCat) => {
@@ -2395,23 +2398,23 @@ const registerProviderActionSchema = utils$1.yup.array().required().of(
2395
2398
  }
2396
2399
  )
2397
2400
  }),
2398
- options: utils$1.yup.object({
2399
- applyToProperties: utils$1.yup.array().of(utils$1.yup.string())
2401
+ options: utils$2.yup.object({
2402
+ applyToProperties: utils$2.yup.array().of(utils$2.yup.string())
2400
2403
  }),
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()
2404
+ aliases: utils$2.yup.array(
2405
+ utils$2.yup.object({
2406
+ actionId: utils$2.yup.string(),
2407
+ subjects: utils$2.yup.array(utils$2.yup.string()).nullable()
2405
2408
  })
2406
2409
  ).nullable()
2407
2410
  }).noUnknown()
2408
2411
  );
2409
- const validateRegisterProviderAction = utils$1.validateYupSchemaSync(registerProviderActionSchema);
2410
- const { ApplicationError: ApplicationError$5 } = utils$1.errors;
2412
+ const validateRegisterProviderAction = utils$2.validateYupSchemaSync(registerProviderActionSchema);
2413
+ const { ApplicationError: ApplicationError$8 } = utils$2.errors;
2411
2414
  const createActionProvider = (options) => {
2412
- const provider = utils$1.providerFactory(options);
2415
+ const provider = utils$2.providerFactory(options);
2413
2416
  const actionHooks = {
2414
- appliesPropertyToSubject: utils$1.hooks.createAsyncParallelHook()
2417
+ appliesPropertyToSubject: utils$2.hooks.createAsyncParallelHook()
2415
2418
  };
2416
2419
  return {
2417
2420
  ...provider,
@@ -2437,7 +2440,7 @@ const createActionProvider = (options) => {
2437
2440
  async appliesToProperty(property, actionId, subject2) {
2438
2441
  const action2 = provider.get(actionId);
2439
2442
  if (!action2) {
2440
- throw new ApplicationError$5(`No action found with id "${actionId}"`);
2443
+ throw new ApplicationError$8(`No action found with id "${actionId}"`);
2441
2444
  }
2442
2445
  const appliesToAction = actionDomain.appliesToProperty(property, action2);
2443
2446
  if (!appliesToAction) {
@@ -2515,7 +2518,7 @@ const domain = {
2515
2518
  sanitizeConditionAttributes
2516
2519
  };
2517
2520
  const createConditionProvider = () => {
2518
- const provider = utils$1.providerFactory();
2521
+ const provider = utils$2.providerFactory();
2519
2522
  return {
2520
2523
  ...provider,
2521
2524
  async register(conditionAttributes) {
@@ -2535,14 +2538,14 @@ const createConditionProvider = () => {
2535
2538
  };
2536
2539
  const {
2537
2540
  visitors: { removePassword, expandWildcardPopulate }
2538
- } = utils$1.sanitize;
2541
+ } = utils$2.sanitize;
2539
2542
  const {
2540
2543
  constants: constants$1,
2541
2544
  isScalarAttribute: isScalarAttribute$1,
2542
2545
  getNonVisibleAttributes: getNonVisibleAttributes$1,
2543
2546
  getNonWritableAttributes,
2544
2547
  getWritableAttributes: getWritableAttributes$1
2545
- } = utils$1.contentTypes;
2548
+ } = utils$2.contentTypes;
2546
2549
  const {
2547
2550
  ID_ATTRIBUTE: ID_ATTRIBUTE$1,
2548
2551
  DOC_ID_ATTRIBUTE: DOC_ID_ATTRIBUTE$1,
@@ -2556,7 +2559,7 @@ const COMPONENT_FIELDS$1 = ["__component"];
2556
2559
  const STATIC_FIELDS$1 = [ID_ATTRIBUTE$1, DOC_ID_ATTRIBUTE$1];
2557
2560
  const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) => {
2558
2561
  const schema = strapi.getModel(model);
2559
- const { removeDisallowedFields } = utils$1.sanitize.visitors;
2562
+ const { removeDisallowedFields } = utils$2.sanitize.visitors;
2560
2563
  const ctx = {
2561
2564
  schema,
2562
2565
  getModel: strapi.getModel.bind(strapi)
@@ -2564,39 +2567,39 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2564
2567
  const createSanitizeQuery = (options = {}) => {
2565
2568
  const { fields } = options;
2566
2569
  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 }) => {
2570
+ const sanitizeFilters = utils$2.async.pipe(
2571
+ utils$2.traverse.traverseQueryFilters(removeDisallowedFields(permittedFields), ctx),
2572
+ utils$2.traverse.traverseQueryFilters(omitDisallowedAdminUserFields, ctx),
2573
+ utils$2.traverse.traverseQueryFilters(omitHiddenFields, ctx),
2574
+ utils$2.traverse.traverseQueryFilters(removePassword, ctx),
2575
+ utils$2.traverse.traverseQueryFilters(({ key, value }, { remove }) => {
2573
2576
  if (fp.isObject(value) && fp.isEmpty(value)) {
2574
2577
  remove(key);
2575
2578
  }
2576
2579
  }, ctx)
2577
2580
  );
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 }) => {
2581
+ const sanitizeSort = utils$2.async.pipe(
2582
+ utils$2.traverse.traverseQuerySort(removeDisallowedFields(permittedFields), ctx),
2583
+ utils$2.traverse.traverseQuerySort(omitDisallowedAdminUserFields, ctx),
2584
+ utils$2.traverse.traverseQuerySort(omitHiddenFields, ctx),
2585
+ utils$2.traverse.traverseQuerySort(removePassword, ctx),
2586
+ utils$2.traverse.traverseQuerySort(({ key, attribute, value }, { remove }) => {
2584
2587
  if (!isScalarAttribute$1(attribute) && fp.isEmpty(value)) {
2585
2588
  remove(key);
2586
2589
  }
2587
2590
  }, ctx)
2588
2591
  );
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)
2592
+ const sanitizePopulate = utils$2.async.pipe(
2593
+ utils$2.traverse.traverseQueryPopulate(expandWildcardPopulate, ctx),
2594
+ utils$2.traverse.traverseQueryPopulate(removeDisallowedFields(permittedFields), ctx),
2595
+ utils$2.traverse.traverseQueryPopulate(omitDisallowedAdminUserFields, ctx),
2596
+ utils$2.traverse.traverseQueryPopulate(omitHiddenFields, ctx),
2597
+ utils$2.traverse.traverseQueryPopulate(removePassword, ctx)
2595
2598
  );
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)
2599
+ const sanitizeFields = utils$2.async.pipe(
2600
+ utils$2.traverse.traverseQueryFields(removeDisallowedFields(permittedFields), ctx),
2601
+ utils$2.traverse.traverseQueryFields(omitHiddenFields, ctx),
2602
+ utils$2.traverse.traverseQueryFields(removePassword, ctx)
2600
2603
  );
2601
2604
  return async (query) => {
2602
2605
  const sanitizedQuery = fp.cloneDeep(query);
@@ -2618,15 +2621,15 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2618
2621
  const createSanitizeOutput = (options = {}) => {
2619
2622
  const { fields } = options;
2620
2623
  const permittedFields = fields.shouldIncludeAll ? null : getOutputFields(fields.permitted);
2621
- return utils$1.async.pipe(
2624
+ return utils$2.async.pipe(
2622
2625
  // Remove fields hidden from the admin
2623
- utils$1.traverseEntity(omitHiddenFields, ctx),
2626
+ utils$2.traverseEntity(omitHiddenFields, ctx),
2624
2627
  // Remove unallowed fields from admin::user relations
2625
- utils$1.traverseEntity(pickAllowedAdminUserFields, ctx),
2628
+ utils$2.traverseEntity(pickAllowedAdminUserFields, ctx),
2626
2629
  // Remove not allowed fields (RBAC)
2627
- utils$1.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2630
+ utils$2.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2628
2631
  // Remove all fields of type 'password'
2629
- utils$1.sanitize.sanitizers.sanitizePasswords({
2632
+ utils$2.sanitize.sanitizers.sanitizePasswords({
2630
2633
  schema,
2631
2634
  getModel(uid) {
2632
2635
  return strapi.getModel(uid);
@@ -2637,11 +2640,11 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2637
2640
  const createSanitizeInput = (options = {}) => {
2638
2641
  const { fields } = options;
2639
2642
  const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
2640
- return utils$1.async.pipe(
2643
+ return utils$2.async.pipe(
2641
2644
  // Remove fields hidden from the admin
2642
- utils$1.traverseEntity(omitHiddenFields, ctx),
2645
+ utils$2.traverseEntity(omitHiddenFields, ctx),
2643
2646
  // Remove not allowed fields (RBAC)
2644
- utils$1.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2647
+ utils$2.traverseEntity(removeDisallowedFields(permittedFields), ctx),
2645
2648
  // Remove roles from createdBy & updatedBy fields
2646
2649
  omitCreatorRoles
2647
2650
  );
@@ -2742,9 +2745,9 @@ const createSanitizeHelpers = ({ action: action2, ability: ability$1, model }) =
2742
2745
  sanitizeQuery: wrapSanitize(createSanitizeQuery)
2743
2746
  };
2744
2747
  };
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;
2748
+ const { ValidationError: ValidationError$5 } = utils$2.errors;
2749
+ const { throwPassword, throwDisallowedFields } = utils$2.validate.visitors;
2750
+ const { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } = utils$2.contentTypes;
2748
2751
  const {
2749
2752
  ID_ATTRIBUTE,
2750
2753
  DOC_ID_ATTRIBUTE,
@@ -2758,7 +2761,7 @@ const COMPONENT_FIELDS = ["__component"];
2758
2761
  const STATIC_FIELDS = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];
2759
2762
  const throwInvalidKey = ({ key, path: path2 }) => {
2760
2763
  const msg = path2 && path2 !== key ? `Invalid key ${key} at ${path2}` : `Invalid key ${key}`;
2761
- throw new ValidationError$3(msg);
2764
+ throw new ValidationError$5(msg);
2762
2765
  };
2763
2766
  const createValidateHelpers = ({ action: action2, ability: ability$1, model }) => {
2764
2767
  const schema = strapi.getModel(model);
@@ -2769,35 +2772,35 @@ const createValidateHelpers = ({ action: action2, ability: ability$1, model }) =
2769
2772
  const createValidateQuery = (options = {}) => {
2770
2773
  const { fields } = options;
2771
2774
  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 }) => {
2775
+ const validateFilters = utils$2.async.pipe(
2776
+ utils$2.traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),
2777
+ utils$2.traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),
2778
+ utils$2.traverse.traverseQueryFilters(throwPassword, ctx),
2779
+ utils$2.traverse.traverseQueryFilters(({ key, value, path: path2 }) => {
2777
2780
  if (fp.isObject(value) && fp.isEmpty(value)) {
2778
2781
  throwInvalidKey({ key, path: path2.attribute });
2779
2782
  }
2780
2783
  }, ctx)
2781
2784
  );
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 }) => {
2785
+ const validateSort = utils$2.async.pipe(
2786
+ utils$2.traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),
2787
+ utils$2.traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),
2788
+ utils$2.traverse.traverseQuerySort(throwPassword, ctx),
2789
+ utils$2.traverse.traverseQuerySort(({ key, attribute, value, path: path2 }) => {
2787
2790
  if (!isScalarAttribute(attribute) && fp.isEmpty(value)) {
2788
2791
  throwInvalidKey({ key, path: path2.attribute });
2789
2792
  }
2790
2793
  }, ctx)
2791
2794
  );
2792
- const validateFields = utils$1.async.pipe(
2793
- utils$1.traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),
2794
- utils$1.traverse.traverseQueryFields(throwPassword, ctx)
2795
+ const validateFields = utils$2.async.pipe(
2796
+ utils$2.traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),
2797
+ utils$2.traverse.traverseQueryFields(throwPassword, ctx)
2795
2798
  );
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)
2799
+ const validatePopulate = utils$2.async.pipe(
2800
+ utils$2.traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),
2801
+ utils$2.traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),
2802
+ utils$2.traverse.traverseQueryPopulate(throwHiddenFields, ctx),
2803
+ utils$2.traverse.traverseQueryPopulate(throwPassword, ctx)
2801
2804
  );
2802
2805
  return async (query) => {
2803
2806
  if (query.filters) {
@@ -2818,11 +2821,11 @@ const createValidateHelpers = ({ action: action2, ability: ability$1, model }) =
2818
2821
  const createValidateInput = (options = {}) => {
2819
2822
  const { fields } = options;
2820
2823
  const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
2821
- return utils$1.async.pipe(
2824
+ return utils$2.async.pipe(
2822
2825
  // Remove fields hidden from the admin
2823
- utils$1.traverseEntity(throwHiddenFields, ctx),
2826
+ utils$2.traverseEntity(throwHiddenFields, ctx),
2824
2827
  // Remove not allowed fields (RBAC)
2825
- utils$1.traverseEntity(throwDisallowedFields(permittedFields), ctx),
2828
+ utils$2.traverseEntity(throwDisallowedFields(permittedFields), ctx),
2826
2829
  // Remove roles from createdBy & updatedBy fields
2827
2830
  omitCreatorRoles
2828
2831
  );
@@ -2943,7 +2946,7 @@ const unwrapDeep = (obj) => {
2943
2946
  {}
2944
2947
  );
2945
2948
  };
2946
- const index$4 = ({ ability: ability$1, action: action2, model }) => ({
2949
+ const index = ({ ability: ability$1, action: action2, model }) => ({
2947
2950
  ability: ability$1,
2948
2951
  action: action2,
2949
2952
  model,
@@ -3016,7 +3019,7 @@ const createPermissionEngine = (params) => {
3016
3019
  * @param user
3017
3020
  */
3018
3021
  async generateUserAbility(user2) {
3019
- const permissions2 = await getService("permission").findUserPermissions(user2);
3022
+ const permissions2 = await getService$1("permission").findUserPermissions(user2);
3020
3023
  return engine2.generateAbility(permissions2, user2);
3021
3024
  },
3022
3025
  /**
@@ -3031,8 +3034,8 @@ const emptyObjectFactory = () => ({});
3031
3034
  const createSection = ({ initialStateFactory = emptyObjectFactory, handlers = [], matchers = [] } = {}) => {
3032
3035
  const state = {
3033
3036
  hooks: {
3034
- handlers: utils$1.hooks.createAsyncSeriesHook(),
3035
- matchers: utils$1.hooks.createAsyncParallelHook()
3037
+ handlers: utils$2.hooks.createAsyncSeriesHook(),
3038
+ matchers: utils$2.hooks.createAsyncParallelHook()
3036
3039
  }
3037
3040
  };
3038
3041
  handlers.forEach((handler) => state.hooks.handlers.register(handler));
@@ -3136,7 +3139,7 @@ const toSubjectTemplate = (ct) => ({
3136
3139
  label: ct.info.singularName,
3137
3140
  properties: []
3138
3141
  });
3139
- const { isVisibleAttribute } = utils$1.contentTypes;
3142
+ const { isVisibleAttribute } = utils$2.contentTypes;
3140
3143
  const settings = ({ action: action2, section }) => {
3141
3144
  const { category, subCategory, displayName, actionId } = action2;
3142
3145
  section.push({
@@ -3246,10 +3249,10 @@ const deleteByRolesIds = async (rolesIds) => {
3246
3249
  }
3247
3250
  });
3248
3251
  if (permissionsToDelete.length > 0) {
3249
- await deleteByIds(permissionsToDelete.map(fp.prop("id")));
3252
+ await deleteByIds$1(permissionsToDelete.map(fp.prop("id")));
3250
3253
  }
3251
3254
  };
3252
- const deleteByIds = async (ids) => {
3255
+ const deleteByIds$1 = async (ids) => {
3253
3256
  const result = [];
3254
3257
  for (const id of ids) {
3255
3258
  const queryResult = await strapi.db.query("admin::permission").delete({ where: { id } });
@@ -3281,7 +3284,7 @@ const findUserPermissions = async (user2) => {
3281
3284
  return findMany({ where: { role: { users: { id: user2.id } } } });
3282
3285
  };
3283
3286
  const filterPermissionsToRemove = async (permissions2) => {
3284
- const { actionProvider: actionProvider2 } = getService("permission");
3287
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3285
3288
  const permissionsToRemove = [];
3286
3289
  for (const permission2 of permissions2) {
3287
3290
  const { subjects, options = {} } = actionProvider2.get(permission2.action) || {};
@@ -3307,7 +3310,7 @@ const filterPermissionsToRemove = async (permissions2) => {
3307
3310
  };
3308
3311
  const cleanPermissionsInDatabase = async () => {
3309
3312
  const pageSize = 200;
3310
- const contentTypeService = getService("content-type");
3313
+ const contentTypeService = getService$1("content-type");
3311
3314
  const total = await strapi.db.query("admin::permission").count();
3312
3315
  const pageCount = Math.ceil(total / pageSize);
3313
3316
  for (let page = 0; page < pageCount; page += 1) {
@@ -3332,7 +3335,7 @@ const cleanPermissionsInDatabase = async () => {
3332
3335
  return update$2({ id: permission2.id }, permission2);
3333
3336
  };
3334
3337
  await Promise.all([
3335
- deleteByIds(permissionsIdToRemove),
3338
+ deleteByIds$1(permissionsIdToRemove),
3336
3339
  pmap__default.default(permissionsNeedingToBeUpdated, updatePromiseProvider, {
3337
3340
  concurrency: 100,
3338
3341
  stopOnError: true
@@ -3353,8 +3356,8 @@ const permission$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.define
3353
3356
  cleanPermissionsInDatabase,
3354
3357
  conditionProvider,
3355
3358
  createMany,
3356
- createPermissionsManager: index$4,
3357
- deleteByIds,
3359
+ createPermissionsManager: index,
3360
+ deleteByIds: deleteByIds$1,
3358
3361
  deleteByRolesIds,
3359
3362
  engine: engine$1,
3360
3363
  findMany,
@@ -3372,7 +3375,7 @@ const getNestedFields = (model, {
3372
3375
  if (nestingLevel === 0) {
3373
3376
  return prefix ? [prefix] : [];
3374
3377
  }
3375
- const nonAuthorizableFields = utils$1.contentTypes.getNonVisibleAttributes(model);
3378
+ const nonAuthorizableFields = utils$2.contentTypes.getNonVisibleAttributes(model);
3376
3379
  return ___namespace.default.reduce(
3377
3380
  model.attributes,
3378
3381
  (fields, attr, key) => {
@@ -3409,7 +3412,7 @@ const getNestedFieldsWithIntermediate = (model, { prefix = "", nestingLevel = 15
3409
3412
  if (nestingLevel === 0) {
3410
3413
  return [];
3411
3414
  }
3412
- const nonAuthorizableFields = utils$1.contentTypes.getNonVisibleAttributes(model);
3415
+ const nonAuthorizableFields = utils$2.contentTypes.getNonVisibleAttributes(model);
3413
3416
  return ___namespace.default.reduce(
3414
3417
  model.attributes,
3415
3418
  (fields, attr, key) => {
@@ -3451,7 +3454,7 @@ const getPermissionsWithNestedFields = (actions2, { nestingLevel, restrictedSubj
3451
3454
  }, []);
3452
3455
  };
3453
3456
  const cleanPermissionFields = (permissions2, { nestingLevel } = {}) => {
3454
- const { actionProvider: actionProvider2 } = getService("permission");
3457
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3455
3458
  return permissions2.map((permission2) => {
3456
3459
  const {
3457
3460
  action: actionId,
@@ -3490,7 +3493,7 @@ const contentType = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
3490
3493
  getPermissionsWithNestedFields
3491
3494
  }, Symbol.toStringTag, { value: "Module" }));
3492
3495
  const isValidCondition = (condition2) => {
3493
- const { conditionProvider: conditionProvider2 } = getService("permission");
3496
+ const { conditionProvider: conditionProvider2 } = getService$1("permission");
3494
3497
  return fp.isString(condition2) && conditionProvider2.has(condition2);
3495
3498
  };
3496
3499
  const condition = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -3498,11 +3501,11 @@ const condition = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePro
3498
3501
  isValidCondition
3499
3502
  }, Symbol.toStringTag, { value: "Module" }));
3500
3503
  const { AUTHOR_CODE, PUBLISH_ACTION } = constants$3;
3501
- const { NotFoundError: NotFoundError$2 } = utils$1.errors;
3504
+ const { NotFoundError: NotFoundError$2 } = utils$2.errors;
3502
3505
  const getAllowedActionsForRole = async (roleId) => {
3503
- const { actionProvider: actionProvider2 } = getService("permission");
3506
+ const { actionProvider: actionProvider2 } = getService$1("permission");
3504
3507
  if (!fp.isNil(roleId)) {
3505
- const role2 = await getService("role").findOne({ id: roleId });
3508
+ const role2 = await getService$1("role").findOne({ id: roleId });
3506
3509
  if (!role2) {
3507
3510
  throw new NotFoundError$2("role.notFound");
3508
3511
  }
@@ -3516,7 +3519,7 @@ const action = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3516
3519
  __proto__: null,
3517
3520
  getAllowedActionsForRole
3518
3521
  }, Symbol.toStringTag, { value: "Module" }));
3519
- const { ValidationError: ValidationError$2, NotFoundError: NotFoundError$1 } = utils$1.errors;
3522
+ const { ValidationError: ValidationError$4, NotFoundError: NotFoundError$1 } = utils$2.errors;
3520
3523
  const SELECT_FIELDS$1 = [
3521
3524
  "id",
3522
3525
  "name",
@@ -3531,16 +3534,16 @@ const SELECT_FIELDS$1 = [
3531
3534
  const POPULATE_FIELDS$1 = ["permissions"];
3532
3535
  const assertCustomTokenPermissionsValidity = (type, permissions2) => {
3533
3536
  if (type !== constants$3.API_TOKEN_TYPE.CUSTOM && !fp.isEmpty(permissions2)) {
3534
- throw new ValidationError$2("Non-custom tokens should not reference permissions");
3537
+ throw new ValidationError$4("Non-custom tokens should not reference permissions");
3535
3538
  }
3536
3539
  if (type === constants$3.API_TOKEN_TYPE.CUSTOM && !fp.isArray(permissions2)) {
3537
- throw new ValidationError$2("Missing permissions attribute for custom token");
3540
+ throw new ValidationError$4("Missing permissions attribute for custom token");
3538
3541
  }
3539
3542
  if (type === constants$3.API_TOKEN_TYPE.CUSTOM) {
3540
3543
  const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
3541
3544
  const invalidPermissions = fp.difference(permissions2, validPermissions);
3542
3545
  if (!fp.isEmpty(invalidPermissions)) {
3543
- throw new ValidationError$2(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3546
+ throw new ValidationError$4(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3544
3547
  }
3545
3548
  }
3546
3549
  };
@@ -3555,7 +3558,7 @@ const isValidLifespan$1 = (lifespan) => {
3555
3558
  };
3556
3559
  const assertValidLifespan$1 = (lifespan) => {
3557
3560
  if (!isValidLifespan$1(lifespan)) {
3558
- throw new ValidationError$2(
3561
+ throw new ValidationError$4(
3559
3562
  `lifespan must be one of the following values:
3560
3563
  ${Object.values(constants$3.API_TOKEN_LIFESPANS).join(", ")}`
3561
3564
  );
@@ -3590,7 +3593,7 @@ const hash$1 = (accessKey) => {
3590
3593
  const getExpirationFields$1 = (lifespan) => {
3591
3594
  const isValidNumber = fp.isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
3592
3595
  if (!isValidNumber && !fp.isNil(lifespan)) {
3593
- throw new ValidationError$2("lifespan must be a positive number or null");
3596
+ throw new ValidationError$4("lifespan must be a positive number or null");
3594
3597
  }
3595
3598
  return {
3596
3599
  lifespan: lifespan || null,
@@ -3742,8 +3745,8 @@ const apiToken$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
3742
3745
  }, Symbol.toStringTag, { value: "Module" }));
3743
3746
  const DEFAULT_TRANSFER_ACTIONS = ["push", "pull"];
3744
3747
  const providers = {
3745
- action: utils$1.providerFactory(),
3746
- condition: utils$1.providerFactory()
3748
+ action: utils$2.providerFactory(),
3749
+ condition: utils$2.providerFactory()
3747
3750
  };
3748
3751
  DEFAULT_TRANSFER_ACTIONS.forEach((action2) => {
3749
3752
  providers.action.register(action2, { action: action2 });
@@ -3754,7 +3757,7 @@ const permission$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.define
3754
3757
  engine,
3755
3758
  providers
3756
3759
  }, Symbol.toStringTag, { value: "Module" }));
3757
- const { ValidationError: ValidationError$1, NotFoundError } = utils$1.errors;
3760
+ const { ValidationError: ValidationError$3, NotFoundError } = utils$2.errors;
3758
3761
  const TRANSFER_TOKEN_UID = "admin::transfer-token";
3759
3762
  const TRANSFER_TOKEN_PERMISSION_UID = "admin::transfer-token-permission";
3760
3763
  const SELECT_FIELDS = [
@@ -3905,7 +3908,7 @@ const regenerate = async (id) => {
3905
3908
  const getExpirationFields = (lifespan) => {
3906
3909
  const isValidNumber = fp.isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
3907
3910
  if (!isValidNumber && !fp.isNil(lifespan)) {
3908
- throw new ValidationError$1("lifespan must be a positive number or null");
3911
+ throw new ValidationError$3("lifespan must be a positive number or null");
3909
3912
  }
3910
3913
  return {
3911
3914
  lifespan: lifespan || null,
@@ -3913,14 +3916,14 @@ const getExpirationFields = (lifespan) => {
3913
3916
  };
3914
3917
  };
3915
3918
  const hash = (accessKey) => {
3916
- const { hasValidTokenSalt: hasValidTokenSalt2 } = getService("transfer").utils;
3919
+ const { hasValidTokenSalt: hasValidTokenSalt2 } = getService$1("transfer").utils;
3917
3920
  if (!hasValidTokenSalt2()) {
3918
3921
  throw new TypeError("Required token salt is not defined");
3919
3922
  }
3920
3923
  return crypto__default.default.createHmac("sha512", strapi.config.get("admin.transfer.token.salt")).update(accessKey).digest("hex");
3921
3924
  };
3922
3925
  const checkSaltIsDefined = () => {
3923
- const { hasValidTokenSalt: hasValidTokenSalt2 } = getService("transfer").utils;
3926
+ const { hasValidTokenSalt: hasValidTokenSalt2 } = getService$1("transfer").utils;
3924
3927
  if (!strapi.config.get("server.transfer.remote.enabled")) {
3925
3928
  return;
3926
3929
  }
@@ -3946,7 +3949,7 @@ const assertTokenPermissionsValidity = (attributes) => {
3946
3949
  const validPermissions = permissionService.providers.action.keys();
3947
3950
  const invalidPermissions = fp.difference(attributes.permissions, validPermissions);
3948
3951
  if (!fp.isEmpty(invalidPermissions)) {
3949
- throw new ValidationError$1(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3952
+ throw new ValidationError$3(`Unknown permissions provided: ${invalidPermissions.join(", ")}`);
3950
3953
  }
3951
3954
  };
3952
3955
  const isValidLifespan = (lifespan) => {
@@ -3960,7 +3963,7 @@ const isValidLifespan = (lifespan) => {
3960
3963
  };
3961
3964
  const assertValidLifespan = (lifespan) => {
3962
3965
  if (!isValidLifespan(lifespan)) {
3963
- throw new ValidationError$1(
3966
+ throw new ValidationError$3(
3964
3967
  `lifespan must be one of the following values:
3965
3968
  ${Object.values(constants$3.TRANSFER_TOKEN_LIFESPANS).join(", ")}`
3966
3969
  );
@@ -3986,15 +3989,15 @@ const hasValidTokenSalt = () => {
3986
3989
  return typeof salt === "string" && salt.length > 0;
3987
3990
  };
3988
3991
  const isRemoteTransferEnabled = () => {
3989
- const { utils: utils2 } = getService("transfer");
3990
- if (utils$1.env.bool("STRAPI_DISABLE_REMOTE_DATA_TRANSFER") !== void 0) {
3992
+ const { utils: utils2 } = getService$1("transfer");
3993
+ if (utils$2.env.bool("STRAPI_DISABLE_REMOTE_DATA_TRANSFER") !== void 0) {
3991
3994
  strapi.log.warn(
3992
3995
  "STRAPI_DISABLE_REMOTE_DATA_TRANSFER is no longer supported. Instead, set transfer.remote.enabled to false in your server configuration"
3993
3996
  );
3994
3997
  }
3995
3998
  return utils2.hasValidTokenSalt() && strapi.config.get("server.transfer.remote.enabled");
3996
3999
  };
3997
- const utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4000
+ const utils$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3998
4001
  __proto__: null,
3999
4002
  hasValidTokenSalt,
4000
4003
  isRemoteTransferEnabled
@@ -4003,7 +4006,7 @@ const transfer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
4003
4006
  __proto__: null,
4004
4007
  permission: permission$1,
4005
4008
  token: token$2,
4006
- utils
4009
+ utils: utils$1
4007
4010
  }, Symbol.toStringTag, { value: "Module" }));
4008
4011
  const PROJECT_SETTINGS_FILE_INPUTS = ["menuLogo", "authLogo"];
4009
4012
  const parseFilesData = async (files) => {
@@ -4124,14 +4127,14 @@ const projectSettings = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
4124
4127
  parseFilesData,
4125
4128
  updateProjectSettings: updateProjectSettings$1
4126
4129
  }, Symbol.toStringTag, { value: "Module" }));
4127
- const index$3 = {
4128
- auth,
4129
- user: user$1,
4130
- role: role$1,
4131
- passport,
4130
+ const services$1 = {
4131
+ auth: auth$1,
4132
+ user: user$3,
4133
+ role: role$3,
4134
+ passport: passport$1,
4132
4135
  token: token$3,
4133
4136
  permission: permission$2,
4134
- metrics,
4137
+ metrics: metrics$1,
4135
4138
  "content-type": contentType,
4136
4139
  constants: constants$4,
4137
4140
  condition,
@@ -4164,13 +4167,13 @@ const updateProjectSettingsImagesDimensions = zod.z.object({
4164
4167
  menuLogo: logoDimensions.nullish(),
4165
4168
  authLogo: logoDimensions.nullish()
4166
4169
  }).strict();
4167
- const validateUpdateProjectSettings = utils$1.validateZod(updateProjectSettings);
4168
- const validateUpdateProjectSettingsFiles = utils$1.validateZod(updateProjectSettingsFiles);
4169
- const validateUpdateProjectSettingsImagesDimensions = utils$1.validateZod(
4170
+ const validateUpdateProjectSettings = utils$2.validateZod(updateProjectSettings);
4171
+ const validateUpdateProjectSettingsFiles = utils$2.validateZod(updateProjectSettingsFiles);
4172
+ const validateUpdateProjectSettingsImagesDimensions = utils$2.validateZod(
4170
4173
  updateProjectSettingsImagesDimensions
4171
4174
  );
4172
4175
  const { isUsingTypeScript } = tsUtils__default.default;
4173
- const admin = {
4176
+ const admin$3 = {
4174
4177
  // TODO very temporary to check the switch ee/ce
4175
4178
  // When removing this we need to update the /admin/src/index.js file
4176
4179
  // whe,re we set the strapi.window.isEE value
@@ -4182,8 +4185,8 @@ const admin = {
4182
4185
  },
4183
4186
  async init() {
4184
4187
  let uuid = strapi.config.get("uuid", false);
4185
- const hasAdmin = await getService("user").exists();
4186
- const { menuLogo, authLogo } = await getService("project-settings").getProjectSettings();
4188
+ const hasAdmin = await getService$1("user").exists();
4189
+ const { menuLogo, authLogo } = await getService$1("project-settings").getProjectSettings();
4187
4190
  const telemetryDisabled = strapi.config.get(
4188
4191
  "packageJsonStrapi.telemetryDisabled",
4189
4192
  null
@@ -4201,7 +4204,7 @@ const admin = {
4201
4204
  };
4202
4205
  },
4203
4206
  async getProjectSettings() {
4204
- return getService(
4207
+ return getService$1(
4205
4208
  "project-settings"
4206
4209
  ).getProjectSettings();
4207
4210
  },
@@ -4209,7 +4212,7 @@ const admin = {
4209
4212
  const {
4210
4213
  request: { files, body }
4211
4214
  } = ctx;
4212
- const projectSettingsService = getService("project-settings");
4215
+ const projectSettingsService = getService$1("project-settings");
4213
4216
  await validateUpdateProjectSettings(body);
4214
4217
  await validateUpdateProjectSettingsFiles(files);
4215
4218
  const formatedFiles = await projectSettingsService.parseFilesData(files);
@@ -4228,7 +4231,7 @@ const admin = {
4228
4231
  const useTypescriptOnAdmin = await isUsingTypeScript(
4229
4232
  path__default.default.join(strapi.dirs.app.root, "src", "admin")
4230
4233
  );
4231
- const isHostedOnStrapiCloud = utils$1.env("STRAPI_HOSTING", null) === "strapi.cloud";
4234
+ const isHostedOnStrapiCloud = utils$2.env("STRAPI_HOSTING", null) === "strapi.cloud";
4232
4235
  const numberOfAllContentTypes = ___namespace.default.size(strapi.contentTypes);
4233
4236
  const numberOfComponents = ___namespace.default.size(strapi.components);
4234
4237
  const getNumberOfDynamicZones = () => {
@@ -4293,26 +4296,26 @@ const admin = {
4293
4296
  ctx.send({ plugins: plugins2 });
4294
4297
  }
4295
4298
  };
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()
4299
+ const apiTokenCreationSchema = utils$2.yup.object().shape({
4300
+ name: utils$2.yup.string().min(1).required(),
4301
+ description: utils$2.yup.string().optional(),
4302
+ type: utils$2.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).required(),
4303
+ permissions: utils$2.yup.array().of(utils$2.yup.string()).nullable(),
4304
+ lifespan: utils$2.yup.number().min(1).oneOf(Object.values(constants$3.API_TOKEN_LIFESPANS)).nullable()
4302
4305
  }).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()
4306
+ const apiTokenUpdateSchema = utils$2.yup.object().shape({
4307
+ name: utils$2.yup.string().min(1).notNull(),
4308
+ description: utils$2.yup.string().nullable(),
4309
+ type: utils$2.yup.string().oneOf(Object.values(constants$3.API_TOKEN_TYPE)).notNull(),
4310
+ permissions: utils$2.yup.array().of(utils$2.yup.string()).nullable()
4308
4311
  }).noUnknown().strict();
4309
- const validateApiTokenCreationInput = utils$1.validateYupSchema(apiTokenCreationSchema);
4310
- const validateApiTokenUpdateInput = utils$1.validateYupSchema(apiTokenUpdateSchema);
4311
- const { ApplicationError: ApplicationError$4 } = utils$1.errors;
4312
+ const validateApiTokenCreationInput = utils$2.validateYupSchema(apiTokenCreationSchema);
4313
+ const validateApiTokenUpdateInput = utils$2.validateYupSchema(apiTokenUpdateSchema);
4314
+ const { ApplicationError: ApplicationError$7 } = utils$2.errors;
4312
4315
  const apiToken$1 = {
4313
4316
  async create(ctx) {
4314
4317
  const { body } = ctx.request;
4315
- const apiTokenService = getService("api-token");
4318
+ const apiTokenService = getService$1("api-token");
4316
4319
  const attributes = {
4317
4320
  name: fp.trim(body.name),
4318
4321
  description: fp.trim(body.description),
@@ -4323,14 +4326,14 @@ const apiToken$1 = {
4323
4326
  await validateApiTokenCreationInput(attributes);
4324
4327
  const alreadyExists = await apiTokenService.exists({ name: attributes.name });
4325
4328
  if (alreadyExists) {
4326
- throw new ApplicationError$4("Name already taken");
4329
+ throw new ApplicationError$7("Name already taken");
4327
4330
  }
4328
4331
  const apiToken2 = await apiTokenService.create(attributes);
4329
4332
  ctx.created({ data: apiToken2 });
4330
4333
  },
4331
4334
  async regenerate(ctx) {
4332
4335
  const { id } = ctx.params;
4333
- const apiTokenService = getService("api-token");
4336
+ const apiTokenService = getService$1("api-token");
4334
4337
  const apiTokenExists = await apiTokenService.getById(id);
4335
4338
  if (!apiTokenExists) {
4336
4339
  ctx.notFound("API Token not found");
@@ -4340,19 +4343,19 @@ const apiToken$1 = {
4340
4343
  ctx.created({ data: accessToken });
4341
4344
  },
4342
4345
  async list(ctx) {
4343
- const apiTokenService = getService("api-token");
4346
+ const apiTokenService = getService$1("api-token");
4344
4347
  const apiTokens2 = await apiTokenService.list();
4345
4348
  ctx.send({ data: apiTokens2 });
4346
4349
  },
4347
4350
  async revoke(ctx) {
4348
4351
  const { id } = ctx.params;
4349
- const apiTokenService = getService("api-token");
4352
+ const apiTokenService = getService$1("api-token");
4350
4353
  const apiToken2 = await apiTokenService.revoke(id);
4351
4354
  ctx.deleted({ data: apiToken2 });
4352
4355
  },
4353
4356
  async get(ctx) {
4354
4357
  const { id } = ctx.params;
4355
- const apiTokenService = getService("api-token");
4358
+ const apiTokenService = getService$1("api-token");
4356
4359
  const apiToken2 = await apiTokenService.getById(id);
4357
4360
  if (!apiToken2) {
4358
4361
  ctx.notFound("API Token not found");
@@ -4363,7 +4366,7 @@ const apiToken$1 = {
4363
4366
  async update(ctx) {
4364
4367
  const { body } = ctx.request;
4365
4368
  const { id } = ctx.params;
4366
- const apiTokenService = getService("api-token");
4369
+ const apiTokenService = getService$1("api-token");
4367
4370
  const attributes = body;
4368
4371
  if (fp.has("name", attributes)) {
4369
4372
  attributes.name = fp.trim(body.name);
@@ -4378,57 +4381,62 @@ const apiToken$1 = {
4378
4381
  }
4379
4382
  if (fp.has("name", attributes)) {
4380
4383
  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");
4384
+ if (!!nameAlreadyTaken && !utils$2.strings.isEqual(nameAlreadyTaken.id, id)) {
4385
+ throw new ApplicationError$7("Name already taken");
4383
4386
  }
4384
4387
  }
4385
4388
  const apiToken2 = await apiTokenService.update(id, attributes);
4386
4389
  ctx.send({ data: apiToken2 });
4387
4390
  },
4388
4391
  async getLayout(ctx) {
4389
- const apiTokenService = getService("api-token");
4392
+ const apiTokenService = getService$1("api-token");
4390
4393
  const layout = await apiTokenService.getApiTokenLayout();
4391
4394
  ctx.send({ data: layout });
4392
4395
  }
4393
4396
  };
4394
- const userCreationSchema = utils$1.yup.object().shape({
4397
+ const userCreationSchema = utils$2.yup.object().shape({
4395
4398
  email: validators.email.required(),
4396
4399
  firstname: validators.firstname.required(),
4397
4400
  lastname: validators.lastname,
4398
4401
  roles: validators.roles.min(1),
4399
- preferedLanguage: utils$1.yup.string().nullable()
4402
+ preferedLanguage: utils$2.yup.string().nullable()
4400
4403
  }).noUnknown();
4401
- const profileUpdateSchema = utils$1.yup.object().shape({
4404
+ const profileUpdateSchema = utils$2.yup.object().shape({
4402
4405
  email: validators.email.notNull(),
4403
4406
  firstname: validators.firstname.notNull(),
4404
4407
  lastname: validators.lastname.nullable(),
4405
4408
  username: validators.username.nullable(),
4406
4409
  password: validators.password.notNull(),
4407
- currentPassword: utils$1.yup.string().when(
4410
+ currentPassword: utils$2.yup.string().when(
4408
4411
  "password",
4409
4412
  (password2, schema) => !fp.isUndefined(password2) ? schema.required() : schema
4410
4413
  ).notNull(),
4411
- preferedLanguage: utils$1.yup.string().nullable()
4414
+ preferedLanguage: utils$2.yup.string().nullable()
4412
4415
  }).noUnknown();
4413
- const userUpdateSchema = utils$1.yup.object().shape({
4416
+ const userUpdateSchema = utils$2.yup.object().shape({
4414
4417
  email: validators.email.notNull(),
4415
4418
  firstname: validators.firstname.notNull(),
4416
4419
  lastname: validators.lastname.nullable(),
4417
4420
  username: validators.username.nullable(),
4418
4421
  password: validators.password.notNull(),
4419
- isActive: utils$1.yup.bool().notNull(),
4422
+ isActive: utils$2.yup.bool().notNull(),
4420
4423
  roles: validators.roles.min(1).notNull()
4421
4424
  }).noUnknown();
4422
- const usersDeleteSchema = utils$1.yup.object().shape({
4423
- ids: utils$1.yup.array().of(utils$1.yup.strapiID()).min(1).required()
4425
+ const usersDeleteSchema = utils$2.yup.object().shape({
4426
+ ids: utils$2.yup.array().of(utils$2.yup.strapiID()).min(1).required()
4424
4427
  }).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);
4428
+ const validateUserCreationInput$1 = utils$2.validateYupSchema(userCreationSchema);
4429
+ const validateProfileUpdateInput = utils$2.validateYupSchema(profileUpdateSchema);
4430
+ const validateUserUpdateInput = utils$2.validateYupSchema(userUpdateSchema);
4431
+ const validateUsersDeleteInput = utils$2.validateYupSchema(usersDeleteSchema);
4432
+ const schemas = {
4433
+ userCreationSchema,
4434
+ usersDeleteSchema,
4435
+ userUpdateSchema
4436
+ };
4429
4437
  const authenticatedUser = {
4430
4438
  async getMe(ctx) {
4431
- const userInfo = getService("user").sanitizeUser(ctx.state.user);
4439
+ const userInfo = getService$1("user").sanitizeUser(ctx.state.user);
4432
4440
  ctx.body = {
4433
4441
  data: userInfo
4434
4442
  };
@@ -4436,8 +4444,8 @@ const authenticatedUser = {
4436
4444
  async updateMe(ctx) {
4437
4445
  const input = ctx.request.body;
4438
4446
  await validateProfileUpdateInput(input);
4439
- const userService = getService("user");
4440
- const authServer = getService("auth");
4447
+ const userService = getService$1("user");
4448
+ const authServer = getService$1("auth");
4441
4449
  const { currentPassword, ...userInfo } = input;
4442
4450
  if (currentPassword && userInfo.password) {
4443
4451
  const isValid = await authServer.validatePassword(currentPassword, ctx.state.user.password);
@@ -4453,7 +4461,7 @@ const authenticatedUser = {
4453
4461
  };
4454
4462
  },
4455
4463
  async getOwnPermissions(ctx) {
4456
- const { findUserPermissions: findUserPermissions2, sanitizePermission: sanitizePermission2 } = getService("permission");
4464
+ const { findUserPermissions: findUserPermissions2, sanitizePermission: sanitizePermission2 } = getService$1("permission");
4457
4465
  const { user: user2 } = ctx.state;
4458
4466
  const userPermissions = await findUserPermissions2(user2);
4459
4467
  ctx.body = {
@@ -4462,39 +4470,39 @@ const authenticatedUser = {
4462
4470
  };
4463
4471
  }
4464
4472
  };
4465
- const registrationSchema = utils$1.yup.object().shape({
4466
- registrationToken: utils$1.yup.string().required(),
4467
- userInfo: utils$1.yup.object().shape({
4473
+ const registrationSchema = utils$2.yup.object().shape({
4474
+ registrationToken: utils$2.yup.string().required(),
4475
+ userInfo: utils$2.yup.object().shape({
4468
4476
  firstname: validators.firstname.required(),
4469
4477
  lastname: validators.lastname.nullable(),
4470
4478
  password: validators.password.required()
4471
4479
  }).required().noUnknown()
4472
4480
  }).noUnknown();
4473
- const registrationInfoQuerySchema = utils$1.yup.object().shape({
4474
- registrationToken: utils$1.yup.string().required()
4481
+ const registrationInfoQuerySchema = utils$2.yup.object().shape({
4482
+ registrationToken: utils$2.yup.string().required()
4475
4483
  }).required().noUnknown();
4476
- const adminRegistrationSchema = utils$1.yup.object().shape({
4484
+ const adminRegistrationSchema = utils$2.yup.object().shape({
4477
4485
  email: validators.email.required(),
4478
4486
  firstname: validators.firstname.required(),
4479
4487
  lastname: validators.lastname.nullable(),
4480
4488
  password: validators.password.required()
4481
4489
  }).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({
4490
+ const validateRegistrationInput = utils$2.validateYupSchema(registrationSchema);
4491
+ const validateRegistrationInfoQuery = utils$2.validateYupSchema(registrationInfoQuerySchema);
4492
+ const validateAdminRegistrationInput = utils$2.validateYupSchema(adminRegistrationSchema);
4493
+ const forgotPasswordSchema = utils$2.yup.object().shape({
4486
4494
  email: validators.email.required()
4487
4495
  }).required().noUnknown();
4488
- const validateForgotPasswordInput = utils$1.validateYupSchema(forgotPasswordSchema);
4489
- const resetPasswordSchema = utils$1.yup.object().shape({
4490
- resetPasswordToken: utils$1.yup.string().required(),
4496
+ const validateForgotPasswordInput = utils$2.validateYupSchema(forgotPasswordSchema);
4497
+ const resetPasswordSchema = utils$2.yup.object().shape({
4498
+ resetPasswordToken: utils$2.yup.string().required(),
4491
4499
  password: validators.password.required()
4492
4500
  }).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 = {
4501
+ const validateResetPasswordInput = utils$2.validateYupSchema(resetPasswordSchema);
4502
+ const renewToken = utils$2.yup.object().shape({ token: utils$2.yup.string().required() }).required().noUnknown();
4503
+ const validateRenewTokenInput = utils$2.validateYupSchema(renewToken);
4504
+ const { ApplicationError: ApplicationError$6, ValidationError: ValidationError$2 } = utils$2.errors;
4505
+ const authentication$1 = {
4498
4506
  login: compose__default.default([
4499
4507
  (ctx, next) => {
4500
4508
  return passport__default.default.authenticate("local", { session: false }, (err, user2, info) => {
@@ -4510,11 +4518,11 @@ const authentication = {
4510
4518
  error: new Error(info.message),
4511
4519
  provider: "local"
4512
4520
  });
4513
- throw new ApplicationError$3(info.message);
4521
+ throw new ApplicationError$6(info.message);
4514
4522
  }
4515
4523
  const query = ctx.state;
4516
4524
  query.user = user2;
4517
- const sanitizedUser = getService("user").sanitizeUser(user2);
4525
+ const sanitizedUser = getService$1("user").sanitizeUser(user2);
4518
4526
  strapi.eventHub.emit("admin.auth.success", { user: sanitizedUser, provider: "local" });
4519
4527
  return next();
4520
4528
  })(ctx, next);
@@ -4523,8 +4531,8 @@ const authentication = {
4523
4531
  const { user: user2 } = ctx.state;
4524
4532
  ctx.body = {
4525
4533
  data: {
4526
- token: getService("token").createJwtToken(user2),
4527
- user: getService("user").sanitizeUser(ctx.state.user)
4534
+ token: getService$1("token").createJwtToken(user2),
4535
+ user: getService$1("user").sanitizeUser(ctx.state.user)
4528
4536
  // TODO: fetch more detailed info
4529
4537
  }
4530
4538
  };
@@ -4533,50 +4541,50 @@ const authentication = {
4533
4541
  async renewToken(ctx) {
4534
4542
  await validateRenewTokenInput(ctx.request.body);
4535
4543
  const { token: token2 } = ctx.request.body;
4536
- const { isValid, payload } = getService("token").decodeJwtToken(token2);
4544
+ const { isValid, payload } = getService$1("token").decodeJwtToken(token2);
4537
4545
  if (!isValid) {
4538
- throw new ValidationError("Invalid token");
4546
+ throw new ValidationError$2("Invalid token");
4539
4547
  }
4540
4548
  ctx.body = {
4541
4549
  data: {
4542
- token: getService("token").createJwtToken({ id: payload.id })
4550
+ token: getService$1("token").createJwtToken({ id: payload.id })
4543
4551
  }
4544
4552
  };
4545
4553
  },
4546
4554
  async registrationInfo(ctx) {
4547
4555
  await validateRegistrationInfoQuery(ctx.request.query);
4548
4556
  const { registrationToken } = ctx.request.query;
4549
- const registrationInfo = await getService("user").findRegistrationInfo(registrationToken);
4557
+ const registrationInfo = await getService$1("user").findRegistrationInfo(registrationToken);
4550
4558
  if (!registrationInfo) {
4551
- throw new ValidationError("Invalid registrationToken");
4559
+ throw new ValidationError$2("Invalid registrationToken");
4552
4560
  }
4553
4561
  ctx.body = { data: registrationInfo };
4554
4562
  },
4555
4563
  async register(ctx) {
4556
4564
  const input = ctx.request.body;
4557
4565
  await validateRegistrationInput(input);
4558
- const user2 = await getService("user").register(input);
4566
+ const user2 = await getService$1("user").register(input);
4559
4567
  ctx.body = {
4560
4568
  data: {
4561
- token: getService("token").createJwtToken(user2),
4562
- user: getService("user").sanitizeUser(user2)
4569
+ token: getService$1("token").createJwtToken(user2),
4570
+ user: getService$1("user").sanitizeUser(user2)
4563
4571
  }
4564
4572
  };
4565
4573
  },
4566
4574
  async registerAdmin(ctx) {
4567
4575
  const input = ctx.request.body;
4568
4576
  await validateAdminRegistrationInput(input);
4569
- const hasAdmin = await getService("user").exists();
4577
+ const hasAdmin = await getService$1("user").exists();
4570
4578
  if (hasAdmin) {
4571
- throw new ApplicationError$3("You cannot register a new super admin");
4579
+ throw new ApplicationError$6("You cannot register a new super admin");
4572
4580
  }
4573
- const superAdminRole = await getService("role").getSuperAdmin();
4581
+ const superAdminRole = await getService$1("role").getSuperAdmin();
4574
4582
  if (!superAdminRole) {
4575
- throw new ApplicationError$3(
4583
+ throw new ApplicationError$6(
4576
4584
  "Cannot register the first admin because the super admin role doesn't exist."
4577
4585
  );
4578
4586
  }
4579
- const user2 = await getService("user").create({
4587
+ const user2 = await getService$1("user").create({
4580
4588
  ...input,
4581
4589
  registrationToken: null,
4582
4590
  isActive: true,
@@ -4585,30 +4593,30 @@ const authentication = {
4585
4593
  strapi.telemetry.send("didCreateFirstAdmin");
4586
4594
  ctx.body = {
4587
4595
  data: {
4588
- token: getService("token").createJwtToken(user2),
4589
- user: getService("user").sanitizeUser(user2)
4596
+ token: getService$1("token").createJwtToken(user2),
4597
+ user: getService$1("user").sanitizeUser(user2)
4590
4598
  }
4591
4599
  };
4592
4600
  },
4593
4601
  async forgotPassword(ctx) {
4594
4602
  const input = ctx.request.body;
4595
4603
  await validateForgotPasswordInput(input);
4596
- getService("auth").forgotPassword(input);
4604
+ getService$1("auth").forgotPassword(input);
4597
4605
  ctx.status = 204;
4598
4606
  },
4599
4607
  async resetPassword(ctx) {
4600
4608
  const input = ctx.request.body;
4601
4609
  await validateResetPasswordInput(input);
4602
- const user2 = await getService("auth").resetPassword(input);
4610
+ const user2 = await getService$1("auth").resetPassword(input);
4603
4611
  ctx.body = {
4604
4612
  data: {
4605
- token: getService("token").createJwtToken(user2),
4606
- user: getService("user").sanitizeUser(user2)
4613
+ token: getService$1("token").createJwtToken(user2),
4614
+ user: getService$1("user").sanitizeUser(user2)
4607
4615
  }
4608
4616
  };
4609
4617
  },
4610
4618
  logout(ctx) {
4611
- const sanitizedUser = getService("user").sanitizeUser(ctx.state.user);
4619
+ const sanitizedUser = getService$1("user").sanitizeUser(ctx.state.user);
4612
4620
  strapi.eventHub.emit("admin.logout", { user: sanitizedUser });
4613
4621
  ctx.body = { data: {} };
4614
4622
  }
@@ -4624,7 +4632,7 @@ const permission = {
4624
4632
  const { body: input } = ctx.request;
4625
4633
  const { userAbility } = ctx.state;
4626
4634
  await validateCheckPermissionsInput(input);
4627
- const { engine: engine2 } = getService("permission");
4635
+ const { engine: engine2 } = getService$1("permission");
4628
4636
  const checkPermissionsFn = engine2.checkMany(userAbility);
4629
4637
  ctx.body = {
4630
4638
  data: checkPermissionsFn(input.permissions)
@@ -4635,7 +4643,7 @@ const permission = {
4635
4643
  * @param {KoaContext} ctx - koa context
4636
4644
  */
4637
4645
  async getAll(ctx) {
4638
- const { sectionsBuilder: sectionsBuilder2, actionProvider: actionProvider2, conditionProvider: conditionProvider2 } = getService("permission");
4646
+ const { sectionsBuilder: sectionsBuilder2, actionProvider: actionProvider2, conditionProvider: conditionProvider2 } = getService$1("permission");
4639
4647
  const actions2 = actionProvider2.values();
4640
4648
  const conditions2 = conditionProvider2.values();
4641
4649
  const sections = await sectionsBuilder2.build(actions2);
@@ -4648,12 +4656,12 @@ const permission = {
4648
4656
  };
4649
4657
  }
4650
4658
  };
4651
- const roleCreateSchema = utils$1.yup.object().shape({
4652
- name: utils$1.yup.string().min(1).required(),
4653
- description: utils$1.yup.string().nullable()
4659
+ const roleCreateSchema$1 = utils$2.yup.object().shape({
4660
+ name: utils$2.yup.string().min(1).required(),
4661
+ description: utils$2.yup.string().nullable()
4654
4662
  }).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) {
4663
+ const rolesDeleteSchema$1 = utils$2.yup.object().shape({
4664
+ 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
4665
  try {
4658
4666
  await strapi.service("admin::role").checkRolesIdForDeletion(ids);
4659
4667
  } catch (e) {
@@ -4662,7 +4670,7 @@ const rolesDeleteSchema = utils$1.yup.object().shape({
4662
4670
  return true;
4663
4671
  })
4664
4672
  }).noUnknown();
4665
- const roleDeleteSchema = utils$1.yup.strapiID().required().test("no-admin-single-delete", "Role deletion checks have failed", async function(id) {
4673
+ const roleDeleteSchema$1 = utils$2.yup.strapiID().required().test("no-admin-single-delete", "Role deletion checks have failed", async function(id) {
4666
4674
  try {
4667
4675
  await strapi.service("admin::role").checkRolesIdForDeletion([id]);
4668
4676
  } catch (e) {
@@ -4670,25 +4678,25 @@ const roleDeleteSchema = utils$1.yup.strapiID().required().test("no-admin-single
4670
4678
  }
4671
4679
  return true;
4672
4680
  });
4673
- const roleUpdateSchema = utils$1.yup.object().shape({
4674
- name: utils$1.yup.string().min(1),
4675
- description: utils$1.yup.string().nullable()
4681
+ const roleUpdateSchema = utils$2.yup.object().shape({
4682
+ name: utils$2.yup.string().min(1),
4683
+ description: utils$2.yup.string().nullable()
4676
4684
  }).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 = {
4685
+ const validateRoleCreateInput$1 = utils$2.validateYupSchema(roleCreateSchema$1);
4686
+ const validateRoleUpdateInput = utils$2.validateYupSchema(roleUpdateSchema);
4687
+ const validateRolesDeleteInput$1 = utils$2.validateYupSchema(rolesDeleteSchema$1);
4688
+ const validateRoleDeleteInput$1 = utils$2.validateYupSchema(roleDeleteSchema$1);
4689
+ const { ApplicationError: ApplicationError$5 } = utils$2.errors;
4690
+ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$2 } = constants$3;
4691
+ const role$2 = {
4684
4692
  /**
4685
4693
  * Create a new role
4686
4694
  * @param {KoaContext} ctx - koa context
4687
4695
  */
4688
4696
  async create(ctx) {
4689
4697
  const { body } = ctx.request;
4690
- await validateRoleCreateInput(body);
4691
- const roleService = getService("role");
4698
+ await validateRoleCreateInput$1(body);
4699
+ const roleService = getService$1("role");
4692
4700
  const role2 = await roleService.create(body);
4693
4701
  const sanitizedRole = roleService.sanitizeRole(role2);
4694
4702
  ctx.created({ data: sanitizedRole });
@@ -4699,7 +4707,7 @@ const role = {
4699
4707
  */
4700
4708
  async findOne(ctx) {
4701
4709
  const { id } = ctx.params;
4702
- const role2 = await getService("role").findOneWithUsersCount({ id });
4710
+ const role2 = await getService$1("role").findOneWithUsersCount({ id });
4703
4711
  if (!role2) {
4704
4712
  return ctx.notFound("role.notFound");
4705
4713
  }
@@ -4713,13 +4721,13 @@ const role = {
4713
4721
  */
4714
4722
  async findAll(ctx) {
4715
4723
  const { query } = ctx.request;
4716
- const permissionsManager = getService("permission").createPermissionsManager({
4724
+ const permissionsManager = getService$1("permission").createPermissionsManager({
4717
4725
  ability: ctx.state.userAbility,
4718
4726
  model: "admin::role"
4719
4727
  });
4720
4728
  await permissionsManager.validateQuery(query);
4721
4729
  const sanitizedQuery = await permissionsManager.sanitizeQuery(query);
4722
- const roles2 = await getService("role").findAllWithUsersCount(sanitizedQuery);
4730
+ const roles2 = await getService$1("role").findAllWithUsersCount(sanitizedQuery);
4723
4731
  ctx.body = {
4724
4732
  data: roles2
4725
4733
  };
@@ -4731,14 +4739,14 @@ const role = {
4731
4739
  async update(ctx) {
4732
4740
  const { id } = ctx.params;
4733
4741
  const { body } = ctx.request;
4734
- const roleService = getService("role");
4742
+ const roleService = getService$1("role");
4735
4743
  await validateRoleUpdateInput(body);
4736
4744
  const role2 = await roleService.findOne({ id });
4737
4745
  if (!role2) {
4738
4746
  return ctx.notFound("role.notFound");
4739
4747
  }
4740
- if (role2.code === SUPER_ADMIN_CODE) {
4741
- throw new ApplicationError$2("Super admin can't be edited.");
4748
+ if (role2.code === SUPER_ADMIN_CODE$2) {
4749
+ throw new ApplicationError$5("Super admin can't be edited.");
4742
4750
  }
4743
4751
  const updatedRole = await roleService.update({ id }, body);
4744
4752
  const sanitizedRole = roleService.sanitizeRole(updatedRole);
@@ -4752,8 +4760,8 @@ const role = {
4752
4760
  */
4753
4761
  async getPermissions(ctx) {
4754
4762
  const { id } = ctx.params;
4755
- const roleService = getService("role");
4756
- const permissionService = getService("permission");
4763
+ const roleService = getService$1("role");
4764
+ const permissionService = getService$1("permission");
4757
4765
  const role2 = await roleService.findOne({ id });
4758
4766
  if (!role2) {
4759
4767
  return ctx.notFound("role.notFound");
@@ -4772,14 +4780,14 @@ const role = {
4772
4780
  async updatePermissions(ctx) {
4773
4781
  const { id } = ctx.params;
4774
4782
  const { body: input } = ctx.request;
4775
- const roleService = getService("role");
4776
- const permissionService = getService("permission");
4783
+ const roleService = getService$1("role");
4784
+ const permissionService = getService$1("permission");
4777
4785
  const role2 = await roleService.findOne({ id });
4778
4786
  if (!role2) {
4779
4787
  return ctx.notFound("role.notFound");
4780
4788
  }
4781
- if (role2.code === SUPER_ADMIN_CODE) {
4782
- throw new ApplicationError$2("Super admin permissions can't be edited.");
4789
+ if (role2.code === SUPER_ADMIN_CODE$2) {
4790
+ throw new ApplicationError$5("Super admin permissions can't be edited.");
4783
4791
  }
4784
4792
  await validatedUpdatePermissionsInput(input);
4785
4793
  if (!role2) {
@@ -4797,8 +4805,8 @@ const role = {
4797
4805
  */
4798
4806
  async deleteOne(ctx) {
4799
4807
  const { id } = ctx.params;
4800
- await validateRoleDeleteInput(id);
4801
- const roleService = getService("role");
4808
+ await validateRoleDeleteInput$1(id);
4809
+ const roleService = getService$1("role");
4802
4810
  const roles2 = await roleService.deleteByIds([id]);
4803
4811
  const sanitizedRole = roles2.map((role2) => roleService.sanitizeRole(role2))[0] || null;
4804
4812
  return ctx.deleted({
@@ -4811,8 +4819,8 @@ const role = {
4811
4819
  */
4812
4820
  async deleteMany(ctx) {
4813
4821
  const { body } = ctx.request;
4814
- await validateRolesDeleteInput(body);
4815
- const roleService = getService("role");
4822
+ await validateRolesDeleteInput$1(body);
4823
+ const roleService = getService$1("role");
4816
4824
  const roles2 = await roleService.deleteByIds(body.ids);
4817
4825
  const sanitizedRoles = roles2.map(roleService.sanitizeRole);
4818
4826
  return ctx.deleted({
@@ -4825,11 +4833,11 @@ const {
4825
4833
  handlers: { createPushController, createPullController }
4826
4834
  }
4827
4835
  } = dataTransfer$1.strapi;
4828
- const { UnauthorizedError } = utils$1.errors;
4836
+ const { UnauthorizedError: UnauthorizedError$1 } = utils$2.errors;
4829
4837
  const verify = async (ctx, scope) => {
4830
4838
  const { auth: auth2 } = ctx.state;
4831
4839
  if (!auth2) {
4832
- throw new UnauthorizedError();
4840
+ throw new UnauthorizedError$1();
4833
4841
  }
4834
4842
  await dataTransferAuthStrategy.verify(auth2, { scope });
4835
4843
  };
@@ -4839,34 +4847,34 @@ const runner = {
4839
4847
  push,
4840
4848
  pull
4841
4849
  };
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()
4850
+ const transferTokenCreationSchema = utils$2.yup.object().shape({
4851
+ name: utils$2.yup.string().min(1).required(),
4852
+ description: utils$2.yup.string().optional(),
4853
+ permissions: utils$2.yup.array().min(1).of(utils$2.yup.string().oneOf(Object.values(constants$3.TRANSFER_TOKEN_TYPE))).required(),
4854
+ lifespan: utils$2.yup.number().min(1).oneOf(Object.values(constants$3.TRANSFER_TOKEN_LIFESPANS)).nullable()
4847
4855
  }).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()
4856
+ const transferTokenUpdateSchema = utils$2.yup.object().shape({
4857
+ name: utils$2.yup.string().min(1).notNull(),
4858
+ description: utils$2.yup.string().nullable(),
4859
+ permissions: utils$2.yup.array().min(1).of(utils$2.yup.string().oneOf(Object.values(constants$3.TRANSFER_TOKEN_TYPE))).nullable()
4852
4860
  }).noUnknown().strict();
4853
- const validateTransferTokenCreationInput$1 = utils$1.validateYupSchema(transferTokenCreationSchema);
4854
- const validateTransferTokenUpdateInput$1 = utils$1.validateYupSchema(transferTokenUpdateSchema);
4861
+ const validateTransferTokenCreationInput$1 = utils$2.validateYupSchema(transferTokenCreationSchema);
4862
+ const validateTransferTokenUpdateInput$1 = utils$2.validateYupSchema(transferTokenUpdateSchema);
4855
4863
  const token$1 = {
4856
4864
  validateTransferTokenCreationInput: validateTransferTokenCreationInput$1,
4857
4865
  validateTransferTokenUpdateInput: validateTransferTokenUpdateInput$1
4858
4866
  };
4859
- const { ApplicationError: ApplicationError$1 } = utils$1.errors;
4867
+ const { ApplicationError: ApplicationError$4 } = utils$2.errors;
4860
4868
  const { validateTransferTokenCreationInput, validateTransferTokenUpdateInput } = token$1;
4861
4869
  const token = {
4862
4870
  async list(ctx) {
4863
- const transferService = getService("transfer");
4871
+ const transferService = getService$1("transfer");
4864
4872
  const transferTokens = await transferService.token.list();
4865
4873
  ctx.body = { data: transferTokens };
4866
4874
  },
4867
4875
  async getById(ctx) {
4868
4876
  const { id } = ctx.params;
4869
- const tokenService = getService("transfer").token;
4877
+ const tokenService = getService$1("transfer").token;
4870
4878
  const transferToken2 = await tokenService.getById(id);
4871
4879
  if (!transferToken2) {
4872
4880
  ctx.notFound("Transfer token not found");
@@ -4876,7 +4884,7 @@ const token = {
4876
4884
  },
4877
4885
  async create(ctx) {
4878
4886
  const { body } = ctx.request;
4879
- const { token: tokenService } = getService("transfer");
4887
+ const { token: tokenService } = getService$1("transfer");
4880
4888
  const attributes = {
4881
4889
  name: fp.trim(body.name),
4882
4890
  description: fp.trim(body.description),
@@ -4886,7 +4894,7 @@ const token = {
4886
4894
  await validateTransferTokenCreationInput(attributes);
4887
4895
  const alreadyExists = await tokenService.exists({ name: attributes.name });
4888
4896
  if (alreadyExists) {
4889
- throw new ApplicationError$1("Name already taken");
4897
+ throw new ApplicationError$4("Name already taken");
4890
4898
  }
4891
4899
  const transferTokens = await tokenService.create(attributes);
4892
4900
  ctx.created({ data: transferTokens });
@@ -4894,7 +4902,7 @@ const token = {
4894
4902
  async update(ctx) {
4895
4903
  const { body } = ctx.request;
4896
4904
  const { id } = ctx.params;
4897
- const { token: tokenService } = getService("transfer");
4905
+ const { token: tokenService } = getService$1("transfer");
4898
4906
  const attributes = body;
4899
4907
  if (fp.has("name", attributes)) {
4900
4908
  attributes.name = fp.trim(body.name);
@@ -4909,8 +4917,8 @@ const token = {
4909
4917
  }
4910
4918
  if (fp.has("name", attributes)) {
4911
4919
  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");
4920
+ if (!!nameAlreadyTaken && !utils$2.strings.isEqual(nameAlreadyTaken.id, id)) {
4921
+ throw new ApplicationError$4("Name already taken");
4914
4922
  }
4915
4923
  }
4916
4924
  const apiToken2 = await tokenService.update(id, attributes);
@@ -4918,13 +4926,13 @@ const token = {
4918
4926
  },
4919
4927
  async revoke(ctx) {
4920
4928
  const { id } = ctx.params;
4921
- const { token: tokenService } = getService("transfer");
4929
+ const { token: tokenService } = getService$1("transfer");
4922
4930
  const transferToken2 = await tokenService.revoke(id);
4923
4931
  ctx.deleted({ data: transferToken2 });
4924
4932
  },
4925
4933
  async regenerate(ctx) {
4926
4934
  const { id } = ctx.params;
4927
- const { token: tokenService } = getService("transfer");
4935
+ const { token: tokenService } = getService$1("transfer");
4928
4936
  const exists2 = await tokenService.getById(id);
4929
4937
  if (!exists2) {
4930
4938
  ctx.notFound("Transfer token not found");
@@ -4939,12 +4947,12 @@ const transfer = {
4939
4947
  ...prefixActionsName("runner", runner),
4940
4948
  ...prefixActionsName("token", token)
4941
4949
  };
4942
- const { ApplicationError } = utils$1.errors;
4943
- const user = {
4950
+ const { ApplicationError: ApplicationError$3 } = utils$2.errors;
4951
+ const user$2 = {
4944
4952
  async create(ctx) {
4945
4953
  const { body } = ctx.request;
4946
4954
  const cleanData = { ...body, email: ___namespace.get(body, `email`, ``).toLowerCase() };
4947
- await validateUserCreationInput(cleanData);
4955
+ await validateUserCreationInput$1(cleanData);
4948
4956
  const attributes = ___namespace.pick(cleanData, [
4949
4957
  "firstname",
4950
4958
  "lastname",
@@ -4952,19 +4960,19 @@ const user = {
4952
4960
  "roles",
4953
4961
  "preferedLanguage"
4954
4962
  ]);
4955
- const userAlreadyExists = await getService("user").exists({
4963
+ const userAlreadyExists = await getService$1("user").exists({
4956
4964
  email: attributes.email
4957
4965
  });
4958
4966
  if (userAlreadyExists) {
4959
- throw new ApplicationError("Email already taken");
4967
+ throw new ApplicationError$3("Email already taken");
4960
4968
  }
4961
- const createdUser = await getService("user").create(attributes);
4962
- const userInfo = getService("user").sanitizeUser(createdUser);
4969
+ const createdUser = await getService$1("user").create(attributes);
4970
+ const userInfo = getService$1("user").sanitizeUser(createdUser);
4963
4971
  Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
4964
4972
  ctx.created({ data: userInfo });
4965
4973
  },
4966
4974
  async find(ctx) {
4967
- const userService = getService("user");
4975
+ const userService = getService$1("user");
4968
4976
  const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
4969
4977
  ability: ctx.state.userAbility,
4970
4978
  model: "admin::user"
@@ -4981,12 +4989,12 @@ const user = {
4981
4989
  },
4982
4990
  async findOne(ctx) {
4983
4991
  const { id } = ctx.params;
4984
- const user2 = await getService("user").findOne(id);
4992
+ const user2 = await getService$1("user").findOne(id);
4985
4993
  if (!user2) {
4986
4994
  return ctx.notFound("User does not exist");
4987
4995
  }
4988
4996
  ctx.body = {
4989
- data: getService("user").sanitizeUser(user2)
4997
+ data: getService$1("user").sanitizeUser(user2)
4990
4998
  };
4991
4999
  },
4992
5000
  async update(ctx) {
@@ -4994,30 +5002,30 @@ const user = {
4994
5002
  const { body: input } = ctx.request;
4995
5003
  await validateUserUpdateInput(input);
4996
5004
  if (___namespace.has(input, "email")) {
4997
- const uniqueEmailCheck = await getService("user").exists({
5005
+ const uniqueEmailCheck = await getService$1("user").exists({
4998
5006
  id: { $ne: id },
4999
5007
  email: input.email
5000
5008
  });
5001
5009
  if (uniqueEmailCheck) {
5002
- throw new ApplicationError("A user with this email address already exists");
5010
+ throw new ApplicationError$3("A user with this email address already exists");
5003
5011
  }
5004
5012
  }
5005
- const updatedUser = await getService("user").updateById(id, input);
5013
+ const updatedUser = await getService$1("user").updateById(id, input);
5006
5014
  if (!updatedUser) {
5007
5015
  return ctx.notFound("User does not exist");
5008
5016
  }
5009
5017
  ctx.body = {
5010
- data: getService("user").sanitizeUser(updatedUser)
5018
+ data: getService$1("user").sanitizeUser(updatedUser)
5011
5019
  };
5012
5020
  },
5013
5021
  async deleteOne(ctx) {
5014
5022
  const { id } = ctx.params;
5015
- const deletedUser = await getService("user").deleteById(id);
5023
+ const deletedUser = await getService$1("user").deleteById(id);
5016
5024
  if (!deletedUser) {
5017
5025
  return ctx.notFound("User not found");
5018
5026
  }
5019
5027
  return ctx.deleted({
5020
- data: getService("user").sanitizeUser(deletedUser)
5028
+ data: getService$1("user").sanitizeUser(deletedUser)
5021
5029
  });
5022
5030
  },
5023
5031
  /**
@@ -5027,17 +5035,17 @@ const user = {
5027
5035
  async deleteMany(ctx) {
5028
5036
  const { body } = ctx.request;
5029
5037
  await validateUsersDeleteInput(body);
5030
- const users2 = await getService("user").deleteByIds(body.ids);
5031
- const sanitizedUsers = users2.map(getService("user").sanitizeUser);
5038
+ const users2 = await getService$1("user").deleteByIds(body.ids);
5039
+ const sanitizedUsers = users2.map(getService$1("user").sanitizeUser);
5032
5040
  return ctx.deleted({
5033
5041
  data: sanitizedUsers
5034
5042
  });
5035
5043
  }
5036
5044
  };
5037
5045
  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(
5046
+ const webhookValidator = utils$2.yup.object({
5047
+ name: utils$2.yup.string().required(),
5048
+ url: utils$2.yup.string().matches(urlRegex, "url must be a valid URL").required().test(
5041
5049
  "is-public-url",
5042
5050
  "Url is not supported because it isn't reachable over the public internet",
5043
5051
  async (url) => {
@@ -5053,21 +5061,21 @@ const webhookValidator = utils$1.yup.object({
5053
5061
  }
5054
5062
  }
5055
5063
  ),
5056
- headers: utils$1.yup.lazy((data) => {
5064
+ headers: utils$2.yup.lazy((data) => {
5057
5065
  if (typeof data !== "object") {
5058
- return utils$1.yup.object().required();
5066
+ return utils$2.yup.object().required();
5059
5067
  }
5060
- return utils$1.yup.object(
5068
+ return utils$2.yup.object(
5061
5069
  // @ts-expect-error lodash types
5062
5070
  ___namespace.default.mapValues(data, () => {
5063
- utils$1.yup.string().min(1).required();
5071
+ utils$2.yup.string().min(1).required();
5064
5072
  })
5065
5073
  ).required();
5066
5074
  }),
5067
- events: utils$1.yup.array().of(utils$1.yup.string()).required()
5075
+ events: utils$2.yup.array().of(utils$2.yup.string()).required()
5068
5076
  }).noUnknown();
5069
5077
  const updateWebhookValidator = webhookValidator.shape({
5070
- isEnabled: utils$1.yup.boolean()
5078
+ isEnabled: utils$2.yup.boolean()
5071
5079
  });
5072
5080
  const webhooks = {
5073
5081
  async listWebhooks(ctx) {
@@ -5084,7 +5092,7 @@ const webhooks = {
5084
5092
  },
5085
5093
  async createWebhook(ctx) {
5086
5094
  const { body } = ctx.request;
5087
- await utils$1.validateYupSchema(webhookValidator)(body);
5095
+ await utils$2.validateYupSchema(webhookValidator)(body);
5088
5096
  const webhook = await strapi.get("webhookStore").createWebhook(body);
5089
5097
  strapi.get("webhookRunner").add(webhook);
5090
5098
  ctx.created({ data: webhook });
@@ -5092,7 +5100,7 @@ const webhooks = {
5092
5100
  async updateWebhook(ctx) {
5093
5101
  const { id } = ctx.params;
5094
5102
  const { body } = ctx.request;
5095
- await utils$1.validateYupSchema(updateWebhookValidator)(body);
5103
+ await utils$2.validateYupSchema(updateWebhookValidator)(body);
5096
5104
  const webhook = await strapi.get("webhookStore").findWebhook(id);
5097
5105
  if (!webhook) {
5098
5106
  return ctx.notFound("webhook.notFound");
@@ -5148,15 +5156,15 @@ const contentApi = {
5148
5156
  ctx.send({ data: routesMap });
5149
5157
  }
5150
5158
  };
5151
- const index$2 = {
5152
- admin,
5159
+ const controllers$1 = {
5160
+ admin: admin$3,
5153
5161
  "api-token": apiToken$1,
5154
5162
  "authenticated-user": authenticatedUser,
5155
- authentication,
5163
+ authentication: authentication$1,
5156
5164
  permission,
5157
- role,
5165
+ role: role$2,
5158
5166
  transfer,
5159
- user,
5167
+ user: user$2,
5160
5168
  webhooks,
5161
5169
  "content-api": contentApi
5162
5170
  };
@@ -5581,7 +5589,7 @@ const transferTokenPermission = {
5581
5589
  }
5582
5590
  }
5583
5591
  };
5584
- const index$1 = {
5592
+ const contentTypes = {
5585
5593
  permission: { schema: Permission },
5586
5594
  user: { schema: User },
5587
5595
  role: { schema: Role },
@@ -5591,7 +5599,7 @@ const index$1 = {
5591
5599
  "transfer-token-permission": { schema: transferTokenPermission }
5592
5600
  };
5593
5601
  const { RateLimitError } = utils__default.default.errors;
5594
- const rateLimit = (config, { strapi: strapi2 }) => async (ctx, next) => {
5602
+ const rateLimit = (config2, { strapi: strapi2 }) => async (ctx, next) => {
5595
5603
  let rateLimitConfig = strapi2.config.get("admin.rateLimit");
5596
5604
  if (!rateLimitConfig) {
5597
5605
  rateLimitConfig = {
@@ -5614,14 +5622,14 @@ const rateLimit = (config, { strapi: strapi2 }) => async (ctx, next) => {
5614
5622
  throw new RateLimitError();
5615
5623
  },
5616
5624
  ...rateLimitConfig,
5617
- ...config
5625
+ ...config2
5618
5626
  };
5619
5627
  return rateLimit2.middleware(loadConfig)(ctx, next);
5620
5628
  }
5621
5629
  return next();
5622
5630
  };
5623
5631
  const dataTransfer = () => async (ctx, next) => {
5624
- const transferUtils = getService("transfer").utils;
5632
+ const transferUtils = getService$1("transfer").utils;
5625
5633
  const { hasValidTokenSalt: hasValidTokenSalt2, isRemoteTransferEnabled: isRemoteTransferEnabled2 } = transferUtils;
5626
5634
  if (isRemoteTransferEnabled2()) {
5627
5635
  return next();
@@ -5639,18 +5647,1369 @@ const dataTransfer = () => async (ctx, next) => {
5639
5647
  }
5640
5648
  throw new Error("Unexpected error while trying to access a data transfer route");
5641
5649
  };
5642
- const index = {
5650
+ const middlewares$1 = {
5643
5651
  rateLimit,
5644
5652
  "data-transfer": dataTransfer
5645
5653
  };
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;
5654
+ const register = async ({ strapi: strapi2 }) => {
5655
+ await register$2({ strapi: strapi2 });
5656
+ };
5657
+ const getService = (name2, { strapi: strapi2 } = { strapi: global.strapi }) => {
5658
+ return strapi2.service(`admin::${name2}`);
5659
+ };
5660
+ const actions = {
5661
+ sso: [
5662
+ {
5663
+ uid: "provider-login.read",
5664
+ displayName: "Read",
5665
+ pluginName: "admin",
5666
+ section: "settings",
5667
+ category: "single sign on",
5668
+ subCategory: "options"
5669
+ },
5670
+ {
5671
+ uid: "provider-login.update",
5672
+ displayName: "Update",
5673
+ pluginName: "admin",
5674
+ section: "settings",
5675
+ category: "single sign on",
5676
+ subCategory: "options"
5677
+ }
5678
+ ],
5679
+ auditLogs: [
5680
+ {
5681
+ uid: "audit-logs.read",
5682
+ displayName: "Read",
5683
+ pluginName: "admin",
5684
+ section: "settings",
5685
+ category: "audit logs",
5686
+ subCategory: "options"
5687
+ }
5688
+ ]
5689
+ };
5690
+ const transformTableName = (table) => {
5691
+ if (typeof table === "string") {
5692
+ return { name: table };
5693
+ }
5694
+ return table;
5695
+ };
5696
+ async function findTables({ strapi: strapi2 }, regex) {
5697
+ const tables = await strapi2.db.dialect.schemaInspector.getTables();
5698
+ return tables.filter((tableName) => regex.test(tableName));
5699
+ }
5700
+ async function addPersistTables({ strapi: strapi2 }, tableNames) {
5701
+ const persistedTables = await getPersistedTables({ strapi: strapi2 });
5702
+ const tables = tableNames.map(transformTableName);
5703
+ const notPersistedTableNames = fp.differenceWith(fp.isEqual, tables, persistedTables);
5704
+ const tablesToPersist = fp.differenceWith(
5705
+ (t1, t2) => t1.name === t2.name,
5706
+ persistedTables,
5707
+ notPersistedTableNames
5708
+ );
5709
+ if (!notPersistedTableNames.length) {
5710
+ return;
5711
+ }
5712
+ tablesToPersist.push(...notPersistedTableNames);
5713
+ await strapi2.store.set({
5714
+ type: "core",
5715
+ key: "persisted_tables",
5716
+ value: tablesToPersist
5717
+ });
5718
+ }
5719
+ async function getPersistedTables({ strapi: strapi2 }) {
5720
+ const persistedTables = await strapi2.store.get({
5721
+ type: "core",
5722
+ key: "persisted_tables"
5723
+ });
5724
+ return (persistedTables || []).map(transformTableName);
5725
+ }
5726
+ const persistTablesWithPrefix = async (tableNamePrefix) => {
5727
+ const tableNameRegex = new RegExp(`^${tableNamePrefix}.*`);
5728
+ const tableNames = await findTables({ strapi }, tableNameRegex);
5729
+ await addPersistTables({ strapi }, tableNames);
5730
+ };
5731
+ const bootstrap = async (args) => {
5732
+ const { actionProvider: actionProvider2 } = getService("permission");
5733
+ if (strapi.ee.features.isEnabled("sso")) {
5734
+ await actionProvider2.registerMany(actions.sso);
5735
+ }
5736
+ if (strapi.ee.features.isEnabled("audit-logs")) {
5737
+ await persistTablesWithPrefix("strapi_audit_logs");
5738
+ await actionProvider2.registerMany(actions.auditLogs);
5739
+ }
5740
+ await getService("seat-enforcement").seatEnforcementWorkflow();
5741
+ await bootstrap$1(args);
5742
+ };
5743
+ const destroy = async ({ strapi: strapi2 }) => {
5744
+ await destroy$1();
5745
+ };
5746
+ const adminContentTypes = {};
5747
+ const isSsoLocked = async (user2) => {
5748
+ if (!strapi.ee.features.isEnabled("sso")) {
5749
+ return false;
5750
+ }
5751
+ if (!user2) {
5752
+ throw new Error("Missing user object");
5753
+ }
5754
+ const adminStore = await strapi.store({ type: "core", name: "admin" });
5755
+ const { providers: providers2 } = await adminStore.get({ key: "auth" });
5756
+ const lockedRoles = providers2.ssoLockedRoles ?? [];
5757
+ if (fp.isEmpty(lockedRoles)) {
5758
+ return false;
5759
+ }
5760
+ const roles2 = (
5761
+ // If the roles are pre-loaded for the given user, then use them
5762
+ user2.roles ?? // Otherwise, try to load the role based on the given user ID
5763
+ await strapi.db.query("admin::user").load(user2, "roles", { roles: { fields: ["id"] } }) ?? // If the query fails somehow, default to an empty array
5764
+ []
5765
+ );
5766
+ const isLocked = lockedRoles.some(
5767
+ (lockedId) => (
5768
+ // lockedRoles will be a string to avoid issues with frontend and bigints
5769
+ roles2.some((role2) => lockedId === role2.id.toString())
5770
+ )
5771
+ );
5772
+ return isLocked;
5773
+ };
5774
+ const { ApplicationError: ApplicationError$2 } = utils$2.errors;
5775
+ const forgotPassword = async ({ email: email2 } = {}) => {
5776
+ const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
5777
+ if (!user2 || await isSsoLocked(user2)) {
5778
+ return;
5779
+ }
5780
+ const resetPasswordToken = getService("token").createToken();
5781
+ await getService("user").updateById(user2.id, { resetPasswordToken });
5782
+ const url = `${strapi.config.get(
5783
+ "admin.absoluteUrl"
5784
+ )}/auth/reset-password?code=${resetPasswordToken}`;
5785
+ return strapi.plugin("email").service("email").sendTemplatedEmail(
5786
+ {
5787
+ to: user2.email,
5788
+ from: strapi.config.get("admin.forgotPassword.from"),
5789
+ replyTo: strapi.config.get("admin.forgotPassword.replyTo")
5790
+ },
5791
+ strapi.config.get("admin.forgotPassword.emailTemplate"),
5792
+ {
5793
+ url,
5794
+ user: ___namespace.default.pick(user2, ["email", "firstname", "lastname", "username"])
5795
+ }
5796
+ ).catch((err) => {
5797
+ strapi.log.error(err);
5798
+ });
5799
+ };
5800
+ const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
5801
+ const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
5802
+ if (!matchingUser || await isSsoLocked(matchingUser)) {
5803
+ throw new ApplicationError$2();
5804
+ }
5805
+ return getService("user").updateById(matchingUser.id, {
5806
+ password: password2,
5807
+ resetPasswordToken: null
5808
+ });
5809
+ };
5810
+ const auth = {
5811
+ forgotPassword,
5812
+ resetPassword
5813
+ };
5814
+ const createProviderRegistry = () => {
5815
+ const registry = /* @__PURE__ */ new Map();
5816
+ Object.assign(registry, {
5817
+ register(provider) {
5818
+ if (strapi.isLoaded) {
5819
+ throw new Error(`You can't register new provider after the bootstrap`);
5820
+ }
5821
+ this.set(provider.uid, provider);
5822
+ },
5823
+ registerMany(providers2) {
5824
+ providers2.forEach((provider) => {
5825
+ this.register(provider);
5826
+ });
5827
+ },
5828
+ getAll() {
5829
+ return Array.from(this.values());
5830
+ }
5831
+ });
5832
+ return registry;
5833
+ };
5834
+ const providerRegistry = createProviderRegistry();
5835
+ const errorMessage = "SSO is disabled. Its functionnalities cannot be accessed.";
5836
+ const getStrategyCallbackURL = (providerName) => {
5837
+ if (!strapi.ee.features.isEnabled("sso")) {
5838
+ throw new Error(errorMessage);
5839
+ }
5840
+ return `/admin/connect/${providerName}`;
5841
+ };
5842
+ const syncProviderRegistryWithConfig = () => {
5843
+ if (!strapi.ee.features.isEnabled("sso")) {
5844
+ throw new Error(errorMessage);
5845
+ }
5846
+ const { providers: providers2 = [] } = strapi.config.get("admin.auth", {});
5847
+ providerRegistry.registerMany(providers2);
5848
+ };
5849
+ const SSOAuthEventsMapper = {
5850
+ onSSOAutoRegistration: "admin.auth.autoRegistration"
5851
+ };
5852
+ const sso$1 = {
5853
+ providerRegistry,
5854
+ getStrategyCallbackURL,
5855
+ syncProviderRegistryWithConfig,
5856
+ authEventsMapper: { ...passport$1.authEventsMapper, ...SSOAuthEventsMapper }
5857
+ };
5858
+ const { UnauthorizedError } = utils$2.errors;
5859
+ const localStrategyMiddleware = async ([error, user2, message], done) => {
5860
+ if (user2 && !error && await isSsoLocked(user2)) {
5861
+ return done(
5862
+ new UnauthorizedError("Login not allowed, please contact your administrator", {
5863
+ code: "LOGIN_NOT_ALLOWED"
5864
+ }),
5865
+ user2,
5866
+ message
5867
+ );
5868
+ }
5869
+ return done(error, user2, message);
5870
+ };
5871
+ const getPassportStrategies = () => {
5872
+ if (!strapi.ee.features.isEnabled("sso")) {
5873
+ return [createLocalStrategy(strapi)];
5874
+ }
5875
+ const localStrategy = createLocalStrategy(strapi, localStrategyMiddleware);
5876
+ if (!strapi.isLoaded) {
5877
+ sso$1.syncProviderRegistryWithConfig();
5878
+ }
5879
+ const providers2 = sso$1.providerRegistry.getAll();
5880
+ const strategies = providers2.map((provider) => provider.createStrategy(strapi));
5881
+ return [localStrategy, ...strategies];
5882
+ };
5883
+ const passport = {
5884
+ getPassportStrategies,
5885
+ ...sso$1
5886
+ };
5887
+ const { ApplicationError: ApplicationError$1 } = utils$2.errors;
5888
+ const ssoCheckRolesIdForDeletion = async (ids) => {
5889
+ const adminStore = await strapi.store({ type: "core", name: "admin" });
5890
+ const {
5891
+ providers: { defaultRole }
5892
+ } = await adminStore.get({ key: "auth" });
5893
+ for (const roleId of ids) {
5894
+ if (defaultRole && fp.toString(defaultRole) === fp.toString(roleId)) {
5895
+ throw new ApplicationError$1(
5896
+ "This role is used as the default SSO role. Make sure to change this configuration before deleting the role"
5897
+ );
5898
+ }
5899
+ }
5900
+ };
5901
+ const role$1 = {
5902
+ ssoCheckRolesIdForDeletion
5903
+ };
5904
+ const { ValidationError: ValidationError$1 } = utils$2.errors;
5905
+ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$1 } = constants$3;
5906
+ const updateEEDisabledUsersList = async (id, input) => {
5907
+ const disabledUsers = await getService("seat-enforcement").getDisabledUserList();
5908
+ if (!disabledUsers) {
5909
+ return;
5910
+ }
5911
+ const user2 = disabledUsers.find((user22) => user22.id === Number(id));
5912
+ if (!user2) {
5913
+ return;
5914
+ }
5915
+ if (user2.isActive !== input.isActive) {
5916
+ const newDisabledUsersList = disabledUsers.filter((user22) => user22.id !== Number(id));
5917
+ await strapi.store.set({
5918
+ type: "ee",
5919
+ key: "disabled_users",
5920
+ value: newDisabledUsersList
5921
+ });
5922
+ }
5923
+ };
5924
+ const castNumberArray = fp.pipe(fp.castArray, fp.map(fp.toNumber));
5925
+ const removeFromEEDisabledUsersList = async (ids) => {
5926
+ let idsToCheck;
5927
+ if (typeof ids === "object") {
5928
+ idsToCheck = castNumberArray(ids);
5929
+ } else {
5930
+ idsToCheck = [Number(ids)];
5931
+ }
5932
+ const disabledUsers = await getService("seat-enforcement").getDisabledUserList();
5933
+ if (!disabledUsers) {
5934
+ return;
5935
+ }
5936
+ const newDisabledUsersList = disabledUsers.filter((user2) => !idsToCheck.includes(user2.id));
5937
+ await strapi.store.set({
5938
+ type: "ee",
5939
+ key: "disabled_users",
5940
+ value: newDisabledUsersList
5941
+ });
5942
+ };
5943
+ const updateById = async (id, attributes) => {
5944
+ if (___namespace.default.has(attributes, "roles")) {
5945
+ const lastAdminUser = await isLastSuperAdminUser(id);
5946
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
5947
+ const willRemoveSuperAdminRole = !utils$2.arrays.includesString(attributes.roles, superAdminRole.id);
5948
+ if (lastAdminUser && willRemoveSuperAdminRole) {
5949
+ throw new ValidationError$1("You must have at least one user with super admin role.");
5950
+ }
5951
+ }
5952
+ if (attributes.isActive === false) {
5953
+ const lastAdminUser = await isLastSuperAdminUser(id);
5954
+ if (lastAdminUser) {
5955
+ throw new ValidationError$1("You must have at least one user with super admin role.");
5956
+ }
5957
+ }
5958
+ if (___namespace.default.has(attributes, "password")) {
5959
+ const hashedPassword = await getService("auth").hashPassword(attributes.password);
5960
+ const updatedUser2 = await strapi.db.query("admin::user").update({
5961
+ where: { id },
5962
+ data: {
5963
+ ...attributes,
5964
+ password: hashedPassword
5965
+ },
5966
+ populate: ["roles"]
5967
+ });
5968
+ strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser2) });
5969
+ return updatedUser2;
5970
+ }
5971
+ const updatedUser = await strapi.db.query("admin::user").update({
5972
+ where: { id },
5973
+ data: attributes,
5974
+ populate: ["roles"]
5975
+ });
5976
+ await updateEEDisabledUsersList(id, attributes);
5977
+ if (updatedUser) {
5978
+ strapi.eventHub.emit("user.update", { user: sanitizeUser(updatedUser) });
5979
+ }
5980
+ return updatedUser;
5981
+ };
5982
+ const deleteById = async (id) => {
5983
+ const userToDelete = await strapi.db.query("admin::user").findOne({
5984
+ where: { id },
5985
+ populate: ["roles"]
5986
+ });
5987
+ if (!userToDelete) {
5988
+ return null;
5989
+ }
5990
+ if (userToDelete) {
5991
+ if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE$1)) {
5992
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
5993
+ if (superAdminRole.usersCount === 1) {
5994
+ throw new ValidationError$1("You must have at least one user with super admin role.");
5995
+ }
5996
+ }
5997
+ }
5998
+ const deletedUser = await strapi.db.query("admin::user").delete({ where: { id }, populate: ["roles"] });
5999
+ await removeFromEEDisabledUsersList(id);
6000
+ strapi.eventHub.emit("user.delete", { user: sanitizeUser(deletedUser) });
6001
+ return deletedUser;
6002
+ };
6003
+ const deleteByIds = async (ids) => {
6004
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
6005
+ const nbOfSuperAdminToDelete = await strapi.db.query("admin::user").count({
6006
+ where: {
6007
+ id: ids,
6008
+ roles: { id: superAdminRole.id }
6009
+ }
6010
+ });
6011
+ if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {
6012
+ throw new ValidationError$1("You must have at least one user with super admin role.");
6013
+ }
6014
+ const deletedUsers = [];
6015
+ for (const id of ids) {
6016
+ const deletedUser = await strapi.db.query("admin::user").delete({
6017
+ where: { id },
6018
+ populate: ["roles"]
6019
+ });
6020
+ deletedUsers.push(deletedUser);
6021
+ }
6022
+ await removeFromEEDisabledUsersList(ids);
6023
+ strapi.eventHub.emit("user.delete", {
6024
+ users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser))
6025
+ });
6026
+ return deletedUsers;
6027
+ };
6028
+ const sanitizeUserRoles = (role2) => ___namespace.default.pick(role2, ["id", "name", "description", "code"]);
6029
+ const isLastSuperAdminUser = async (userId) => {
6030
+ const user2 = await findOne(userId);
6031
+ const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
6032
+ return superAdminRole.usersCount === 1 && hasSuperAdminRole$1(user2);
6033
+ };
6034
+ const sanitizeUser = (user2) => {
6035
+ return {
6036
+ ...___namespace.default.omit(user2, ["password", "resetPasswordToken", "registrationToken", "roles"]),
6037
+ roles: user2.roles && user2.roles.map(sanitizeUserRoles)
6038
+ };
6039
+ };
6040
+ const findOne = async (id, populate = ["roles"]) => {
6041
+ return strapi.db.query("admin::user").findOne({ where: { id }, populate });
6042
+ };
6043
+ const getCurrentActiveUserCount = async () => {
6044
+ return strapi.db.query("admin::user").count({ where: { isActive: true } });
6045
+ };
6046
+ const user$1 = {
6047
+ updateEEDisabledUsersList,
6048
+ removeFromEEDisabledUsersList,
6049
+ getCurrentActiveUserCount,
6050
+ deleteByIds,
6051
+ deleteById,
6052
+ updateById
6053
+ };
6054
+ const getSSOProvidersList = async () => {
6055
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
6056
+ return providerRegistry2.getAll().map(({ uid }) => uid);
6057
+ };
6058
+ const sendUpdateProjectInformation = async (strapi2) => {
6059
+ let groupProperties = {};
6060
+ const numberOfActiveAdminUsers = await getService("user").count({ isActive: true });
6061
+ const numberOfAdminUsers = await getService("user").count();
6062
+ if (strapi2.ee.features.isEnabled("sso")) {
6063
+ const SSOProviders = await getSSOProvidersList();
6064
+ groupProperties = fp.assign(groupProperties, {
6065
+ SSOProviders,
6066
+ isSSOConfigured: SSOProviders.length !== 0
6067
+ });
6068
+ }
6069
+ if (strapi2.ee.features.isEnabled("cms-content-releases")) {
6070
+ const numberOfContentReleases = await strapi2.db.query("plugin::content-releases.release").count();
6071
+ const numberOfPublishedContentReleases = await strapi2.db.query("plugin::content-releases.release").count({
6072
+ filters: { releasedAt: { $notNull: true } }
6073
+ });
6074
+ groupProperties = fp.assign(groupProperties, {
6075
+ numberOfContentReleases,
6076
+ numberOfPublishedContentReleases
6077
+ });
6078
+ }
6079
+ groupProperties = fp.assign(groupProperties, { numberOfActiveAdminUsers, numberOfAdminUsers });
6080
+ strapi2.telemetry.send("didUpdateProjectInformation", {
6081
+ groupProperties
6082
+ });
6083
+ };
6084
+ const startCron = (strapi2) => {
6085
+ strapi2.cron.add({
6086
+ sendProjectInformation: {
6087
+ task: () => sendUpdateProjectInformation(strapi2),
6088
+ options: "0 0 0 * * *"
6089
+ }
6090
+ });
6091
+ };
6092
+ const metrics = { startCron, getSSOProvidersList, sendUpdateProjectInformation };
6093
+ const { SUPER_ADMIN_CODE } = constants$3;
6094
+ const getDisabledUserList = async () => {
6095
+ return strapi.store.get({ type: "ee", key: "disabled_users" });
6096
+ };
6097
+ const enableMaximumUserCount = async (numberOfUsersToEnable) => {
6098
+ const disabledUsers = await getDisabledUserList();
6099
+ const orderedDisabledUsers = fp.reverse(disabledUsers);
6100
+ const usersToEnable = fp.take(numberOfUsersToEnable, orderedDisabledUsers);
6101
+ await strapi.db.query("admin::user").updateMany({
6102
+ where: { id: fp.map(fp.prop("id"), usersToEnable) },
6103
+ data: { isActive: true }
6104
+ });
6105
+ const remainingDisabledUsers = fp.drop(numberOfUsersToEnable, orderedDisabledUsers);
6106
+ await strapi.store.set({
6107
+ type: "ee",
6108
+ key: "disabled_users",
6109
+ value: remainingDisabledUsers
6110
+ });
6111
+ };
6112
+ const disableUsersAboveLicenseLimit = async (numberOfUsersToDisable) => {
6113
+ const currentlyDisabledUsers = await getDisabledUserList() ?? [];
6114
+ const usersToDisable = [];
6115
+ const nonSuperAdminUsersToDisable = await strapi.db.query("admin::user").findMany({
6116
+ where: {
6117
+ isActive: true,
6118
+ roles: {
6119
+ code: { $ne: SUPER_ADMIN_CODE }
6120
+ }
6121
+ },
6122
+ orderBy: { createdAt: "DESC" },
6123
+ limit: numberOfUsersToDisable
6124
+ });
6125
+ usersToDisable.push(...nonSuperAdminUsersToDisable);
6126
+ if (nonSuperAdminUsersToDisable.length < numberOfUsersToDisable) {
6127
+ const superAdminUsersToDisable = await strapi.db.query("admin::user").findMany({
6128
+ where: {
6129
+ isActive: true,
6130
+ roles: { code: SUPER_ADMIN_CODE }
6131
+ },
6132
+ orderBy: { createdAt: "DESC" },
6133
+ limit: numberOfUsersToDisable - nonSuperAdminUsersToDisable.length
6134
+ });
6135
+ usersToDisable.push(...superAdminUsersToDisable);
6136
+ }
6137
+ await strapi.db.query("admin::user").updateMany({
6138
+ where: { id: fp.map(fp.prop("id"), usersToDisable) },
6139
+ data: { isActive: false }
6140
+ });
6141
+ await strapi.store.set({
6142
+ type: "ee",
6143
+ key: "disabled_users",
6144
+ value: currentlyDisabledUsers.concat(fp.map(fp.pick(["id", "isActive"]), usersToDisable))
6145
+ });
6146
+ };
6147
+ const syncDisabledUserRecords = async () => {
6148
+ const disabledUsers = await strapi.store.get({ type: "ee", key: "disabled_users" });
6149
+ if (!disabledUsers) {
6150
+ return;
6151
+ }
6152
+ await strapi.db.query("admin::user").updateMany({
6153
+ where: { id: fp.map(fp.prop("id"), disabledUsers) },
6154
+ data: { isActive: false }
6155
+ });
6156
+ };
6157
+ const seatEnforcementWorkflow = async () => {
6158
+ const adminSeats = strapi.ee.seats;
6159
+ if (fp.isNil(adminSeats)) {
6160
+ return;
6161
+ }
6162
+ await syncDisabledUserRecords();
6163
+ const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
6164
+ const adminSeatsLeft = adminSeats - currentActiveUserCount;
6165
+ if (adminSeatsLeft > 0) {
6166
+ await enableMaximumUserCount(adminSeatsLeft);
6167
+ } else if (adminSeatsLeft < 0) {
6168
+ await disableUsersAboveLicenseLimit(-adminSeatsLeft);
6169
+ }
6170
+ };
6171
+ const seatEnforcement = {
6172
+ seatEnforcementWorkflow,
6173
+ getDisabledUserList
6174
+ };
6175
+ const services = {
6176
+ auth,
6177
+ passport,
6178
+ role: role$1,
6179
+ user: user$1,
6180
+ metrics,
6181
+ "seat-enforcement": seatEnforcement
6182
+ };
6183
+ const providerOptionsUpdateSchema = utils$2.yup.object().shape({
6184
+ autoRegister: utils$2.yup.boolean().required(),
6185
+ defaultRole: utils$2.yup.strapiID().when("autoRegister", (value, initSchema) => {
6186
+ return value ? initSchema.required() : initSchema.nullable();
6187
+ }).test("is-valid-role", "You must submit a valid default role", (roleId) => {
6188
+ if (roleId === null) {
6189
+ return true;
6190
+ }
6191
+ return strapi.service("admin::role").exists({ id: roleId });
6192
+ }),
6193
+ ssoLockedRoles: utils$2.yup.array().nullable().of(
6194
+ utils$2.yup.strapiID().test(
6195
+ "is-valid-role",
6196
+ "You must submit a valid role for the SSO Locked roles",
6197
+ (roleId) => {
6198
+ return strapi.service("admin::role").exists({ id: roleId });
6199
+ }
6200
+ )
6201
+ )
6202
+ });
6203
+ const validateProviderOptionsUpdate = utils$2.validateYupSchema(providerOptionsUpdateSchema);
6204
+ const PROVIDER_REDIRECT_BASE = "/auth/login";
6205
+ const PROVIDER_REDIRECT_SUCCESS = `${PROVIDER_REDIRECT_BASE}/success`;
6206
+ const PROVIDER_REDIRECT_ERROR = `${PROVIDER_REDIRECT_BASE}/error`;
6207
+ const PROVIDER_URLS_MAP = {
6208
+ success: PROVIDER_REDIRECT_SUCCESS,
6209
+ error: PROVIDER_REDIRECT_ERROR
6210
+ };
6211
+ const getAdminStore = async () => strapi.store({ type: "core", name: "admin" });
6212
+ const getPrefixedRedirectUrls = () => {
6213
+ const { url: adminUrl } = strapi.config.get("admin");
6214
+ const prefixUrl = (url) => `${adminUrl || "/admin"}${url}`;
6215
+ return fp.mapValues(prefixUrl, PROVIDER_URLS_MAP);
6216
+ };
6217
+ const utils = {
6218
+ getAdminStore,
6219
+ getPrefixedRedirectUrls
6220
+ };
6221
+ const defaultConnectionError = () => new Error("Invalid connection payload");
6222
+ const authenticate = async (ctx, next) => {
6223
+ const {
6224
+ params: { provider }
6225
+ } = ctx;
6226
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6227
+ return passport__default.default.authenticate(provider, null, async (error, profile) => {
6228
+ if (error || !profile || !profile.email) {
6229
+ if (error) {
6230
+ strapi.log.error(error);
6231
+ }
6232
+ strapi.eventHub.emit("admin.auth.error", {
6233
+ error: error || defaultConnectionError(),
6234
+ provider
6235
+ });
6236
+ return ctx.redirect(redirectUrls.error);
6237
+ }
6238
+ const user2 = await getService("user").findOneByEmail(profile.email);
6239
+ const scenario = user2 ? existingUserScenario : nonExistingUserScenario;
6240
+ return scenario(ctx, next)(user2 || profile, provider);
6241
+ })(ctx, next);
6242
+ };
6243
+ const existingUserScenario = (ctx, next) => async (user2, provider) => {
6244
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6245
+ if (!user2.isActive) {
6246
+ strapi.eventHub.emit("admin.auth.error", {
6247
+ error: new Error(`Deactivated user tried to login (${user2.id})`),
6248
+ provider
6249
+ });
6250
+ return ctx.redirect(redirectUrls.error);
6251
+ }
6252
+ ctx.state.user = user2;
6253
+ return next();
6254
+ };
6255
+ const nonExistingUserScenario = (ctx, next) => async (profile, provider) => {
6256
+ const { email: email2, firstname: firstname2, lastname: lastname2, username: username2 } = profile;
6257
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6258
+ const adminStore = await utils.getAdminStore();
6259
+ const { providers: providers2 } = await adminStore.get({ key: "auth" });
6260
+ const isMissingRegisterFields = !username2 && (!firstname2 || !lastname2);
6261
+ if (!providers2.autoRegister || !providers2.defaultRole || isMissingRegisterFields) {
6262
+ strapi.eventHub.emit("admin.auth.error", { error: defaultConnectionError(), provider });
6263
+ return ctx.redirect(redirectUrls.error);
6264
+ }
6265
+ const defaultRole = await getService("role").findOne({ id: providers2.defaultRole });
6266
+ if (!defaultRole) {
6267
+ strapi.eventHub.emit("admin.auth.error", { error: defaultConnectionError(), provider });
6268
+ return ctx.redirect(redirectUrls.error);
6269
+ }
6270
+ ctx.state.user = await getService("user").create({
6271
+ email: email2,
6272
+ username: username2,
6273
+ firstname: firstname2,
6274
+ lastname: lastname2,
6275
+ roles: [defaultRole.id],
6276
+ isActive: true,
6277
+ registrationToken: null
6278
+ });
6279
+ strapi.eventHub.emit("admin.auth.autoRegistration", {
6280
+ user: ctx.state.user,
6281
+ provider
6282
+ });
6283
+ return next();
6284
+ };
6285
+ const redirectWithAuth = (ctx) => {
6286
+ const {
6287
+ params: { provider }
6288
+ } = ctx;
6289
+ const redirectUrls = utils.getPrefixedRedirectUrls();
6290
+ const domain2 = strapi.config.get("admin.auth.domain");
6291
+ const { user: user2 } = ctx.state;
6292
+ const jwt2 = getService("token").createJwtToken(user2);
6293
+ const isProduction = strapi.config.get("environment") === "production";
6294
+ const cookiesOptions = { httpOnly: false, secure: isProduction, overwrite: true, domain: domain2 };
6295
+ const sanitizedUser = getService("user").sanitizeUser(user2);
6296
+ strapi.eventHub.emit("admin.auth.success", { user: sanitizedUser, provider });
6297
+ ctx.cookies.set("jwtToken", jwt2, cookiesOptions);
6298
+ ctx.redirect(redirectUrls.success);
6299
+ };
6300
+ const middlewares = {
6301
+ authenticate,
6302
+ redirectWithAuth
6303
+ };
6304
+ const toProviderDTO = fp.pick(["uid", "displayName", "icon"]);
6305
+ const toProviderLoginOptionsDTO = fp.pick(["autoRegister", "defaultRole", "ssoLockedRoles"]);
6306
+ const { ValidationError } = utils$2.errors;
6307
+ const providerAuthenticationFlow = compose__default.default([
6308
+ middlewares.authenticate,
6309
+ middlewares.redirectWithAuth
6310
+ ]);
6311
+ const authentication = {
6312
+ async getProviders(ctx) {
6313
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
6314
+ ctx.body = providerRegistry2.getAll().map(toProviderDTO);
6315
+ },
6316
+ async getProviderLoginOptions(ctx) {
6317
+ const adminStore = await utils.getAdminStore();
6318
+ const { providers: providersOptions } = await adminStore.get({ key: "auth" });
6319
+ ctx.body = {
6320
+ data: toProviderLoginOptionsDTO(providersOptions)
6321
+ };
6322
+ },
6323
+ async updateProviderLoginOptions(ctx) {
6324
+ const {
6325
+ request: { body }
6326
+ } = ctx;
6327
+ await validateProviderOptionsUpdate(body);
6328
+ const adminStore = await utils.getAdminStore();
6329
+ const currentAuthOptions = await adminStore.get({ key: "auth" });
6330
+ const newAuthOptions = { ...currentAuthOptions, providers: body };
6331
+ await adminStore.set({ key: "auth", value: newAuthOptions });
6332
+ strapi.telemetry.send("didUpdateSSOSettings");
6333
+ ctx.body = {
6334
+ data: toProviderLoginOptionsDTO(newAuthOptions.providers)
6335
+ };
6336
+ },
6337
+ providerLogin(ctx, next) {
6338
+ const {
6339
+ params: { provider: providerName }
6340
+ } = ctx;
6341
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
6342
+ if (!providerRegistry2.has(providerName)) {
6343
+ throw new ValidationError(`Invalid provider supplied: ${providerName}`);
6344
+ }
6345
+ return providerAuthenticationFlow(ctx, next);
6346
+ }
6347
+ };
6348
+ const roleCreateSchema = utils$2.yup.object().shape({
6349
+ name: utils$2.yup.string().min(1).required(),
6350
+ description: utils$2.yup.string().nullable()
6351
+ }).noUnknown();
6352
+ const rolesDeleteSchema = utils$2.yup.object().shape({
6353
+ ids: utils$2.yup.array().of(utils$2.yup.strapiID()).min(1).required().test(
6354
+ "roles-deletion-checks",
6355
+ "Roles deletion checks have failed",
6356
+ async function rolesDeletionChecks(ids) {
6357
+ try {
6358
+ await strapi.service("admin::role").checkRolesIdForDeletion(ids);
6359
+ if (strapi.ee.features.isEnabled("sso")) {
6360
+ await strapi.service("admin::role").ssoCheckRolesIdForDeletion(ids);
6361
+ }
6362
+ } catch (e) {
6363
+ return this.createError({ path: "ids", message: e.message });
6364
+ }
6365
+ return true;
6366
+ }
6367
+ )
6368
+ }).noUnknown();
6369
+ const roleDeleteSchema = utils$2.yup.strapiID().required().test(
6370
+ "no-admin-single-delete",
6371
+ "Role deletion checks have failed",
6372
+ async function noAdminSingleDelete(id) {
6373
+ try {
6374
+ await strapi.service("admin::role").checkRolesIdForDeletion([id]);
6375
+ if (strapi.ee.features.isEnabled("sso")) {
6376
+ await strapi.service("admin::role").ssoCheckRolesIdForDeletion([id]);
6377
+ }
6378
+ } catch (e) {
6379
+ return this.createError({ path: "id", message: e.message });
6380
+ }
6381
+ return true;
6382
+ }
6383
+ );
6384
+ const validateRoleCreateInput = utils$2.validateYupSchema(roleCreateSchema);
6385
+ const validateRolesDeleteInput = utils$2.validateYupSchema(rolesDeleteSchema);
6386
+ const validateRoleDeleteInput = utils$2.validateYupSchema(roleDeleteSchema);
6387
+ const role = {
6388
+ /**
6389
+ * Create a new role
6390
+ * @param {KoaContext} ctx - koa context
6391
+ */
6392
+ async create(ctx) {
6393
+ await validateRoleCreateInput(ctx.request.body);
6394
+ const roleService = getService("role");
6395
+ const role2 = await roleService.create(ctx.request.body);
6396
+ const sanitizedRole = roleService.sanitizeRole(role2);
6397
+ ctx.created({ data: sanitizedRole });
6398
+ },
6399
+ /**
6400
+ * Delete a role
6401
+ * @param {KoaContext} ctx - koa context
6402
+ */
6403
+ async deleteOne(ctx) {
6404
+ const { id } = ctx.params;
6405
+ await validateRoleDeleteInput(id);
6406
+ const roleService = getService("role");
6407
+ const roles2 = await roleService.deleteByIds([id]);
6408
+ const sanitizedRole = roles2.map((role2) => roleService.sanitizeRole(role2))[0] || null;
6409
+ return ctx.deleted({
6410
+ data: sanitizedRole
6411
+ });
6412
+ },
6413
+ /**
6414
+ * delete several roles
6415
+ * @param {KoaContext} ctx - koa context
6416
+ */
6417
+ async deleteMany(ctx) {
6418
+ const { body } = ctx.request;
6419
+ await validateRolesDeleteInput(body);
6420
+ const roleService = getService("role");
6421
+ const roles2 = await roleService.deleteByIds(body.ids);
6422
+ const sanitizedRoles = roles2.map(roleService.sanitizeRole);
6423
+ return ctx.deleted({
6424
+ data: sanitizedRoles
6425
+ });
6426
+ }
6427
+ };
6428
+ const ssoUserCreationInputExtension = utils$2.yup.object().shape({
6429
+ useSSORegistration: utils$2.yup.boolean()
6430
+ }).noUnknown();
6431
+ const validateUserCreationInput = (data) => {
6432
+ let schema = schemas.userCreationSchema;
6433
+ if (strapi.ee.features.isEnabled("sso")) {
6434
+ schema = schema.concat(ssoUserCreationInputExtension);
6435
+ }
6436
+ return utils$2.validateYupSchema(schema)(data);
6437
+ };
6438
+ const { ApplicationError, ForbiddenError } = utils$2.errors;
6439
+ const pickUserCreationAttributes = fp.pick(["firstname", "lastname", "email", "roles"]);
6440
+ const hasAdminSeatsAvaialble = async () => {
6441
+ if (!strapi.EE) {
6442
+ return true;
6443
+ }
6444
+ const permittedSeats = strapi.ee.seats;
6445
+ if (fp.isNil(permittedSeats)) {
6446
+ return true;
6447
+ }
6448
+ const userCount = await strapi.service("admin::user").getCurrentActiveUserCount();
6449
+ if (userCount < permittedSeats) {
6450
+ return true;
6451
+ }
6452
+ };
6453
+ const user = {
6454
+ async create(ctx) {
6455
+ if (!await hasAdminSeatsAvaialble()) {
6456
+ throw new ForbiddenError("License seat limit reached. You cannot create a new user");
6457
+ }
6458
+ const { body } = ctx.request;
6459
+ const cleanData = { ...body, email: ___namespace.default.get(body, `email`, ``).toLowerCase() };
6460
+ await validateUserCreationInput(cleanData);
6461
+ const attributes = pickUserCreationAttributes(cleanData);
6462
+ const { useSSORegistration } = cleanData;
6463
+ const userAlreadyExists = await getService("user").exists({ email: attributes.email });
6464
+ if (userAlreadyExists) {
6465
+ throw new ApplicationError("Email already taken");
6466
+ }
6467
+ if (useSSORegistration) {
6468
+ Object.assign(attributes, { registrationToken: null, isActive: true });
6469
+ }
6470
+ const createdUser = await getService("user").create(attributes);
6471
+ const userInfo = getService("user").sanitizeUser(createdUser);
6472
+ Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
6473
+ ctx.created({ data: userInfo });
6474
+ },
6475
+ async update(ctx) {
6476
+ const { id } = ctx.params;
6477
+ const { body: input } = ctx.request;
6478
+ await validateUserUpdateInput(input);
6479
+ if (___namespace.default.has(input, "email")) {
6480
+ const uniqueEmailCheck = await getService("user").exists({
6481
+ id: { $ne: id },
6482
+ email: input.email
6483
+ });
6484
+ if (uniqueEmailCheck) {
6485
+ throw new ApplicationError("A user with this email address already exists");
6486
+ }
6487
+ }
6488
+ const user2 = await getService("user").findOne(id, null);
6489
+ if (!await hasAdminSeatsAvaialble() && !user2.isActive && input.isActive) {
6490
+ throw new ForbiddenError("License seat limit reached. You cannot active this user");
6491
+ }
6492
+ const updatedUser = await getService("user").updateById(id, input);
6493
+ if (!updatedUser) {
6494
+ return ctx.notFound("User does not exist");
6495
+ }
6496
+ ctx.body = {
6497
+ data: getService("user").sanitizeUser(updatedUser)
6498
+ };
6499
+ },
6500
+ async isSSOLocked(ctx) {
6501
+ const { user: user2 } = ctx.state;
6502
+ const isSSOLocked = await isSsoLocked(user2);
6503
+ ctx.body = {
6504
+ data: {
6505
+ isSSOLocked
6506
+ }
6507
+ };
6508
+ }
6509
+ };
6510
+ const admin$2 = {
6511
+ // NOTE: Overrides CE admin controller
6512
+ async getProjectType() {
6513
+ const flags = strapi.config.get("admin.flags", {});
6514
+ try {
6515
+ return { data: { isEE: strapi.EE, features: strapi.ee.features.list(), flags } };
6516
+ } catch (err) {
6517
+ return { data: { isEE: false, features: [], flags } };
6518
+ }
6519
+ },
6520
+ async licenseLimitInformation() {
6521
+ const permittedSeats = strapi.ee.seats;
6522
+ let shouldNotify = false;
6523
+ let licenseLimitStatus = null;
6524
+ let enforcementUserCount;
6525
+ const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
6526
+ const eeDisabledUsers = await getService("seat-enforcement").getDisabledUserList();
6527
+ if (eeDisabledUsers) {
6528
+ enforcementUserCount = currentActiveUserCount + eeDisabledUsers.length;
6529
+ } else {
6530
+ enforcementUserCount = currentActiveUserCount;
6531
+ }
6532
+ if (!fp.isNil(permittedSeats) && enforcementUserCount > permittedSeats) {
6533
+ shouldNotify = true;
6534
+ licenseLimitStatus = "OVER_LIMIT";
6535
+ }
6536
+ if (!fp.isNil(permittedSeats) && enforcementUserCount === permittedSeats) {
6537
+ shouldNotify = true;
6538
+ licenseLimitStatus = "AT_LIMIT";
6539
+ }
6540
+ const data = {
6541
+ enforcementUserCount,
6542
+ currentActiveUserCount,
6543
+ permittedSeats,
6544
+ shouldNotify,
6545
+ shouldStopCreate: fp.isNil(permittedSeats) ? false : currentActiveUserCount >= permittedSeats,
6546
+ licenseLimitStatus,
6547
+ isHostedOnStrapiCloud: utils$2.env("STRAPI_HOSTING", null) === "strapi.cloud",
6548
+ features: strapi.ee.features.list() ?? []
6549
+ };
6550
+ return { data };
6551
+ }
6552
+ };
6553
+ const controllers = {
6554
+ authentication,
6555
+ role,
6556
+ user,
6557
+ admin: admin$2
6558
+ };
6559
+ const enableFeatureMiddleware = (featureName) => (ctx, next) => {
6560
+ if (strapi.ee.features.isEnabled(featureName)) {
6561
+ return next();
6562
+ }
6563
+ ctx.status = 404;
6564
+ };
6565
+ const sso = {
6566
+ type: "admin",
6567
+ routes: [
6568
+ {
6569
+ method: "GET",
6570
+ path: "/providers",
6571
+ handler: "authentication.getProviders",
6572
+ config: {
6573
+ middlewares: [enableFeatureMiddleware("sso")],
6574
+ auth: false
6575
+ }
6576
+ },
6577
+ {
6578
+ method: "GET",
6579
+ path: "/connect/:provider",
6580
+ handler: "authentication.providerLogin",
6581
+ config: {
6582
+ middlewares: [enableFeatureMiddleware("sso")],
6583
+ auth: false
6584
+ }
6585
+ },
6586
+ {
6587
+ method: "POST",
6588
+ path: "/connect/:provider",
6589
+ handler: "authentication.providerLogin",
6590
+ config: {
6591
+ middlewares: [enableFeatureMiddleware("sso")],
6592
+ auth: false
6593
+ }
6594
+ },
6595
+ {
6596
+ method: "GET",
6597
+ path: "/providers/options",
6598
+ handler: "authentication.getProviderLoginOptions",
6599
+ config: {
6600
+ middlewares: [enableFeatureMiddleware("sso")],
6601
+ policies: [
6602
+ "admin::isAuthenticatedAdmin",
6603
+ { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.read"] } }
6604
+ ]
6605
+ }
6606
+ },
6607
+ {
6608
+ method: "PUT",
6609
+ path: "/providers/options",
6610
+ handler: "authentication.updateProviderLoginOptions",
6611
+ config: {
6612
+ middlewares: [enableFeatureMiddleware("sso")],
6613
+ policies: [
6614
+ "admin::isAuthenticatedAdmin",
6615
+ { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.update"] } }
6616
+ ]
6617
+ }
6618
+ },
6619
+ {
6620
+ method: "GET",
6621
+ path: "/providers/isSSOLocked",
6622
+ handler: "user.isSSOLocked",
6623
+ config: {
6624
+ middlewares: [enableFeatureMiddleware("sso")],
6625
+ policies: ["admin::isAuthenticatedAdmin"]
6626
+ }
6627
+ }
6628
+ ]
6629
+ };
6630
+ const licenseLimit = {
6631
+ type: "admin",
6632
+ routes: [
6633
+ // License limit infos
6634
+ {
6635
+ method: "GET",
6636
+ path: "/license-limit-information",
6637
+ handler: "admin.licenseLimitInformation",
6638
+ config: {
6639
+ policies: [
6640
+ "admin::isAuthenticatedAdmin",
6641
+ {
6642
+ name: "admin::hasPermissions",
6643
+ config: {
6644
+ actions: [
6645
+ "admin::users.create",
6646
+ "admin::users.read",
6647
+ "admin::users.update",
6648
+ "admin::users.delete"
6649
+ ]
6650
+ }
6651
+ }
6652
+ ]
6653
+ }
6654
+ }
6655
+ ]
6656
+ };
6657
+ const routes = {
6658
+ sso,
6659
+ "license-limit": licenseLimit
6660
+ };
6661
+ const auditLogsRoutes = {
6662
+ type: "admin",
6663
+ routes: [
6664
+ {
6665
+ method: "GET",
6666
+ path: "/audit-logs",
6667
+ handler: "audit-logs.findMany",
6668
+ config: {
6669
+ middlewares: [enableFeatureMiddleware("audit-logs")],
6670
+ policies: [
6671
+ "admin::isAuthenticatedAdmin",
6672
+ {
6673
+ name: "admin::hasPermissions",
6674
+ config: {
6675
+ actions: ["admin::audit-logs.read"]
6676
+ }
6677
+ }
6678
+ ]
6679
+ }
6680
+ },
6681
+ {
6682
+ method: "GET",
6683
+ path: "/audit-logs/:id",
6684
+ handler: "audit-logs.findOne",
6685
+ config: {
6686
+ middlewares: [enableFeatureMiddleware("audit-logs")],
6687
+ policies: [
6688
+ "admin::isAuthenticatedAdmin",
6689
+ {
6690
+ name: "admin::hasPermissions",
6691
+ config: {
6692
+ actions: ["admin::audit-logs.read"]
6693
+ }
6694
+ }
6695
+ ]
6696
+ }
6697
+ }
6698
+ ]
6699
+ };
6700
+ const ALLOWED_SORT_STRINGS = ["action:ASC", "action:DESC", "date:ASC", "date:DESC"];
6701
+ const validateFindManySchema = utils$2.yup.object().shape({
6702
+ page: utils$2.yup.number().integer().min(1),
6703
+ pageSize: utils$2.yup.number().integer().min(1).max(100),
6704
+ sort: utils$2.yup.mixed().oneOf(ALLOWED_SORT_STRINGS)
6705
+ }).required();
6706
+ const validateFindMany = utils$2.validateYupSchema(validateFindManySchema, { strict: false });
6707
+ const auditLogsController = {
6708
+ async findMany(ctx) {
6709
+ const { query } = ctx.request;
6710
+ await validateFindMany(query);
6711
+ const auditLogs = strapi.get("audit-logs");
6712
+ const body = await auditLogs.findMany(query);
6713
+ ctx.body = body;
6714
+ },
6715
+ async findOne(ctx) {
6716
+ const { id } = ctx.params;
6717
+ const auditLogs = strapi.get("audit-logs");
6718
+ const body = await auditLogs.findOne(id);
6719
+ ctx.body = body;
6720
+ strapi.telemetry.send("didWatchAnAuditLog");
6721
+ }
6722
+ };
6723
+ const getSanitizedUser = (user2) => {
6724
+ let displayName = user2.email;
6725
+ if (user2.username) {
6726
+ displayName = user2.username;
6727
+ } else if (user2.firstname && user2.lastname) {
6728
+ displayName = `${user2.firstname} ${user2.lastname}`;
6729
+ }
6730
+ return {
6731
+ id: user2.id,
6732
+ email: user2.email,
6733
+ displayName
6734
+ };
6735
+ };
6736
+ const createAuditLogsService = (strapi2) => {
6737
+ return {
6738
+ async saveEvent(event) {
6739
+ const { userId, ...rest } = event;
6740
+ const auditLog2 = { ...rest, user: userId };
6741
+ await strapi2.db?.query("admin::audit-log").create({ data: auditLog2 });
6742
+ return this;
6743
+ },
6744
+ async findMany(query) {
6745
+ const { results, pagination } = await strapi2.db?.query("admin::audit-log").findPage({
6746
+ populate: ["user"],
6747
+ select: ["action", "date", "payload"],
6748
+ ...strapi2.get("query-params").transform("admin::audit-log", query)
6749
+ });
6750
+ const sanitizedResults = results.map((result) => {
6751
+ const { user: user2, ...rest } = result;
6752
+ return {
6753
+ ...rest,
6754
+ user: user2 ? getSanitizedUser(user2) : null
6755
+ };
6756
+ });
6757
+ return {
6758
+ results: sanitizedResults,
6759
+ pagination
6760
+ };
6761
+ },
6762
+ async findOne(id) {
6763
+ const result = await strapi2.db?.query("admin::audit-log").findOne({
6764
+ where: { id },
6765
+ populate: ["user"],
6766
+ select: ["action", "date", "payload"]
6767
+ });
6768
+ if (!result) {
6769
+ return null;
6770
+ }
6771
+ const { user: user2, ...rest } = result;
6772
+ return {
6773
+ ...rest,
6774
+ user: user2 ? getSanitizedUser(user2) : null
6775
+ };
6776
+ },
6777
+ deleteExpiredEvents(expirationDate) {
6778
+ return strapi2.db?.query("admin::audit-log").deleteMany({
6779
+ where: {
6780
+ date: {
6781
+ $lt: expirationDate.toISOString()
6782
+ }
6783
+ }
6784
+ });
6785
+ }
6786
+ };
6787
+ };
6788
+ const DEFAULT_RETENTION_DAYS = 90;
6789
+ const defaultEvents = [
6790
+ "entry.create",
6791
+ "entry.update",
6792
+ "entry.delete",
6793
+ "entry.publish",
6794
+ "entry.unpublish",
6795
+ "media.create",
6796
+ "media.update",
6797
+ "media.delete",
6798
+ "media-folder.create",
6799
+ "media-folder.update",
6800
+ "media-folder.delete",
6801
+ "user.create",
6802
+ "user.update",
6803
+ "user.delete",
6804
+ "admin.auth.success",
6805
+ "admin.logout",
6806
+ "content-type.create",
6807
+ "content-type.update",
6808
+ "content-type.delete",
6809
+ "component.create",
6810
+ "component.update",
6811
+ "component.delete",
6812
+ "role.create",
6813
+ "role.update",
6814
+ "role.delete",
6815
+ "permission.create",
6816
+ "permission.update",
6817
+ "permission.delete"
6818
+ ];
6819
+ const getEventMap = (defaultEvents2) => {
6820
+ const getDefaultPayload = (...args) => args[0];
6821
+ return defaultEvents2.reduce((acc, event) => {
6822
+ acc[event] = getDefaultPayload;
6823
+ return acc;
6824
+ }, {});
6825
+ };
6826
+ const getRetentionDays = (strapi2) => {
6827
+ const featureConfig = strapi2.ee.features.get("audit-logs");
6828
+ const licenseRetentionDays = typeof featureConfig === "object" && featureConfig?.options.retentionDays;
6829
+ const userRetentionDays = strapi2.config.get("admin.auditLogs.retentionDays");
6830
+ if (licenseRetentionDays == null) {
6831
+ return userRetentionDays ?? DEFAULT_RETENTION_DAYS;
6832
+ }
6833
+ if (userRetentionDays && userRetentionDays < licenseRetentionDays) {
6834
+ return userRetentionDays;
6835
+ }
6836
+ return licenseRetentionDays;
6837
+ };
6838
+ const createAuditLogsLifecycleService = (strapi2) => {
6839
+ const state = {};
6840
+ const auditLogsService = strapi2.get("audit-logs");
6841
+ const eventMap = getEventMap(defaultEvents);
6842
+ const processEvent = (name2, ...args) => {
6843
+ const requestState = strapi2.requestContext.get()?.state;
6844
+ const isUsingAdminAuth = requestState?.route.info.type === "admin";
6845
+ const user2 = requestState?.user;
6846
+ if (!isUsingAdminAuth || !user2) {
6847
+ return null;
6848
+ }
6849
+ const getPayload = eventMap[name2];
6850
+ if (!getPayload) {
6851
+ return null;
6852
+ }
6853
+ const ignoredUids = ["plugin::upload.file", "plugin::upload.folder"];
6854
+ if (ignoredUids.includes(args[0]?.uid)) {
6855
+ return null;
6856
+ }
6857
+ return {
6858
+ action: name2,
6859
+ date: (/* @__PURE__ */ new Date()).toISOString(),
6860
+ payload: getPayload(...args) || {},
6861
+ userId: user2.id
6862
+ };
6863
+ };
6864
+ const handleEvent = async (name2, ...args) => {
6865
+ const processedEvent = processEvent(name2, ...args);
6866
+ if (processedEvent) {
6867
+ await auditLogsService.saveEvent(processedEvent);
6868
+ }
6869
+ };
6870
+ return {
6871
+ async register() {
6872
+ if (!state.eeEnableUnsubscribe) {
6873
+ state.eeEnableUnsubscribe = strapi2.eventHub.on("ee.enable", () => {
6874
+ this.destroy();
6875
+ this.register();
6876
+ });
6877
+ }
6878
+ if (!state.eeUpdateUnsubscribe) {
6879
+ state.eeUpdateUnsubscribe = strapi2.eventHub.on("ee.update", () => {
6880
+ this.destroy();
6881
+ this.register();
6882
+ });
6883
+ }
6884
+ state.eeDisableUnsubscribe = strapi2.eventHub.on("ee.disable", () => {
6885
+ this.destroy();
6886
+ });
6887
+ if (!strapi2.ee.features.isEnabled("audit-logs")) {
6888
+ return this;
6889
+ }
6890
+ state.eventHubUnsubscribe = strapi2.eventHub.subscribe(handleEvent);
6891
+ const retentionDays = getRetentionDays(strapi2);
6892
+ state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
6893
+ const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1e3);
6894
+ auditLogsService.deleteExpiredEvents(expirationDate);
6895
+ });
6896
+ return this;
6897
+ },
6898
+ unsubscribe() {
6899
+ if (state.eeDisableUnsubscribe) {
6900
+ state.eeDisableUnsubscribe();
6901
+ }
6902
+ if (state.eventHubUnsubscribe) {
6903
+ state.eventHubUnsubscribe();
6904
+ }
6905
+ if (state.deleteExpiredJob) {
6906
+ state.deleteExpiredJob.cancel();
6907
+ }
6908
+ return this;
6909
+ },
6910
+ destroy() {
6911
+ return this.unsubscribe();
6912
+ }
6913
+ };
6914
+ };
6915
+ const auditLog = {
6916
+ schema: {
6917
+ kind: "collectionType",
6918
+ collectionName: "strapi_audit_logs",
6919
+ info: {
6920
+ singularName: "audit-log",
6921
+ pluralName: "audit-logs",
6922
+ displayName: "Audit Log"
6923
+ },
6924
+ options: {
6925
+ timestamps: false
6926
+ },
6927
+ pluginOptions: {
6928
+ "content-manager": {
6929
+ visible: false
6930
+ },
6931
+ "content-type-builder": {
6932
+ visible: false
6933
+ }
6934
+ },
6935
+ attributes: {
6936
+ action: {
6937
+ type: "string",
6938
+ required: true
6939
+ },
6940
+ date: {
6941
+ type: "datetime",
6942
+ required: true
6943
+ },
6944
+ user: {
6945
+ type: "relation",
6946
+ relation: "oneToOne",
6947
+ target: "admin::user"
6948
+ },
6949
+ payload: {
6950
+ type: "json"
6951
+ }
6952
+ }
6953
+ }
6954
+ };
6955
+ const getAdminEE = () => {
6956
+ const eeAdmin = {
6957
+ register,
6958
+ bootstrap,
6959
+ destroy,
6960
+ contentTypes: {
6961
+ // Always register the audit-log content type to prevent data loss
6962
+ "audit-log": auditLog,
6963
+ ...adminContentTypes
6964
+ },
6965
+ services,
6966
+ controllers,
6967
+ routes
6968
+ };
6969
+ if (strapi.config.get("admin.auditLogs.enabled", true) && strapi.ee.features.isEnabled("audit-logs")) {
6970
+ return {
6971
+ ...eeAdmin,
6972
+ controllers: {
6973
+ ...eeAdmin.controllers,
6974
+ "audit-logs": auditLogsController
6975
+ },
6976
+ routes: {
6977
+ ...eeAdmin.routes,
6978
+ "audit-logs": auditLogsRoutes
6979
+ },
6980
+ async register({ strapi: strapi2 }) {
6981
+ await eeAdmin.register({ strapi: strapi2 });
6982
+ strapi2.add("audit-logs", createAuditLogsService(strapi2));
6983
+ const auditLogsLifecycle = createAuditLogsLifecycleService(strapi2);
6984
+ strapi2.add("audit-logs-lifecycle", auditLogsLifecycle);
6985
+ await auditLogsLifecycle.register();
6986
+ },
6987
+ async destroy({ strapi: strapi2 }) {
6988
+ strapi2.get("audit-logs-lifecycle").destroy();
6989
+ await eeAdmin.destroy({ strapi: strapi2 });
6990
+ }
6991
+ };
6992
+ }
6993
+ return eeAdmin;
6994
+ };
6995
+ let admin = {
6996
+ bootstrap: bootstrap$1,
6997
+ register: register$2,
6998
+ destroy: destroy$1,
6999
+ config,
7000
+ policies,
7001
+ routes: routes$1,
7002
+ services: services$1,
7003
+ controllers: controllers$1,
7004
+ contentTypes,
7005
+ middlewares: middlewares$1
7006
+ };
7007
+ const mergeRoutes = (a, b, key) => {
7008
+ return ___namespace.default.isArray(a) && ___namespace.default.isArray(b) && key === "routes" ? a.concat(b) : void 0;
7009
+ };
7010
+ if (strapi.EE) {
7011
+ admin = ___namespace.default.mergeWith({}, admin, getAdminEE(), mergeRoutes);
7012
+ }
7013
+ const admin$1 = admin;
7014
+ module.exports = admin$1;
5656
7015
  //# sourceMappingURL=index.js.map