@strapi/admin 5.0.0-beta.15 → 5.0.0-beta.17

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 (222) hide show
  1. package/dist/admin/{AdminSeatInfo-bN561B3v.js → AdminSeatInfo-E8azTFQY.js} +3 -3
  2. package/dist/admin/{AdminSeatInfo-bN561B3v.js.map → AdminSeatInfo-E8azTFQY.js.map} +1 -1
  3. package/dist/admin/{AdminSeatInfo-88MFOtJf.mjs → AdminSeatInfo-Q_hUNC5B.mjs} +3 -3
  4. package/dist/admin/{AdminSeatInfo-88MFOtJf.mjs.map → AdminSeatInfo-Q_hUNC5B.mjs.map} +1 -1
  5. package/dist/admin/{ApplicationInfoPage-4riPrWfM.mjs → ApplicationInfoPage-PFhE7Xnk.mjs} +102 -87
  6. package/dist/admin/ApplicationInfoPage-PFhE7Xnk.mjs.map +1 -0
  7. package/dist/admin/{ApplicationInfoPage-SrB2vAt3.js → ApplicationInfoPage-uauJZZYC.js} +102 -87
  8. package/dist/admin/ApplicationInfoPage-uauJZZYC.js.map +1 -0
  9. package/dist/admin/{AuthResponse-pxi-Fo2T.mjs → AuthResponse-J8A48xdo.mjs} +9 -5
  10. package/dist/admin/AuthResponse-J8A48xdo.mjs.map +1 -0
  11. package/dist/admin/{AuthResponse-PxLid1A-.js → AuthResponse-KlTDmm2i.js} +9 -5
  12. package/dist/admin/AuthResponse-KlTDmm2i.js.map +1 -0
  13. package/dist/admin/{AuthenticatedLayout-D4r78UXY.mjs → AuthenticatedLayout-VIuBsgDs.mjs} +54 -38
  14. package/dist/admin/AuthenticatedLayout-VIuBsgDs.mjs.map +1 -0
  15. package/dist/admin/{AuthenticatedLayout-PaZ_GxRi.js → AuthenticatedLayout-d7_n6FmU.js} +54 -38
  16. package/dist/admin/AuthenticatedLayout-d7_n6FmU.js.map +1 -0
  17. package/dist/admin/{CreatePage-bLZm6CJE.js → CreatePage-MMX6oZoW.js} +3 -3
  18. package/dist/admin/{CreatePage-bLZm6CJE.js.map → CreatePage-MMX6oZoW.js.map} +1 -1
  19. package/dist/admin/{CreatePage-F6fvKZob.js → CreatePage-ViD-jEO0.js} +7 -8
  20. package/dist/admin/CreatePage-ViD-jEO0.js.map +1 -0
  21. package/dist/admin/{CreatePage-wxAt7QqY.mjs → CreatePage-YanD3LzN.mjs} +8 -9
  22. package/dist/admin/CreatePage-YanD3LzN.mjs.map +1 -0
  23. package/dist/admin/{CreatePage-3gwxKkEs.mjs → CreatePage-sQhXYEHZ.mjs} +3 -3
  24. package/dist/admin/{CreatePage-3gwxKkEs.mjs.map → CreatePage-sQhXYEHZ.mjs.map} +1 -1
  25. package/dist/admin/{CreateView-B40DlQv2.js → CreateView-AaFxFMg-.js} +3 -3
  26. package/dist/admin/{CreateView-B40DlQv2.js.map → CreateView-AaFxFMg-.js.map} +1 -1
  27. package/dist/admin/{CreateView-jAmWwak9.mjs → CreateView-EjZipm0M.mjs} +3 -3
  28. package/dist/admin/{CreateView-jAmWwak9.mjs.map → CreateView-EjZipm0M.mjs.map} +1 -1
  29. package/dist/admin/{CreateView-HAX7aTHe.js → CreateView-MLH8CYrQ.js} +3 -3
  30. package/dist/admin/{CreateView-HAX7aTHe.js.map → CreateView-MLH8CYrQ.js.map} +1 -1
  31. package/dist/admin/{CreateView-snr7_ius.mjs → CreateView-acqN-xXC.mjs} +3 -3
  32. package/dist/admin/{CreateView-snr7_ius.mjs.map → CreateView-acqN-xXC.mjs.map} +1 -1
  33. package/dist/admin/{EditPage-OvVR5f1a.mjs → EditPage-5eQw0jBV.mjs} +7 -7
  34. package/dist/admin/EditPage-5eQw0jBV.mjs.map +1 -0
  35. package/dist/admin/{EditPage-bXbL-O3j.js → EditPage-78p8KWFR.js} +5 -5
  36. package/dist/admin/{EditPage-bXbL-O3j.js.map → EditPage-78p8KWFR.js.map} +1 -1
  37. package/dist/admin/{EditPage-cqfT930M.js → EditPage-KJTE4kw9.js} +7 -7
  38. package/dist/admin/EditPage-KJTE4kw9.js.map +1 -0
  39. package/dist/admin/{EditPage-Ntg9c6w4.mjs → EditPage-TXWa1YRa.mjs} +74 -69
  40. package/dist/admin/EditPage-TXWa1YRa.mjs.map +1 -0
  41. package/dist/admin/{EditPage-y-p1hcBo.mjs → EditPage-p9R7h8rE.mjs} +5 -5
  42. package/dist/admin/{EditPage-y-p1hcBo.mjs.map → EditPage-p9R7h8rE.mjs.map} +1 -1
  43. package/dist/admin/{EditPage-vf8fzyxu.js → EditPage-r7acka-l.js} +73 -68
  44. package/dist/admin/EditPage-r7acka-l.js.map +1 -0
  45. package/dist/admin/{EditView-r9iOay0z.mjs → EditView-7DiCGrzh.mjs} +4 -4
  46. package/dist/admin/{EditView-r9iOay0z.mjs.map → EditView-7DiCGrzh.mjs.map} +1 -1
  47. package/dist/admin/{EditView-EhfWwYzX.js → EditView-y8fjg8FS.js} +4 -4
  48. package/dist/admin/{EditView-EhfWwYzX.js.map → EditView-y8fjg8FS.js.map} +1 -1
  49. package/dist/admin/{EditViewPage-yWfbZUMI.js → EditViewPage-OX_dbPyo.js} +8 -7
  50. package/dist/admin/EditViewPage-OX_dbPyo.js.map +1 -0
  51. package/dist/admin/{EditViewPage-Yxe8qMnO.mjs → EditViewPage-XWYw8TsD.mjs} +8 -7
  52. package/dist/admin/EditViewPage-XWYw8TsD.mjs.map +1 -0
  53. package/dist/admin/{EventsTable-4QM_hyc_.js → EventsTable-dcNIHJqi.js} +2 -2
  54. package/dist/admin/{EventsTable-4QM_hyc_.js.map → EventsTable-dcNIHJqi.js.map} +1 -1
  55. package/dist/admin/{EventsTable-5WK56yWc.mjs → EventsTable-z1KahewH.mjs} +2 -2
  56. package/dist/admin/{EventsTable-5WK56yWc.mjs.map → EventsTable-z1KahewH.mjs.map} +1 -1
  57. package/dist/admin/{HomePage-LHqf388z.js → HomePage-0rE15V52.js} +4 -4
  58. package/dist/admin/{HomePage-LHqf388z.js.map → HomePage-0rE15V52.js.map} +1 -1
  59. package/dist/admin/{HomePage-9xY9Tdvi.mjs → HomePage-P2PUGwu7.mjs} +3 -3
  60. package/dist/admin/{HomePage-9xY9Tdvi.mjs.map → HomePage-P2PUGwu7.mjs.map} +1 -1
  61. package/dist/admin/{HomePage-LKiwqlwz.js → HomePage-Pg-VQo7w.js} +3 -3
  62. package/dist/admin/{HomePage-LKiwqlwz.js.map → HomePage-Pg-VQo7w.js.map} +1 -1
  63. package/dist/admin/{HomePage-zlfOw948.mjs → HomePage-Z7qCJ7wG.mjs} +4 -4
  64. package/dist/admin/{HomePage-zlfOw948.mjs.map → HomePage-Z7qCJ7wG.mjs.map} +1 -1
  65. package/dist/admin/{InstalledPluginsPage-A6YSlUwY.js → InstalledPluginsPage-XgUBxyho.js} +4 -4
  66. package/dist/admin/{InstalledPluginsPage-A6YSlUwY.js.map → InstalledPluginsPage-XgUBxyho.js.map} +1 -1
  67. package/dist/admin/{InstalledPluginsPage-4NTufTI5.mjs → InstalledPluginsPage-cr-b-5nz.mjs} +4 -4
  68. package/dist/admin/{InstalledPluginsPage-4NTufTI5.mjs.map → InstalledPluginsPage-cr-b-5nz.mjs.map} +1 -1
  69. package/dist/admin/{Layout-iWqiOMqS.js → Layout-lS-DCtnx.js} +5 -5
  70. package/dist/admin/{Layout-iWqiOMqS.js.map → Layout-lS-DCtnx.js.map} +1 -1
  71. package/dist/admin/{Layout-gZIOq0_R.mjs → Layout-q1Gqyxbc.mjs} +5 -5
  72. package/dist/admin/{Layout-gZIOq0_R.mjs.map → Layout-q1Gqyxbc.mjs.map} +1 -1
  73. package/dist/admin/{ListPage-BW0aZSph.mjs → ListPage-04RsATDJ.mjs} +20 -16
  74. package/dist/admin/ListPage-04RsATDJ.mjs.map +1 -0
  75. package/dist/admin/{ListPage-TCdYrmGT.js → ListPage-7yMNw8Ha.js} +3 -3
  76. package/dist/admin/{ListPage-TCdYrmGT.js.map → ListPage-7yMNw8Ha.js.map} +1 -1
  77. package/dist/admin/{ListPage-Ljo10Bbl.mjs → ListPage-Dzxh0Ian.mjs} +5 -5
  78. package/dist/admin/{ListPage-Ljo10Bbl.mjs.map → ListPage-Dzxh0Ian.mjs.map} +1 -1
  79. package/dist/admin/{ListPage-h7v2mI1i.mjs → ListPage-PainZ0GB.mjs} +3 -3
  80. package/dist/admin/{ListPage-h7v2mI1i.mjs.map → ListPage-PainZ0GB.mjs.map} +1 -1
  81. package/dist/admin/{ListPage-eLv00Yhu.mjs → ListPage-Y1a3I4Ha.mjs} +5 -15
  82. package/dist/admin/ListPage-Y1a3I4Ha.mjs.map +1 -0
  83. package/dist/admin/{ListPage-elT4P5n6.mjs → ListPage-hhNaNHVm.mjs} +3 -3
  84. package/dist/admin/{ListPage-elT4P5n6.mjs.map → ListPage-hhNaNHVm.mjs.map} +1 -1
  85. package/dist/admin/{ListPage-LRpkzss9.js → ListPage-iBF1eS8Y.js} +3 -3
  86. package/dist/admin/{ListPage-LRpkzss9.js.map → ListPage-iBF1eS8Y.js.map} +1 -1
  87. package/dist/admin/{ListPage-FfMMQFjS.js → ListPage-q3tpmtLi.js} +19 -15
  88. package/dist/admin/ListPage-q3tpmtLi.js.map +1 -0
  89. package/dist/admin/{ListPage-pRUjrxY6.js → ListPage-x1iPiYtX.js} +5 -15
  90. package/dist/admin/ListPage-x1iPiYtX.js.map +1 -0
  91. package/dist/admin/{ListPage-QS9QtHAX.js → ListPage-zE35PWx8.js} +5 -5
  92. package/dist/admin/{ListPage-QS9QtHAX.js.map → ListPage-zE35PWx8.js.map} +1 -1
  93. package/dist/admin/{ListView-6Oir8w-X.mjs → ListView-2KBVy5Ly.mjs} +4 -4
  94. package/dist/admin/{ListView-6Oir8w-X.mjs.map → ListView-2KBVy5Ly.mjs.map} +1 -1
  95. package/dist/admin/{ListView-1MiCYr49.js → ListView-FKQpcsFo.js} +4 -4
  96. package/dist/admin/{ListView-1MiCYr49.js.map → ListView-FKQpcsFo.js.map} +1 -1
  97. package/dist/admin/{ListView-X1ETWG_9.mjs → ListView-SWQ5Zvi2.mjs} +4 -4
  98. package/dist/admin/{ListView-X1ETWG_9.mjs.map → ListView-SWQ5Zvi2.mjs.map} +1 -1
  99. package/dist/admin/{ListView-imrXmGsc.js → ListView-XkqCB0-A.js} +4 -4
  100. package/dist/admin/{ListView-imrXmGsc.js.map → ListView-XkqCB0-A.js.map} +1 -1
  101. package/dist/admin/{Login-NcdGNusr.mjs → Login-RnIPQa7v.mjs} +3 -3
  102. package/dist/admin/{Login-NcdGNusr.mjs.map → Login-RnIPQa7v.mjs.map} +1 -1
  103. package/dist/admin/{Login-jOuQnN1x.js → Login-eMGtYSNk.js} +3 -3
  104. package/dist/admin/{Login-jOuQnN1x.js.map → Login-eMGtYSNk.js.map} +1 -1
  105. package/dist/admin/{MagicLinkEE-rpaAfwJt.mjs → MagicLinkEE-YNRrLLoh.mjs} +3 -3
  106. package/dist/admin/{MagicLinkEE-rpaAfwJt.mjs.map → MagicLinkEE-YNRrLLoh.mjs.map} +1 -1
  107. package/dist/admin/{MagicLinkEE-b7dc_Y_I.js → MagicLinkEE-h2wSIn-F.js} +3 -3
  108. package/dist/admin/{MagicLinkEE-b7dc_Y_I.js.map → MagicLinkEE-h2wSIn-F.js.map} +1 -1
  109. package/dist/admin/{MarketplacePage-L39wO9oD.mjs → MarketplacePage-4pyIIRHQ.mjs} +3 -3
  110. package/dist/admin/{MarketplacePage-L39wO9oD.mjs.map → MarketplacePage-4pyIIRHQ.mjs.map} +1 -1
  111. package/dist/admin/{MarketplacePage-5bBhrExw.js → MarketplacePage-6PR7MEfG.js} +3 -3
  112. package/dist/admin/{MarketplacePage-5bBhrExw.js.map → MarketplacePage-6PR7MEfG.js.map} +1 -1
  113. package/dist/admin/{Permissions-4O88Ora2.js → Permissions-SuZE5tW3.js} +131 -100
  114. package/dist/admin/Permissions-SuZE5tW3.js.map +1 -0
  115. package/dist/admin/{Permissions--am-uI7v.mjs → Permissions-oxdduJgE.mjs} +123 -92
  116. package/dist/admin/Permissions-oxdduJgE.mjs.map +1 -0
  117. package/dist/admin/{PrivateRoute-nUWu4Q7I.mjs → PrivateRoute-4oRTB_tX.mjs} +2 -2
  118. package/dist/admin/{PrivateRoute-nUWu4Q7I.mjs.map → PrivateRoute-4oRTB_tX.mjs.map} +1 -1
  119. package/dist/admin/{PrivateRoute-SKQvazOx.js → PrivateRoute-ndqg7K6H.js} +2 -2
  120. package/dist/admin/{PrivateRoute-SKQvazOx.js.map → PrivateRoute-ndqg7K6H.js.map} +1 -1
  121. package/dist/admin/{ProfilePage-LlLgJbpg.mjs → ProfilePage-FffmoWIh.mjs} +4 -4
  122. package/dist/admin/{ProfilePage-LlLgJbpg.mjs.map → ProfilePage-FffmoWIh.mjs.map} +1 -1
  123. package/dist/admin/{ProfilePage-ytMQxipv.js → ProfilePage-b_Mo0Yc4.js} +4 -4
  124. package/dist/admin/{ProfilePage-ytMQxipv.js.map → ProfilePage-b_Mo0Yc4.js.map} +1 -1
  125. package/dist/admin/{PurchaseAuditLogs-fcxT8gaM.mjs → PurchaseAuditLogs-3Lk3BvUv.mjs} +2 -2
  126. package/dist/admin/{PurchaseAuditLogs-fcxT8gaM.mjs.map → PurchaseAuditLogs-3Lk3BvUv.mjs.map} +1 -1
  127. package/dist/admin/{PurchaseAuditLogs-igIXEbDa.js → PurchaseAuditLogs-reC3qxMA.js} +2 -2
  128. package/dist/admin/{PurchaseAuditLogs-igIXEbDa.js.map → PurchaseAuditLogs-reC3qxMA.js.map} +1 -1
  129. package/dist/admin/{PurchaseSingleSignOn-rBedulib.js → PurchaseSingleSignOn-5QBEibgx.js} +2 -2
  130. package/dist/admin/{PurchaseSingleSignOn-rBedulib.js.map → PurchaseSingleSignOn-5QBEibgx.js.map} +1 -1
  131. package/dist/admin/{PurchaseSingleSignOn-Yi53tr16.mjs → PurchaseSingleSignOn-QursmHpT.mjs} +2 -2
  132. package/dist/admin/{PurchaseSingleSignOn-Yi53tr16.mjs.map → PurchaseSingleSignOn-QursmHpT.mjs.map} +1 -1
  133. package/dist/admin/{SelectRoles-cVdbJrmg.mjs → SelectRoles-9iIOeIWe.mjs} +4 -4
  134. package/dist/admin/{SelectRoles-cVdbJrmg.mjs.map → SelectRoles-9iIOeIWe.mjs.map} +1 -1
  135. package/dist/admin/{SelectRoles-w_X4daWE.js → SelectRoles-Qr3VqW-E.js} +4 -4
  136. package/dist/admin/{SelectRoles-w_X4daWE.js.map → SelectRoles-Qr3VqW-E.js.map} +1 -1
  137. package/dist/admin/{SingleSignOnPage-735zOQu9.mjs → SingleSignOnPage-cgcXm7Wu.mjs} +4 -4
  138. package/dist/admin/{SingleSignOnPage-735zOQu9.mjs.map → SingleSignOnPage-cgcXm7Wu.mjs.map} +1 -1
  139. package/dist/admin/{SingleSignOnPage-l0a57ON-.js → SingleSignOnPage-quXoo0Ac.js} +4 -4
  140. package/dist/admin/{SingleSignOnPage-l0a57ON-.js.map → SingleSignOnPage-quXoo0Ac.js.map} +1 -1
  141. package/dist/admin/{Table-Zil6hLRM.mjs → Table-9nnSgwz6.mjs} +3 -3
  142. package/dist/admin/{Table-Zil6hLRM.mjs.map → Table-9nnSgwz6.mjs.map} +1 -1
  143. package/dist/admin/{Table-tm8Fveiy.js → Table-vNz8UTdb.js} +3 -3
  144. package/dist/admin/{Table-tm8Fveiy.js.map → Table-vNz8UTdb.js.map} +1 -1
  145. package/dist/admin/{Theme-QO8ntQqL.js → Theme-7W0we6BI.js} +122 -55
  146. package/dist/admin/Theme-7W0we6BI.js.map +1 -0
  147. package/dist/admin/{Theme-vNSAMTAv.mjs → Theme-PrUuuGtN.mjs} +115 -56
  148. package/dist/admin/Theme-PrUuuGtN.mjs.map +1 -0
  149. package/dist/admin/{TokenTypeSelect-LHiQJBiN.mjs → TokenTypeSelect-DwoCIIYk.mjs} +3 -3
  150. package/dist/admin/{TokenTypeSelect-LHiQJBiN.mjs.map → TokenTypeSelect-DwoCIIYk.mjs.map} +1 -1
  151. package/dist/admin/{TokenTypeSelect-rdPehaJb.js → TokenTypeSelect-P6rFrLBL.js} +3 -3
  152. package/dist/admin/{TokenTypeSelect-rdPehaJb.js.map → TokenTypeSelect-P6rFrLBL.js.map} +1 -1
  153. package/dist/admin/{UseCasePage-SihnskpK.js → UseCasePage-Xq1aQpd3.js} +4 -4
  154. package/dist/admin/{UseCasePage-SihnskpK.js.map → UseCasePage-Xq1aQpd3.js.map} +1 -1
  155. package/dist/admin/{UseCasePage-6k7qy_-Q.mjs → UseCasePage-fouq_OE3.mjs} +4 -4
  156. package/dist/admin/{UseCasePage-6k7qy_-Q.mjs.map → UseCasePage-fouq_OE3.mjs.map} +1 -1
  157. package/dist/admin/{constants-ssMI3C8G.mjs → constants-5X5CrT_f.mjs} +3 -3
  158. package/dist/admin/{constants-ssMI3C8G.mjs.map → constants-5X5CrT_f.mjs.map} +1 -1
  159. package/dist/admin/{constants-fpPGwJ8u.js → constants-OB9o4uYY.js} +3 -3
  160. package/dist/admin/{constants-fpPGwJ8u.js.map → constants-OB9o4uYY.js.map} +1 -1
  161. package/dist/admin/{en-GunF9CPV.mjs → en-0Ld-ipyI.mjs} +2 -2
  162. package/dist/admin/{en-GunF9CPV.mjs.map → en-0Ld-ipyI.mjs.map} +1 -1
  163. package/dist/admin/{en-Wdy8NEIO.js → en-TbnMBjZf.js} +2 -2
  164. package/dist/admin/{en-Wdy8NEIO.js.map → en-TbnMBjZf.js.map} +1 -1
  165. package/dist/admin/{index-IU9ZrCxt.mjs → index-Hmzyjkc3.mjs} +69 -116
  166. package/dist/admin/index-Hmzyjkc3.mjs.map +1 -0
  167. package/dist/admin/{index-QO9bLgSs.js → index-m8Ai_pOs.js} +82 -132
  168. package/dist/admin/index-m8Ai_pOs.js.map +1 -0
  169. package/dist/admin/index.js +2 -2
  170. package/dist/admin/index.mjs +2 -2
  171. package/dist/admin/{selectors-jiFpk43E.mjs → selectors-ZpHhvPK4.mjs} +2 -2
  172. package/dist/admin/{selectors-jiFpk43E.mjs.map → selectors-ZpHhvPK4.mjs.map} +1 -1
  173. package/dist/admin/{selectors-RspXIUtJ.js → selectors-zQKcCNuz.js} +2 -2
  174. package/dist/admin/{selectors-RspXIUtJ.js.map → selectors-zQKcCNuz.js.map} +1 -1
  175. package/dist/admin/src/features/Auth.d.ts +2 -2
  176. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +0 -6
  177. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.d.ts +2 -1
  178. package/dist/admin/src/reducer.d.ts +7 -2
  179. package/dist/admin/test.js +10 -9
  180. package/dist/admin/test.js.map +1 -1
  181. package/dist/admin/test.mjs +10 -9
  182. package/dist/admin/test.mjs.map +1 -1
  183. package/dist/admin/tests/store.d.ts +2 -1
  184. package/dist/admin/tests/utils.d.ts +2 -1
  185. package/dist/admin/{useAdminRoles-jzWbGGNU.mjs → useAdminRoles-34smo96W.mjs} +2 -2
  186. package/dist/admin/{useAdminRoles-jzWbGGNU.mjs.map → useAdminRoles-34smo96W.mjs.map} +1 -1
  187. package/dist/admin/{useAdminRoles-cgdns5Hp.js → useAdminRoles-eq7WFjQ6.js} +2 -2
  188. package/dist/admin/{useAdminRoles-cgdns5Hp.js.map → useAdminRoles-eq7WFjQ6.js.map} +1 -1
  189. package/dist/admin/{useLicenseLimitNotification-Nh_v-hN2.mjs → useLicenseLimitNotification-PaR7jmqd.mjs} +2 -2
  190. package/dist/admin/{useLicenseLimitNotification-Nh_v-hN2.mjs.map → useLicenseLimitNotification-PaR7jmqd.mjs.map} +1 -1
  191. package/dist/admin/{useLicenseLimitNotification-ZwMojvCa.js → useLicenseLimitNotification-g1vq6nzk.js} +2 -2
  192. package/dist/admin/{useLicenseLimitNotification-ZwMojvCa.js.map → useLicenseLimitNotification-g1vq6nzk.js.map} +1 -1
  193. package/dist/admin/{validation-jA_N2jXN.mjs → validation-C04Q7ban.mjs} +2 -2
  194. package/dist/admin/{validation-jA_N2jXN.mjs.map → validation-C04Q7ban.mjs.map} +1 -1
  195. package/dist/admin/{validation-75gMLH7F.js → validation-vOypT9l2.js} +2 -2
  196. package/dist/admin/{validation-75gMLH7F.js.map → validation-vOypT9l2.js.map} +1 -1
  197. package/dist/package.json.d.ts +7 -7
  198. package/package.json +8 -8
  199. package/dist/admin/ApplicationInfoPage-4riPrWfM.mjs.map +0 -1
  200. package/dist/admin/ApplicationInfoPage-SrB2vAt3.js.map +0 -1
  201. package/dist/admin/AuthResponse-PxLid1A-.js.map +0 -1
  202. package/dist/admin/AuthResponse-pxi-Fo2T.mjs.map +0 -1
  203. package/dist/admin/AuthenticatedLayout-D4r78UXY.mjs.map +0 -1
  204. package/dist/admin/AuthenticatedLayout-PaZ_GxRi.js.map +0 -1
  205. package/dist/admin/CreatePage-F6fvKZob.js.map +0 -1
  206. package/dist/admin/CreatePage-wxAt7QqY.mjs.map +0 -1
  207. package/dist/admin/EditPage-Ntg9c6w4.mjs.map +0 -1
  208. package/dist/admin/EditPage-OvVR5f1a.mjs.map +0 -1
  209. package/dist/admin/EditPage-cqfT930M.js.map +0 -1
  210. package/dist/admin/EditPage-vf8fzyxu.js.map +0 -1
  211. package/dist/admin/EditViewPage-Yxe8qMnO.mjs.map +0 -1
  212. package/dist/admin/EditViewPage-yWfbZUMI.js.map +0 -1
  213. package/dist/admin/ListPage-BW0aZSph.mjs.map +0 -1
  214. package/dist/admin/ListPage-FfMMQFjS.js.map +0 -1
  215. package/dist/admin/ListPage-eLv00Yhu.mjs.map +0 -1
  216. package/dist/admin/ListPage-pRUjrxY6.js.map +0 -1
  217. package/dist/admin/Permissions--am-uI7v.mjs.map +0 -1
  218. package/dist/admin/Permissions-4O88Ora2.js.map +0 -1
  219. package/dist/admin/Theme-QO8ntQqL.js.map +0 -1
  220. package/dist/admin/Theme-vNSAMTAv.mjs.map +0 -1
  221. package/dist/admin/index-IU9ZrCxt.mjs.map +0 -1
  222. package/dist/admin/index-QO9bLgSs.js.map +0 -1
@@ -9,6 +9,8 @@ import { EmptyPermissions, EmptyDocuments } from '@strapi/icons/symbols';
9
9
  import { useLocation, useNavigate } from 'react-router-dom';
10
10
  import * as ContextSelector from 'use-context-selector';
11
11
  import { b as adminApi, e as useInitQuery, f as useTelemetryPropertiesQuery, g as useProjectSettingsQuery, h as useUpdateProjectSettingsMutation } from './admin-B6AW0Kov.mjs';
12
+ import clone from 'lodash/clone';
13
+ import toPath from 'lodash/toPath';
12
14
  import isEqual from 'lodash/isEqual';
13
15
  import axios from 'axios';
14
16
  import defaultsDeep from 'lodash/defaultsDeep';
@@ -63,8 +65,19 @@ const createTypedSelector = (selector) => createSelector((state) => state, selec
63
65
 
64
66
  const [StrapiAppProvider, useStrapiApp] = createContext("StrapiApp");
65
67
 
68
+ const STORAGE_KEYS$1 = {
69
+ TOKEN: "jwtToken",
70
+ USER: "userInfo"
71
+ };
66
72
  const THEME_LOCAL_STORAGE_KEY = "STRAPI_THEME";
67
73
  const LANGUAGE_LOCAL_STORAGE_KEY = "strapi-admin-language";
74
+ const getStoredToken = () => {
75
+ const token = localStorage.getItem(STORAGE_KEYS$1.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS$1.TOKEN);
76
+ if (typeof token === "string") {
77
+ return JSON.parse(token);
78
+ }
79
+ return null;
80
+ };
68
81
  const adminSlice = createSlice({
69
82
  name: "admin",
70
83
  initialState: () => {
@@ -77,7 +90,8 @@ const adminSlice = createSlice({
77
90
  theme: {
78
91
  availableThemes: [],
79
92
  currentTheme: localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || "system"
80
- }
93
+ },
94
+ token: null
81
95
  };
82
96
  },
83
97
  reducers: {
@@ -92,11 +106,30 @@ const adminSlice = createSlice({
92
106
  state.language.locale = action.payload;
93
107
  window.localStorage.setItem(LANGUAGE_LOCAL_STORAGE_KEY, action.payload);
94
108
  document.documentElement.setAttribute("lang", action.payload);
109
+ },
110
+ setToken(state, action) {
111
+ state.token = action.payload;
112
+ },
113
+ login(state, action) {
114
+ const { token, persist } = action.payload;
115
+ if (!persist) {
116
+ window.sessionStorage.setItem(STORAGE_KEYS$1.TOKEN, JSON.stringify(token));
117
+ } else {
118
+ window.localStorage.setItem(STORAGE_KEYS$1.TOKEN, JSON.stringify(token));
119
+ }
120
+ state.token = token;
121
+ },
122
+ logout(state) {
123
+ state.token = null;
124
+ window.localStorage.removeItem(STORAGE_KEYS$1.TOKEN);
125
+ window.localStorage.removeItem(STORAGE_KEYS$1.USER);
126
+ window.sessionStorage.removeItem(STORAGE_KEYS$1.TOKEN);
127
+ window.sessionStorage.removeItem(STORAGE_KEYS$1.USER);
95
128
  }
96
129
  }
97
130
  });
98
131
  const reducer = adminSlice.reducer;
99
- const { setAppTheme, setAvailableThemes, setLocale } = adminSlice.actions;
132
+ const { setAppTheme, setAvailableThemes, setLocale, setToken, logout, login } = adminSlice.actions;
100
133
 
101
134
  const authService = adminApi.enhanceEndpoints({
102
135
  addTagTypes: ["User", "Me", "ProvidersOptions"]
@@ -290,17 +323,15 @@ const STORAGE_KEYS = {
290
323
  TOKEN: "jwtToken",
291
324
  USER: "userInfo"
292
325
  };
293
- const AuthProvider = ({ children, _defaultPermissions = [] }) => {
326
+ const AuthProvider = ({
327
+ children,
328
+ _defaultPermissions = [],
329
+ _disableRenewToken = false
330
+ }) => {
294
331
  const dispatch = useTypedDispatch();
295
332
  const runRbacMiddleware = useStrapiApp("AuthProvider", (state) => state.rbac.run);
296
333
  const location = useLocation();
297
- const [token, setToken] = React.useState(() => {
298
- const token2 = localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN);
299
- if (typeof token2 === "string") {
300
- return JSON.parse(token2);
301
- }
302
- return null;
303
- });
334
+ const token = useTypedSelector((state) => state.admin_app.token ?? null);
304
335
  const { data: user, isLoading: isLoadingUser } = useGetMeQuery(void 0, {
305
336
  /**
306
337
  * If there's no token, we don't try to fetch
@@ -320,26 +351,26 @@ const AuthProvider = ({ children, _defaultPermissions = [] }) => {
320
351
  const [loginMutation] = useLoginMutation();
321
352
  const [renewTokenMutation] = useRenewTokenMutation();
322
353
  const [logoutMutation] = useLogoutMutation();
323
- const clearStorage = React.useCallback(() => {
324
- localStorage.removeItem(STORAGE_KEYS.TOKEN);
325
- localStorage.removeItem(STORAGE_KEYS.USER);
326
- sessionStorage.removeItem(STORAGE_KEYS.TOKEN);
327
- sessionStorage.removeItem(STORAGE_KEYS.USER);
328
- setToken(null);
329
- }, []);
354
+ const clearStateAndLogout = React.useCallback(() => {
355
+ dispatch(adminApi.util.resetApiState());
356
+ dispatch(logout());
357
+ navigate("/auth/login");
358
+ }, [dispatch, navigate]);
330
359
  React.useEffect(() => {
331
- const token2 = localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN);
332
- if (token2) {
333
- renewTokenMutation({ token: JSON.parse(token2) }).then((res) => {
360
+ if (token && !_disableRenewToken) {
361
+ renewTokenMutation({ token }).then((res) => {
334
362
  if ("data" in res) {
335
- setToken(res.data.token);
363
+ dispatch(
364
+ login({
365
+ token: res.data.token
366
+ })
367
+ );
336
368
  } else {
337
- clearStorage();
338
- navigate("/auth/login");
369
+ clearStateAndLogout();
339
370
  }
340
371
  });
341
372
  }
342
- }, [renewTokenMutation, clearStorage, navigate]);
373
+ }, [token, dispatch, renewTokenMutation, clearStateAndLogout, _disableRenewToken]);
343
374
  React.useEffect(() => {
344
375
  if (user) {
345
376
  if (user.preferedLanguage) {
@@ -347,16 +378,10 @@ const AuthProvider = ({ children, _defaultPermissions = [] }) => {
347
378
  }
348
379
  }
349
380
  }, [dispatch, user]);
350
- React.useEffect(() => {
351
- if (token) {
352
- storeToken(token, false);
353
- }
354
- }, [token]);
355
381
  React.useEffect(() => {
356
382
  const handleUserStorageChange = (event) => {
357
383
  if (event.key === STORAGE_KEYS.USER && event.newValue === null) {
358
- clearStorage();
359
- navigate("/auth/login");
384
+ clearStateAndLogout();
360
385
  }
361
386
  };
362
387
  window.addEventListener("storage", handleUserStorageChange);
@@ -364,24 +389,26 @@ const AuthProvider = ({ children, _defaultPermissions = [] }) => {
364
389
  window.removeEventListener("storage", handleUserStorageChange);
365
390
  };
366
391
  });
367
- const login = React.useCallback(
392
+ const login$1 = React.useCallback(
368
393
  async ({ rememberMe, ...body }) => {
369
394
  const res = await loginMutation(body);
370
395
  if ("data" in res) {
371
396
  const { token: token2 } = res.data;
372
- storeToken(token2, rememberMe);
373
- setToken(token2);
397
+ dispatch(
398
+ login({
399
+ token: token2,
400
+ persist: rememberMe
401
+ })
402
+ );
374
403
  }
375
404
  return res;
376
405
  },
377
- [loginMutation]
406
+ [dispatch, loginMutation]
378
407
  );
379
- const logout = React.useCallback(async () => {
408
+ const logout$1 = React.useCallback(async () => {
380
409
  await logoutMutation();
381
- dispatch(adminApi.util.resetApiState());
382
- clearStorage();
383
- navigate("/auth/login");
384
- }, [clearStorage, dispatch, logoutMutation, navigate]);
410
+ clearStateAndLogout();
411
+ }, [clearStateAndLogout, logoutMutation]);
385
412
  const refetchPermissions = React.useCallback(async () => {
386
413
  if (!isUninitialized) {
387
414
  await refetch();
@@ -434,23 +461,16 @@ const AuthProvider = ({ children, _defaultPermissions = [] }) => {
434
461
  {
435
462
  token,
436
463
  user,
437
- login,
438
- logout,
464
+ login: login$1,
465
+ logout: logout$1,
439
466
  permissions: userPermissions,
440
467
  checkUserHasPermissions,
441
468
  refetchPermissions,
442
- setToken,
443
469
  isLoading,
444
470
  children
445
471
  }
446
472
  );
447
473
  };
448
- const storeToken = (token, persist) => {
449
- if (!persist) {
450
- return window.sessionStorage.setItem(STORAGE_KEYS.TOKEN, JSON.stringify(token));
451
- }
452
- return window.localStorage.setItem(STORAGE_KEYS.TOKEN, JSON.stringify(token));
453
- };
454
474
 
455
475
  const NotificationsContext = React.createContext({
456
476
  toggleNotification: () => {
@@ -637,6 +657,47 @@ function normalizeAPIError(apiError, intlMessagePrefixCallback) {
637
657
  return null;
638
658
  }
639
659
 
660
+ function getIn(obj, key, def, pathStartIndex = 0) {
661
+ const path = toPath(key);
662
+ while (obj && pathStartIndex < path.length) {
663
+ obj = obj[path[pathStartIndex++]];
664
+ }
665
+ if (pathStartIndex !== path.length && !obj) {
666
+ return def;
667
+ }
668
+ return obj === void 0 ? def : obj;
669
+ }
670
+ const isObject = (obj) => obj !== null && typeof obj === "object" && !Array.isArray(obj);
671
+ const isInteger = (obj) => String(Math.floor(Number(obj))) === obj;
672
+ function setIn(obj, path, value) {
673
+ const res = clone(obj);
674
+ let resVal = res;
675
+ let i = 0;
676
+ const pathArray = toPath(path);
677
+ for (; i < pathArray.length - 1; i++) {
678
+ const currentPath = pathArray[i];
679
+ const currentObj = getIn(obj, pathArray.slice(0, i + 1));
680
+ if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {
681
+ resVal = resVal[currentPath] = clone(currentObj);
682
+ } else {
683
+ const nextPath = pathArray[i + 1];
684
+ resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};
685
+ }
686
+ }
687
+ if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {
688
+ return obj;
689
+ }
690
+ if (value === void 0) {
691
+ delete resVal[pathArray[i]];
692
+ } else {
693
+ resVal[pathArray[i]] = value;
694
+ }
695
+ if (i === 0 && value === void 0) {
696
+ delete res[pathArray[i]];
697
+ }
698
+ return res;
699
+ }
700
+
640
701
  function useAPIErrorHandler(intlMessagePrefixCallback) {
641
702
  const { formatMessage } = useIntl();
642
703
  const formatError = React.useCallback(
@@ -665,10 +726,7 @@ function useAPIErrorHandler(intlMessagePrefixCallback) {
665
726
  const validationErrors = error.details.errors;
666
727
  return validationErrors.reduce((acc, err) => {
667
728
  const { path, message } = err;
668
- return {
669
- ...acc,
670
- [path.join(".")]: message
671
- };
729
+ return setIn(acc, path.join("."), message);
672
730
  }, {});
673
731
  } else {
674
732
  const details = error.details;
@@ -774,10 +832,11 @@ const NoPermissions = (props) => {
774
832
  };
775
833
  const NoData = (props) => {
776
834
  const { formatMessage } = useIntl();
777
- return /* @__PURE__ */ jsx(PageMain, { height: "100%", children: /* @__PURE__ */ jsx(Flex, { alignItems: "center", height: "100%", width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsx(Box, { minWidth: "50%", children: /* @__PURE__ */ jsx(
835
+ return /* @__PURE__ */ jsx(PageMain, { height: "100%", background: "neutral100", children: /* @__PURE__ */ jsx(Flex, { alignItems: "center", height: "100%", width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsx(Box, { minWidth: "50%", children: /* @__PURE__ */ jsx(
778
836
  EmptyStateLayout,
779
837
  {
780
838
  icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
839
+ action: props.action,
781
840
  content: formatMessage({
782
841
  id: "app.components.EmptyStateLayout.content-document",
783
842
  defaultMessage: "No content found"
@@ -1170,5 +1229,5 @@ const GlobalStyle = createGlobalStyle`
1170
1229
  }
1171
1230
  `;
1172
1231
 
1173
- export { AuthProvider as A, useGetRegistrationInfoQuery as B, ConfigurationContextProvider as C, useRegisterAdminMutation as D, useRegisterUserMutation as E, useResetPasswordMutation as F, THEME_LOCAL_STORAGE_KEY as G, useTypedStore as H, LanguageProvider as L, NotificationsProvider as N, Page as P, RBAC as R, StrapiAppProvider as S, Theme as T, useNotification as a, useTypedSelector as b, createTypedSelector as c, useTracking as d, useTypedDispatch as e, useAPIErrorHandler as f, useUpdateMeMutation as g, useIsSSOLockedQuery as h, useGetProviderOptionsQuery as i, useUpdateProviderOptionsMutation as j, useRBAC as k, useGetProvidersQuery as l, useAppInfo as m, useStrapiApp as n, useConfiguration as o, AppInfoProvider as p, capitalise as q, reducer as r, setAppTheme as s, createContext as t, useAuth as u, TrackingProvider as v, ConfigurationProvider as w, LANGUAGE_LOCAL_STORAGE_KEY as x, setLocale as y, useForgotPasswordMutation as z };
1174
- //# sourceMappingURL=Theme-vNSAMTAv.mjs.map
1232
+ export { AuthProvider as A, LANGUAGE_LOCAL_STORAGE_KEY as B, ConfigurationContextProvider as C, getIn as D, setIn as E, setLocale as F, useForgotPasswordMutation as G, useGetRegistrationInfoQuery as H, useRegisterAdminMutation as I, useRegisterUserMutation as J, useResetPasswordMutation as K, LanguageProvider as L, logout as M, NotificationsProvider as N, THEME_LOCAL_STORAGE_KEY as O, Page as P, useTypedStore as Q, RBAC as R, StrapiAppProvider as S, Theme as T, useNotification as a, useTypedSelector as b, createTypedSelector as c, useTracking as d, useTypedDispatch as e, useAPIErrorHandler as f, useUpdateMeMutation as g, useIsSSOLockedQuery as h, useGetProviderOptionsQuery as i, useUpdateProviderOptionsMutation as j, useRBAC as k, useGetProvidersQuery as l, login as m, useAppInfo as n, useStrapiApp as o, useConfiguration as p, getStoredToken as q, reducer as r, setAppTheme as s, AppInfoProvider as t, useAuth as u, isObject as v, capitalise as w, createContext as x, TrackingProvider as y, ConfigurationProvider as z };
1233
+ //# sourceMappingURL=Theme-PrUuuGtN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Theme-PrUuuGtN.mjs","sources":["../../admin/src/core/apis/rbac.ts","../../admin/src/components/Context.tsx","../../admin/src/core/store/hooks.ts","../../admin/src/features/StrapiApp.tsx","../../admin/src/reducer.ts","../../admin/src/services/auth.ts","../../admin/src/features/Auth.tsx","../../admin/src/features/Notifications.tsx","../../admin/src/utils/getPrefixedId.ts","../../admin/src/utils/normalizeAPIError.ts","../../admin/src/utils/objects.ts","../../admin/src/hooks/useAPIErrorHandler.ts","../../admin/src/components/PageHelpers.tsx","../../admin/src/utils/once.ts","../../admin/src/utils/strings.ts","../../admin/src/hooks/usePrev.ts","../../admin/src/hooks/useRBAC.ts","../../admin/src/features/AppInfo.tsx","../../admin/src/features/Tracking.tsx","../../admin/src/features/Configuration.tsx","../../admin/src/components/LanguageProvider.tsx","../../admin/src/components/Theme.tsx"],"sourcesContent":["import { Location } from 'react-router-dom';\n\nimport type { Permission, User } from '../../features/Auth';\n\ninterface RBACContext extends Pick<Location, 'pathname' | 'search'> {\n /**\n * The current user.\n */\n user?: User;\n /**\n * The permissions of the current user.\n */\n permissions: Permission[];\n}\n\ninterface RBACMiddleware {\n (\n ctx: RBACContext\n ): (\n next: (permissions: Permission[]) => Promise<Permission[]> | Permission[]\n ) => (permissions: Permission[]) => Promise<Permission[]> | Permission[];\n}\n\nclass RBAC {\n private middlewares: RBACMiddleware[] = [];\n\n constructor() {}\n\n use(middleware: RBACMiddleware[]): void;\n use(middleware: RBACMiddleware): void;\n use(middleware: RBACMiddleware | RBACMiddleware[]): void {\n if (Array.isArray(middleware)) {\n this.middlewares.push(...middleware);\n } else {\n this.middlewares.push(middleware);\n }\n }\n\n run = async (ctx: RBACContext, permissions: Permission[]): Promise<Permission[]> => {\n let index = 0;\n\n const middlewaresToRun = this.middlewares.map((middleware) => middleware(ctx));\n\n const next = async (permissions: Permission[]) => {\n if (index < this.middlewares.length) {\n return middlewaresToRun[index++](next)(permissions);\n }\n\n return permissions;\n };\n\n return next(permissions);\n };\n}\n\nexport { RBAC };\nexport type { RBACMiddleware, RBACContext };\n","import * as React from 'react';\n\nimport * as ContextSelector from 'use-context-selector';\n\n/**\n * @experimental\n * @description Create a context provider and a hook to consume the context.\n *\n * @warning this may be removed to the design-system instead of becoming stable.\n */\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = ContextSelector.createContext<ContextValueType | undefined>(defaultContext);\n\n const Provider = (props: ContextValueType & { children: React.ReactNode }) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n const useContext = <Selected,>(\n consumerName: string,\n selector: (value: ContextValueType) => Selected\n ): Selected =>\n ContextSelector.useContextSelector(Context, (ctx) => {\n if (ctx) return selector(ctx);\n // it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n });\n\n Provider.displayName = rootComponentName + 'Provider';\n\n return [Provider, useContext] as const;\n}\n\nexport { createContext };\n","import { createSelector, Selector } from '@reduxjs/toolkit';\nimport { useDispatch, useStore, TypedUseSelectorHook, useSelector } from 'react-redux';\n\nimport type { RootState, Store } from './configure';\n\ntype AppDispatch = Store['dispatch'];\n\nconst useTypedDispatch: () => AppDispatch = useDispatch;\nconst useTypedStore = useStore as () => Store;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nconst createTypedSelector = <TResult>(selector: Selector<RootState, TResult>) =>\n createSelector((state: RootState) => state, selector);\n\nexport { useTypedDispatch, useTypedStore, useTypedSelector, createTypedSelector };\n","import { createContext } from '../components/Context';\nimport { RBAC } from '../core/apis/rbac';\nimport { Router } from '../core/apis/router';\n\nimport type { StrapiApp } from '../StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * StrapiApp\n * -----------------------------------------------------------------------------------------------*/\ninterface StrapiAppContextValue\n extends Pick<\n StrapiApp,\n | 'customFields'\n | 'getPlugin'\n | 'getAdminInjectedComponents'\n | 'plugins'\n | 'runHookParallel'\n | 'runHookSeries'\n >,\n Pick<Router, 'menu' | 'settings'> {\n components: StrapiApp['library']['components'];\n fields: StrapiApp['library']['fields'];\n rbac: RBAC;\n runHookWaterfall: <TData>(\n name: Parameters<StrapiApp['runHookWaterfall']>[0],\n initialValue: TData\n ) => TData;\n}\n\nconst [StrapiAppProvider, useStrapiApp] = createContext<StrapiAppContextValue>('StrapiApp');\n\nexport { StrapiAppProvider, useStrapiApp };\nexport type { StrapiAppContextValue };\n","import { createSlice } from '@reduxjs/toolkit';\n\nimport { PermissionMap } from './types/permissions';\n\nimport type { PayloadAction } from '@reduxjs/toolkit';\n\ntype ThemeName = 'light' | 'dark' | 'system';\n\ninterface AppState {\n language: {\n locale: string;\n localeNames: Record<string, string>;\n };\n permissions: Partial<PermissionMap>;\n theme: {\n currentTheme: ThemeName;\n availableThemes: string[];\n };\n token?: string | null;\n}\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n USER: 'userInfo',\n};\n\nconst THEME_LOCAL_STORAGE_KEY = 'STRAPI_THEME';\nconst LANGUAGE_LOCAL_STORAGE_KEY = 'strapi-admin-language';\n\nexport const getStoredToken = (): string | null => {\n const token =\n localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN);\n\n if (typeof token === 'string') {\n return JSON.parse(token);\n }\n\n return null;\n};\n\nconst adminSlice = createSlice({\n name: 'admin',\n initialState: () => {\n return {\n language: {\n locale: 'en',\n localeNames: { en: 'English' },\n },\n permissions: {},\n theme: {\n availableThemes: [],\n currentTheme: localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system',\n },\n token: null,\n } as AppState;\n },\n reducers: {\n setAppTheme(state, action: PayloadAction<ThemeName>) {\n state.theme.currentTheme = action.payload;\n window.localStorage.setItem(THEME_LOCAL_STORAGE_KEY, action.payload);\n },\n setAvailableThemes(state, action: PayloadAction<AppState['theme']['availableThemes']>) {\n state.theme.availableThemes = action.payload;\n },\n setLocale(state, action: PayloadAction<string>) {\n state.language.locale = action.payload;\n\n window.localStorage.setItem(LANGUAGE_LOCAL_STORAGE_KEY, action.payload);\n document.documentElement.setAttribute('lang', action.payload);\n },\n setToken(state, action: PayloadAction<string | null>) {\n state.token = action.payload;\n },\n login(state, action: PayloadAction<{ token: string; persist?: boolean }>) {\n const { token, persist } = action.payload;\n\n if (!persist) {\n window.sessionStorage.setItem(STORAGE_KEYS.TOKEN, JSON.stringify(token));\n } else {\n window.localStorage.setItem(STORAGE_KEYS.TOKEN, JSON.stringify(token));\n }\n\n state.token = token;\n },\n logout(state) {\n state.token = null;\n window.localStorage.removeItem(STORAGE_KEYS.TOKEN);\n window.localStorage.removeItem(STORAGE_KEYS.USER);\n window.sessionStorage.removeItem(STORAGE_KEYS.TOKEN);\n window.sessionStorage.removeItem(STORAGE_KEYS.USER);\n },\n },\n});\n\nconst reducer = adminSlice.reducer;\n\nexport const { setAppTheme, setAvailableThemes, setLocale, setToken, logout, login } =\n adminSlice.actions;\n\nexport { reducer, THEME_LOCAL_STORAGE_KEY, LANGUAGE_LOCAL_STORAGE_KEY };\nexport type { AppState, ThemeName };\n","import { ProvidersOptions } from '../../../shared/contracts/admin';\nimport {\n type RenewToken,\n type Login,\n type ResetPassword,\n type RegisterAdmin,\n type Register,\n type RegistrationInfo,\n ForgotPassword,\n} from '../../../shared/contracts/authentication';\nimport { Check } from '../../../shared/contracts/permissions';\nimport { GetProviders, IsSSOLocked } from '../../../shared/contracts/providers';\nimport { type GetOwnPermissions, type GetMe, type UpdateMe } from '../../../shared/contracts/users';\n\nimport { adminApi } from './api';\n\nconst authService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['User', 'Me', 'ProvidersOptions'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n /**\n * ME\n */\n getMe: builder.query<GetMe.Response['data'], void>({\n query: () => ({\n method: 'GET',\n url: '/admin/users/me',\n }),\n transformResponse(res: GetMe.Response) {\n return res.data;\n },\n providesTags: (res) => (res ? ['Me', { type: 'User', id: res.id }] : ['Me']),\n }),\n getMyPermissions: builder.query<GetOwnPermissions.Response['data'], void>({\n query: () => ({\n method: 'GET',\n url: '/admin/users/me/permissions',\n }),\n transformResponse(res: GetOwnPermissions.Response) {\n return res.data;\n },\n }),\n updateMe: builder.mutation<UpdateMe.Response['data'], UpdateMe.Request['body']>({\n query: (body) => ({\n method: 'PUT',\n url: '/admin/users/me',\n data: body,\n }),\n transformResponse(res: UpdateMe.Response) {\n return res.data;\n },\n invalidatesTags: ['Me'],\n }),\n /**\n * Permissions\n */\n checkPermissions: builder.query<Check.Response, Check.Request['body']>({\n query: (permissions) => ({\n method: 'POST',\n url: '/admin/permissions/check',\n data: permissions,\n }),\n }),\n /**\n * Auth methods\n */\n login: builder.mutation<Login.Response['data'], Login.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/login',\n data: body,\n }),\n transformResponse(res: Login.Response) {\n return res.data;\n },\n invalidatesTags: ['Me'],\n }),\n logout: builder.mutation<void, void>({\n query: () => ({\n method: 'POST',\n url: '/admin/logout',\n }),\n }),\n resetPassword: builder.mutation<\n ResetPassword.Response['data'],\n ResetPassword.Request['body']\n >({\n query: (body) => ({\n method: 'POST',\n url: '/admin/reset-password',\n data: body,\n }),\n transformResponse(res: ResetPassword.Response) {\n return res.data;\n },\n }),\n renewToken: builder.mutation<RenewToken.Response['data'], RenewToken.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/renew-token',\n data: body,\n }),\n transformResponse(res: RenewToken.Response) {\n return res.data;\n },\n }),\n getRegistrationInfo: builder.query<\n RegistrationInfo.Response['data'],\n RegistrationInfo.Request['query']['registrationToken']\n >({\n query: (registrationToken) => ({\n url: '/admin/registration-info',\n method: 'GET',\n config: {\n params: {\n registrationToken,\n },\n },\n }),\n transformResponse(res: RegistrationInfo.Response) {\n return res.data;\n },\n }),\n registerAdmin: builder.mutation<\n RegisterAdmin.Response['data'],\n RegisterAdmin.Request['body']\n >({\n query: (body) => ({\n method: 'POST',\n url: '/admin/register-admin',\n data: body,\n }),\n transformResponse(res: RegisterAdmin.Response) {\n return res.data;\n },\n }),\n registerUser: builder.mutation<Register.Response['data'], Register.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/register',\n data: body,\n }),\n transformResponse(res: Register.Response) {\n return res.data;\n },\n }),\n forgotPassword: builder.mutation<ForgotPassword.Response, ForgotPassword.Request['body']>({\n query: (body) => ({\n url: '/admin/forgot-password',\n method: 'POST',\n data: body,\n }),\n }),\n isSSOLocked: builder.query<IsSSOLocked.Response['data'], void>({\n query: () => ({\n url: '/admin/providers/isSSOLocked',\n method: 'GET',\n }),\n transformResponse(res: IsSSOLocked.Response) {\n return res.data;\n },\n }),\n getProviders: builder.query<GetProviders.Response, void>({\n query: () => ({\n url: '/admin/providers',\n method: 'GET',\n }),\n }),\n getProviderOptions: builder.query<ProvidersOptions.Response['data'], void>({\n query: () => ({\n url: '/admin/providers/options',\n method: 'GET',\n }),\n transformResponse(res: ProvidersOptions.Response) {\n return res.data;\n },\n providesTags: ['ProvidersOptions'],\n }),\n updateProviderOptions: builder.mutation<\n ProvidersOptions.Response['data'],\n ProvidersOptions.Request['body']\n >({\n query: (body) => ({\n url: '/admin/providers/options',\n method: 'PUT',\n data: body,\n }),\n transformResponse(res: ProvidersOptions.Response) {\n return res.data;\n },\n invalidatesTags: ['ProvidersOptions'],\n }),\n }),\n overrideExisting: false,\n });\n\nconst {\n useCheckPermissionsQuery,\n useLazyCheckPermissionsQuery,\n useGetMeQuery,\n useLoginMutation,\n useRenewTokenMutation,\n useLogoutMutation,\n useUpdateMeMutation,\n useResetPasswordMutation,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n useGetRegistrationInfoQuery,\n useForgotPasswordMutation,\n useGetMyPermissionsQuery,\n useIsSSOLockedQuery,\n useGetProvidersQuery,\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} = authService;\n\nexport {\n useCheckPermissionsQuery,\n useLazyCheckPermissionsQuery,\n useGetMeQuery,\n useLoginMutation,\n useRenewTokenMutation,\n useLogoutMutation,\n useUpdateMeMutation,\n useResetPasswordMutation,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n useGetRegistrationInfoQuery,\n useForgotPasswordMutation,\n useGetMyPermissionsQuery,\n useIsSSOLockedQuery,\n useGetProvidersQuery,\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n};\n","import * as React from 'react';\n\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { Login } from '../../../shared/contracts/authentication';\nimport { createContext } from '../components/Context';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { login as loginAction, logout as logoutAction, setLocale } from '../reducer';\nimport { adminApi } from '../services/api';\nimport {\n useGetMeQuery,\n useGetMyPermissionsQuery,\n useLazyCheckPermissionsQuery,\n useLoginMutation,\n useLogoutMutation,\n useRenewTokenMutation,\n} from '../services/auth';\n\nimport type {\n Permission as PermissionContract,\n SanitizedAdminUser,\n} from '../../../shared/contracts/shared';\n\ninterface Permission\n extends Pick<PermissionContract, 'action' | 'subject'>,\n Partial<Omit<PermissionContract, 'action' | 'subject'>> {}\n\ninterface User\n extends Pick<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>,\n Partial<Omit<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>> {}\n\ninterface AuthContextValue {\n login: (\n body: Login.Request['body'] & { rememberMe: boolean }\n ) => Promise<Awaited<ReturnType<ReturnType<typeof useLoginMutation>[0]>>>;\n logout: () => Promise<void>;\n /**\n * @alpha\n * @description given a list of permissions, this function checks\n * those against the current user's permissions or those passed as\n * the second argument, if the user has those permissions the complete\n * permission object form the API is returned. Therefore, if the list is\n * empty, the user does not have any of those permissions.\n */\n checkUserHasPermissions: (\n permissions?: Permission[],\n passedPermissions?: Permission[]\n ) => Promise<Permission[]>;\n isLoading: boolean;\n permissions: Permission[];\n refetchPermissions: () => Promise<void>;\n token: string | null;\n user?: User;\n}\n\nconst [Provider, useAuth] = createContext<AuthContextValue>('Auth');\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n /**\n * @internal could be removed at any time.\n */\n _defaultPermissions?: Permission[];\n\n // NOTE: this is used for testing purposed only\n _disableRenewToken?: boolean;\n}\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n USER: 'userInfo',\n};\n\nconst AuthProvider = ({\n children,\n _defaultPermissions = [],\n _disableRenewToken = false,\n}: AuthProviderProps) => {\n const dispatch = useTypedDispatch();\n const runRbacMiddleware = useStrapiApp('AuthProvider', (state) => state.rbac.run);\n const location = useLocation();\n const token = useTypedSelector((state) => state.admin_app.token ?? null);\n\n const { data: user, isLoading: isLoadingUser } = useGetMeQuery(undefined, {\n /**\n * If there's no token, we don't try to fetch\n * the user data because it will fail.\n */\n skip: !token,\n });\n\n const {\n data: userPermissions = _defaultPermissions,\n refetch,\n isUninitialized,\n isLoading: isLoadingPermissions,\n } = useGetMyPermissionsQuery(undefined, {\n skip: !token,\n });\n\n const navigate = useNavigate();\n\n const [loginMutation] = useLoginMutation();\n const [renewTokenMutation] = useRenewTokenMutation();\n const [logoutMutation] = useLogoutMutation();\n\n const clearStateAndLogout = React.useCallback(() => {\n dispatch(adminApi.util.resetApiState());\n dispatch(logoutAction());\n navigate('/auth/login');\n }, [dispatch, navigate]);\n\n /**\n * Fetch data from storages on mount and store it in our state.\n * It's not normally stored in session storage unless the user\n * does click \"remember me\" when they login. We also need to renew the token.\n */\n React.useEffect(() => {\n if (token && !_disableRenewToken) {\n renewTokenMutation({ token }).then((res) => {\n if ('data' in res) {\n dispatch(\n loginAction({\n token: res.data.token,\n })\n );\n } else {\n clearStateAndLogout();\n }\n });\n }\n }, [token, dispatch, renewTokenMutation, clearStateAndLogout, _disableRenewToken]);\n\n React.useEffect(() => {\n if (user) {\n if (user.preferedLanguage) {\n dispatch(setLocale(user.preferedLanguage));\n }\n }\n }, [dispatch, user]);\n\n React.useEffect(() => {\n /**\n * This will log a user out of all tabs if they log out in one tab.\n */\n const handleUserStorageChange = (event: StorageEvent) => {\n if (event.key === STORAGE_KEYS.USER && event.newValue === null) {\n clearStateAndLogout();\n }\n };\n\n window.addEventListener('storage', handleUserStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleUserStorageChange);\n };\n });\n\n const login = React.useCallback<AuthContextValue['login']>(\n async ({ rememberMe, ...body }) => {\n const res = await loginMutation(body);\n\n /**\n * There will always be a `data` key in the response\n * because if something fails, it will throw an error.\n */\n if ('data' in res) {\n const { token } = res.data;\n\n dispatch(\n loginAction({\n token,\n persist: rememberMe,\n })\n );\n }\n\n return res;\n },\n [dispatch, loginMutation]\n );\n\n const logout = React.useCallback(async () => {\n await logoutMutation();\n clearStateAndLogout();\n }, [clearStateAndLogout, logoutMutation]);\n\n const refetchPermissions = React.useCallback(async () => {\n if (!isUninitialized) {\n await refetch();\n }\n }, [isUninitialized, refetch]);\n\n const [checkPermissions] = useLazyCheckPermissionsQuery();\n const checkUserHasPermissions: AuthContextValue['checkUserHasPermissions'] = React.useCallback(\n async (permissions, passedPermissions) => {\n /**\n * If there's no permissions to check, then we allow it to\n * pass to preserve existing behaviours.\n *\n * TODO: should we review this? it feels more dangerous than useful.\n */\n if (!permissions || permissions.length === 0) {\n return [{ action: '', subject: '' }];\n }\n\n /**\n * Given the provided permissions, return the permissions from either passedPermissions\n * or userPermissions as this is expected to be the full permission entity.\n */\n const actualUserPermissions = passedPermissions ?? userPermissions;\n\n const matchingPermissions = actualUserPermissions.filter(\n (permission) =>\n permissions.findIndex(\n (perm) => perm.action === permission.action && perm.subject === permission.subject\n ) >= 0\n );\n\n const middlewaredPermissions = await runRbacMiddleware(\n {\n user,\n permissions: userPermissions,\n pathname: location.pathname,\n search: location.search.split('?')[1] ?? '',\n },\n matchingPermissions\n );\n\n const shouldCheckConditions = middlewaredPermissions.some(\n (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0\n );\n\n if (!shouldCheckConditions) {\n return middlewaredPermissions;\n }\n\n const { data, error } = await checkPermissions({\n permissions: middlewaredPermissions.map((perm) => ({\n action: perm.action,\n subject: perm.subject,\n })),\n });\n\n if (error) {\n throw error;\n } else {\n return middlewaredPermissions.filter((_, index) => data?.data[index] === true);\n }\n },\n [checkPermissions, location.pathname, location.search, runRbacMiddleware, user, userPermissions]\n );\n\n const isLoading = isLoadingUser || isLoadingPermissions;\n\n return (\n <Provider\n token={token}\n user={user}\n login={login}\n logout={logout}\n permissions={userPermissions}\n checkUserHasPermissions={checkUserHasPermissions}\n refetchPermissions={refetchPermissions}\n isLoading={isLoading}\n >\n {children}\n </Provider>\n );\n};\n\nexport { AuthProvider, useAuth, STORAGE_KEYS };\nexport type { AuthContextValue, Permission, User };\n","import * as React from 'react';\n\nimport { Alert, AlertVariant, Flex, useCallbackRef, Link } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\ninterface NotificationLink {\n label: string;\n target?: string;\n url: string;\n}\n\ninterface NotificationConfig {\n blockTransition?: boolean;\n link?: NotificationLink;\n message?: string;\n onClose?: () => void;\n timeout?: number;\n title?: string;\n type?: 'info' | 'warning' | 'danger' | 'success';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface NotificationsContextValue {\n /**\n * Toggles a notification, wrapped in `useCallback` for a stable identity.\n */\n toggleNotification: (config: NotificationConfig) => void;\n}\n\nconst NotificationsContext = React.createContext<NotificationsContextValue>({\n toggleNotification: () => {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface NotificationsProviderProps {\n children: React.ReactNode;\n}\ninterface Notification extends NotificationConfig {\n id: number;\n}\n\n/**\n * @internal\n * @description DO NOT USE. This will be removed before stable release of v5.\n */\nconst NotificationsProvider = ({ children }: NotificationsProviderProps) => {\n const notificationIdRef = React.useRef(0);\n\n const [notifications, setNotifications] = React.useState<Notification[]>([]);\n\n const toggleNotification = React.useCallback(\n ({ type, message, link, timeout, blockTransition, onClose, title }: NotificationConfig) => {\n setNotifications((s) => [\n ...s,\n {\n id: notificationIdRef.current++,\n type,\n message,\n link,\n timeout,\n blockTransition,\n onClose,\n title,\n },\n ]);\n },\n []\n );\n\n const clearNotification = React.useCallback((id: number) => {\n setNotifications((s) => s.filter((n) => n.id !== id));\n }, []);\n\n const value = React.useMemo(() => ({ toggleNotification }), [toggleNotification]);\n\n return (\n <NotificationsContext.Provider value={value}>\n <Flex\n left=\"50%\"\n marginLeft=\"-250px\"\n position=\"fixed\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={2}\n top={`4.6rem`}\n width={`50rem`}\n zIndex=\"notification\"\n >\n {notifications.map((notification) => {\n return (\n <Notification\n key={notification.id}\n {...notification}\n clearNotification={clearNotification}\n />\n );\n })}\n </Flex>\n {children}\n </NotificationsContext.Provider>\n );\n};\n\ninterface NotificationProps extends Notification {\n clearNotification: (id: number) => void;\n}\n\nconst Notification = ({\n clearNotification,\n blockTransition = false,\n id,\n link,\n message,\n onClose,\n timeout = 2500,\n title,\n type,\n}: NotificationProps) => {\n const { formatMessage } = useIntl();\n /**\n * Chances are `onClose` won't be classed as stabilised,\n * so we use `useCallbackRef` to avoid make it stable.\n */\n const onCloseCallback = useCallbackRef(onClose);\n\n const handleClose = React.useCallback(() => {\n onCloseCallback();\n\n clearNotification(id);\n }, [clearNotification, id, onCloseCallback]);\n\n // eslint-disable-next-line consistent-return\n React.useEffect(() => {\n if (!blockTransition) {\n const timeoutReference = setTimeout(() => {\n handleClose();\n }, timeout);\n\n return () => {\n clearTimeout(timeoutReference);\n };\n }\n }, [blockTransition, handleClose, timeout]);\n\n let variant: AlertVariant;\n let alertTitle: string;\n\n if (type === 'info') {\n variant = 'default';\n alertTitle = formatMessage({\n id: 'notification.default.title',\n defaultMessage: 'Information:',\n });\n } else if (type === 'danger') {\n variant = 'danger';\n alertTitle = formatMessage({\n id: 'notification.warning.title',\n defaultMessage: 'Warning:',\n });\n } else if (type === 'warning') {\n variant = 'warning';\n alertTitle = formatMessage({\n id: 'notification.warning.title',\n defaultMessage: 'Warning:',\n });\n } else {\n variant = 'success';\n alertTitle = formatMessage({\n id: 'notification.success.title',\n defaultMessage: 'Success:',\n });\n }\n\n if (title) {\n alertTitle = title;\n }\n\n return (\n <Alert\n action={\n link ? (\n <Link href={link.url} isExternal>\n {link.label}\n </Link>\n ) : undefined\n }\n onClose={handleClose}\n closeLabel={formatMessage({\n id: 'global.close',\n defaultMessage: 'Close',\n })}\n title={alertTitle}\n variant={variant}\n >\n {message}\n </Alert>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Hook\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @preserve\n * @description Returns an object to interact with the notification\n * system. The callbacks are wrapped in `useCallback` for a stable\n * identity.\n *\n * @example\n * ```tsx\n * import { useNotification } from '@strapi/strapi/admin';\n *\n * const MyComponent = () => {\n * const { toggleNotification } = useNotification();\n *\n * return <button onClick={() => toggleNotification({ message: 'Hello world!' })}>Click me</button>;\n */\nconst useNotification = () => React.useContext(NotificationsContext);\n\nexport { NotificationsProvider, useNotification };\nexport type { NotificationConfig, NotificationsContextValue };\n","/**\n * Prefix message with 'apiError.'\n */\nexport function getPrefixedId(message: string, callback?: (prefixedMessage: string) => string) {\n const prefixedMessage = `apiError.${message}`;\n\n // if a prefix function has been passed in it is used to\n // prefix the id, e.g. to allow an error message to be\n // set only for a localization namespace\n if (typeof callback === 'function') {\n return callback(prefixedMessage);\n }\n\n return prefixedMessage;\n}\n","import { getPrefixedId } from './getPrefixedId';\n\nimport type { ApiError } from '../hooks/useAPIErrorHandler';\nimport type { FetchError } from '../utils/getFetchClient';\nimport type { errors } from '@strapi/utils';\n\nexport interface NormalizeErrorOptions {\n name?: string;\n intlMessagePrefixCallback?: (id: string) => string;\n}\n\ninterface NormalizeErrorReturn {\n id: string;\n defaultMessage: string;\n name?: string;\n values: Record<'path', string> | Record<string, never>;\n}\n\ninterface YupFormattedError {\n path: string[];\n message: string;\n name: string;\n}\n\nfunction normalizeError(\n error: ApiError | YupFormattedError,\n { name, intlMessagePrefixCallback }: NormalizeErrorOptions\n): NormalizeErrorReturn {\n const { message } = error;\n\n const normalizedError = {\n id: getPrefixedId(message, intlMessagePrefixCallback),\n defaultMessage: message,\n name: error.name ?? name,\n values: {},\n };\n\n if ('path' in error) {\n normalizedError.values = { path: error.path.join('.') };\n }\n\n return normalizedError;\n}\n\nconst validateErrorIsYupValidationError = (\n err: ApiError\n): err is errors.YupValidationError & { details: { errors: YupFormattedError[] } } =>\n typeof err.details === 'object' && err.details !== null && 'errors' in err.details;\n\n/**\n * Normalize the format of `ResponseError`\n * in places where the hook `useAPIErrorHandler` can not called\n * (e.g. outside of a React component).\n */\nexport function normalizeAPIError(\n apiError: FetchError,\n intlMessagePrefixCallback?: NormalizeErrorOptions['intlMessagePrefixCallback']\n):\n | NormalizeErrorReturn\n | { name: string; message: string | null; errors: NormalizeErrorReturn[] }\n | null {\n const error = apiError.response?.data?.error;\n\n if (error) {\n // some errors carry multiple errors (such as ValidationError)\n if (validateErrorIsYupValidationError(error)) {\n return {\n name: error.name,\n message: error?.message || null,\n errors: error.details.errors.map((err) =>\n normalizeError(err, { name: error.name, intlMessagePrefixCallback })\n ),\n };\n }\n return normalizeError(error, { intlMessagePrefixCallback });\n }\n\n return null;\n}\n","import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n","import * as React from 'react';\n\nimport { IntlFormatters, useIntl } from 'react-intl';\n\nimport { FetchError } from '../utils/getFetchClient';\nimport { getPrefixedId } from '../utils/getPrefixedId';\nimport { NormalizeErrorOptions, normalizeAPIError } from '../utils/normalizeAPIError';\nimport { setIn } from '../utils/objects';\n\nimport type { errors } from '@strapi/utils';\n\ntype ApiError =\n | errors.ApplicationError\n | errors.ForbiddenError\n | errors.NotFoundError\n | errors.NotImplementedError\n | errors.PaginationError\n | errors.PayloadTooLargeError\n | errors.PolicyError\n | errors.RateLimitError\n | errors.UnauthorizedError\n | errors.ValidationError\n | errors.YupValidationError;\n\ninterface UnknownApiError {\n /**\n * The name of the ApiError, is always a static value.\n */\n name: 'UnknownError';\n /**\n * The error message.\n */\n message: string;\n /**\n * The error details.\n */\n details?: unknown;\n /**\n * The HTTP status code of the error.\n */\n status?: number;\n}\n\n/**\n * The last item is the fallback error SerializedError which\n * typically comes from redux-toolkit itself.\n */\ninterface SerializedError {\n /**\n * The name of the error.\n */\n name?: string;\n /**\n * The error message that explains what went wrong.\n */\n message?: string;\n /**\n * The stack trace of the error.\n */\n stack?: string;\n /**\n * A specific error code associated with the error.\n */\n code?: string;\n}\n\n/**\n * These are the types or errors we return\n * from the redux-toolkit data-fetching setup.\n */\ntype BaseQueryError = ApiError | UnknownApiError | SerializedError;\n\ninterface YupFormattedError {\n /**\n * An array representing the path to the field where the validation error occurred.\n */\n path: string[];\n /**\n * The error message describing the validation failure.\n */\n message: string;\n /**\n * The name of the error, typically identifies the type of validation error that occurred.\n */\n name: string;\n}\n\n/**\n * @public\n * @description The purpose of this hook is to offer a unified way to handle errors thrown by API endpoints, regardless of the type of error (`ValidationError`, `ApplicationErrror` ...)\nthat has been thrown.\n * @example\n * ```tsx\n * import * as React from 'react';\n * import { useFetchClient, useAPIErrorHandler, useNotification } from '@strapi/admin/admin';\n *\n * const MyComponent = () => {\n * const { get } = useFetchClient();\n * const { formatAPIError } = useAPIErrorHandler(getTrad);\n * const { toggleNotification } = useNotification();\n *\n * const handleDeleteItem = async () => {\n * try {\n * return await get('/admin');\n * } catch (error) {\n * toggleNotification({\n * type: 'danger',\n * message: formatAPIError(error),\n * });\n * }\n * };\n * return <button onClick={handleDeleteItem}>Delete item</button>;\n * };\n * ```\n */\nexport function useAPIErrorHandler(\n intlMessagePrefixCallback?: FormatAPIErrorOptions['intlMessagePrefixCallback']\n) {\n const { formatMessage } = useIntl();\n\n /**\n * @description This method try to normalize the passed error\n * and then call formatAPIError to stringify the ResponseObject\n * into a string. If it fails it will call formatFetchError and\n * return the error message.\n */\n const formatError = React.useCallback(\n (error: FetchError) => {\n // Try to normalize the passed error first. This will fail for e.g. network\n // errors which are thrown by fetchClient directly.\n try {\n const formattedErr = formatAPIError(error, { intlMessagePrefixCallback, formatMessage });\n\n if (!formattedErr) {\n return formatFetchError(error, { intlMessagePrefixCallback, formatMessage });\n }\n\n return formattedErr;\n } catch (_) {\n throw new Error('formatAPIError: Unknown error:', error);\n }\n },\n [formatMessage, intlMessagePrefixCallback]\n );\n\n return {\n /**\n * @alpha\n * Convert ValidationErrors from the API into an object that can be used by forms.\n */\n _unstableFormatValidationErrors: React.useCallback(\n (error: Extract<BaseQueryError, { name: 'ValidationError' }>): Record<string, string> => {\n if (typeof error.details === 'object' && error.details !== null) {\n if ('errors' in error.details && Array.isArray(error.details.errors)) {\n const validationErrors = error.details.errors as YupFormattedError[];\n\n return validationErrors.reduce((acc, err) => {\n const { path, message } = err;\n\n return setIn(acc, path.join('.'), message);\n }, {});\n } else {\n const details = error.details as Record<string, string[]>;\n\n return Object.keys(details).reduce((acc, key) => {\n const messages = details[key];\n\n return {\n ...acc,\n [key]: messages.join(', '),\n };\n }, {});\n }\n } else {\n return {};\n }\n },\n []\n ),\n /**\n * @alpha\n * This handles the errors given from `redux-toolkit`'s axios based baseQuery function.\n */\n _unstableFormatAPIError: React.useCallback(\n (error: BaseQueryError) => {\n const err = {\n response: {\n data: {\n error,\n },\n },\n } as FetchError;\n\n /**\n * There's a chance with SerializedErrors that the message is not set.\n * In that case we return a generic error message.\n */\n if (!error.message) {\n return 'Unknown error occured.';\n }\n\n return formatError(err);\n },\n [formatError]\n ),\n formatAPIError: formatError,\n };\n}\n\nfunction formatFetchError(\n error: FetchError,\n { intlMessagePrefixCallback, formatMessage }: FormatAPIErrorOptions\n) {\n const { code, message } = error;\n\n return formatMessage(\n {\n id: getPrefixedId(message, intlMessagePrefixCallback),\n defaultMessage: message,\n },\n {\n code,\n }\n );\n}\n\ntype FormatAPIErrorOptions = Partial<Pick<NormalizeErrorOptions, 'intlMessagePrefixCallback'>> &\n Pick<IntlFormatters, 'formatMessage'>;\n\n/**\n * @description This method stringifies the `ResponseObject` into\n * a string. If multiple errors are thrown by the API, which\n * happens e.g.in the case of a `ValidationError`, all errors\n * will bo concatenated into a single string.\n */\nfunction formatAPIError(\n error: FetchError,\n { formatMessage, intlMessagePrefixCallback }: FormatAPIErrorOptions\n) {\n if (!formatMessage) {\n throw new Error('The formatMessage callback is a mandatory argument.');\n }\n\n const normalizedError = normalizeAPIError(error, intlMessagePrefixCallback);\n\n if (!normalizedError) {\n return null;\n }\n\n if ('message' in normalizedError && normalizedError.message !== null) {\n return normalizedError.message;\n }\n\n // stringify multiple errors\n if ('errors' in normalizedError) {\n return normalizedError.errors\n .map(({ id, defaultMessage, values }) => formatMessage({ id, defaultMessage }, values))\n .join('\\n');\n }\n\n return formatMessage(normalizedError);\n}\n\nexport type { ApiError };\n","import * as React from 'react';\n\nimport {\n Box,\n EmptyStateLayout,\n type EmptyStateLayoutProps,\n Flex,\n Loader,\n Main,\n MainProps,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { EmptyPermissions, EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { useAuth, Permission } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useCheckPermissionsQuery } from '../services/auth';\n\n/* -------------------------------------------------------------------------------------------------\n * Main\n * -----------------------------------------------------------------------------------------------*/\ninterface PageMainProps extends MainProps {\n children: React.ReactNode;\n}\n\nconst PageMain = ({ children, ...restProps }: PageMainProps) => {\n return <Main {...restProps}>{children}</Main>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Loading\n * -----------------------------------------------------------------------------------------------*/\ninterface LoadingProps {\n /**\n * @default 'Loading content.'\n */\n children?: React.ReactNode;\n}\n\n/**\n * @public\n * @description A loading component that should be rendered as the page\n * whilst you load the content for the aforementioned page.\n */\nconst Loading = ({ children = 'Loading content.' }: LoadingProps) => {\n return (\n <PageMain height=\"100vh\" aria-busy={true}>\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <Loader>{children}</Loader>\n </Flex>\n </PageMain>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Error\n * -----------------------------------------------------------------------------------------------*/\ninterface ErrorProps extends Partial<EmptyStateLayoutProps> {}\n\n/**\n * TODO: should we start passing our errors here so they're persisted on the screen?\n * This could follow something similar to how the global app error works...?\n */\n\n/**\n * @public\n * @description An error component that should be rendered as the page\n * when an error occurs.\n */\nconst Error = (props: ErrorProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <PageMain height=\"100%\">\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Woops! Something went wrong. Please, try again.',\n })}\n {...props}\n />\n </Flex>\n </PageMain>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * NoPermissions\n * -----------------------------------------------------------------------------------------------*/\ninterface NoPermissionsProps extends Partial<EmptyStateLayoutProps> {}\n\n/**\n * @public\n * @description A component that should be rendered as the page\n * when the user does not have the permissions to access the content.\n * This component does not check any permissions, it's up to you to decide\n * when it should be rendered.\n */\nconst NoPermissions = (props: NoPermissionsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <PageMain height=\"100%\">\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <Box minWidth=\"50%\">\n <EmptyStateLayout\n icon={<EmptyPermissions width=\"16rem\" />}\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-permissions',\n defaultMessage: \"You don't have the permissions to access that content\",\n })}\n {...props}\n />\n </Box>\n </Flex>\n </PageMain>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * NoData\n * -----------------------------------------------------------------------------------------------*/\ninterface NoDataProps extends Partial<EmptyStateLayoutProps> {}\n\n/**\n * @public\n * @description A component that should be rendered as the page\n * when there is no data available to display.\n * This component does not check any permissions, it's up to you to decide\n * when it should be rendered.\n */\nconst NoData = (props: NoDataProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <PageMain height=\"100%\" background=\"neutral100\">\n <Flex alignItems=\"center\" height=\"100%\" width=\"100%\" justifyContent=\"center\">\n <Box minWidth=\"50%\">\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n action={props.action}\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n {...props}\n />\n </Box>\n </Flex>\n </PageMain>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Protect\n * -----------------------------------------------------------------------------------------------*/\nexport interface ProtectProps {\n /**\n * The children to render if the user has the required permissions.\n * If providing a function, it will be called with an object containing\n * the permissions the user has based on the array you passed to the component.\n */\n children: React.ReactNode | ((args: { permissions: Permission[] }) => React.ReactNode);\n /**\n * The permissions the user needs to have to access the content.\n */\n permissions?: Array<Omit<Partial<Permission>, 'action'> & Pick<Permission, 'action'>>;\n}\n\n/**\n * @public\n * @description A wrapper component that should be used to protect a page. It will check the permissions\n * you pass to it and render the children if the user has the required permissions. If a user does not have ALL\n * the required permissions, it will redirect the user to the home page. Whilst these checks happen it will render\n * the loading component and should the check fail it will render the error component with a notification.\n */\nconst Protect = ({ permissions = [], children }: ProtectProps) => {\n const userPermissions = useAuth('Protect', (state) => state.permissions);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const matchingPermissions = userPermissions.filter(\n (permission) =>\n permissions.findIndex(\n (perm) => perm.action === permission.action && perm.subject === permission.subject\n ) >= 0\n );\n\n const shouldCheckConditions = matchingPermissions.some(\n (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0\n );\n\n const { isLoading, error, data } = useCheckPermissionsQuery(\n {\n permissions: matchingPermissions.map((perm) => ({\n action: perm.action,\n subject: perm.subject,\n })),\n },\n {\n skip: !shouldCheckConditions,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n if (isLoading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error />;\n }\n\n const { data: permissionsData } = data || {};\n\n const canAccess =\n shouldCheckConditions && permissionsData\n ? !permissionsData.includes(false)\n : matchingPermissions.length > 0;\n\n if (!canAccess) {\n return <NoPermissions />;\n }\n\n return (\n <>\n {typeof children === 'function' ? children({ permissions: matchingPermissions }) : children}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Title\n * -----------------------------------------------------------------------------------------------*/\nexport interface TitleProps {\n children: string;\n}\n\n/**\n * @public\n * @description This component takes the children (must be a string) and sets\n * it as the title of the html.\n */\nconst Title = ({ children: title }: TitleProps) => {\n React.useEffect(() => {\n document.title = `${title} | Strapi`;\n }, [title]);\n\n return null;\n};\n\nconst Page = {\n Error,\n Loading,\n NoPermissions,\n Protect,\n NoData,\n Main: PageMain,\n Title,\n};\n\nexport { Page };\nexport type { ErrorProps, LoadingProps, NoPermissionsProps, PageMainProps as MainProps };\n","export const once = <TFunc extends (...args: any) => any>(fn: TFunc) => {\n const func = fn;\n let called = false;\n\n if (typeof func !== 'function') {\n throw new TypeError(`once requires a function parameter`);\n }\n\n return (...args: any) => {\n if (!called && process.env.NODE_ENV === 'development') {\n func(...args);\n called = true;\n }\n };\n};\n","const capitalise = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport { capitalise };\n","import { useEffect, useRef } from 'react';\n\nexport const usePrev = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n};\n","import { useEffect, useMemo, useState } from 'react';\n\nimport isEqual from 'lodash/isEqual';\n\nimport { useAuth, Permission } from '../features/Auth';\nimport { once } from '../utils/once';\nimport { capitalise } from '../utils/strings';\n\nimport { usePrev } from './usePrev';\n\ntype AllowedActions = Record<string, boolean>;\n\n/**\n * @public\n * @description This hooks takes an object or array of permissions (the latter preferred) and\n * runs through them to match against the current user's permissions as well as the RBAC middleware\n * system checking any conditions that may be present. It returns the filtered permissions as the complete\n * object from the API and a set of actions that can be performed. An action is derived from the last part\n * of the permission action e.g. `admin::roles.create` would be `canCreate`. If there's a hyphen in the action\n * this is removed and capitalised e.g `admin::roles.create-draft` would be `canCreateDraft`.\n * @example\n * ```tsx\n * import { Page, useRBAC } from '@strapi/strapi/admin'\n *\n * const MyProtectedPage = () => {\n * const { allowedActions, isLoading, error, permissions } = useRBAC([{ action: 'admin::roles.create' }])\n *\n * if(isLoading) {\n * return <Page.Loading />\n * }\n *\n * if(error){\n * return <Page.Error />\n * }\n *\n * if(!allowedActions.canCreate) {\n * return null\n * }\n *\n * return <MyPage permissions={permissions} />\n * }\n * ```\n */\nconst useRBAC = (\n permissionsToCheck: Record<string, Permission[]> | Permission[] = [],\n passedPermissions?: Permission[]\n): {\n allowedActions: AllowedActions;\n isLoading: boolean;\n error?: unknown;\n permissions: Permission[];\n} => {\n const isLoadingAuth = useAuth('useRBAC', (state) => state.isLoading);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<unknown>();\n const [data, setData] = useState<Record<string, boolean>>();\n\n const warnOnce = useMemo(() => once(console.warn), []);\n\n const actualPermissionsToCheck: Permission[] = useMemo(() => {\n if (Array.isArray(permissionsToCheck)) {\n return permissionsToCheck;\n } else {\n warnOnce(\n 'useRBAC: The first argument should be an array of permissions, not an object. This will be deprecated in the future.'\n );\n\n return Object.values(permissionsToCheck).flat();\n }\n }, [permissionsToCheck, warnOnce]);\n\n /**\n * This is the default value we return until the queryResults[i].data\n * are all resolved with data. This preserves the original behaviour.\n */\n const defaultAllowedActions = useMemo(() => {\n return actualPermissionsToCheck.reduce<Record<string, boolean>>((acc, permission) => {\n return {\n ...acc,\n [getActionName(permission)]: false,\n };\n }, {});\n }, [actualPermissionsToCheck]);\n\n const checkUserHasPermissions = useAuth('useRBAC', (state) => state.checkUserHasPermissions);\n\n const permssionsChecked = usePrev(actualPermissionsToCheck);\n useEffect(() => {\n if (!isEqual(permssionsChecked, actualPermissionsToCheck)) {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n checkUserHasPermissions(actualPermissionsToCheck, passedPermissions)\n .then((res) => {\n if (res) {\n setData(\n res.reduce<Record<string, boolean>>((acc, permission) => {\n return {\n ...acc,\n [getActionName(permission)]: true,\n };\n }, {})\n );\n }\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [\n actualPermissionsToCheck,\n checkUserHasPermissions,\n passedPermissions,\n permissionsToCheck,\n permssionsChecked,\n ]);\n\n /**\n * This hook originally would not return allowedActions\n * until all the checks were complete.\n */\n const allowedActions = Object.entries({\n ...defaultAllowedActions,\n ...data,\n }).reduce((acc, [name, allowed]) => {\n acc[`can${capitalise(name)}`] = allowed;\n\n return acc;\n }, {} as AllowedActions);\n\n return {\n allowedActions,\n permissions: actualPermissionsToCheck,\n isLoading: isLoading || isLoadingAuth,\n error,\n };\n};\n\nconst getActionName = (permission: Permission): string => {\n const [action = ''] = permission.action.split('.').slice(-1);\n return action.split('-').map(capitalise).join('');\n};\n\nexport { useRBAC };\nexport type { AllowedActions };\n","import { createContext } from '../components/Context';\n\ninterface AppInfoContextValue {\n autoReload?: boolean;\n communityEdition?: boolean;\n currentEnvironment?: string;\n dependencies?: Record<string, string>;\n latestStrapiReleaseTag?: string;\n nodeVersion?: string;\n projectId?: string | null;\n shouldUpdateStrapi?: boolean;\n strapiVersion?: string | null;\n useYarn?: boolean;\n userId?: string;\n}\n\nconst [AppInfoProvider, useAppInfo] = createContext<AppInfoContextValue>('AppInfo', {});\n\nexport { AppInfoProvider, useAppInfo };\n\nexport type { AppInfoContextValue };\n","import * as React from 'react';\n\nimport axios, { AxiosResponse } from 'axios';\n\nimport { useInitQuery, useTelemetryPropertiesQuery } from '../services/admin';\n\nimport { useAppInfo } from './AppInfo';\nimport { useAuth } from './Auth';\n\nexport interface TelemetryProperties {\n useTypescriptOnServer?: boolean;\n useTypescriptOnAdmin?: boolean;\n isHostedOnStrapiCloud?: boolean;\n numberOfAllContentTypes?: number;\n numberOfComponents?: number;\n numberOfDynamicZones?: number;\n}\n\nexport interface TrackingContextValue {\n uuid?: string | boolean;\n telemetryProperties?: TelemetryProperties;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\nconst TrackingContext = React.createContext<TrackingContextValue>({\n uuid: false,\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface TrackingProviderProps {\n children: React.ReactNode;\n}\n\nconst TrackingProvider = ({ children }: TrackingProviderProps) => {\n const token = useAuth('App', (state) => state.token);\n const { data: initData } = useInitQuery();\n const { uuid } = initData ?? {};\n\n const { data } = useTelemetryPropertiesQuery(undefined, {\n skip: !initData?.uuid || !token,\n });\n\n React.useEffect(() => {\n if (uuid && data) {\n const event = 'didInitializeAdministration';\n try {\n fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n // This event is anonymous\n event,\n userId: '',\n eventPropeties: {},\n groupProperties: { ...data, projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch {\n // silence is golden\n }\n }\n }, [data, uuid]);\n\n const value = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: data,\n }),\n [uuid, data]\n );\n\n return <TrackingContext.Provider value={value}>{children}</TrackingContext.Provider>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Hook\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * We can group these events together because none have properties so there's no benefit\n * to having them as separate types.\n *\n * Meanwhile those with properties have different property shapes corresponding to the specific\n * event so understanding which properties go with which event is very helpful.\n */\ninterface EventWithoutProperties {\n name:\n | 'changeComponentsOrder'\n | 'didAccessAuthenticatedAdministration'\n | 'didAddComponentToDynamicZone'\n | 'didBulkDeleteEntries'\n | 'didNotBulkDeleteEntries'\n | 'didChangeDisplayedFields'\n | 'didCheckDraftRelations'\n | 'didClickGuidedTourHomepageApiTokens'\n | 'didClickGuidedTourHomepageContentManager'\n | 'didClickGuidedTourHomepageContentTypeBuilder'\n | 'didClickGuidedTourStep1CollectionType'\n | 'didClickGuidedTourStep2ContentManager'\n | 'didClickGuidedTourStep3ApiTokens'\n | 'didClickonBlogSection'\n | 'didClickonCodeExampleSection'\n | 'didClickonReadTheDocumentationSection'\n | 'didClickOnTryStrapiCloudSection'\n | 'didClickonTutorialSection'\n | 'didCreateGuidedTourCollectionType'\n | 'didCreateGuidedTourEntry'\n | 'didCreateNewRole'\n | 'didCreateRole'\n | 'didDeleteToken'\n | 'didDuplicateRole'\n | 'didEditEditSettings'\n | 'didEditEmailTemplates'\n | 'didEditFieldNameOnContentType'\n | 'didEditListSettings'\n | 'didEditMediaLibraryConfig'\n | 'didEditNameOfContentType'\n | 'didGenerateGuidedTourApiTokens'\n | 'didGoToMarketplace'\n | 'didLaunchGuidedtour'\n | 'didMissMarketplacePlugin'\n | 'didNotCreateFirstAdmin'\n | 'didNotSaveComponent'\n | 'didPluginLearnMore'\n | 'didPublishEntry'\n | 'didBulkPublishEntries'\n | 'didNotBulkPublishEntries'\n | 'didUnpublishEntry'\n | 'didBulkUnpublishEntries'\n | 'didNotBulkUnpublishEntries'\n | 'didSaveComponent'\n | 'didSaveContentType'\n | 'didSearch'\n | 'didSkipGuidedtour'\n | 'didSubmitPlugin'\n | 'didSubmitProvider'\n | 'didUpdateConditions'\n | 'didSelectAllMediaLibraryElements'\n | 'didSelectContentTypeFieldSettings'\n | 'didSelectContentTypeSettings'\n | 'didEditAuthenticationProvider'\n | 'hasClickedCTBAddFieldBanner'\n | 'removeComponentFromDynamicZone'\n | 'willAddMoreFieldToContentType'\n | 'willBulkDeleteEntries'\n | 'willBulkPublishEntries'\n | 'willBulkUnpublishEntries'\n | 'willChangeNumberOfEntriesPerPage'\n | 'willCheckDraftRelations'\n | 'willCreateComponent'\n | 'willCreateComponentFromAttributesModal'\n | 'willCreateContentType'\n | 'willCreateFirstAdmin'\n | 'willCreateNewRole'\n | 'willCreateRole'\n | 'willCreateSingleType'\n | 'willCreateStage'\n | 'willCreateWorkflow'\n | 'willDeleteEntryFromList'\n | 'willDeleteFieldOfContentType'\n | 'willDuplicateRole'\n | 'willEditEditLayout'\n | 'willEditEmailTemplates'\n | 'willEditEntryFromButton'\n | 'willEditEntryFromList'\n | 'willEditFieldOfContentType'\n | 'willEditMediaLibraryConfig'\n | 'willEditNameOfContentType'\n | 'willEditNameOfSingleType'\n | 'willEditAuthenticationProvider'\n | 'willEditFieldNameOnContentType'\n | 'willEditStage'\n | 'willFilterEntries'\n | 'willInstallPlugin'\n | 'willPublishEntry'\n | 'willUnpublishEntry'\n | 'willSaveComponent'\n | 'willSaveContentType'\n | 'willSaveContentTypeLayout'\n | 'didEditFieldNameOnContentType'\n | 'didCreateRelease';\n properties?: never;\n}\n\ninterface DidFilterMediaLibraryElementsEvent {\n name: 'didFilterMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n filter: string;\n };\n}\n\ninterface DidSortMediaLibraryElementsEvent {\n name: 'didSortMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n sort: string;\n };\n}\n\ninterface DidCropFileEvent {\n name: 'didCropFile';\n properties: MediaEvents['properties'] & {\n duplicatedFile: null | boolean;\n };\n}\n\ninterface DidSelectFile {\n name: 'didSelectFile';\n properties: MediaEvents['properties'] & {\n source: 'url' | 'computer';\n };\n}\n\ninterface DidEditMediaLibraryElementsEvent {\n name: 'didEditMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n type: string;\n changeLocation: string;\n };\n}\n\ninterface MediaEvents {\n name:\n | 'didSearchMediaLibraryElements'\n | 'didReplaceMedia'\n | 'didAddMediaLibraryFolders'\n | 'willAddMediaLibraryAssets';\n properties: {\n location: string;\n };\n}\n\ninterface DidSelectContentTypeFieldTypeEvent {\n name: 'didSelectContentTypeFieldType';\n properties: {\n type?: string;\n };\n}\n\ninterface DidChangeModeEvent {\n name: 'didChangeMode';\n properties: {\n newMode: string;\n };\n}\ninterface DidSubmitWithErrorsFirstAdminEvent {\n name: 'didSubmitWithErrorsFirstAdmin';\n properties: {\n count: string;\n };\n}\n\ninterface WillNavigateEvent {\n name: 'willNavigate';\n properties: {\n from: string;\n to: string;\n };\n}\n\ninterface DidAccessTokenListEvent {\n name: 'didAccessTokenList';\n properties: {\n tokenType: TokenEvents['properties']['tokenType'];\n number: number;\n };\n}\ninterface LogoEvent {\n name: 'didChangeLogo' | 'didClickResetLogo';\n properties: {\n logo: 'menu' | 'auth';\n };\n}\n\ninterface TokenEvents {\n name:\n | 'didCopyTokenKey'\n | 'didAddTokenFromList'\n | 'didEditTokenFromList'\n | 'willAccessTokenList'\n | 'willAddTokenFromList'\n | 'willCreateToken'\n | 'willDeleteToken'\n | 'willEditToken'\n | 'willEditTokenFromList';\n properties: {\n tokenType: 'api-token' | 'transfer-token';\n };\n}\n\ninterface WillModifyTokenEvent {\n name: 'didCreateToken' | 'didEditToken';\n properties: {\n tokenType: TokenEvents['properties']['tokenType'];\n type: 'custom' | 'full-access' | 'read-only' | Array<'push' | 'pull' | 'push-pull'>;\n };\n}\n\ninterface DeleteEntryEvents {\n name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry';\n properties: {\n status?: string;\n error?: unknown;\n };\n}\n\ninterface CreateEntryEvents {\n name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry';\n properties: {\n status?: string;\n error?: unknown;\n };\n}\n\ninterface UpdateEntryEvents {\n name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry';\n properties: {\n status?: string;\n error?: unknown;\n };\n}\n\ninterface DidFilterEntriesEvent {\n name: 'didFilterEntries';\n properties: {\n useRelation: boolean;\n };\n}\n\ninterface DidPublishRelease {\n name: 'didPublishRelease';\n properties: {\n totalEntries: number;\n totalPublishedEntries: number;\n totalUnpublishedEntries: number;\n };\n}\n\ntype EventsWithProperties =\n | CreateEntryEvents\n | DidAccessTokenListEvent\n | DidChangeModeEvent\n | DidCropFileEvent\n | DeleteEntryEvents\n | DidEditMediaLibraryElementsEvent\n | DidFilterMediaLibraryElementsEvent\n | DidFilterEntriesEvent\n | DidSelectContentTypeFieldTypeEvent\n | DidSelectFile\n | DidSortMediaLibraryElementsEvent\n | DidSubmitWithErrorsFirstAdminEvent\n | LogoEvent\n | TokenEvents\n | UpdateEntryEvents\n | WillModifyTokenEvent\n | WillNavigateEvent\n | DidPublishRelease;\n\nexport type TrackingEvent = EventWithoutProperties | EventsWithProperties;\nexport interface UseTrackingReturn {\n /**\n * This type helps show all the available event names before you start typing,\n * however autocomplete isn't great.\n */\n trackUsage<TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties: TEvent['properties']\n ): Promise<null | AxiosResponse<string>>;\n trackUsage<TEvent extends Extract<TrackingEvent, { properties?: never }>>(\n event: TEvent['name'],\n properties?: never\n ): Promise<null | AxiosResponse<string>>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n trackUsage<TEvent extends Extract<TrackingEvent, { properties: object }>>(\n event: TEvent['name'],\n properties: TEvent['properties']\n ): Promise<null | AxiosResponse<string>>;\n}\n\n/**\n * @description Used to send amplitude events to the Strapi Tracking hub.\n *\n * @example\n * ```tsx\n * import { useTracking } from '@strapi/strapi/admin';\n *\n * const MyComponent = () => {\n * const { trackUsage } = useTracking();\n *\n * const handleClick = () => {\n * trackUsage('my-event', { myProperty: 'myValue' });\n * }\n *\n * return <button onClick={handleClick}>Send Event</button>\n * }\n * ```\n */\nconst useTracking = (): UseTrackingReturn => {\n const { uuid, telemetryProperties } = React.useContext(TrackingContext);\n const userId = useAppInfo('useTracking', (state) => state.userId);\n const trackUsage = React.useCallback(\n async <TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties?: TEvent['properties']\n ) => {\n try {\n if (uuid && !window.strapi.telemetryDisabled) {\n const res = await axios.post<string>(\n 'https://analytics.strapi.io/api/v2/track',\n {\n event,\n userId,\n eventProperties: { ...properties },\n userProperties: {},\n groupProperties: {\n ...telemetryProperties,\n projectId: uuid,\n projectType: window.strapi.projectType,\n },\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }\n );\n\n return res;\n }\n } catch (err) {\n // Silence is golden\n }\n\n return null;\n },\n [telemetryProperties, userId, uuid]\n );\n\n return { trackUsage };\n};\n\nexport { TrackingProvider, useTracking };\n","import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { useIntl } from 'react-intl';\n\nimport { UpdateProjectSettings } from '../../../shared/contracts/admin';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../hooks/useRBAC';\nimport {\n ConfigurationLogo,\n useInitQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n} from '../services/admin';\n\nimport { useAuth } from './Auth';\nimport { useNotification } from './Notifications';\nimport { useTracking } from './Tracking';\n\nimport type { StrapiApp } from '../StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UpdateProjectSettingsBody {\n authLogo:\n | ((UpdateProjectSettings.Request['body']['authLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n menuLogo:\n | ((UpdateProjectSettings.Request['body']['menuLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n}\n\ninterface ConfigurationContextValue {\n logos: {\n auth: ConfigurationLogo;\n menu: ConfigurationLogo;\n };\n showTutorials: boolean;\n showReleaseNotification: boolean;\n updateProjectSettings: (body: UpdateProjectSettingsBody) => Promise<void>;\n}\n\nconst [ConfigurationContextProvider, useConfiguration] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationProviderProps {\n children: React.ReactNode;\n defaultAuthLogo: StrapiApp['configurations']['authLogo'];\n defaultMenuLogo: StrapiApp['configurations']['menuLogo'];\n showReleaseNotification?: boolean;\n showTutorials?: boolean;\n}\n\nconst ConfigurationProvider = ({\n children,\n defaultAuthLogo,\n defaultMenuLogo,\n showReleaseNotification = false,\n showTutorials = false,\n}: ConfigurationProviderProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['project-settings']\n );\n const token = useAuth('ConfigurationProvider', (state) => state.token);\n\n const {\n allowedActions: { canRead },\n } = useRBAC(permissions);\n\n const {\n data: { authLogo: customAuthLogo, menuLogo: customMenuLogo } = {},\n error,\n isLoading,\n } = useInitQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'app.containers.App.notification.error.init' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n const { data, isSuccess } = useProjectSettingsQuery(undefined, {\n skip: !token || !canRead,\n });\n\n const [updateProjectSettingsMutation] = useUpdateProjectSettingsMutation();\n\n const updateProjectSettings = React.useCallback(\n async (body: UpdateProjectSettingsBody) => {\n const formData = new FormData();\n\n /**\n * We either only send files or we send null values.\n * Null removes the logo. If you don't want to effect\n * an existing logo, don't send anything.\n */\n Object.entries(body).forEach(([key, value]) => {\n if (value?.rawFile) {\n formData.append(key, value.rawFile);\n } else if (value === null) {\n formData.append(key, JSON.stringify(value));\n }\n });\n\n const res = await updateProjectSettingsMutation(formData);\n\n if ('data' in res) {\n const updatedMenuLogo = !!res.data.menuLogo && !!body.menuLogo?.rawFile;\n const updatedAuthLogo = !!res.data.authLogo && !!body.authLogo?.rawFile;\n\n if (updatedMenuLogo) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (updatedAuthLogo) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n },\n [formatAPIError, formatMessage, toggleNotification, trackUsage, updateProjectSettingsMutation]\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ConfigurationContextProvider\n showReleaseNotification={showReleaseNotification}\n showTutorials={showTutorials}\n logos={{\n menu: {\n custom: isSuccess\n ? data?.menuLogo\n : {\n url: customMenuLogo ?? '',\n },\n default: defaultMenuLogo,\n },\n auth: {\n custom: isSuccess\n ? data?.authLogo\n : {\n url: customAuthLogo ?? '',\n },\n default: defaultAuthLogo,\n },\n }}\n updateProjectSettings={updateProjectSettings}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport {\n ConfigurationContextProvider as _internalConfigurationContextProvider,\n ConfigurationProvider,\n useConfiguration,\n};\nexport type {\n ConfigurationProviderProps,\n ConfigurationContextValue,\n ConfigurationLogo,\n UpdateProjectSettingsBody,\n};\n","import * as React from 'react';\n\nimport defaultsDeep from 'lodash/defaultsDeep';\nimport { IntlProvider } from 'react-intl';\n\nimport { useTypedSelector } from '../core/store/hooks';\n\n/* -------------------------------------------------------------------------------------------------\n * LanguageProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LanguageProviderProps {\n children: React.ReactNode;\n messages: Record<string, Record<string, string>>;\n}\n\nconst LanguageProvider = ({ children, messages }: LanguageProviderProps) => {\n const locale = useTypedSelector((state) => state.admin_app.language.locale);\n const appMessages = defaultsDeep(messages[locale], messages.en);\n\n return (\n <IntlProvider locale={locale} defaultLocale=\"en\" messages={appMessages} textComponent=\"span\">\n {children}\n </IntlProvider>\n );\n};\n\nexport { LanguageProvider };\nexport type { LanguageProviderProps };\n","import * as React from 'react';\n\nimport { DesignSystemProvider } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { DefaultTheme, createGlobalStyle } from 'styled-components';\n\nimport { useTypedSelector } from '../core/store/hooks';\nimport { setAvailableThemes } from '../reducer';\n\ninterface ThemeProps {\n children: React.ReactNode;\n themes: {\n dark: DefaultTheme;\n light: DefaultTheme;\n };\n}\n\nconst Theme = ({ children, themes }: ThemeProps) => {\n const { currentTheme } = useTypedSelector((state) => state.admin_app.theme);\n const [systemTheme, setSystemTheme] = React.useState<'light' | 'dark'>();\n const { locale } = useIntl();\n const dispatch = useDispatch();\n\n // Listen to changes in the system theme\n React.useEffect(() => {\n const themeWatcher = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(themeWatcher.matches ? 'dark' : 'light');\n\n const listener = (event: MediaQueryListEvent) => {\n setSystemTheme(event.matches ? 'dark' : 'light');\n };\n themeWatcher.addEventListener('change', listener);\n\n // Remove listener on cleanup\n return () => {\n themeWatcher.removeEventListener('change', listener);\n };\n }, []);\n\n React.useEffect(() => {\n dispatch(setAvailableThemes(Object.keys(themes)));\n }, [dispatch, themes]);\n\n const computedThemeName = currentTheme === 'system' ? systemTheme : currentTheme;\n\n return (\n <DesignSystemProvider\n locale={locale}\n /**\n * TODO: could we make this neater i.e. by setting up the context to throw\n * if it can't find it, that way the type is always fully defined and we're\n * not checking it all the time...\n */\n theme={themes?.[computedThemeName || 'light']}\n >\n {children}\n <GlobalStyle />\n </DesignSystemProvider>\n );\n};\n\nconst GlobalStyle = createGlobalStyle`\n body {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nexport { Theme };\nexport type { ThemeProps };\n"],"names":["permissions","STORAGE_KEYS","logoutAction","loginAction","login","token","logout","Error","createContext"],"mappings":"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"}
@@ -3,8 +3,8 @@ import * as React from 'react';
3
3
  import { Flex, Button, Dialog, IconButton, Field, SingleSelect, SingleSelectOption, Typography, Textarea, TextInput } from '@strapi/design-system';
4
4
  import { Check, ArrowClockwise, Duplicate, Key } from '@strapi/icons';
5
5
  import { useIntl } from 'react-intl';
6
- import { b as Layouts, B as BackButton, C as ConfirmDialog, w as useClipboard } from './index-IU9ZrCxt.mjs';
7
- import { a as useNotification, f as useAPIErrorHandler, d as useTracking } from './Theme-vNSAMTAv.mjs';
6
+ import { b as Layouts, B as BackButton, C as ConfirmDialog, w as useClipboard } from './index-Hmzyjkc3.mjs';
7
+ import { a as useNotification, f as useAPIErrorHandler, d as useTracking } from './Theme-PrUuuGtN.mjs';
8
8
  import { e as useRegenerateTokenMutation } from './transferTokens-CNI0TFdA.mjs';
9
9
  import { C as ContentBox } from './ContentBox-9LBDzws0.mjs';
10
10
  import { format, addDays } from 'date-fns';
@@ -371,4 +371,4 @@ const TokenTypeSelect = ({
371
371
  };
372
372
 
373
373
  export { FormHead as F, LifeSpanInput as L, TokenBox as T, TokenName as a, TokenDescription as b, TokenTypeSelect as c };
374
- //# sourceMappingURL=TokenTypeSelect-LHiQJBiN.mjs.map
374
+ //# sourceMappingURL=TokenTypeSelect-DwoCIIYk.mjs.map